{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","additionalProperties":false,"required":["letter","employer","employee","absence","salary","breakdown","totals","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","vat_number","onss_number","joint_committee"],"properties":{"name":{"type":"string"},"address":{"type":"string"},"bce_number":{"type":"string","description":"Numéro d'entreprise 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":"Numéro et nom de la Commission paritaire / Paritair Comité."},"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","address","national_register_number","date_of_birth","statut","function_title","start_date"],"properties":{"given_name":{"type":"string"},"surname":{"type":"string"},"address":{"type":"string"},"national_register_number":{"type":"string","description":"NISS / Rijksregisternummer (format YY.MM.DD-NNN.CC)."},"date_of_birth":{"type":"string","format":"date"},"statut":{"type":"string","enum":["arbeider","bediende"],"description":"Statut du travailleur : ouvrier (arbeider) ou employé (bediende). Détermine le régime applicable (Art. 52 vs Art. 70 Loi 3.7.1978)."},"function_title":{"type":"string"},"start_date":{"type":"string","format":"date","description":"Date d'entrée en service — détermine l'ancienneté."}}},"absence":{"type":"object","additionalProperties":false,"required":["start_date"],"properties":{"start_date":{"type":"string","format":"date","description":"Premier jour d'incapacité de travail."},"end_date":{"type":"string","format":"date","description":"Dernier jour d'incapacité couvert par ce décompte (facultatif si absence en cours)."},"medical_certificate_date":{"type":"string","format":"date","description":"Date de réception du certificat médical par l'employeur (Cass. 26.4.1976)."},"cause":{"type":"string","enum":["illness","accident_private","other"],"description":"Cause de l'incapacité : maladie (illness), accident privé (accident_private) ou autre. N'inclut PAS les accidents du travail (couverts séparément par la Loi 10.4.1971)."},"waiting_day_applies":{"type":"boolean","description":"Jour de carence applicable (ouvriers uniquement, Loi 12.4.1965 Art. 27)."}}},"salary":{"type":"object","additionalProperties":false,"required":["gross_monthly","currency"],"properties":{"gross_monthly":{"type":"number","minimum":0,"description":"Salaire mensuel brut de référence."},"gross_daily":{"type":"number","minimum":0,"description":"Salaire journalier brut (= salaire mensuel / 26 ou / 30 selon mode de calcul)."},"currency":{"type":"string","enum":["EUR"]}}},"breakdown":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["period_label","from_date","to_date","days","rate_pct","gross_amount","employer_amount"],"properties":{"period_label":{"type":"string","description":"Étiquette de la période (ex. 'Jours 1–7 (100 %)')."},"from_date":{"type":"string","format":"date"},"to_date":{"type":"string","format":"date"},"days":{"type":"integer","minimum":0,"description":"Nombre de jours calendrier couverts par cette ligne."},"rate_pct":{"type":"number","minimum":0,"maximum":100,"description":"Taux de rémunération applicable en pourcentage (100, 85.88 ou 60)."},"gross_amount":{"type":"number","minimum":0,"description":"Montant brut total pour la période (avant déduction ONSS)."},"employer_amount":{"type":"number","minimum":0,"description":"Montant à charge de l'employeur pour la période."},"mutuelle_amount":{"type":"number","minimum":0,"description":"Montant à charge de la mutuelle (INAMI) pour la période."}}}},"totals":{"type":"object","additionalProperties":false,"required":["total_gross","total_employer"],"properties":{"total_gross":{"type":"number","minimum":0,"description":"Total brut toutes périodes confondues."},"total_employer":{"type":"number","minimum":0,"description":"Total à charge de l'employeur."},"total_mutuelle":{"type":"number","minimum":0,"description":"Total à charge de la mutuelle."}}},"notes":{"type":"string","description":"Remarques libres (ex. convention collective applicable, cas particulier)."},"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"}}}}}