{
  "schemaVersion": 1,
  "version": "cas-publics/2026-10-27.1",
  "publishedOn": "2026-10-27",
  "publisher": "Mon Pointage",
  "scope": "Cas fictifs d’arithmétique et de refus de saisies, définis par l’éditeur. Aucun bulletin réel, aucun résultat concurrent, aucune certification indépendante.",
  "cases": [
    {"id":"B01","category":"Budget","label":"Dépenses hebdomadaires et annuelles","operation":"budget","input":{"rows":[{"type":"income","amount":"1800","frequency":"monthly"},{"type":"expense","amount":"600","frequency":"monthly"},{"type":"expense","amount":"70","frequency":"weekly"},{"type":"expense","amount":"360","frequency":"annual"}]},"expected":{"income":180000,"expenses":93333,"available":86667,"weekly":20000},"explanation":"1 800 − 600 − arrondi(70 × 52 / 12) − 360 / 12 = 866,67 € / mois."},
    {"id":"B02","category":"Budget","label":"Un déficit reste négatif","operation":"budget","input":{"rows":[{"type":"income","amount":"0","frequency":"monthly"},{"type":"expense","amount":"100","frequency":"monthly"}]},"expected":{"available":-10000,"weekly":-2308},"explanation":"0 − 100 = −100 € par mois, soit −23,08 € par semaine en moyenne."},
    {"id":"B03","category":"Budget","label":"Arrondi d’une provision annuelle","operation":"budget","input":{"rows":[{"type":"income","amount":"100","frequency":"monthly"},{"type":"expense","amount":"1","frequency":"annual"}]},"expected":{"expenses":8,"available":9992},"explanation":"1 € / 12 = 0,08 € après arrondi ; 100 − 0,08 = 99,92 €."},
    {"id":"B04","category":"Budget","label":"Une semaine n’est pas un quart de mois","operation":"budget","input":{"rows":[{"type":"income","amount":"100","frequency":"weekly"}]},"expected":{"income":43333,"available":43333},"explanation":"100 × 52 / 12 = 433,33 € par mois en moyenne."},
    {"id":"B05","category":"Budget","label":"Revenu annuel ramené au mois","operation":"budget","input":{"rows":[{"type":"income","amount":"1200","frequency":"annual"}]},"expected":{"income":10000},"explanation":"1 200 / 12 = 100 € par mois."},
    {"id":"H01","category":"Heures","label":"Durée nulle explicite","operation":"overtime","input":{"rate":"20","hours":"0","scope":"weekly35","confirmed":true},"expected":{"gross":0},"explanation":"0 h × 20 € = 0 € brut."},
    {"id":"H02","category":"Heures","label":"Seuil de 35 heures","operation":"overtime","input":{"rate":"20","hours":"35","scope":"weekly35","confirmed":true},"expected":{"gross":70000,"overtime":0},"explanation":"35 × 20 = 700 € brut."},
    {"id":"H03","category":"Heures","label":"Cinq heures majorées à 25 %","operation":"overtime","input":{"rate":"20","hours":"40","scope":"weekly35","confirmed":true},"expected":{"gross":82500},"explanation":"35 × 20 + 5 × 20 × 1,25 = 825 € brut."},
    {"id":"H04","category":"Heures","label":"Seuil de 43 heures","operation":"overtime","input":{"rate":"20","hours":"43","scope":"weekly35","confirmed":true},"expected":{"gross":90000},"explanation":"35 × 20 + 8 × 20 × 1,25 = 900 € brut."},
    {"id":"H05","category":"Heures","label":"Deux heures majorées à 50 %","operation":"overtime","input":{"rate":"20","hours":"45","scope":"weekly35","confirmed":true},"expected":{"gross":96000},"explanation":"700 + 200 + 2 × 20 × 1,50 = 960 € brut."},
    {"id":"H06","category":"Heures","label":"Format 45 h 30","operation":"overtime","input":{"rate":"20","hours":"45:30","scope":"weekly35","confirmed":true},"expected":{"gross":97500,"seconds":163800},"explanation":"700 + 200 + 2,5 × 20 × 1,50 = 975 € brut."},
    {"id":"H07","category":"Heures","label":"Une minute après 43 heures","operation":"overtime","input":{"rate":"17,01","hours":"43:01","scope":"weekly35","confirmed":true},"expected":{"gross":76588,"lines.2.cents":43},"explanation":"595,35 + 170,10 + arrondi(17,01 × 1,50 / 60) = 765,88 € brut."},
    {"id":"H08","category":"Heures","label":"7,33 heures décimales","operation":"overtime","input":{"rate":"20","hours":"7,33","scope":"weekly35","confirmed":true},"expected":{"gross":14660,"seconds":26388},"explanation":"7,33 h = 7 h 19 min 48 s ; 7,33 × 20 = 146,60 € brut."},
    {"id":"H09","category":"Heures","label":"45,30 heures n’est pas 45 h 30","operation":"overtime","input":{"rate":"20","hours":"45,30","scope":"weekly35","confirmed":true},"expected":{"gross":96900,"seconds":163080},"explanation":"45,30 h = 45 h 18 ; 700 + 200 + 2,30 × 30 = 969 € brut."},
    {"id":"M01","category":"Missions","label":"Indemnités et coûts séparés","operation":"mission","input":{"period":"Semaine fictive","a":{"salary":"400","otherIncome":"100"},"b":{"salary":"900","allowances":"250","housing":"200","transport":"120","food":"70","hours":"50"}},"expected":{"a.available":50000,"b.available":76000,"delta":26000,"targetSalary":64000,"b.hourly":1520},"explanation":"B : 900 + 250 − 200 − 120 − 70 = 760 € ; A : 500 € ; différence +260 €. Seuil net B : 640 €."},
    {"id":"M02","category":"Missions","label":"Aucune dépense personnelle déclarée","operation":"mission","input":{"period":"Semaine fictive","a":{"salary":"400"},"b":{"salary":"900"}},"expected":{"b.expenses":0,"delta":50000,"b.hourly":null},"explanation":"900 − 400 = +500 €. Le temps n’étant pas saisi, aucun montant par heure n’est inventé."},
    {"id":"M03","category":"Missions","label":"Mission moins favorable après frais","operation":"mission","input":{"period":"Mois fictif","a":{"salary":"2000"},"b":{"salary":"1000","housing":"200"}},"expected":{"delta":-120000,"targetSalary":220000},"explanation":"B : 800 € ; A : 2 000 € ; différence −1 200 €. Seuil net B : 2 200 €."},
    {"id":"M04","category":"Missions","label":"Les aides ne deviennent pas un taux horaire","operation":"mission","input":{"period":"Semaine fictive","a":{"salary":"0"},"b":{"salary":"900","allowances":"250","otherIncome":"1000","housing":"200","transport":"120","food":"70","hours":"50"}},"expected":{"b.available":176000,"b.hourly":1520,"targetSalary":0},"explanation":"Disponible 1 760 € ; ratio de la mission : (900 + 250 − 390) / 50 = 15,20 €, hors autres ressources."},
    {"id":"V01","category":"Versements","label":"Acompte déjà déduit, écart de 50 €","operation":"payments","input":{"period":"Mois fictif","finalNet":"1400","advances":"600","payments":["1000","350"],"confirmed":true},"expected":{"balance":5000,"expectedIncludingAdvances":200000,"receivedIncludingAdvances":195000},"explanation":"Net final 1 400 − virements 1 350 = 50 €. Les 600 € d’acompte déjà déduits ne sont pas retirés de nouveau."},
    {"id":"V02","category":"Versements","label":"Virement fractionné complet","operation":"payments","input":{"period":"Mois fictif","finalNet":"1400","advances":"600","payments":["1000","400"],"confirmed":true},"expected":{"balance":0,"receivedIncludingAdvances":200000},"explanation":"1 400 − 1 000 − 400 = 0 €. Acomptes compris, le total reçu saisi est de 2 000 €."},
    {"id":"V03","category":"Versements","label":"Aucun paiement reçu, zéro explicite","operation":"payments","input":{"period":"Mois fictif","finalNet":"400","payments":["0"],"confirmed":true},"expected":{"received":0,"balance":40000},"explanation":"400 − 0 = 400 € à rapprocher ; aucun versement n’est présumé."},
    {"id":"V04","category":"Versements","label":"Versements au-dessus du net final","operation":"payments","input":{"period":"Mois fictif","finalNet":"100","payments":["125"],"confirmed":true},"expected":{"balance":-2500},"explanation":"100 − 125 = −25 €. C’est un écart à expliquer, pas une conclusion de trop-perçu."},
    {"id":"V05","category":"Versements","label":"Net final nul et cases non remplies","operation":"payments","input":{"period":"Mois fictif","finalNet":"0","payments":["0",""],"confirmed":true},"expected":{"balance":0,"omitted":1},"explanation":"Le zéro saisi est retenu ; une case vide reste non renseignée."},
    {"id":"R01","category":"Refus","label":"Régime hebdomadaire non confirmé","operation":"overtime","input":{"rate":"20","hours":"40","scope":"weekly35","confirmed":false},"expectError":true,"explanation":"Le calcul bloque au lieu de supposer que le régime 35 h / 25 % / 50 % s’applique."},
    {"id":"R02","category":"Refus","label":"169 heures dans une semaine","operation":"overtime","input":{"rate":"20","hours":"169","scope":"weekly35","confirmed":true},"expectError":true,"explanation":"La saisie dépasse les 168 heures calendaires d’une semaine."},
    {"id":"R03","category":"Refus","label":"Groupement monétaire ambigu","operation":"overtime","input":{"rate":"12 34","hours":"40","scope":"weekly35","confirmed":true},"expectError":true,"explanation":"Le format 12 34 est refusé ; 1 234,56 serait un groupement valide."},
    {"id":"R04","category":"Refus","label":"Net final laissé vide","operation":"payments","input":{"period":"Mois fictif","finalNet":"","payments":["100"],"confirmed":true},"expectError":true,"explanation":"Un net inconnu n’est pas remplacé par 0 €."},
    {"id":"R05","category":"Refus","label":"Minute 60 invalide","operation":"overtime","input":{"rate":"20","hours":"5:60","scope":"weekly35","confirmed":true},"expectError":true,"explanation":"Le format heures:minutes accepte les minutes de 00 à 59."}
  ]
}
