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.
Modules Principaux
| Module | Description |
|---|---|
| Registre Social | Base de donnees unifiee des menages |
| Gestion Menages | Enregistrement, caracteristiques socio-economiques |
| Beneficiaires | Enrolement, documents, cycle de vie |
| Ciblage PMT | Calcul scores, seuils pauvrete, eligibilite |
| Programmes | Configuration, conditionnalites, suivi |
| Transferts Monetaires | Cycles paiement, payroll, reconciliation |
| GRM - Plaintes | Mecanisme de gestion des reclamations |
| M&E | Indicateurs DLI, rapports IFR, tableaux de bord |
| SIG - Cartographie | Visualisation geographique, analyse spatiale |
Architecture Technique
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
| Technologie | Version | Usage |
|---|---|---|
| React | 18.x | Framework UI |
| TypeScript | 5.x | Typage statique |
| TanStack Query | 5.x | Gestion des requetes API |
| Zustand | 4.x | State management |
| Tailwind CSS | 3.x | Framework CSS |
| Leaflet | 1.9 | Cartographie |
| Recharts | 2.x | Graphiques |
Backend
| Technologie | Version | Usage |
|---|---|---|
| PHP | 8.3 | Langage serveur |
| Symfony | 6.4 | Framework PHP |
| API Platform | 3.x | API REST automatique |
| Doctrine ORM | 2.x | Mapping objet-relationnel |
| LexikJWT | 2.x | Authentification JWT |
Base de donnees
| Technologie | Version | Usage |
|---|---|---|
| PostgreSQL | 15 | SGBD relationnel |
| PostGIS | 3.4 | Extension geospatiale |
Infrastructure
| Technologie | Version | Usage |
|---|---|---|
| Docker | 24.x | Conteneurisation |
| Nginx | 1.25 | Serveur web / Reverse proxy |
| Redis | 7 | Cache 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
- Le client accede au frontend via port 80 (ou 3000)
- Les requetes
/api/*sont proxifiees vers le backend (port 8000) - Nginx backend passe les requetes PHP a PHP-FPM
- PHP-FPM interroge PostgreSQL et Redis
- 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