feat(#206): backend cartes rose soin_enfant (3 sous-types, instant T, correction 24h)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-08 16:46:54 +02:00
co-authored by Cursor
parent a36e9ef176
commit 8af579be53
8 changed files with 262 additions and 26 deletions
@@ -281,4 +281,96 @@ describe('CardsService (#194)', () => {
);
expect(res.statut).toBe(CardInstanceStatutType.TRAITEE);
});
it('AM crée soin_enfant (fievre) → motif dérivé + payload structuré', async () => {
typesRepo.findOne.mockResolvedValue({
code: 'soin_enfant',
system: true,
emitter_roles: [RoleType.ASSISTANTE_MATERNELLE],
response_mode: CardResponseModeType.ACK,
retention_days: 7,
audience_resolver: 'couple_parents',
});
evenementsService.creer.mockResolvedValue({ id: 'ev-soin' });
cardsRepo.create.mockImplementation((c) => ({ ...c, id: 'card-soin' }));
cardsRepo.save.mockResolvedValue({ id: 'card-soin' });
cardsRepo.findOne.mockResolvedValue({
id: 'card-soin',
type_code: 'soin_enfant',
statut: CardInstanceStatutType.OUVERTE,
payload: {
date_debut: '2026-10-28',
date_fin: '2026-10-28',
motif: '38,5 °C à 14:30 (Médicament : Doliprane)',
sous_type: 'fievre',
heure_releve: '14:30',
temperature_c: 38.5,
medicament_donne: 'Doliprane',
},
type: { response_mode: CardResponseModeType.ACK },
});
const res = await service.creer('am-1', RoleType.ASSISTANTE_MATERNELLE, {
type_code: 'soin_enfant',
id_placement: 'pl-1',
date_debut: '2026-10-28',
date_fin: '2026-10-28',
payload: {
sous_type: 'fievre',
heure_releve: '14:30',
temperature_c: 38.5,
medicament_donne: 'Doliprane',
},
});
expect(evenementsService.creer).toHaveBeenCalledWith(
'am-1',
RoleType.ASSISTANTE_MATERNELLE,
expect.objectContaining({
type: TypeEvenementAgendaType.SOIN_ENFANT,
motif: '38,5 °C à 14:30 (Médicament : Doliprane)',
}),
);
expect(res.payload.motif).toBe('38,5 °C à 14:30 (Médicament : Doliprane)');
});
it('AM corrige soin_enfant dans les 24h → historique + re-ack', async () => {
const creeLe = new Date();
cardsRepo.findOne.mockResolvedValue({
id: 'card-soin',
type_code: 'soin_enfant',
id_placement: 'pl-1',
id_evenement: 'ev-soin',
cree_par: 'am-1',
cree_le: creeLe,
statut: CardInstanceStatutType.TRAITEE, // déjà acquitté
payload: {
date_debut: '2026-10-28',
date_fin: '2026-10-28',
sous_type: 'fievre',
heure_releve: '14:30',
temperature_c: 38.5,
},
type: { retention_days: 7 },
});
evenementsService.maj.mockResolvedValue({});
await service.majEnAttente('am-1', RoleType.ASSISTANTE_MATERNELLE, 'card-soin', {
date_debut: '2026-10-28',
date_fin: '2026-10-28',
payload: {
sous_type: 'fievre',
heure_releve: '14:30',
temperature_c: 37.5, // correction
},
});
expect(cardsRepo.manager.query).toHaveBeenCalledWith(
expect.stringContaining('UPDATE card_instances'),
expect.arrayContaining([
CardInstanceStatutType.OUVERTE, // repasse ouverte
expect.stringContaining('37,5'), // nouveau payload stringifié
]),
);
});
});