Site public
Le site public (page d'accueil, pages « À propos », actualités, réclamation) est servi par la même application que le SIG, sur bemba.ucp-pch.org. Cette page décrit ce que l'administrateur doit savoir : d'où viennent les chiffres, comment fonctionne la newsletter, comment créer les pages légales et ce que les endpoints publics exposent.
Chiffres vivants
La section « Notre impact » de l'accueil lit GET /api/public/statistiques (anonyme) :
| Champ | Calcul |
|---|---|
menagesEnregistres | Tous les ménages du registre, tous projets confondus, archivés compris |
menagesBeneficiaires | Ménages ayant au moins un enrôlement actif |
plaintesRecues, plaintesResolues, tauxResolution | Plaintes, résolues = statuts resolue, resolu, fermee |
dateCalcul | Horodatage du calcul |
La réponse est mise en cache 15 minutes dans le pool cache.app (Redis en production). Après un changement de code ou de données à répercuter immédiatement :
docker exec pch_backend su -s /bin/sh www-data -c 'cd /app && php bin/console cache:pool:clear cache.app'
- Compter tous les projets. En production, l'ensemble du registre appartient au PRSSB, projet archivé ; un filtre sur les projets actifs afficherait des zéros.
- Aucun agrégat sur les paiements. Ni montant ni nombre de paiements ni calendrier : un chiffre rafraîchi révélerait les dates de transfert. Décision du 28 septembre 2026.
Newsletter
Inscription en double opt-in, table newsletter_abonnes (migration Version20260925_NewsletterAbonnes).
| Étape | Mécanisme |
|---|---|
POST /api/public/newsletter | Enregistre l'adresse en en_attente (ou la réactive) et dépose un message Messenger ; la réponse est identique quelle que soit l'adresse |
Worker messenger:consume async | Envoie l'e-mail de confirmation (fr, pt, en, cr) via le SMTP du SIG ; nouvelles tentatives en cas d'échec |
GET/POST /api/public/newsletter/confirmer/{token} | Passe l'abonné en confirme |
GET/POST /api/public/newsletter/desinscrire/{token} | Passe l'abonné en desinscrit |
GET /api/newsletter/abonnes (permission admin.settings) | Liste des confirmés et effectifs ; ?format=csv pour l'outil d'envoi |
Un renvoi de confirmation n'est possible qu'après 10 minutes. Les liens utilisent l'URL du frontend avec le /#/ du HashRouter.
L'envoi passe par le worker, donc la requête du visiteur n'attend jamais le serveur SMTP. Vérifier que le worker tourne dans le conteneur (ps aux | grep messenger:consume) et que le port 587 sortant est ouvert. Sur preprod, un premier test avait échoué sur ce point.
Pages légales
Deux contenus CMS de type page, slugs politica-de-privacidade et termos-de-utilizacao, en pt/fr/en. Ils sont créés et publiés par une commande idempotente :
docker exec pch_backend su -s /bin/sh www-data -c 'cd /app && php bin/console app:site-public:pages-legales'
# --forcer : remplace le texte d'une page existante par la version de référence
Le texte se modifie ensuite dans le back-office CMS. Le pied de page de l'accueil pointe sur ces slugs. Le texte initial doit être validé par l'UCP.
CMS public : ce qui est exposé
GET /api/cms/public/articles,/pages,/categories,/{slug}: contenus publiés seulement. L'auteur est réduit à son nom et prénom ; ni e-mail ni identifiant, ni relecteur.GET /api/cms/images/{path}: image à la une, anonyme uniquement pour un contenu publié ; 404 sinon.- Un lecteur en créole reçoit la version portugaise (le CMS n'a pas de colonne créole).
Réclamation publique
Le formulaire /#/reclamation transmet toujours la réclamation à KoboToolbox (décision de septembre 2026 : ne pas créer directement une plainte dans le SIG). Voir PublicReclamationController.
Ce qui n'est pas encore fait
Calendrier de paiement (abandonné pour raison de sécurité), carte de couverture, données ouvertes, colonnes créole du CMS, numéro WhatsApp et ligne verte en dur dans le code, photos réelles. Le benchmark et la cible sont dans docs/SITE_PUBLIC_BENCHMARK.md du dépôt.