Closed magemax closed 4 years ago
@magemax Merci pour ce super texte de mise en contexte. J'ai regardé plus en détail la question "parent isolé" dans notre générateur de cas type. Effectivement on a manqué un élément. Il faut par défaut que la case parent isolé soit cochée, à partir du moment où il y a un parent et au moins un enfant. C'est intéressant de se poser la question de qu'est-ce qu'il se passe pour les foyers qui bénéificie théoriquement de cette aide mais qui auraient omis de cocher la case T ? Et bien j'en sais rien du tout. Deux options :
Voici une capture d'écran des cas dans le générateur de cas type.
- si un champ est manquant (ou que le nombre d'enfants du tableau n'est pas le même pour toutes les catégories de situation maritale), le calcul échoue lamentablement. On devrait plutôt renvoyer une erreur à l'usager j'imagine. Comment ?
- Throw une exception custom (LexCeption) et l'attrapper au moment du call de l'API
- Effectuer les checks au moment du handler de la requête? (PAs forcément adapté, ça nécessite que la partie handler soit au courant de toute la structure ce qui est ptet pas nécessaire)
@magemax Sur cet aspect, une technique assez courante de faire est celle-ci:
400 - BAD REQUEST
au client avec un descriptif. Il y existe déjà plein de bibliothèques spécialisées dedans qui valide un objet contre un schéma JSON et produise un descriptif de l'erreur le cas échéant.Pour l'histoire de la validation de la longueur des tableaux, un approche plus "dev/objet" et moins maths serait la suivante. Cette nomenclature permet de faciliter l'implémentation côté front et elle peut être décrite complètement par un schéma JSON :
// Avant
{
"veuf":[1, 2.5, 3, 4, 5, 6, 7],
"celibataire" : [1, 1.5, 2, 3, 4, 5, 6],
}
// Après
[
{
"veuf": 1,
"celibataire": 1
},
{
"veuf": 2.5,
"celibataire": 1.5
},
...
]
Cet objet JSON peut ensuite être converti facilement en tableaux numériques avec 2-3 lignes python.
Sur le reste de la spec de l'API, j'aurais tendance à dire:
parts_selon_nombre_personnes_a_charge
et parts_par_pac_au_dela
(par ex partsParPersonneACharge
et partsParPersonneAChargeAuDela)
Voilà !
OK, l'inversion des tableaux fait du sens. J'ai camelCasé tout ça, à noter que le reste de la requête est inchangé.
On en arrive à la structure ci-dessous. Avant que je change, @LoicPoullain @sandcha des suggestions supplémentaires?
"calculNombreParts": {
"partsSelonNombrePAC": [
{"veuf": 1, "mariesOuPacses": 2, "celibataire": 1, "divorce": 1},
{"veuf": 2.5, "mariesOuPacses": 2.5, "celibataire": 1.5, "divorce": 1.5},
{"veuf": 3, "mariesOuPacses": 3, "celibataire": 2, "divorce": 2},
{"veuf": 4, "mariesOuPacses": 4, "celibataire": 3, "divorce": 3},
{"veuf": 5, "mariesOuPacses": 5, "celibataire": 4, "divorce": 4},
{"veuf": 6, "mariesOuPacses": 6, "celibataire": 5, "divorce": 5},
{"veuf": 7, "mariesOuPacses": 7, "celibataire": 6, "divorce": 6},
],
"partsParPacAuDela": 1,
"partsParPACChargePartagee": {
"zeroChargePrincipale": {"deuxPremiers": 0.25, "suivants": 0.5},
"unChargePrincipale": {"premier": 0.25, "suivants": 0.5},
"deuxOuPlusChargePrincipale": {"suivants": 0.5},
},
"bonusParentIsole": {
"auMoinsUnChargePrincipale": 0.5,
"zeroChargePrincipaleUnPartage": 0.25,
"zeroChargeprincipaleDeuxOuPlusPartage": 0.5,
},
}
Proposition : Simple, juste une unification de la casse de "personne à charge" vers PAC
(majuscule puisque c'est un acronyme) :
"calculNombreParts": {
"partsSelonNombrePAC": [
{"veuf": 1, "mariesOuPacses": 2, "celibataire": 1, "divorce": 1},
{"veuf": 2.5, "mariesOuPacses": 2.5, "celibataire": 1.5, "divorce": 1.5},
{"veuf": 3, "mariesOuPacses": 3, "celibataire": 2, "divorce": 2},
{"veuf": 4, "mariesOuPacses": 4, "celibataire": 3, "divorce": 3},
{"veuf": 5, "mariesOuPacses": 5, "celibataire": 4, "divorce": 4},
{"veuf": 6, "mariesOuPacses": 6, "celibataire": 5, "divorce": 5},
{"veuf": 7, "mariesOuPacses": 7, "celibataire": 6, "divorce": 6},
],
"partsParPACAuDela": 1,
"partsParPACChargePartagee": {
"zeroChargePrincipale": {"deuxPremiers": 0.25, "suivants": 0.5},
"unChargePrincipale": {"premier": 0.25, "suivants": 0.5},
"deuxOuPlusChargePrincipale": {"suivants": 0.5},
},
"bonusParentIsole": {
"auMoinsUnChargePrincipale": 0.5,
"zeroChargePrincipaleUnPartage": 0.25,
"zeroChargeprincipaleDeuxOuPlusPartage": 0.5,
},
}
@magemax Globalement, sauf surprise sur les équations comme évoqué dans la revue, je serais en faveur de merger et de renforcer nos vérifications au fil de l'eau. 🙂
Ajoute une prise en compte d'une réforme du calcul du quotient familial selon les modalités de l'article 194 du CGI.
Le petit bout suivant peut être rajouté aux requêtes :
La PR corrige aussi quelques bugs qui empêchaient le calcul correct du nbptr dans certains cas :
Questions résiduelles :
@DorineLam Le bullet point où je t'ai taggée te concerne peut être, le reste c'est pour ta culture @sandcha fais toi plaise tous ces points sont pour toi @LoicPoullain La partie qui va t'intéresser directement c'est la structure de la requête (décrite ci dessus), et les noms de variables.
Tous les trois : lisez les parties qui vous concernent (et plus si affinité), et parlons-en pour voir comment on avance.