petitspas/frontend/lib/utils/am_vigilance.dart
Julien Martin 003fe6b762 feat(#131): fiches parent/AM éditable, placement AM↔enfant, statuts garde/sans_garde
Squash merge develop → master.

- Fiche parent éditable (co-parent, PATCH fiche, GET /parents)
- Fiche AM 3 onglets (PATCH fiche, rattacher/détacher enfants)
- Table enfants_assistantes_maternelles + enum garde/sans_garde
- Migration SQL + BDD.sql canonique
- Correctifs recette : @Get() parents, DTO fiche AM, fix NIR

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-11 22:49:57 +02:00

46 lines
1.5 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:p_tits_pas/models/assistante_maternelle_model.dart';
/// Places disponibles attendues : capacité max enfants rattachés.
int? amExpectedPlacesAvailable({
required int? maxChildren,
required int childrenCount,
}) {
if (maxChildren == null) return null;
return (maxChildren - childrenCount).clamp(0, maxChildren);
}
/// True si la valeur déclarée par l'AM ne correspond pas au calcul métier.
bool amHasPlacesInconsistency({
required int? maxChildren,
required int? placesAvailable,
required int childrenCount,
}) {
final expected = amExpectedPlacesAvailable(
maxChildren: maxChildren,
childrenCount: childrenCount,
);
if (expected == null) return false;
if (placesAvailable == null) return childrenCount > (maxChildren ?? 0);
return placesAvailable != expected;
}
String? amPlacesVigilanceMessage(AssistanteMaternelleModel am) {
if (!amHasPlacesInconsistency(
maxChildren: am.maxChildren,
placesAvailable: am.placesAvailable,
childrenCount: am.children.length,
)) {
return null;
}
final stored = am.placesAvailable;
final expected = amExpectedPlacesAvailable(
maxChildren: am.maxChildren,
childrenCount: am.children.length,
);
final storedLabel = stored?.toString() ?? 'non renseigné';
final expectedLabel = expected?.toString() ?? '';
return 'Point de vigilance : l\'AM déclare $storedLabel place(s) disponible(s), '
'alors que capacité ${am.maxChildren ?? ''} '
'${am.children.length} enfant(s) rattaché(s) = $expectedLabel.';
}