This guide points to the rules as published; it is not legal advice. Have your contracts checked by a lawyer or an accountant before you rely on them.
A small business that hires two or three people a year rarely has an HR department. The contract is copied from the last one, a few fields are changed, and it is signed on the first morning. Most mistakes in it are not about wording but about numbers: a probation period too long for a seasonal job, a notice period that differs for the two sides, a salary that was legal last December and is below the minimum wage in January, or a start date before the entry in the employment register. Each of these can be checked mechanically before anyone signs. This guide lists the checks with the articles of the Labour Code (Кодекс на труда) behind them and shows them as a short Python function.
#What the contract has to say
An employment contract is made in writing (article 62(1)) and states at least (article 66(1)):
- the place of work, and the position and the nature of the work;
- the date it is signed and the date work starts;
- how long it lasts;
- the basic paid annual leave and any extended or additional leave;
- a notice period that is the same for both sides;
- the basic and the permanent additional pay, and how often it is paid;
- the length of the working day or week.
The name of the position follows the National Classification of Occupations and Positions, НКПД (article 66(4)). Look up the real code for each position; a code invented for the job title is a common slip.
#The numbers worth checking
- Age. The minimum age for employment is 16 (article 301(1)); people from 15 to 16 only by exception, for light work and under the conditions of article 301(2).
- Fixed term. A contract for a fixed term may last up to 3 years (article 68(1)(1)). It is meant for temporary, seasonal or short-term work (article 68(3)); a fixed term for other work is allowed only by exception and for at least one year (article 68(4)). A fixed-term contract made against these rules counts as a contract for an indefinite period (article 68(5)).
- Probation. Up to 6 months, and up to one month when the job has a fixed term shorter than a year (article 70(1)). The contract says in whose favour it is agreed; if it does not, it is in favour of both (article 70(2)). For the same work with the same employee in the same business, a probation clause can be agreed only once (article 70(5)).
- Leave. Basic paid annual leave is at least 20 working days (article 155(4)).
- Notice. The same for both sides (article 66(1), item 6). For a contract for an indefinite period it is 30 days unless a longer period is agreed, and not more than 3 months (article 326(2)).
- Hours. The normal working day is up to 8 hours (article 136(3)). Part-time work is agreed in the contract (article 138(1)).
- Salary. From 1 January 2026 the national minimum wage is 620.20 euro a month and 3.74 euro an hour (Council of Ministers Decree No. 243 of 2025). For part-time work it applies in proportion.
#The checks in code
The function below takes the contract as a dictionary and returns a list of problems. No end date means a contract for an indefinite period. It was run as printed on Python 3.12.
import calendar
from datetime import date
from decimal import Decimal
MIN_WAGE = Decimal("620.20") # euro a month for full time from 1 January 2026; check it every year
def add_months(d: date, months: int) -> date:
y, m = divmod(d.month - 1 + months, 12)
year, month = d.year + y, m + 1
return date(year, month, min(d.day, calendar.monthrange(year, month)[1]))
def check(c: dict) -> list[str]:
problems = []
start, end = c["start"], c.get("end") # no end date: a contract for an indefinite period
if start < c["signed"]:
problems.append("work starts before the contract is signed")
if start < add_months(c["born"], 16 * 12):
problems.append("the employee is under 16 on the first day (art. 301(1))")
if end and end > add_months(start, 36):
problems.append("the fixed term is longer than 3 years (art. 68(1)(1))")
limit = 1 if end and end < add_months(start, 12) else 6
if c.get("probation_months", 0) > limit:
problems.append(f"probation is longer than {limit} month(s) (art. 70(1))")
if c["leave_days"] < 20:
problems.append("paid annual leave is under 20 working days (art. 155(4))")
if not end and not 30 <= c["notice_days"] <= 90:
problems.append("notice is not between 30 days and 3 months (art. 326(2))")
if c["hours_a_day"] > 8:
problems.append("the normal working day is up to 8 hours (art. 136(3))")
if Decimal(c["salary"]) < MIN_WAGE * Decimal(c["hours_a_day"]) / 8:
problems.append("the salary is below the minimum wage for these hours")
return problems
add_months() keeps the day of the month where it can and moves to the last day where it cannot, so the sixteenth birthday of someone born on 29 February 2008 is 29 February 2024. The 90 days of the notice check stand in for three months; replace them with a date check if your notices are written in months.
We ran it on a few contracts. A full-time contract for an indefinite period from 3 November 2026, signed the day before, with 6 months of probation, 20 days of leave, 30 days of notice and 1,450 euro a month passes with no problems. The same contract as a seasonal job ending on 31 March 2027 with 3 months of probation is flagged: the term is shorter than a year, so probation may be one month at most. A 4-hour contract at 300 euro a month is flagged as below the minimum wage for those hours; at 310.10 euro, exactly half of 620.20, it passes. An employee born on 4 November 2010 starting on 3 November 2026 is one day short of 16 and is flagged.
#After the signatures
Within three days of signing or changing the contract, and within seven days of ending it, the employer enters the data in the employment register (регистър на заетостта) kept by the National Revenue Agency (articles 62(3) and 347(1), in force since 1 June 2025). Before the first working day the employee receives a copy of the contract signed by both sides and a copy of the register entry certified by the agency (article 63(1)); until then the employer may not let the employee start work (article 63(2)). The employee has to start within a week of receiving them, unless another period is agreed (article 63(3)). When the contract is signed, the employer also tells the employee about the duties of the job (article 62(6)), which is what the job description is for.
When the minimum wage rises, contracts with a salary below the new amount are changed by a written agreement between the two sides (article 119(1)), not by a new contract.
#Templates that check themselves
We put these documents into Naznachka: ten Bulgarian employment documents as Word and OpenDocument templates with every field highlighted, from the employment contract (also in a two-column Bulgarian and English version) and the job description to the amendment, leave request and order, notice, termination and employment certificate. A small tool fills them from one data file, or a whole team from a CSV, writes PDF and checks the data first: ЕГН, ЛНЧ, ЕИК and IBAN, dates, probation of up to 6 months, at least 20 days of leave, notice of 30 days to 3 months, a working day of up to 8 hours and the minimum wage in proportion for part time. Salaries come with the amount in Bulgarian words, and leave is counted in working days with the Bulgarian holidays. It was tested with 16 automated tests on Python and LibreOffice, Microsoft Word was not opened, and it is listed as Coming soon. The templates are not legal advice either.
#Frequently asked questions
How long can probation last in a Bulgarian employment contract?
Up to 6 months, and up to one month when the job has a fixed term shorter than a year. It can be agreed only once for the same work with the same employee in the same business.
Can the notice period be longer for the employee than for the employer?
No. The contract states one notice period that applies to both sides. For a contract for an indefinite period it is 30 days unless a longer period, of up to 3 months, is agreed.
What happens to a contract when the minimum wage goes up?
A salary below the new minimum has to be raised. The usual way is a written additional agreement under article 119, entered in the employment register within three days like any other change.
Can someone start work on the day the contract is signed?
Only after the employer has entered it in the employment register and given the employee the signed contract and the certified copy of the entry.
Comments
Comments
Be the first to leave a comment.
Leave a comment