{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","additionalProperties":false,"required":["letter","employer","employee","leave_year","legal_leave","signature"],"properties":{"letter":{"type":"object","additionalProperties":false,"required":["place","date","language"],"properties":{"place":{"type":"string"},"date":{"type":"string","format":"date"},"language":{"type":"string","enum":["fr","nl","de","en"]},"reference":{"type":"string"}}},"employer":{"type":"object","additionalProperties":false,"required":["name","address","bce_number","onss_number","joint_committee"],"properties":{"name":{"type":"string"},"address":{"type":"string"},"bce_number":{"type":"string"},"onss_number":{"type":"string"},"joint_committee":{"type":"string"},"social_secretariat":{"type":"string"},"seat_region":{"type":"string","enum":["nl_region","fr_region","brussels","de_region"],"description":"Linguistic region of the operating seat of the employer (Flemish decree of 19 July 1973, decree of the French Community of 30 June 1982, coordinated laws of 18 July 1966, art. 52). Optional; when given, the language of the document is compared with it and a warning (information only) is raised when they do not fit."}}},"employee":{"type":"object","additionalProperties":false,"required":["given_name","surname","employee_id","function_title","statut","start_date"],"properties":{"given_name":{"type":"string"},"surname":{"type":"string"},"employee_id":{"type":"string"},"function_title":{"type":"string"},"department":{"type":"string"},"statut":{"type":"string","enum":["bediende","arbeider","kaderlid"]},"start_date":{"type":"string","format":"date"},"contract_type":{"type":"string","enum":["cdi","cdd"]},"work_regime":{"type":"string","description":"Régime de travail: 'fulltime' ou fraction temps partiel (ex. '4/5')."}}},"leave_year":{"type":"integer","minimum":2020,"maximum":2100,"description":"Année de vacances (année de prise des congés)."},"reference_year":{"type":"integer","minimum":2019,"maximum":2099,"description":"Année de référence N-1 sur laquelle le droit est basé."},"balance_date":{"type":"string","format":"date","description":"Date à laquelle le solde est calculé (ex. 31.12 ou date de communication)."},"legal_leave":{"type":"object","additionalProperties":false,"required":["days_entitled","days_taken","days_remaining"],"properties":{"days_entitled":{"type":"number","minimum":0,"description":"Jours de congé légaux acquis pour l'année de vacances."},"days_taken":{"type":"number","minimum":0,"description":"Jours de congé légaux déjà pris dans l'année de vacances."},"days_remaining":{"type":"number","minimum":0,"description":"Solde de jours de congé légaux restants."},"carry_over_allowed":{"type":"boolean","description":"Report des jours de congé légaux restants autorisé (oui / non), selon l'employeur."},"expiry_date":{"type":"string","format":"date","description":"Date d'expiration du droit aux congés légaux."}}},"pecule_simple_eur":{"type":"number","minimum":0,"description":"Pécule de vacances simple en EUR, tel que l'employeur l'a calculé."},"pecule_double_eur":{"type":"number","minimum":0,"description":"Pécule de vacances double en EUR, tel que l'employeur l'a calculé."},"supplementary_leaves":{"type":"array","description":"Congés supplémentaires conventionnels (au-delà du minimum légal).","items":{"type":"object","additionalProperties":false,"required":["leave_type","days_entitled","days_taken","days_remaining"],"properties":{"leave_type":{"type":"string","description":"Type: 'seniority', 'sectoral_extra', 'european', 'other'."},"leave_type_label":{"type":"string"},"days_entitled":{"type":"number","minimum":0},"days_taken":{"type":"number","minimum":0},"days_remaining":{"type":"number","minimum":0},"carry_over_allowed":{"type":"boolean"},"legal_basis":{"type":"string"}}}},"notes":{"type":"string","description":"Remarques libres (ex. congé maladie, assimilation, etc.)."},"signature":{"type":"object","additionalProperties":false,"required":["signatory_name","signatory_title","date"],"properties":{"signatory_name":{"type":"string"},"signatory_title":{"type":"string"},"date":{"type":"string","format":"date"}}}}}