Sprint 4 : decisions et mandats -- workflow complet + vote integration
Backend: 7 nouveaux endpoints (advance, assign, revoke, create-vote-session), services enrichis avec creation de sessions de vote, assignation de mandataire et revocation. 35 nouveaux tests (104 total). Frontend: store mandates, page cadrage decisions, detail mandats, composants DecisionWorkflow, DecisionCadrage, DecisionCard, MandateTimeline, MandateCard. Documentation mise a jour. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -89,38 +89,42 @@ Historique des versions proposees pour chaque item. Lors de l'acceptation d'une
|
||||
|
||||
### `decisions`
|
||||
|
||||
Processus decisionnels multi-etapes.
|
||||
Processus decisionnels multi-etapes. Le cycle de vie suit un ordre strict de statuts gere par le service `decision_service.advance_decision()`.
|
||||
|
||||
| Colonne | Type | Description |
|
||||
| ------------------- | ------------ | -------------------------------------------------------- |
|
||||
| id | UUID (PK) | Identifiant unique |
|
||||
| title | VARCHAR(256) | Titre de la decision |
|
||||
| description | TEXT | Description |
|
||||
| context | TEXT | Contexte additionnel |
|
||||
| decision_type | VARCHAR(64) | Type : runtime_upgrade, document_change, mandate_vote, custom |
|
||||
| context | TEXT | Contexte additionnel (cadrage) |
|
||||
| decision_type | VARCHAR(64) | Type : runtime_upgrade, document_change, mandate_vote, parameter_change, custom |
|
||||
| status | VARCHAR(32) | Statut : draft, qualification, review, voting, executed, closed |
|
||||
| voting_protocol_id | UUID (FK) | -> voting_protocols.id |
|
||||
| created_by_id | UUID (FK) | -> duniter_identities.id |
|
||||
| created_at | TIMESTAMPTZ | Date de creation |
|
||||
| updated_at | TIMESTAMPTZ | Date de derniere mise a jour |
|
||||
|
||||
**Workflow des statuts** : `draft` -> `qualification` -> `review` -> `voting` -> `executed` -> `closed`. La transition est geree par le service `advance_decision` qui complete l'etape active, active la suivante, et avance le statut global quand toutes les etapes sont terminees. La suppression n'est autorisee qu'en statut `draft`.
|
||||
|
||||
### `decision_steps`
|
||||
|
||||
Etapes d'un processus decisionnel.
|
||||
Etapes d'un processus decisionnel. Chaque etape est traitee sequentiellement selon `step_order`. Le service `advance_decision` complete l'etape `active` et active la prochaine `pending`.
|
||||
|
||||
| Colonne | Type | Description |
|
||||
| ---------------- | ------------ | -------------------------------------------------------- |
|
||||
| id | UUID (PK) | Identifiant unique |
|
||||
| decision_id | UUID (FK) | -> decisions.id |
|
||||
| step_order | INTEGER | Ordre de l'etape |
|
||||
| decision_id | UUID (FK) | -> decisions.id (cascade delete) |
|
||||
| step_order | INTEGER | Ordre de l'etape (0-indexed, determine la sequence) |
|
||||
| step_type | VARCHAR(32) | Type : qualification, review, vote, execution, reporting |
|
||||
| title | VARCHAR(256) | Titre de l'etape |
|
||||
| description | TEXT | Description |
|
||||
| status | VARCHAR(32) | Statut : pending, active, completed, skipped |
|
||||
| vote_session_id | UUID (FK) | -> vote_sessions.id (session de vote associee) |
|
||||
| vote_session_id | UUID (FK) | -> vote_sessions.id (renseigne via create-vote-session pour les etapes de type `vote`) |
|
||||
| outcome | TEXT | Resultat de l'etape |
|
||||
| created_at | TIMESTAMPTZ | Date de creation |
|
||||
|
||||
**Types d'etapes** : `qualification` (verification recevabilite), `review` (examen communautaire), `vote` (session de vote formelle), `execution` (mise en oeuvre), `reporting` (compte-rendu). Les etapes de type `vote` sont les seules a pouvoir avoir un `vote_session_id` renseigne.
|
||||
|
||||
### `vote_sessions`
|
||||
|
||||
Sessions de vote avec snapshot des tailles WoT et decompte en temps reel.
|
||||
@@ -170,7 +174,7 @@ Votes individuels avec preuve cryptographique.
|
||||
|
||||
### `mandates`
|
||||
|
||||
Mandats assignes a des membres.
|
||||
Mandats assignes a des membres. Le cycle de vie suit un ordre strict de statuts gere par le service `mandate_service.advance_mandate()`. La revocation (`POST /mandates/{id}/revoke`) permet de passer directement au statut terminal `revoked`.
|
||||
|
||||
| Colonne | Type | Description |
|
||||
| ------------- | ------------ | ------------------------------------------------------- |
|
||||
@@ -179,30 +183,34 @@ Mandats assignes a des membres.
|
||||
| description | TEXT | Description |
|
||||
| mandate_type | VARCHAR(64) | Type : techcomm, smith, custom |
|
||||
| status | VARCHAR(32) | Statut : draft, candidacy, voting, active, reporting, completed, revoked |
|
||||
| mandatee_id | UUID (FK) | -> duniter_identities.id (titulaire du mandat) |
|
||||
| decision_id | UUID (FK) | -> decisions.id (decision associee) |
|
||||
| starts_at | TIMESTAMPTZ | Date de debut |
|
||||
| ends_at | TIMESTAMPTZ | Date de fin |
|
||||
| mandatee_id | UUID (FK) | -> duniter_identities.id (titulaire du mandat, renseigne via `POST /mandates/{id}/assign`) |
|
||||
| decision_id | UUID (FK) | -> decisions.id (decision associee, optionnel) |
|
||||
| starts_at | TIMESTAMPTZ | Date de debut (renseignee lors de l'assignation) |
|
||||
| ends_at | TIMESTAMPTZ | Date de fin (renseignee lors de l'assignation) |
|
||||
| created_at | TIMESTAMPTZ | Date de creation |
|
||||
| updated_at | TIMESTAMPTZ | Date de derniere mise a jour |
|
||||
|
||||
**Workflow des statuts** : `draft` -> `candidacy` -> `voting` -> `active` -> `reporting` -> `completed`. Les statuts terminaux sont `completed` et `revoked`. La suppression n'est autorisee qu'en statut `draft`. La revocation est possible depuis les statuts `active` ou `reporting`.
|
||||
|
||||
### `mandate_steps`
|
||||
|
||||
Etapes du cycle de vie d'un mandat.
|
||||
Etapes du cycle de vie d'un mandat. Chaque etape est traitee sequentiellement selon `step_order`. Le service `advance_mandate` complete l'etape `active` et active la prochaine `pending`.
|
||||
|
||||
| Colonne | Type | Description |
|
||||
| ---------------- | ------------ | ------------------------------------------------------------- |
|
||||
| id | UUID (PK) | Identifiant unique |
|
||||
| mandate_id | UUID (FK) | -> mandates.id |
|
||||
| step_order | INTEGER | Ordre de l'etape |
|
||||
| mandate_id | UUID (FK) | -> mandates.id (cascade delete) |
|
||||
| step_order | INTEGER | Ordre de l'etape (0-indexed, determine la sequence) |
|
||||
| step_type | VARCHAR(32) | Type : formulation, candidacy, vote, assignment, reporting, completion, revocation |
|
||||
| title | VARCHAR(256) | Titre de l'etape |
|
||||
| description | TEXT | Description |
|
||||
| status | VARCHAR(32) | Statut : pending, active, completed, skipped |
|
||||
| vote_session_id | UUID (FK) | -> vote_sessions.id (session de vote associee) |
|
||||
| vote_session_id | UUID (FK) | -> vote_sessions.id (renseigne via create-vote-session pour les etapes de type `vote`) |
|
||||
| outcome | TEXT | Resultat de l'etape |
|
||||
| created_at | TIMESTAMPTZ | Date de creation |
|
||||
|
||||
**Types d'etapes** : `formulation` (definition du mandat), `candidacy` (depot des candidatures), `vote` (election par vote WoT), `assignment` (attribution au candidat elu), `reporting` (compte-rendu), `completion` (fin normale), `revocation` (fin anticipee). Les etapes de type `vote` sont les seules a pouvoir avoir un `vote_session_id` renseigne.
|
||||
|
||||
### `voting_protocols`
|
||||
|
||||
Protocoles de vote reutilisables.
|
||||
|
||||
Reference in New Issue
Block a user