DossierBJ Platform est une base de plateforme documentaire civique et économique. Le MVP, DossierBJ Core, aide à comprendre, préparer et suivre des démarches à partir de sources vérifiables. Le moteur documentaire prévu s'appelle CivicRAG.
DossierBJ est un assistant indépendant. Il ne remplace pas les plateformes officielles. Les informations critiques restent rattachées à des sources et doivent être revérifiées avant usage administratif.
Beta Core DossierBJ en mode frugal : monorepo pnpm, app web Next.js, recherche locale de démarches, cinq fiches partiellement sourcées, checklist personnalisée sauvegardée dans le navigateur, assistant CivicRAG keyword avec provider local par défaut et provider OpenAI optionnel, page sources à vérifier, revue éditoriale locale des claims, Digital Pulse, pilote AO Radar, OpenCivic Kit consommé par l'app et tests sans API payante.
Audit critique initial effectué : le dépôt démarre en mode mock sans API payante, AI_PROVIDER=mock est résolu explicitement, AI_PROVIDER=openai demande une clé explicite, et DATA_MODE=mock est testé sans DATABASE_URL.
Sprint Core concret ajouté : création d'entreprise, casier judiciaire, extrait RCCM, certificat d'identification personnelle et attestation de régularité fiscale foncière disposent maintenant de sources connectées, de statuts partially_verified, et d'une matrice "affirmation -> source". Les fiches service-public.bj incluent les coûts, délais, publics et pièces visibles au 2026-05-30.
PostgreSQL est optionnel mais fonctionnel : DATA_MODE=mock reste le défaut, tandis que DATA_MODE=postgres lit les procédures, sources, claims, opportunités AO Radar, chunks RAG et requêtes assistant depuis la base après migration et seed. Les notes de claims, brouillons source, requêtes assistant et audit logs donnent une vraie piste de contribution même si le corpus public de départ reste versionné dans Git.
Le dépôt est prêt pour contribution publique : licence MIT, guide de contribution, code de conduite, politique sécurité, templates GitHub, Dependabot et workflow CI mock/PostgreSQL.
- TypeScript strict
- Next.js App Router
- React
- Tailwind CSS
- pnpm workspace
- Zod
- Drizzle ORM avec PostgreSQL optionnel
- Vitest
- ESLint et Prettier
pnpm install
cp .env.example .env.local
pnpm devOuvrir ensuite http://localhost:3000.
pnpm dev
pnpm build
pnpm lint
pnpm typecheck
pnpm test
pnpm monitor:sources
pnpm validate:sources
pnpm test:postgres
pnpm test:e2e
pnpm test:e2e:postgres
pnpm db:reset:dev
pnpm db:seedpnpm test:postgres, pnpm test:e2e:postgres et pnpm db:reset:dev supposent une base de développement jetable dans DATABASE_URL.
Dernière vérification complète effectuée le 2026-05-30 en mode mock et PostgreSQL local :
pnpm format
pnpm test
pnpm typecheck
pnpm lint
pnpm validate:sources
pnpm monitor:sources
pnpm build
pnpm test:e2e
pnpm test:postgres
pnpm test:e2e:postgresRésultats observés :
- Tests unitaires/domaines : 56 tests passés, 2 tests ignorés volontairement.
- Tests PostgreSQL : 2 tests d'intégration passés sur la base locale de développement.
- Smoke e2e mock et PostgreSQL :
/api/health,/demarches,/demarches/creation-entreprise,/sources,/sources/claims,/sources/nouvelle,/sources/source-review-business-creation,/pulse,/ao-radar,/open-civic-kit,/api/assistant,/api/source-candidateset/api/claim-review-notesrépondent en200. - Provider OpenAI optionnel : chemin
AI_PROVIDER=openaitesté avecfetchsimulé, sans appel externe. - Build Next.js production : réussi avec 20 routes app générées, dont
/ao-radar,/pulse,/open-civic-kitet les deux API éditoriales. - Validation sources : 0 erreur, 0 avertissement.
- Moniteur sources : 4 services
service-public.bjcontrôlés, 0 changement détecté. - Captures navigateur intégrées prises depuis le serveur local en mode mock, avec contrôle responsive mobile sur les nouveaux écrans et correction du débordement horizontal de
/sources/claims.
Captures de référence :
apps/web Application Next.js mobile-first
packages/core Schémas domaine, recherche, checklists, sources, moniteur et helpers
packages/rag CivicRAG, retrievers, policies, providers local et OpenAI optionnel
packages/db Schéma Drizzle, migrations, seed et repositories mock/postgres
packages/ui OpenCivic Kit MVP consommé par l'app web
docs Vision, architecture, politiques et roadmap
/demarches: recherche keyword locale, filtres par catégorie, profil et statut./demarches/[slug]: fiche démarche avec besoin utilisateur, faits sourcés, registre de claims, points à vérifier, sources par pièce/étape, avertissements et checklist interactive./assistant: assistant CivicRAG keyword avec citations, confiance, informations manquantes et provider OpenAI optionnel./sources: mini back-office versionné pour les sources connectées, la validation et la couverture des claims./sources/[id]: détail de revue source avec checklist, historique, démarches liées et claims associés./sources/claims: cockpit éditorial pour prioriser les claims à revoir, noter localement et synchroniser en audit logs PostgreSQL quand disponible./sources/nouvelle: formulairelocalStorage+ API optionnelle pour préparer une source candidate sans auth, scraping ou DB obligatoire./methode-verification: méthode de revue humaine, citations et niveaux de confiance./pulse: métriques locales du corpus et liste des snapshotsservice-public.bjsurveillés./ao-radar: pilote appels d'offres avec source officiellegouv.bj, dates à revérifier et checklist de pré-soumission./open-civic-kit: manifest du package@dossierbj/uiréellement consommé par l'application./api/health: indique le mode actif et l'état DB./api/assistant: endpoint sourcé, local par défaut, compatibleAI_PROVIDER=openaisiOPENAI_API_KEYest fournie./api/source-candidateset/api/claim-review-notes: persistance éditoriale optionnelle via audit logs PostgreSQL.
Le mode par défaut ne dépend d'aucune API payante :
DATA_MODE="mock"
AI_PROVIDER="mock"
ENABLE_VECTOR_SEARCH="false"
PAYMENTS_ENABLED="false"
ENABLE_AUTH="false"Les pages et l'API /api/assistant utilisent le corpus seedé et conservent les réserves de vérification sur les informations sensibles.
AI_PROVIDER=mock reste le provider par défaut. Aucun appel IA payant n'est fait sans configuration explicite.
DATA_MODE=mock ne crée aucun client base de données et ne demande pas DATABASE_URL.
Pour activer une génération IA réelle tout en gardant le grounding CivicRAG :
AI_PROVIDER="openai"
OPENAI_API_KEY="sk-..."
OPENAI_MODEL="gpt-5.4-mini"L'adapter utilise l'API Responses avec sortie JSON structurée, refuse de répondre sans sources et recopie uniquement les citations déjà fournies par le retriever. Les tests couvrent ce chemin avec un fetch simulé ; la CI ne consomme jamais d'API externe.
Pour tester la persistance réelle :
DATA_MODE="postgres"
DATABASE_URL="postgresql://..."
AI_PROVIDER="mock"Commandes utiles :
pnpm db:generate
pnpm db:migrate
pnpm db:seed
pnpm db:reset:dev
pnpm test:postgres
pnpm test:e2e:postgresLe seed est idempotent et alimente les sources, documents, procédures, pièces, étapes, claims, références, chunks RAG, opportunités AO Radar et événements de revue. Les tests Postgres sont séparés du test standard pour préserver un démarrage sans base.
Le MVP ne scrape pas. Les sources sont ajoutées par revue humaine et gérées dans :
packages/core/src/seed/sourceRegistry.ts
La page /sources affiche cette file de revue, les sources exposées, les documents, la couverture des claims, l'état de validation et le workflow d'ingestion manuelle. Une source ne doit devenir vérifiée qu'après revue contrôlée, rattachement aux SourceReference, et tests mis à jour.
La page /sources/claims crée une file de travail éditoriale : priorité critique/haute/moyenne/basse, filtres par fiche/type/statut, notes locales, export JSON et synchronisation audit-log quand DATA_MODE=postgres. Elle ne modifie pas le corpus ; elle prépare la revue humaine avant édition des seeds.
La page /sources/nouvelle génère un brouillon local en JSON à partir d'un formulaire. Ce brouillon reste dans le navigateur et peut aussi être conservé en audit log PostgreSQL ; il ne rend aucune information officielle sans revue contrôlée.
Sources connectées :
- MonEntreprise.bj pour création d'entreprise, coûts/délais, pièces et certificats.
- Portail du Numérique pour le service casier judiciaire et l'extrait RCCM.
- Service-public.bj pour les fiches casier judiciaire, extrait RCCM, CIP et attestation de régularité fiscale foncière, avec extraction prudente du coût, délai, public cible, pièces et étapes principales le 2026-05-30.
- Gouv.bj pour le pilote AO Radar et les opportunités de marchés publics à revérifier.
Surveillance gratuite :
pnpm monitor:sourcesLa commande interroge l'API publique service-public.bj pour les services connectés et signale les changements de statut, frais, délais ou pièces.
Voir .env.example. Les clés réelles ne doivent jamais être committées. PostgreSQL, provider IA, paiements et auth sont prévus mais désactivés par défaut.
- Extraire les pièces par forme juridique pour la création d'entreprise.
- Étendre le moniteur source à plus de services officiels quand le corpus grandit.
- Ajouter de vrais tests navigateur quand le budget de dépendances Playwright est accepté.
- Enrichir CivicRAG avec un retrieval local indexé avant toute vector DB externe.
- Transformer AO Radar en ingestion contrôlée après revue juridique et commerciale.
- Les sources officielles connectées forment un corpus manuel prioritaire, pas une ingestion complète du pays.
- Les informations partiellement vérifiées doivent être revérifiées sur les plateformes officielles avant toute décision.
- Pas d'authentification, paiement, OCR, embeddings ou base distante obligatoire : ce sont des choix frugaux, pas des dépendances manquantes.
- Les claims sont explicites, persistés, résumés par couverture et revus dans un cockpit, mais le corpus public reste modifié par pull request.
- OpenCivic Kit est consommé en workspace ; sa publication npm reste une étape communautaire future.
- AO Radar est un pilote sourcé, pas encore une ingestion automatisée d'appels d'offres.
OpenCivic Kit expose déjà des helpers publics (cn, formatFcfa, verificationTone) consommés par l'app. Le corpus enrichi, les prompts critiques, workflows premium, scoring et analytics business restent propriétaires.
- Lire
CONTRIBUTING.mdavant d'ouvrir une pull request. - Utiliser les templates GitHub pour bugs, sources et demandes de fonctionnalité.
- Lancer
pnpm format,pnpm lint,pnpm typecheck,pnpm test,pnpm validate:sources,pnpm monitor:sources,pnpm buildetpnpm test:e2eavant publication. - Pour les changements de données PostgreSQL : lancer aussi
pnpm db:reset:dev,pnpm test:postgresetpnpm test:e2e:postgres. - Ne jamais ajouter de donnée personnelle, secret ou affirmation administrative non citée.
Pitch court : DossierBJ est un MVP civictech open source pour préparer des démarches au Bénin avec sources, citations, checklists, assistant CivicRAG sourcé, Digital Pulse et pilote AO Radar, sans API payante obligatoire.
Lien GitHub : https://github.com/chabelbossa/bj
docs/PROJECT_BRIEF.mddocs/ARCHITECTURE.mddocs/ROADMAP.mddocs/RAG_POLICY.mddocs/DEV_SETUP.md





