[EF-10] API sur données fictives #94

Closed
opened 2026-09-02 14:37:34 +00:00 by marvin · 1 comment
Member

Exigence couverte

EF-10, ENF-01, ENF-02, ENF-04

Épreuve servie

EC05 · Data, ETL et BI

Charge estimée

4 j.h

Ce qu'on veut obtenir

L'API sert les données du tableau de bord sur un jeu de démonstration figé. La
zone or n'existe pas encore : les routes, les schémas de réponse, l'authentification
et les codes d'erreur sont définitifs ; seule la source des valeurs est
provisoire. Le jour où la base arrive, seuls les corps de fonctions de
dashboard/repository.py changent — ni les routeurs, ni les schémas de réponse.

Le tableau de bord qui consomme cette API est porté par #24.

Lots

  • L1 — Socle. Package dashboard/, modèles, jeu des sept sites, dépôt, gating par session, GET /api/v1/sites et /sites/{id}.
  • L2 — Vue Parc. GET /api/v1/parc/synthese et /parc/mesures, profil horaire du parc, alertes.
  • L3 — Vue Site. mesures, prevision, recommandations, tracabilite.
  • L4 — Vue Qualité et alertes. qualite/synthese, qualite/collecte, alertes.

Critères d'acceptation

  • Le référentiel des sites et leur état courant sont servis, filtrés par autorisation.
  • La vue Parc a ses routes : synthèse et courbe agrégée.
  • La vue Site a ses routes : série, prévision, recommandations, traçabilité.
  • La vue Qualité a ses routes : synthèse et journal de collecte. Les alertes sont exposées.
  • Les réponses sont typées (Pydantic) et le schéma OpenAPI est généré sans erreur.
  • Le jeu de fixtures est cohérent, et sa cohérence est tenue par des tests dédiés : la somme des consommations vaut le total du parc, un seul site est en dépassement, le compte d'alertes suit leur ventilation, l'état d'un site se déduit de ses propres chiffres.
  • La source de données est derrière un seul module remplaçable ; brancher un accès base ne touchera ni les routeurs ni les schémas de réponse.
  • Une route sans session rend 401 ; un identifiant de site inconnu rend 404, jamais 500 ni une liste vide.
  • ruff check, ruff format --check et mypy --strict passent sur services/api.
  • Chaque route a ses tests unitaires, cas nominal et cas d'erreur.
  • pytest tourne hors ligne : aucune base, aucun conteneur, aucun réseau.
  • Le README de l'API liste les routes et explique comment lancer l'API sur le jeu de démonstration.

Comment on le vérifie

Tests pytest tests/unit pour l'API
Commande bin/api (ou bin/api.ps1 sous Windows), sur le jeu de démonstration
Preuve sortie de pytest et schéma OpenAPI généré, en commentaire de ce ticket

À savoir

L'API exige PostgreSQL pour démarrer et pour authentifier, même si le jeu de
démonstration est en mémoire. C'est la conséquence assumée du choix « routes
gatées dès maintenant » : CurrentUser va chercher l'utilisateur en base. Sans
base, seul /health répond — bin/api le détecte et le dit avant de lancer,
plutôt que de se figer.

La disponibilité moyenne du parc vaut 98,5 %, pas 98,6 % comme l'affiche la
maquette : c'est la moyenne de la colonne que la maquette montre elle-même. À
corriger côté design (#53).

Le vocabulaire de sévérité est normal / vigilance / alerte, partout. La
maquette dit « 1 critique » à un endroit et « alerte » à un autre.

Les alertes du jeu portent l'origine systeme, pas source : un dépassement
prévisionnel et un taux d'imputation, c'est nous qui les produisons. Les alertes
ingérées du flux amont (EF-05) viendront s'ajouter avec origine: "source".

Hors périmètre

  • Le tableau de bord — les trois écrans branchés sur l'API : #24.
  • La lecture réelle en zone or, dans PostgreSQL.
  • La table d'autorisation par site — ENF-02 complet. dashboard/autorisation.py en tient lieu, et rend aujourd'hui les sept sites à tout utilisateur authentifié. Ticket dédié à ouvrir.
  • L'appel au service d'inférence : les prévisions sont des fixtures.
  • Le moteur de règles : les recommandations sont des fixtures.
  • Le collecteur et l'ETL bronze → argent → or.
### Exigence couverte EF-10, ENF-01, ENF-02, ENF-04 ### Épreuve servie EC05 · Data, ETL et BI ### Charge estimée 4 j.h ### Ce qu'on veut obtenir L'API sert les données du tableau de bord sur un jeu de démonstration figé. La zone or n'existe pas encore : les routes, les schémas de réponse, l'authentification et les codes d'erreur sont **définitifs** ; seule la source des valeurs est provisoire. Le jour où la base arrive, seuls les corps de fonctions de `dashboard/repository.py` changent — ni les routeurs, ni les schémas de réponse. Le tableau de bord qui consomme cette API est porté par #24. ### Lots - [x] **L1 — Socle.** Package `dashboard/`, modèles, jeu des sept sites, dépôt, gating par session, `GET /api/v1/sites` et `/sites/{id}`. - [x] **L2 — Vue Parc.** `GET /api/v1/parc/synthese` et `/parc/mesures`, profil horaire du parc, alertes. - [ ] **L3 — Vue Site.** `mesures`, `prevision`, `recommandations`, `tracabilite`. - [ ] **L4 — Vue Qualité et alertes.** `qualite/synthese`, `qualite/collecte`, `alertes`. ### Critères d'acceptation - [x] Le référentiel des sites et leur état courant sont servis, filtrés par autorisation. - [x] La vue Parc a ses routes : synthèse et courbe agrégée. - [ ] La vue Site a ses routes : série, prévision, recommandations, traçabilité. - [ ] La vue Qualité a ses routes : synthèse et journal de collecte. Les alertes sont exposées. - [x] Les réponses sont typées (Pydantic) et le schéma OpenAPI est généré sans erreur. - [x] Le jeu de fixtures est cohérent, et sa cohérence est tenue par des tests dédiés : la somme des consommations vaut le total du parc, un seul site est en dépassement, le compte d'alertes suit leur ventilation, l'état d'un site se déduit de ses propres chiffres. - [x] La source de données est derrière un seul module remplaçable ; brancher un accès base ne touchera ni les routeurs ni les schémas de réponse. - [x] Une route sans session rend 401 ; un identifiant de site inconnu rend 404, jamais 500 ni une liste vide. - [x] `ruff check`, `ruff format --check` et `mypy --strict` passent sur `services/api`. - [x] Chaque route a ses tests unitaires, cas nominal et cas d'erreur. - [x] `pytest` tourne hors ligne : aucune base, aucun conteneur, aucun réseau. - [ ] Le `README` de l'API liste les routes et explique comment lancer l'API sur le jeu de démonstration. ### Comment on le vérifie Tests pytest tests/unit pour l'API Commande bin/api (ou bin/api.ps1 sous Windows), sur le jeu de démonstration Preuve sortie de pytest et schéma OpenAPI généré, en commentaire de ce ticket ### À savoir **L'API exige PostgreSQL pour démarrer et pour authentifier**, même si le jeu de démonstration est en mémoire. C'est la conséquence assumée du choix « routes gatées dès maintenant » : `CurrentUser` va chercher l'utilisateur en base. Sans base, seul `/health` répond — `bin/api` le détecte et le dit avant de lancer, plutôt que de se figer. **La disponibilité moyenne du parc vaut 98,5 %**, pas 98,6 % comme l'affiche la maquette : c'est la moyenne de la colonne que la maquette montre elle-même. À corriger côté design (#53). **Le vocabulaire de sévérité est `normal` / `vigilance` / `alerte`**, partout. La maquette dit « 1 critique » à un endroit et « alerte » à un autre. **Les alertes du jeu portent l'origine `systeme`**, pas `source` : un dépassement prévisionnel et un taux d'imputation, c'est nous qui les produisons. Les alertes ingérées du flux amont (EF-05) viendront s'ajouter avec `origine: "source"`. ### Hors périmètre - Le tableau de bord — les trois écrans branchés sur l'API : #24. - La lecture réelle en zone or, dans PostgreSQL. - La table d'autorisation par site — ENF-02 complet. `dashboard/autorisation.py` en tient lieu, et rend aujourd'hui les sept sites à tout utilisateur authentifié. Ticket dédié à ouvrir. - L'appel au service d'inférence : les prévisions sont des fixtures. - Le moteur de règles : les recommandations sont des fixtures. - Le collecteur et l'ETL bronze → argent → or.
marvin self-assigned this 2026-09-02 14:37:34 +00:00
marvin added this to the EnerVision project 2026-09-02 14:37:34 +00:00
marvin changed title from [EF-10] - API REST - MOCK et test de donnée fictive to [EF-10][EF-11] API sur donn�es fictives et tableau de bord 2026-09-03 09:00:08 +00:00
marvin changed title from [EF-10][EF-11] API sur donn�es fictives et tableau de bord to [EF-10][EF-11] API sur données fictives et tableau de bord 2026-09-03 09:25:30 +00:00
gabriel added the due date 2026-09-09 2026-09-03 12:41:00 +00:00
gabriel changed title from [EF-10][EF-11] API sur données fictives et tableau de bord to [EF-10] API sur données fictives 2026-09-03 13:57:44 +00:00
Member

Corps re-encodé (mojibake corrigé). Le lot « tableau de bord » (ex-L5) et ses critères front sont retirés : ils partent dans #24. #94 se limite à l'API sur jeu de démonstration (EF-10). Label Kind/Front retiré.

Corps re-encodé (mojibake corrigé). Le lot « tableau de bord » (ex-L5) et ses critères front sont retirés : ils partent dans #24. #94 se limite à l'API sur jeu de démonstration (EF-10). Label Kind/Front retiré.
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
2026-09-09
Dependencies

No dependencies set

Reference
g2/enervision#94
No description provided.