documentation
Kohinos v3 Doc générée le commit 8d60b1904

Architecture

Kohinos est une application Symfony monolithique structurée par bounded contexts métier (Account, Flux, SEPA, SSA, HelloAsso, PayZen, Notification, Admin). Les contrôleurs sont fins, la logique métier vit dans des services injectés par DI.

Vue par couches

flowchart TB
  subgraph UI["UI"]
    Twig["Twig + Bootstrap 5"]
    Webpack["Webpack Encore
(entries par feature)"] SonataAdmin["Sonata Admin 4.x
(B-Office)"] ApiPlatform["API Platform 3.x"] end subgraph App["Application"] Controllers["Controllers (fins)"] Services["Services métier"] Commands["Commands console
(cron)"] Events["EventDispatcher
(effets de bord)"] Subs["Event Subscribers"] end subgraph Domain["Domaine"] Entities["Entities (Doctrine)"] Enums["PHP 8.1+ Enums"] Repos["Repositories
(find* uniquement)"] Strategies["Strategies
(SSA, Gateways)"] end subgraph Infra["Infrastructure"] Doctrine["Doctrine ORM 2.14"] Mailer["symfony/mailer"] Payum["Payum
(HelloAsso, PayZen)"] Sodium["libsodium
(signatures SEPA)"] end DB[("MariaDB")] UI --> Controllers Controllers --> Services Commands --> Services Services --> Repos Services --> Strategies Services --> Events Events --> Subs Subs --> Mailer Subs --> Sodium Repos --> Doctrine Doctrine --> DB Services --> Payum
Couches applicatives et flux de dépendances.

Bounded contexts métier

Carte des contextes — survolez un contexte pour isoler ses dépendances

HelloAsso / PayZen Webhooks · Payum Flux & Operation STI · pivot monétaire Account Adhérent · Prestataire · Comptoir SEPA Mandats · pain.008 · IBAN SSA Calculated · Proportional · Fixed Notification symfony/mailer · Twig email Admin (B-Office) Sonata · dashboards
Appel synchrone Événement (event dispatcher) Commande Symfony (async)
Tous les contextes financiers convergent vers Flux & Operation — le pivot monétaire.
ContexteResponsabilitéCode (indicatif)
Account Soldes, opérations, hiérarchie de comptes (Adhérent / Prestataire / Comptoir / Groupe / Siège). src/Entity/Account* · src/Service/Account*
Flux & Operation Pivot monétaire. STI (single table inheritance) sur Flux (Achat, Retrait, Change, Don, Cotisation, Transaction). src/Entity/Flux* · src/Entity/Operation*
SEPA Mandats UMR, prélèvements récurrents, génération XML ISO 20022 (pain.008), validation trésorier. src/Service/Sepa/* · src/Entity/SepaMandate · src/Entity/Recurring*
SSA Fonds SSA, stratégies de redistribution (Calculated / Proportional / FixedAmount), alertes. src/Service/Ssa/* · src/Entity/Solidoume*
HelloAsso / PayZen Encaissement en ligne, webhooks idempotents, gateway Payum. src/Service/Payment/* · src/Entity/HelloAsso · src/Entity/PendingPaymentData
Notification Email via symfony/mailer, services centralisés, templates Twig. src/Service/Notification/* · templates/themes/kohinos/email/
Admin (B-Office) Tableaux de bord Sonata, batch actions, dashboards trésorier. src/Admin/*

Cycle d'une opération financière

sequenceDiagram
    autonumber
    participant C as Controller
    participant S as Service métier
    participant EM as EntityManager
    participant DB as MariaDB
    participant Sub as Event Subscriber
    C->>S: requête métier (montant, source, cible)
    S->>EM: wrapInTransaction()
    EM->>DB: SELECT ... FOR UPDATE (lock pessimiste)
    DB-->>EM: account row locked
    S->>S: vérifie solde, signe l'Operation
    S->>EM: persist(Flux), persist(Operation), update Account.balance
    EM->>DB: COMMIT (atomique)
    EM-->>Sub: postFlush event
    Sub->>Sub: envoi email, hash chaînage, audit
    S-->>C: succès
    
Atomicité : lock pessimiste + Operation persistée dans la même transaction.

Patterns architecturaux clés

Arborescence haut-niveau

src/
├── Admin/          # Admins Sonata 4.x (B-Office)
├── Command/        # Commandes console (cron)
├── Controller/     # Contrôleurs fins
├── Entity/         # Entités Doctrine (attributs PHP 8)
├── EventSubscriber/
├── Form/
├── Repository/     # find* uniquement
├── Security/       # Voters, firewalls
├── Service/        # Logique métier (le cœur)
│   ├── Sepa/
│   ├── Ssa/
│   ├── Payment/
│   └── Notification/
└── Twig/

templates/themes/kohinos/   # Twig
assets/                     # Webpack Encore entries
config/                     # services.yaml, security.yaml, packages/
tests/                      # PHPUnit (Unit, Service, Functional)
doc/                        # Doc publique (install, dev guide)
docs/                       # Doc privée (brainstorm, notes IA, rapports)