# HealthCam: report dei test sul confine di ingestione

L’agente locale invia telemetria strutturata al cloud. Questo report documenta un’esecuzione reale dei test esistenti sul contratto dati e sull’API, non una verifica del servizio in produzione.

## Comportamenti verificati

| Caso | Asserzione verificata |
| --- | --- |
| Chiave API assente | 401; ricerca utente non chiamata |
| Chiave API sconosciuta | 401; creazione del payload non chiamata |
| JSON malformato | 400; restituito errore JSON |
| Sorgente del payload errata | 400; dettagli di validazione; creazione non chiamata |
| Richiesta valida | 201; ID segmento corrispondente; scrittura con ID dell’utente autenticato |
| Conteggio alla soglia | 429; Retry-After pari a 60; creazione non chiamata |

Altri nove test del contratto accettano un payload valido, rifiutano una sorgente diversa, rifiutano timestamp di segmento invertiti, rifiutano un timestamp negativo, rifiutano un risultato senza stato, accettano un risultato di analisi in errore, accettano un timestamp con fuso orario, rifiutano sent_at assente e rifiutano sent_at senza fuso orario.

## Un esempio concreto

1. Il test prepara un payload sintetico valido e una chiave API fittizia.
2. La ricerca utente simulata restituisce user-1. Il conteggio simulato restituisce la soglia configurata.
3. Il vero gestore POST viene chiamato direttamente con un oggetto Request.
4. Le asserzioni verificano HTTP 429, Retry-After: 60 e nessuna chiamata per creare il payload.

L’esempio dimostra un percorso di rifiuto prima della richiesta di scrittura. Non dimostra un limite atomico in presenza di richieste concorrenti.

## Provenienza

- HealthCam revision: `f8778a113914f161d15793eeecbda15c12743aa0` (clean working tree).
- Esecuzione: 30 September 2026, Europe/Rome.
- Runner: Vitest 3.2.7, Node test environment.
- Comando: `npm test -- --reporter=verbose`.
- Risultato: 2 file di test superati; 15 test superati; 0 falliti.
- API tests: `tests/ingest-payloads.test.ts`.
- Contract tests: `tests/payload-contract.test.ts`.
- Synthetic fixtures: `tests/fixtures/healthcam-payload.ts`.
- Handler: `app/api/recordings/payloads/route.ts`.
- Schema: `app/contracts/payload-contract.ts`.
- Rate-limit configuration: `lib/ingest-rate-limit.ts` (30 stored payloads within 60 seconds).

## Riproduzione e limiti

Con accesso autorizzato al repository privato HealthCam, selezionare la revisione indicata, installare le dipendenze del lockfile con npm ci ed eseguire il comando indicato. La configurazione limita la ricerca a tests/**/*.test.ts. Il modulo Prisma è simulato: queste suite non richiedono un database reale o una webcam.

Il repository rimane privato: questo report pubblico documenta un risultato, ma non è un pacchetto di test eseguibile autonomamente. Il caso studio pubblica un estratto rappresentativo del test.

Sono test isolati. Non verificano persistenza nel database reale, stack HTTP distribuito, limite con richieste concorrenti, retry degli upload, eliminazione dei video, aggregazione/riconciliazione o accuratezza biometrica. L’accettazione di un errore di analisi nel contratto non prova che l’agente lo invii. Da questa esecuzione non si deducono metriche di affidabilità in produzione, throughput o accuratezza.
