Aller au contenu

Dictionnaire de données — audit outil d'analyse

Snapshot audit du 2026-08-06. Sources : Neon outil d'analyse (readonly) + Bricks prod (outcomes).

Sources

Source Rôle Accès Période fiable
Neon outil (projects, project_status_history, …) Funnel, AM, qualité, comité DATABASE_URL readonly 21/08/2025 → aujourd'hui
Bricks prod (properties) Retard / défaut / statut financier MCP user-bricks-prod-readonly Portefeuille publié (391 biens)
PostHog EU Usage UI / confiance À ré-auth Non audité dans cette passe
CRM / Espace Financement Haut de funnel, relances, appels Non accessible ici Trou connu

Tables pivots

projects (840)

Unité d'analyse centrale.

Champ Usage audit Limite
id Clé primaire
project_unique_id Jointures legacy / convergence
created_at Cohorte d'entrée ≠ inscription EF
status État courant (écrasé) Pas d'historique
account_manager_id AM courant → users.id Pas d'historique d'affectation
analyst_id Analyste assigné Idem
typologie Segmentation Enum métier
property_id_from_bricks Lien outcome 70 / 840 (8,3 %)

project_status_history (5 106)

Colonne vertébrale du funnel.

Champ Usage
project_id, status, changed_at Transitions et délais
changed_by Attribution humaine

Limite critique : changed_by est NULL sur 90,2 % des événements. Impossible d'attribuer les changements de statut à un AM via l'historique.

Méthode funnel : first-touch = MIN(changed_at) par (project_id, status). Un projet « touche » un statut s'il y est passé au moins une fois (≠ stock).

consolidated_data (836)

État courant des champs métier + provenance.

Champ Usage
colonnes financial_*, property_*, … Valeurs courantes
metadata_sources (jsonb) Source par champ (manual, workflow, pappers_api, …)

Limite critique : 1 ligne / projet, pas d'historique de valeurs. Les corrections écrasent l'état précédent.

section_versions (21 706)

Historique des sorties de workflows (extraction multi-méthodes).

committee_decisions (407)

Décision structurée : approved (152) / rejected (255).

credit_scoring_results (678)

Score et décision outil. À croiser avec le comité (alignement brut ~58 %).

project_analyst_positions (17)

Avis analyste structuré. Couverture trop faible pour une série temporelle.

convergence_runs / convergence_actions

Agrégats et HITL de convergence. Volume HITL encore bas (118 actions).

missing_documents (21 714)

17 478 pending sur 822 projets → signal très bruité.

users

Les noms peuvent contenir des espaces de fin. Toujours utiliser TRIM(name) pour un regroupement, et préférer les identifiants stables pour les jointures.

Jointures

projects.id
  ← project_status_history.project_id
  ← consolidated_data.project_id          (1:1)
  ← section_versions.project_id           (1:N)
  ← committee_decisions.project_id
  ← credit_scoring_results.project_id
  ← python_analysis_runs.project_id
  → users.id via account_manager_id / analyst_id
  → properties.id via property_id_from_bricks   (Bricks prod)

Regroupement de statuts (provisoire)

Étape analytique Statuts
Pré-analyse / porteur en_attente_porteur
Scan / prêt outil en_attente_scan, scan_pret, analyse_prete
Passation analyse en_attente_analyse
Comité en_attente_comite, retour_suite_comite
Décision refus refuse (+ committee_decisions.rejected)
Aval commercial valide, en_attente_signature, en_attente_publication, financement_programme, finance, running, cloture
Sortie abandonne

Attention : un statut refuse n'est pas toujours un refus métier (usage commercial documenté en comités). Préférer committee_decisions pour la décision de risque quand elle existe.

Biais d'entrée

65 % des projets ont analyse_prete comme premier statut historique. Le délai created_at → analyse_prete vaut donc souvent 0 et ne mesure pas le vrai goulot pré-analyse.

Pour le goulot porteur → prêt : utiliser en_attente_porteur → analyse_prete quand les deux existent (médiane 15,6 j en 2026).

Sources