{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","additionalProperties":false,"required":["letter","employer","employee","seniority","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"},"purpose":{"type":"string","description":"Finalité de l'attestation (ex. mobilité interne, changement d'employeur, dossier CP, pension complémentaire)."}}},"employer":{"type":"object","additionalProperties":false,"required":["name","address","bce_number","vat_number","onss_number","joint_committee"],"properties":{"name":{"type":"string"},"legal_form":{"type":"string"},"address":{"type":"string"},"bce_number":{"type":"string","description":"Numéro BCE/KBO (format 0xxx.xxx.xxx)."},"vat_number":{"type":"string","description":"Numéro TVA/BTW (format BE0xxxxxxxxx)."},"onss_number":{"type":"string","description":"Numéro d'immatriculation ONSS/RSZ."},"joint_committee":{"type":"string","description":"Commission paritaire / paritair comité (ex. CP 200, CP 218)."},"social_secretariat":{"type":"object","additionalProperties":false,"required":["name","approval_number"],"properties":{"name":{"type":"string"},"approval_number":{"type":"string"}}},"represented_by":{"type":"object","additionalProperties":false,"required":["name","title"],"properties":{"name":{"type":"string"},"title":{"type":"string"}}}}},"employee":{"type":"object","additionalProperties":false,"required":["given_name","surname","national_register_number","function_title","contract_type"],"properties":{"given_name":{"type":"string"},"surname":{"type":"string"},"national_register_number":{"type":"string","description":"NISS / Rijksregisternummer (format YY.MM.DD-NNN.CC)."},"function_title":{"type":"string"},"contract_type":{"type":"string","enum":["cdi","cdd","student","interim","other"],"description":"Type de contrat de travail au moment de la référence."}}},"seniority":{"type":"object","additionalProperties":false,"required":["entry_date","reference_date","total_years","total_months"],"properties":{"entry_date":{"type":"string","format":"date","description":"Date d'entrée en service (date d'engagement)."},"reference_date":{"type":"string","format":"date","description":"Date de référence pour le calcul de l'ancienneté."},"total_years":{"type":"integer","minimum":0,"description":"Nombre d'années d'ancienneté à la date de référence."},"total_months":{"type":"integer","minimum":0,"maximum":11,"description":"Mois résiduels (0–11) après les années complètes."},"seniority_for_notice_weeks":{"type":"integer","minimum":0,"description":"Semaines de préavis correspondant à l'ancienneté selon barème statut unique (Loi 26.12.2013 art. 37/5–37/12)."},"seniority_for_sectoral_bonus":{"type":"number","minimum":0,"description":"Ancienneté retenue pour les primes d'ancienneté sectorielles (peut différer de l'ancienneté légale)."},"assimilated_periods":{"type":"array","description":"Périodes assimilées incluses dans le calcul (maladie, congé de maternité, chômage temporaire art. 51, crédit-temps, etc.).","items":{"type":"object","additionalProperties":false,"required":["type","from_date","to_date"],"properties":{"type":{"type":"string","enum":["sick_leave","maternity_leave","paternity_leave","temporary_unemployment","time_credit","military_service","parental_leave","other"],"description":"Nature de la période assimilée."},"from_date":{"type":"string","format":"date"},"to_date":{"type":"string","format":"date"},"description":{"type":"string"}}}},"neutralised_periods":{"type":"array","description":"Périodes neutralisées exclues du calcul (congé sans solde au-delà du seuil CP, etc.).","items":{"type":"object","additionalProperties":false,"required":["type","from_date","to_date"],"properties":{"type":{"type":"string","enum":["unpaid_leave","suspension_disciplinary","force_majeure","other"]},"from_date":{"type":"string","format":"date"},"to_date":{"type":"string","format":"date"},"description":{"type":"string"}}}}}},"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"}}}}}