Aller au contenu principal

Architecture Technique

Cette page décrit l'architecture fonctionnelle et technique de PCH-SIG.

Architecture Fonctionnelle

Le diagramme ci-dessous presente les principaux modules fonctionnels de PCH-SIG et leurs interactions.

Architecture Fonctionnelle PCH-SIG

Modules Principaux

ModuleDescription
Registre SocialBase de donnees unifiee des menages
Gestion MenagesEnregistrement, caracteristiques socio-economiques
BeneficiairesEnrolement, documents, cycle de vie
Ciblage PMTCalcul scores, seuils pauvrete, eligibilite
ProgrammesConfiguration, conditionnalites, suivi
Transferts MonetairesCycles paiement, payroll, reconciliation
GRM - PlaintesMecanisme de gestion des reclamations
M&EIndicateurs DLI, rapports IFR, tableaux de bord
SIG - CartographieVisualisation geographique, analyse spatiale

Architecture Technique

Architecture Technique PCH-SIG

Vue d'ensemble

PCH-SIG suit une architecture 3-tiers classique :

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│ Presentation │ │ Metier │ │ Donnees │
│ │ │ │ │ │
│ React + Nginx │────▶│ Symfony API │────▶│ PostgreSQL │
│ │ │ │ │ + PostGIS │
└─────────────────┘ └─────────────────┘ └─────────────────┘


┌─────────────┐
│ Redis │
│ (Cache) │
└─────────────┘

Stack Technique

Frontend

TechnologieVersionUsage
React18.xFramework UI
TypeScript5.xTypage statique
TanStack Query5.xGestion des requetes API
Zustand4.xState management
Tailwind CSS3.xFramework CSS
Leaflet1.9Cartographie
Recharts2.xGraphiques

Backend

TechnologieVersionUsage
PHP8.3Langage serveur
Symfony6.4Framework PHP
API Platform3.xAPI REST automatique
Doctrine ORM2.xMapping objet-relationnel
LexikJWT2.xAuthentification JWT

Base de donnees

TechnologieVersionUsage
PostgreSQL15SGBD relationnel
PostGIS3.4Extension geospatiale

Infrastructure

TechnologieVersionUsage
Docker24.xConteneurisation
Nginx1.25Serveur web / Reverse proxy
Redis7Cache et sessions

Architecture des Conteneurs

┌─────────────────────────────────────────────────────────────┐
│ Reseau Docker │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ pch_frontend│ │pch_nginx_ │ │ pch_backend │ │
│ │ (Nginx) │───▶│ backend │───▶│ (PHP-FPM) │ │
│ │ :80 │ │ :8000 │ │ :9000 │ │
│ └─────────────┘ └─────────────┘ └──────┬──────┘ │
│ │ │
│ ┌─────────────────────────┼─────────┐ │
│ │ │ │ │
│ ┌─────▼─────┐ ┌───────▼───────┐ │ │
│ │pch_postgres│ │ pch_redis │ │ │
│ │ :5432 │ │ :6379 │ │ │
│ └───────────┘ └───────────────┘ │ │
│ │ │
└─────────────────────────────────────────────────────────────┘

Flux de requetes

  1. Le client accede au frontend via port 80 (ou 3000)
  2. Les requetes /api/* sont proxifiees vers le backend (port 8000)
  3. Nginx backend passe les requetes PHP a PHP-FPM
  4. PHP-FPM interroge PostgreSQL et Redis
  5. La reponse remonte au client

Architecture du Backend

Structure des dossiers

backend/
├── bin/ # Scripts console
├── config/ # Configuration Symfony
│ ├── packages/ # Config des bundles
│ └── routes/ # Routes
├── migrations/ # Migrations Doctrine
├── public/ # Point d'entree web
├── src/
│ ├── Controller/ # Controleurs API
│ ├── Entity/ # Entites Doctrine
│ ├── Repository/ # Repositories
│ ├── Service/ # Services metier
│ ├── Security/ # Voters, Authenticators
│ └── EventListener/ # Listeners
└── var/ # Cache et logs

Entites principales

┌───────────────┐     ┌───────────────┐     ┌───────────────┐
│ Menage │────▶│ ChefMenage │ │ Logement │
│ │ │ │ │ │
│ - codeMenage │ │ - nomComplet │ │ - typeLogement│
│ - tailleMenage│ │ - telephone │ │ - nbPieces │
│ - scorePmt │ │ - age │ │ - sourceEau │
└───────┬───────┘ └───────────────┘ └───────────────┘

│ 1:N

┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ MembreMenage │ │ Beneficiaire │────▶│ Paiement │
│ │ │ │ │ │
│ - nomComplet │ │ - actif │ │ - montant │
│ - lienParente │ │ - modePaiement│ │ - statut │
└───────────────┘ └───────┬───────┘ └───────────────┘

│ N:1

┌───────────────┐
│ Cycle │
│ │
│ - nom │
│ - statut │
│ - montantTotal│
└───────────────┘

Architecture du Frontend

Structure des dossiers

frontend/
├── public/ # Assets statiques
├── src/
│ ├── components/ # Composants reutilisables
│ ├── layouts/ # Layouts (MainLayout)
│ ├── pages/ # Pages par module
│ │ ├── menages/
│ │ ├── beneficiaires/
│ │ ├── paiements/
│ │ └── ...
│ ├── services/ # API client (axios)
│ ├── stores/ # Zustand stores
│ ├── utils/ # Utilitaires
│ └── App.tsx # Point d'entree
└── package.json

Flux de donnees

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ Pages │───▶│ Stores │───▶│ Services │
│ │ │ (Zustand) │ │ (API) │
└─────────────┘ └─────────────┘ └──────┬──────┘
│ │
│ ▼
│ ┌─────────────┐
└──────────────────────────────▶│ Backend │
TanStack Query │ API │
└─────────────┘

Securite

Authentification

  • JWT (JSON Web Tokens) via LexikJWTAuthenticationBundle
  • Token d'acces (1 heure) + Refresh token (7 jours)
  • Stockage du token en localStorage

Autorisation

  • Permissions granulaires format module.action
  • Voters Symfony pour la logique d'autorisation
  • Verification cote frontend et backend

Protection des donnees

  • Chiffrement HTTPS en production
  • Mots de passe hashes avec bcrypt
  • Protection CSRF sur les formulaires
  • Validation des entrees

Scalabilite

Horizontale

  • Frontend : CDN ou plusieurs instances Nginx
  • Backend : Load balancer + plusieurs PHP-FPM
  • Base de donnees : Read replicas PostgreSQL

Verticale

  • Augmentation des ressources CPU/RAM
  • Optimisation des requetes SQL
  • Mise en cache Redis

Prochaines etapes