Transaction Matcher : trancher les décisions de modélisation ouvertes #30

Closed
opened 2026-07-04 12:11:11 +00:00 by momsse · 1 comment
Owner

Migré depuis viziertronic/octant#79 — ouvert le 2026-06-26 par @momsse.

Trancher les décisions de modélisation laissées ouvertes dans le plan avant d'attaquer l'implémentation — elles conditionnent la forme des agrégats et du câblage.

À décider (cf. section « Décisions & questions ouvertes » du plan)

  1. Agrégat SupportingDocument : commandes sur BankTransaction (modèle actuel, événements SupportingDocumentAttached/Removed inférés) ou agrégat dédié côté Banking ? Quels événements réels ?
  2. Appels systèmes externes : garder l'appel BankApi/PartyDocumentApi implicite dans les commandes d'agrégat, ou ajouter une commande de contexte dédiée to <ExternalSystem> (pattern BeginAuthentication) ?
  3. Signaux d'horloge : external event (NewYearReached/MidnightReached/Hourly) ou acteur Scheduler invoquant les commandes (cf. octant.estorm) ?
  4. Acteurs : « User » = un seul acteur, ou bien AccountOwner / DocumentManager / Reviewer distincts ?
  5. Hotspot « matching abortion » : gère-t-on l'annulation d'un match en cours ?
  6. Champs (fields) des événements : valider/compléter les schémas esquissés.

Référence : docs/event-storming/transaction-matcher.md + le modèle transaction-matcher.estorm.

> _Migré depuis [viziertronic/octant#79](https://github.com/viziertronic/octant/issues/79) — ouvert le 2026-06-26 par @momsse._ Trancher les décisions de modélisation laissées ouvertes dans le plan **avant** d'attaquer l'implémentation — elles conditionnent la forme des agrégats et du câblage. ## À décider (cf. section « Décisions & questions ouvertes » du plan) 1. **Agrégat `SupportingDocument`** : commandes sur `BankTransaction` (modèle actuel, événements `SupportingDocumentAttached/Removed` inférés) **ou** agrégat dédié côté Banking ? Quels événements réels ? 2. **Appels systèmes externes** : garder l'appel `BankApi`/`PartyDocumentApi` implicite dans les commandes d'agrégat, ou ajouter une commande de contexte dédiée `to <ExternalSystem>` (pattern `BeginAuthentication`) ? 3. **Signaux d'horloge** : `external event` (NewYearReached/MidnightReached/Hourly) **ou** acteur `Scheduler` invoquant les commandes (cf. `octant.estorm`) ? 4. **Acteurs** : « User » = un seul acteur, ou bien `AccountOwner` / `DocumentManager` / `Reviewer` distincts ? 5. **Hotspot « matching abortion »** : gère-t-on l'annulation d'un match en cours ? 6. Champs (`fields`) des événements : valider/compléter les schémas esquissés. Référence : [`docs/event-storming/transaction-matcher.md`](../blob/main/docs/event-storming/transaction-matcher.md) + le modèle [`transaction-matcher.estorm`](../blob/main/docs/event-storming/transaction-matcher.estorm).
Author
Owner

@momsse — 2026-06-26 (commentaire migré) :

Décisions tranchées :

  1. SupportingDocumentvalue object porté par l'agrégat BankTransaction (pas d'agrégat dédié, pas de stream séparé). Les commandes AddSupportingDocument / RemoveSupportingDocument mutent ce VO et émettent SupportingDocumentAttached / SupportingDocumentRemoved ; le read model SupportingDocuments reste une projection des transactions porteuses.
  2. Horlogesexternal event (NewYearReached / MidnightReached / Hourly) déclenchant des policies (déjà ainsi dans le .estorm).
  3. Acteurs → 3 rôles distincts : AccountOwner (Banking), DocumentManager (Documents), Reviewer (Reconciliation) (déjà ainsi).
  4. Matching abortion → reporté ; hotspot conservé sur MatchCandidateUpdated.

Défauts pris d'office : appels externes implicites dans la commande d'agrégat + externalsystem déclaré ; champs des events affinés à l'implémentation.

> _@momsse — 2026-06-26 (commentaire migré) :_ Décisions tranchées : 1. **SupportingDocument** → **value object** porté par l'agrégat `BankTransaction` (pas d'agrégat dédié, pas de stream séparé). Les commandes `AddSupportingDocument` / `RemoveSupportingDocument` mutent ce VO et émettent `SupportingDocumentAttached` / `SupportingDocumentRemoved` ; le read model `SupportingDocuments` reste une projection des transactions porteuses. 2. **Horloges** → `external event` (`NewYearReached` / `MidnightReached` / `Hourly`) déclenchant des policies (déjà ainsi dans le `.estorm`). 3. **Acteurs** → 3 rôles distincts : `AccountOwner` (Banking), `DocumentManager` (Documents), `Reviewer` (Reconciliation) (déjà ainsi). 4. **Matching abortion** → reporté ; hotspot conservé sur `MatchCandidateUpdated`. Défauts pris d'office : appels externes implicites dans la commande d'agrégat + `externalsystem` déclaré ; champs des events affinés à l'implémentation.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
momsse/octant#30
No description provided.