Articles

One Word, Three Legal Systems: How We Designed Country-Aware Leave Policies for Teamtopia

AI icon, dark themeAI icon, light theme
Written by
Bohdan Kononets
Andrei Zolotukhin
Category:
Articles
8 October 2026
12 min read
Illustration of employees on different types of leave, from vacation and sick days to parental, military, jury duty and bereavement, for an article on multi-country leave policy design

Written for Product designers, founders, and HR leads building or buying tools for teams that work under more than one labor code.

Ask an HR manager in Kyiv, Lisbon, and Boston what "leave" means and you get three different legal documents. In Ukraine, unpaid leave by agreement is capped at 30 calendar days a year, and the cap lifts entirely during martial law. In Portugal, unpaid leave under Article 317 of the Labor Code starts at 60 consecutive days and the employer cannot refuse it for study. In Massachusetts, jury duty comes with three days of employer-paid wages, then the state takes over at $50 a day.

Most HR tools handle this with one answer: "create a custom policy." That works until the person creating the policy has to know all three laws by heart.

We built Teamtopia's leave policy system on a different assumption: the tool should know the law of the office, and the admin should only decide what to change. This article covers how we got from three research lists to one settings screen, where every leave type needed its own logic, and what we removed before it shipped.

Teamtopia is a leave and team availability SaaS that Flatstudio designed and Push developed as an internal product, now sold to other companies. The product side of the story, with the live feature list and a country comparison, is in the companion article on the Teamtopia blog: Which Leave Types Apply in the US, EU, and Ukraine, and How to Set Them Up per Office

TL;DR

  • A single "custom policy" builder fails for multi-country teams because the admin becomes the compliance layer. We moved that layer into country presets for the US, EU, and Ukraine.
  • Research produced 59 leave types across three legal systems. We consolidated them into 30 preset types in six categories, each switchable per office.
  • Every policy shares one shell (eligibility, allowance, payroll impact, documentation, approval, effective date, notifications). Eight types needed deeper, leave-specific logic on top.
  • Privacy is a first-class setting: Safe Leave, Personal Days, and Religious Leave each control what a manager and a team calendar can see.
  • Four planned integrations were cut during review because they promised automation nobody could verify.

Why does one leave policy fail across countries?

The problem showed up inside Flatstudio and Push before it showed up with clients. The team works from Ukraine, Portugal, and remote locations, under a mix of employment contracts and individual entrepreneur (FOP) agreements. For employees, the rules depend on the country of the office. For contractors, the law gives no leave at all, so the company decides. In Teamtopia that decision is a setting: a person on a FOP agreement who lives in the US can be placed under the US preset, and the jury duty, voting, and safe leave rules of that preset apply to them as if they were on a local contract. The contract type sets the payroll side; the office setting sets the leave rules.

Three examples from the research that shaped the architecture:

  • Portugal. Unpaid leave (licença sem retribuição) is defined in Article 317 of the Labor Code as a period longer than 60 days. When requested for training or study, the employer can refuse only in narrow cases, and the request must be filed in writing at least 90 days ahead. The time still counts toward seniority.
  • Ukraine. The Law on Leave separates mandatory unpaid leave (Article 25) from unpaid leave by agreement (Article 26). Since December 24, 2023, Law 3494-IX has doubled the Article 26 cap from 15 to 30 calendar days a year, and during martial law the employer can grant it without that limit. Separately, during martial law, an employee who moved abroad or holds internally displaced person status gets up to 90 calendar days on request. Only Article 25 leave counts toward the seniority that earns annual vacation.
  • United States. Federal law covers almost nothing for paid time off. USERRA protects military leave nationally, FMLA gives 12 weeks of unpaid job-protected leave, and everything else, from jury duty pay to bereavement to safe leave, is set state by state.

A generic policy builder can express all of this. It just puts the burden on the admin to know that Massachusetts jury duty is paid for three days while the neighboring state may pay nothing, or that a Ukrainian mobilized employee keeps the job but, since July 2022, not the average salary.

How did we research 59 leave types across the US, EU, and Ukraine?

We started with three lists, one per legal system, and did not try to unify them too early.

The European list had 12 baseline types (minimum annual leave, maternity and paternity, parental, adoption, carer's, sick, civic, study, military, sabbatical, compassionate, public holidays) plus 12 country-specific ones with the countries that use them: extra vacation days by seniority in France, Spain, Italy, and Portugal; bridge days in Italy, France, and Spain; marriage leave in Belgium, France, Spain, and Italy; civil defense leave in Finland and Sweden.

The Ukrainian list had 9 types, including additional leave for employees under 18, hazardous conditions, disability, and veteran status, which has no direct US equivalent.

The US list split into 6 federal items and 20 state-regulated ones, from PTO and pregnancy disability leave to school activities leave, union activities leave, and garden leave.

Europe (12 baseline + 12 country-specific) Ukraine (9) USA (6 federal + 20 state-regulated)
Minimum annual leave Annual leave FMLA (federal)
Maternity and paternity leave Additional leave (under 18, hazardous conditions, disability, pensioners, veterans) Military leave, USERRA (federal)
Parental leave Leave for family circumstances / social leave Military caregiver leave (federal)
Adoption leave Leave for education Jury duty / witness leave (federal)
Carer's leave Sick leave Voting leave (federal)
Sick leave Maternity leave (pregnancy and childbirth) Public holidays (federal)
Civic leave (elections, jury service, civic duties) Parental leave PTO (paid time off)
Study / training / education leave Unpaid leave Vacation leave
Military leave Public holidays Sick leave
Sabbatical   Paid family and medical leave (PFML / PFL)
Compassionate leave   Maternity / paternity / parental leave
Public holidays (by country)   Pregnancy disability leave (PDL)
Extra vacation days by seniority (FR, ES, IT, PT)   Sabbatical
Bridge days (IT, FR, ES)   Caregiver leave
Care leave for seriously ill children (FR, IT)   Bereavement leave
Marriage leave (BE, FR, ES, IT)   Voting leave (state rules)
Moving / relocation leave (ES, BE, FR)   Organ / blood donation leave
Blood / organ donation leave (IT, FR)   Domestic violence leave
Volunteer / civic volunteer leave (FR, DE)   School activities leave
Weather / force majeure leave (BE, FR)   Personal leave / leave without pay
Religious leave (UK, FR)   Comp time / time off in lieu
Bereavement leave (FR, ES)   Garden leave / non-compete leave
End-of-life care leave (BE, FR)   Short-term / long-term disability leave
Civil defense leave (FI, SE)   Public holidays (state)
    Public health leave
    Union activities leave

That gave us 59 entries. Andrei Zolotukhin then built the consolidation table: 30 preset types in six categories, with a plus, minus, or plus-minus for each of the three regions.

Category Preset types
Time Off Annual Leave / Vacation, Seniority / Extra Days, PTO, Unpaid Leave / Personal Leave, Public Holidays, Bridge Days / Comp Time, Sabbatical
Family & Care Maternity, Paternity, Parental (Childcare), Adoption, Carer's Leave, School Activities
Health Sick Leave, Medical / Disability, Blood / Organ Donation, End-of-life Care
Civic Duty Military, Jury Duty / Witness, Voting, Civil Defense / Volunteer, Union Activities
Personal Events Marriage, Bereavement / Compassionate, Relocation / Moving, Religious
Special Cases Study / Training, Weather / Force Majeure, Domestic Violence, Garden Leave

The plus-minus column turned out to be the most useful one. PTO is plus for the US, plus-minus for Europe, and minus for Ukraine. Jury duty is plus for the US and EU and minus for Ukraine, where court duty is handled under Article 119 of the Labor Code as a public duty with average earnings preserved. School Activities Leave and Domestic Violence Leave exist as distinct types only in the US list. These differences became the default toggle states of each country preset.

How do you turn legal differences into presets without locking users in?

The preset is a starting state, and every value in it stays editable.

When an admin creates an office, they choose a region. The region turns on the leave types that apply there and turns off the ones that do not. In the USA preset, PTO is on and Annual Leave, Sick Leave, and Personal Days sit underneath it as sub-policies, switched off because most US companies pool them. In the Europe preset, the pool is off and the three separate types are on. In the Ukraine preset, Sabbatical, Jury Duty, and Domestic Violence Leave are off by default, and Additional Leave categories from Ukrainian law are on.

Teamtopia country presets for Europe, Ukraine and USA, showing which leave types are on by default, such as PTO pool, sick leave and sabbatical

From there, every toggle can be flipped. An office in Lisbon can enable School Activities Leave even though no Portuguese law requires it. A US office can turn on Marriage Leave. And a company can create a type that appears in no law at all, which is where custom leave types come in later in this article.

The rule we wrote for ourselves: the preset carries the law; the admin carries the culture.

What does every leave policy share?

Before designing any leave type in depth, we defined the shell that every policy uses. This came from the first, simpler generation of Teamtopia settings screens, and it still holds:

  1. Eligibility. Minimum service before the type can be requested (0 days for jury duty and military, 90 days for paid sick leave in the example config, 5 years for sabbatical).
  2. Leave allowance. Annual limit, maximum consecutive days, and minimum notice.
  3. Partial-day leave. Hours or half-days where the leave type makes sense (jury duty, medical appointments), full days only where it does not (military).
  4. Payroll impact. Paid, unpaid, or a split. Jury duty has a fourth option, paid up to X days then unpaid, plus an optional juror stipend deduction.
  5. Supporting documentation. Required, optional, or forbidden.
  6. Approval. Manager approval on or off. Legally protected leave, such as jury duty, defaults to auto-approval with documentation.
  7. Effective from. The date the policy version starts.
  8. Employee notifications. Send now, on the effective date, or on a custom date; channels are email and Slack, with Teams reserved; optional acknowledgment that the employee has read the change.
Four leave types with their own logic (Sick Leave, Bereavement, Sabbatical, Garden Leave) built on a shared shell of eight policy sections
Jury Duty policy settings: eligibility, leave allowance, partial-day leave, payroll impact (paid for 5 days, then unpaid) and auto-approval

Points 7 and 8 together are policy versioning. When HR changes the sick leave rule in March, employees see a summary of what changed and can be asked to confirm they read it. Nothing about this is specific to any country, which is exactly why it lives in the shell.

Where does a leave type need its own logic?

The shell covers roughly half of the 30 types. The other half needed sections that exist nowhere else. Four examples show the range.

Sick Leave: payment split. In Ukraine and much of Europe, the company pays the first days and social insurance pays the rest. The settings screen has a Company Paid Days field (5 in the Ukrainian default), a Social Security Paid toggle, a payment percentage that can depend on tenure, and a statutory calculation method based on the last 12 months of salary. A US-style sick policy never shows these fields.

Sick Leave settings with payment split logic: company paid days, social security toggle, payment percentage and statutory calculation method

Bereavement: relationship matrix. Days depend on who died. The screen has categories the admin can add to: immediate family (7 days in the example), extended family (3), extended circle (1). Two toggles sit below them: Pet Bereavement (2 days) and Miscarriage Leave (5 days). Neither is required by law in most jurisdictions. Both came from the research on what companies were already doing informally, and building them as explicit toggles meant a company could turn them on without inventing a policy from scratch.

Bereavement settings with a relationship matrix plus pet bereavement and miscarriage leave toggles

Sabbatical: tenure, cool-down, clawback. Required tenure (5 years in the default), duration limits (1 to 6 months), a recurring gap (5 years), a mandatory replacement plan, a post-sabbatical commitment period (12 months) with a clawback clause, and a return-to-role guarantee that can be "same position" or "comparable position." During review Bohdan added one more approval rule: founder sign-off can be made mandatory in the chain.

Sabbatical settings: advance notice, replacement plan, approval chain, 12-month post-sabbatical commitment, clawback clause and return-to-role guarantee

Garden Leave: access control. Garden leave is administrative. HR triggers it from the employee's status, and the policy's most important section is IT and security automation: access suspension across email, Slack, Figma, and code repositories, hardware return deadline, a "no contact with clients" rule, and a compliance log. It is the only leave type in the system where the calendar is the least important output.

Garden Leave IT and security screen: access suspension, list of systems to block, hardware return deadline and directory visibility options

Military leave sits between the two groups. It uses the shell, but the Ukrainian preset adds fields that did not exist before 2022: pay status defaults to "job protection only," seniority accrual stays on, vacation accrual is off, and the reinstatement window follows the labor code. The legal basis is Law 2352-IX, in force since July 19, 2022, which removed the employer's duty to preserve average earnings for mobilized employees while keeping the duty to preserve the position. The Supreme Court confirmed this reading in May 2026. The Constitutional Court is still reviewing the amendment, so this is a preset value we expect to update.

Military Leave settings: pay status, seniority and vacation accrual, proof of orders and release, with compliance notes for Ukraine, USA and Europe

How do you design privacy into sensitive leave?

Three leave types forced a decision that most HR tools leave to chance: what a manager, a colleague, and a calendar are allowed to see.

Safe Leave (domestic violence). The policy opens with a strict confidentiality block. The manager's calendar shows only "Out of Office" or "Personal Health," never the type. The audit log is restricted so that ordinary admins cannot list who took safe leave. Calendar display defaults to Private. Proof, where required, is self-attestation, and uploaded documents are deleted after review. The screen also holds an emergency contact override and a safety plan attachment, because the leave request may be the first time the company learns about the situation. In the US preset, this type is on. In the EU and Ukraine presets, it is off by default and can be enabled per office.

Safe Leave privacy settings: strict confidentiality, audit log restriction, discreet team calendar display and a table of who can see what

Personal Days. The core principle is "no explanation needed." Reason required is off, an optional comment field is always present, and Privacy Mode hides the reason from colleagues, who see "Absent" only. Zero notice and auto-approval are the recommended defaults.

Religious Leave. Calendar display can show "Religious Leave," "Personal Observance," or "Out of Office." A holiday library covers observances the admin can enable, plus custom ones. Proof is off by default because asking for it creates a discrimination risk larger than the abuse risk.

The pattern across all three: the type of leave is data the employee owns, and the calendar shows the minimum needed for planning.

Table of what a colleague, manager and HR see for Safe Leave, Personal Days and Religious Leave: limited info, standard details or full details

What did we cut, and why?

The detailed settings screens went through a review pass with comments written directly on the designs. Four things were removed and one was added.

Cut: performance rating integration for sabbatical. The first version gated sabbatical eligibility on a minimum performance rating pulled from a review system. We removed it. Teamtopia has no performance module, and inventing a dependency on a system that may not exist is a false promise.

Cut: electronic sick note integration. The Ukrainian sick leave screen had a toggle for pulling e-лікарняний records from the state registry. Good idea, no integration. Removed until there is one.

Cut: automatic shift adjustment for jury duty. Moving night-shift employees to day shifts during court service requires a scheduling module Teamtopia does not have. Removed.

Cut: enterprise-style eligibility groups for personal days. "Kyiv Office Only" and "Remote Workers" as eligibility filters duplicated what the office-level policy switch already does. Removed in favor of one rule: a policy can be disabled entirely in the office settings.

Added: founder approval for sabbatical. For a small company, a six-month absence is a founder-level decision.

Two open questions from the same review are still open. Paternity leave eligibility in Ukraine is a right on request with documentation, and the screen handles it with a 30-day grace period for uploading a birth certificate after the leave starts. Keep-in-touch days during maternity leave are configurable (10 in the example), but how they appear in the team calendar is not decided yet.

Why did unpaid leave become its own request type?

Unpaid leave was the first new type we added after the base set, and the reason was practical. It closes the gap between "use your remaining days" and "resign."

For the employee, it covers a situation paid leave does not: a relative's illness, a court date, a move, a long course, or burnout, when the balance is already zero. For the employer, it keeps a trained person on the contract without paying salary during the absence, and it replaces verbal agreements with a documented request.

Timeline of an active employment contract: paid leave, then unpaid leave (LWOP), then return to work. Without LWOP, the options are working through it or resigning

In Teamtopia the type is called Unpaid Leave (LWOP) and it is on in every preset, because every one of the three legal systems recognizes it. The regional differences live in the fields: Portugal's 60-day floor and 90-day notice, Ukraine's Article 25 versus 26 distinction, the 30-day Article 26 cap, and the martial-law extension, and the US model where "personal leave / leave without pay" is company policy in most states. A toggle in the annual leave policy, Accrual on Unpaid Leave, decides whether vacation days keep accumulating during the pause. The Ukrainian default is off, matching the seniority rule in the Law on Leave.

Safe Leave settings screen with confidentiality, audit log and calendar display options next to a shield-and-heart illustration

There is also a second use for the type that came from our own setup. Companies that work mostly with contractors run on unpaid leave alone: no balance, no accrual, a request whenever needed. The same policy shell handles that with the allowance set to unlimited and approval left on.

What is live and what is next

Live today in Teamtopia: six policy types on the shared shell: PTO, Sick Leave, Unpaid Leave (LWOP), Vacation Compensation, Overtime tracking, and Holiday Swap.

In development: the country presets for the US, EU, and Ukraine as described above; the next set of policy types on the shell (Bereavement, Jury Duty, Parental, Military, Personal Leave, Voting, Safe Leave, Blood/Organ Donation, Floating Holiday, Comp Time, Volunteer Time Off, No-show); and the deep settings for Annual Leave, Sick Leave, Maternity, Paternity, Parental, Carer's, End-of-life Care, Religious, Garden Leave, Sabbatical, Military, Jury Duty, and Bereavement with the relationship matrix.

Planned: custom leave types. An office in a country with no law on pet illness should still be able to create "Sick Pet" with its own days, proof rule, and calendar label. The shell already supports it; what remains is the creation flow.

The product-side view, with the full country comparison table and a look at how BambooHR, Personio, and HiBob handle the same problem, is in the Teamtopia article.

Teamtopia started as an MVP designed by Flatstudio and built by Push for our own teams. The leave policy system is the part of it that most clearly shows why an internal product needs the same rigor as a client product: the first users were people whose leave we were personally responsible for.

Need a similar design?
Contact us
Authors
Bohdan Kononets
CEO and Design Director
Andrei Zolotukhin
UX Design Lead
FAQ

Frequently Asked Questions

How many leave types exist across the US, EU, and Ukraine?

Our research listed 59 entries: 24 for Europe including country-specific types, 9 for Ukraine, and 26 for the US split into 6 federal and 20 state-regulated types. We consolidated them into 30 preset types in six categories, with each type marked as present, absent, or partial per region.

How should an HR tool handle privacy for sensitive leave types?

Treat the leave type as data the employee owns. Show the calendar the minimum needed for planning, such as Out of Office or Absent, restrict audit logs for domestic violence leave, accept self-attestation as proof by default, and delete uploaded documents after review. Teamtopia applies this to Safe Leave, Personal Days, and Religious Leave.

Is unpaid leave regulated differently in Portugal, Ukraine, and the US?

Yes. Portugal defines it as more than 60 consecutive days, with 90 days' written notice for study requests and limited grounds for refusal. Ukraine separates mandatory unpaid leave (Article 25) from leave by agreement (Article 26), capped at 30 calendar days a year since December 2023 and lifted during martial law. In the US it is mostly company policy, with FMLA covering 12 weeks of job-protected unpaid leave.

What should every leave policy in an HR system include?

A shared shell: eligibility (minimum service), allowance (annual limit, consecutive days, notice), partial-day rules, payroll impact (paid, unpaid, or split), documentation rules, approval flow, effective date, and employee notifications with optional acknowledgment. Leave-specific logic such as payment splits or relationship matrices sits on top of this shell.

Why do HR tools need country-specific leave presets?

Because the same leave type carries different legal rules per country. Jury duty is employer-paid for three days in Massachusetts, handled as a public duty with preserved earnings in Ukraine, and absent from most EU labor codes. A preset encodes those defaults so the admin edits only the exceptions.