Отпечатаният календар не прощава. Щом сто копия висят по стените на офиса, празник на грешно място или липсващ почивен ден остават там цяла година. Календарите и планерите, направени от шаблони от интернет, често грешат за България на едни и същи места: Великден на западната дата, празник в събота без почивен ден в понеделник, номера на седмиците, които започват от неделя, и никаква следа от дните, които правителството обявява по-късно. Тук изброяваме какво трябва да има един верен български календар, даваме кратък скрипт, който отпечатва месец с номерата на седмиците и работните дни, и разглеждаме подробностите при печата, които решават дали резултатът изглежда професионално.
#Какво трябва да показва българският календар
- Седмиците започват от понеделник, а номерата им следват ISO 8601, европейския стандарт, който ползват повечето програми за календари.
- Официалните празници по Кодекса на труда: 1 януари, 3 март, 1 май, 6 май, 24 май, 6 септември, 22 септември и 24, 25 и 26 декември.
- Великден с Велики петък, Велика събота, Великден и Велики понеделник. Обикновено е по-късно от западния Великден, а понякога е в същия ден.
- Почивни дни, които се местят от уикенда. Когато празник, различен от великденските дни, се падне в събота или неделя, първият работен ден след него е почивен; по Коледа може да се преместят два дни.
- Дни, които правителството обявява, например допълнителен почивен ден между празник и уикенд и работната събота, с която се отработва. Те се обявяват през годината, често след като календарите са отпечатани.
Правилата за изчисляването им и грешките, които автоматизациите правят с тях, са обяснени в статията ни за работните и почивните дни в България. Тук те служат на отпечатаната страница.
#Месец с номера на седмиците и работни дни
Този скрипт, само със стандартната библиотека на Python, изчислява Великден и почивните дни за годината и отпечатва един месец така, както го показва страница на планер: номерата на седмиците вляво, отбелязани почивни дни и броя работни дни отдолу, който трябва за заплатите и за графиците на смените.
import calendar
from datetime import date, timedelta
FIXED = [(1, 1), (3, 3), (5, 1), (5, 6), (5, 24), (9, 6), (9, 22), (12, 24), (12, 25), (12, 26)]
def orthodox_easter(year: int) -> date:
"""Julian-calendar Easter (Meeus), moved to the Gregorian calendar (+13 days for 1900-2099)."""
a, b, c = year % 4, year % 7, year % 19
d = (19 * c + 15) % 30
e = (2 * a + 4 * b - d + 34) % 7
month, day = divmod(d + e + 114, 31)
return date(year, month, day + 1) + timedelta(days=13)
def days_off(year: int) -> set[date]:
easter = orthodox_easter(year)
off = {easter + timedelta(days=k) for k in (-2, -1, 0, 1)} # Good Friday to Easter Monday
for m, d in FIXED:
holiday = date(year, m, d)
off.add(holiday)
for m, d in FIXED: # Labour Code art. 154(2)
holiday = date(year, m, d)
if holiday.weekday() >= 5:
moved = holiday + timedelta(days=1)
while moved.weekday() >= 5 or moved in off:
moved += timedelta(days=1)
off.add(moved)
return off
def month_sheet(year: int, month: int) -> str:
off = days_off(year)
lines = [f"{calendar.month_name[month]} {year}", "Wk Mo Tu We Th Fr Sa Su"]
for week in calendar.Calendar(firstweekday=0).monthdatescalendar(year, month):
cells = []
for day in week:
mark = "*" if day in off and day.weekday() < 5 else " "
cells.append(f"{day.day:2d}{mark}" if day.month == month else " ")
lines.append(f"{week[0].isocalendar().week:2d} " + "".join(cells).rstrip())
workdays = sum(1 for d in calendar.Calendar().itermonthdates(year, month)
if d.month == month and d.weekday() < 5 and d not in off)
lines.append(f"{workdays} working days; * = day off")
return "\n".join(lines)
print(orthodox_easter(2027))
print(month_sheet(2027, 5))
print(sum(1 for m in range(1, 13) for d in calendar.Calendar().itermonthdates(2027, m)
if d.month == m and d.weekday() < 5 and d not in days_off(2027)), "working days in 2027")
Той отпечатва:
2027-05-02
May 2027
Wk Mo Tu We Th Fr Sa Su
17 1 2
18 3* 4* 5 6* 7 8 9
19 10 11 12 13 14 15 16
20 17 18 19 20 21 22 23
21 24*25 26 27 28 29 30
22 31
17 working days; * = day off
249 working days in 2027
Май 2027 г. е добра проверка за календар. Великден е на 2 май, така че 1 май (Денят на труда) е и Велика събота, а Велики понеделник е на 3 май. Почивният ден за 1 май се мести на първия работен ден след него, а това е вторник, 4 май, а не понеделник. Четвъртък, 6 май, и понеделник, 24 май, са празници в делнични дни. Остават 17 работни дни в месеца и 249 в годината.
Това, което скриптът не може да знае, са обявените дни. За 2026 г. той дава 249 работни дни, но правителството обяви 2 януари 2026 г. за почивен ден заради преминаването към еврото, така че истинското число е 248. Инструментът за календари има нужда от начин тези дни да се добавят на ръка, а календар, отпечатан рано наесен, трябва да го казва.
#Номерата на седмиците в краищата на годината
Седмица 1 по ISO е седмицата, в която е първият четвъртък на годината, така че първите дни на януари може да са в последната седмица на предишната година. 1 януари 2027 г. е петък и е в седмица 53 на 2026 г.; седмица 1 на 2027 г. започва в понеделник, 4 януари. Затова седмичен планер за 2027 г. има нужда от 53 страници, ако всеки ден от годината трябва да е на страница, от понеделник, 28 декември 2026 г., до неделя, 2 януари 2028 г. Планерите, които започват всяка година от седмица 1 и спират на седмица 52, губят тези дни.
#Хартия и печат
- Размер. A4 подхожда за стена или бюро, A5 за планер, който носите, A3 за голям стенен календар в офис. Правете PDF в размера, в който ще печатате; смаляването от A4 до A5 прави редовете за писане твърде тесни.
- Печатайте в реален размер. Принтерите по подразбиране мащабират, за да се побере, а това променя полетата и може да отреже краищата. Изберете 100% или „реален размер“ в прозореца за печат.
- Полета. Повечето офис принтери не могат да печатат последните няколко милиметра от листа. Дръжте важното поне на 5 mm от ръба и оставете повече място горе на стенния календар за подвързията или дупката.
- За печатница питайте за изискванията им: обикновено PDF в крайния размер с 3 mm застъпване от всяка страна и вградени шрифтове.
- Мастило. Големите цветни площи изглеждат добре на екрана и изпразват касетата бързо. Черно-сив вариант си струва за офис принтерите.
- Пробно копие. Преди да печатате много, отпечатайте едно и проверете празниците и почивните дни срещу официалния списък за годината.
#Планери за таблет
Приложения за бележки като GoodNotes, Notability и Samsung Notes отварят PDF планер и позволяват да пишете върху него с писалка. Това, което прави планера удобен на таблет, са връзките: докосване на месец на страницата на годината води до месеца, докосване на номер на седмица води до седмицата, а всяка страница има връзка обратно. Планер от 12 месеца и 53 седмици без връзки означава превъртане през 70 страници. Правете страниците хоризонтални за таблет, държан настрани, и оставяйте полетата за писане големи; пръстът или писалката искат повече място от молива.
#Същите дни и в телефона
Отпечатаният календар и календарът в телефона трябва да си съвпадат. Файл iCalendar (.ics) с празниците и почивните дни като събития за цял ден може да се внесе в Google Calendar, Apple Calendar и Outlook, така че почивните дни да се виждат, когато хората си уговарят срещи.
#Инструмент, който прави такива календари
Направихме Kalendarche, Python пакет с команден ред, който прави календари и планери с дати като PDF, готов за печат, за всяка година от 1900 до 2099, с вече отбелязани български празници, Великден и преместени почивни дни: стенен календар, годината на една страница, месечни и седмични планери и свързан планер за таблет, на български или английски, от A5 до A3, с черно-сива тема за всеки принтер. Рождените дни, училищните дати и обявените почивни дни и работни съботи идват от малък текстов файл, а празниците могат да се изнесат като ICS. Проверен е с автоматични тестове, които прочитат обратно всеки вид PDF страница по страница, а файловете са разгледани на екран; по време на разработката не са печатани на хартия, а свързаният планер не е отварян в GoodNotes или Notability. Дните, обявени след излизането на версията, трябва да се добавят във файла със събития. Обявен е като „Очаквайте скоро“.
#Често задавани въпроси
Колко работни дни има в България през 2027 г.?
249 по правилата на Кодекса на труда, освен ако правителството не обяви допълнителни почивни дни или работни съботи през годината. Май 2027 г. има 17, защото Велики понеделник и преместеният почивен ден за 1 май са на 3 и 4 май.
Ползва ли българският календар номера на седмиците по ISO?
Да: седмиците започват от понеделник, а седмица 1 е седмицата с първия четвъртък на годината. Затова 1 януари 2027 г. е в седмица 53 на 2026 г.
Защо отпечатаният календар не показва почивен ден, който правителството обяви?
Обявените почивни дни и работни съботи се решават през годината, често след като календарите са отпечатани. Проверете официалното решение и ги добавете на ръка.
Кой размер хартия е най-добър за планер?
A5 за планер, който носите, A4 за бюро или стена. Правете PDF в този размер и печатайте на 100%.
Коментари
Коментари
Напишете първия коментар.
Оставете коментар