{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","additionalProperties":false,"required":["letter","employer","employee","plan_year","budget_source","benefit_selections","legal_notices","signatures"],"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"},"vat_number":{"type":"string"},"onss_number":{"type":"string"},"joint_committee":{"type":"string"},"social_secretariat":{"type":"string"},"represented_by":{"type":"object","additionalProperties":false,"required":["name","title"],"properties":{"name":{"type":"string"},"title":{"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"],"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"]}}},"plan_year":{"type":"integer","minimum":2020,"maximum":2100,"description":"Année civile pour laquelle les choix sont confirmés."},"optin_deadline":{"type":"string","format":"date","description":"Date limite d'inscription / opt-in."},"irrevocable_until":{"type":"string","format":"date","description":"Date jusqu'à laquelle les choix sont irrévocables."},"budget_source":{"type":"object","additionalProperties":false,"required":["source_type","total_budget_eur"],"properties":{"source_type":{"type":"string","enum":["gross_salary","thirteenth_month","cct90_bonus","extra_budget"],"description":"Type de source du budget cafétéria."},"source_label":{"type":"string","description":"Libellé libre de la source (ex. '13e mois 2026')."},"total_budget_eur":{"type":"number","minimum":0,"description":"Budget total disponible en EUR."},"neutrality_note":{"type":"string","description":"Note sur la garantie de neutralité budgétaire."}}},"benefit_selections":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["benefit_code","name","allocated_eur"],"properties":{"benefit_code":{"type":"string","enum":["meal_vouchers","eco_vouchers","group_insurance","hospitalisation_insurance","sports_culture_vouchers","connectivity_allowance","bicycle_allowance","extra_leave","other"]},"name":{"type":"string"},"allocated_eur":{"type":"number","minimum":0},"frequency":{"type":"string","description":"Fréquence: 'monthly', 'annual', 'per_day'."},"unit_value_eur":{"type":"number","minimum":0},"nsso_treatment":{"type":"string"},"tax_treatment":{"type":"string"},"legal_ref":{"type":"string"},"is_mutable":{"type":"boolean","description":"Vrai si l'avantage peut être modifié en cours d'année."},"notes":{"type":"string"}}}},"remaining_budget_eur":{"type":"number","minimum":0,"description":"Budget restant non alloué (doit être 0 si neutralité totale requise)."},"legal_notices":{"type":"object","additionalProperties":false,"required":["irrevocability_text"],"properties":{"irrevocability_text":{"type":"string","description":"Clause d'irrévocabilité pour l'année civile."},"neutrality_guarantee":{"type":"string","description":"Déclaration de neutralité budgétaire."},"consent_text":{"type":"string","description":"Texte de consentement du travailleur à ses choix."}}},"signatures":{"type":"object","additionalProperties":false,"required":["hr_signatory_name","hr_signatory_title","signature_date"],"properties":{"hr_signatory_name":{"type":"string"},"hr_signatory_title":{"type":"string"},"signature_date":{"type":"string","format":"date"},"employee_signed_date":{"type":"string","format":"date"}}}}}