Cartes de provenance V2

portfolio-tracker · logique métier des JSON d'analyse

Légende

factual — affirmation sourcée (source_entry_refs) judgment — appréciation de l'agent derived — calculé depuis d'autres champs source / dimension MVDD (couche 3) gap / finding à trancher

Arête pleine = grounding / dérivation · ==> = grounding délégué (jugement adossé à un frère factuel) · pointillée = ancre base-rate (règle 2).

research_memo — base NEUTRE (Q2 : aucun verdict) · étapes B3–B8

Tête de chaîne : sa neutralité et son grounding conditionnent bull/bear/synthèse. Findings #1-#3 intégrés au contrat le 2026-08-19 (spec §8.0 / §7) — les blocs concernés sont désormais fondés.

Vue d'ensemble

flowchart TB
  S1[(S·business)]:::src
  S2[(S·financials)]:::src
  S3[(S·valorisation + prix)]:::src
  Q1[(Q·positionnement)]:::src
  Q2[(Q·marché)]:::src
  Q3[(Q·produits)]:::src
  QR[(Q·risques)]:::src
  QM[(Q·management / gouvernance
✓ ajouté §7 · #1)]:::src S1 & Q3 --> BM[business_model]:::blk Q1 --> MO[moat]:::blk S2 --> FI[financials]:::blk QM --> MA[management]:::blk Q2 & Q1 --> IN[industry]:::blk S2 & S3 --> VA[valuation]:::blk QR --> UB[incertitudes_bloquantes]:::blk BM & MO & FI & MA & IN & VA & UB --> MEMO[[research_memo · posture=NEUTRE
AUCUN verdict_recherche]]:::out classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef blk fill:#1b2340,stroke:#3d5afe,color:#dfe6ff; classDef gap fill:#3a1414,stroke:#ff5252,color:#ffd6d6; classDef out fill:#12301c,stroke:#57d977,color:#d7f5dd;

B3 · business_model

flowchart LR
  KEbm[(KE business / produits)]:::src
  KEf[(KE financials · A)]:::src
  desc([description]):::fact
  dr([drivers_revenus]):::fact
  rec([recurrence_pct]):::fact
  ue[unit_economics]:::der
  refs>source_entry_refs]:::ref
  KEbm --> desc & dr & rec
  KEf --> ue
  desc & dr & rec --- refs
  classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee;
  classDef fact fill:#12301c,stroke:#57d977,color:#d7f5dd;
  classDef der fill:#122238,stroke:#4a9eff,color:#d9e8ff;
  classDef ref fill:#0b0d12,stroke:#7d8798,color:#9aa3b2,stroke-dasharray:3;
    

B4 · moat — motif « grounding délégué »

flowchart LR
  KEc[(KE concurrence / moat · B+)]:::src
  preuve([preuves.fait]):::fact
  refs>preuves.source_entry_refs]:::ref
  typ{{type}}:::judg
  sco{{score}}:::judg
  tre{{trend}}:::judg
  dur{{durabilite_ans}}:::judg
  KEbr[(pattern_library · base-rate)]:::src
  brm([durabilite_ans.base_rate
✓ ajouté #2]):::fact KEc --> preuve preuve --- refs preuve ==> typ & sco & tre & dur KEbr --> brm brm -. ancre R2 .-> dur classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef fact fill:#12301c,stroke:#57d977,color:#d7f5dd; classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7; classDef gap fill:#3a1414,stroke:#ff5252,color:#ffd6d6; classDef ref fill:#0b0d12,stroke:#7d8798,color:#9aa3b2,stroke-dasharray:3;

B5 · financials — factuel → interprétations dérivées

flowchart LR
  KEf[(KE EDGAR / FMP · Tier A)]:::src
  roic([roic_pct]):::fact
  fcf([fcf_conversion_pct]):::fact
  capex([intensite_capex_pct]):::fact
  lev([dette_nette_ebitda]):::fact
  acc[earnings_quality.accruals_flag]:::der
  wacc[wacc_estime_pct]:::der
  rvw[roic_vs_wacc]:::der
  rt5[roic_trend_5y]:::der
  eqs{{earnings_quality.score}}:::judg
  KEf --> roic & fcf & capex & lev & acc & wacc & rt5
  roic & wacc --> rvw
  acc ==> eqs
  classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee;
  classDef fact fill:#12301c,stroke:#57d977,color:#d7f5dd;
  classDef der fill:#122238,stroke:#4a9eff,color:#d9e8ff;
  classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7;
    

B6 · management — finding #1 résolu (source_entry_refs + dimension MVDD)

flowchart LR
  D3[(DEF 14A proxy · edgar · A-)]:::src
  refs>management.source_entry_refs
✓ ajouté #1]:::ref ma{{scorecard.ma}}:::judg bb{{scorecard.buybacks}}:::judg inc([incitations]):::fact skin([skin_in_game_pct]):::fact cand{{candeur}}:::judg sco{{score}}:::judg D3 --> inc & skin inc & skin --- refs inc & skin ==> ma & bb & cand ma & bb & cand ==> sco classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7; classDef fact fill:#12301c,stroke:#57d977,color:#d7f5dd; classDef ref fill:#0b0d12,stroke:#7d8798,color:#9aa3b2,stroke-dasharray:3;

B7 · industry

flowchart LR
  KEm[(KE marché · B+)]:::src
  KEp[(KE pairs · B+)]:::src
  s5{{structure_5forces}}:::judg
  crh([croissance_marche_historique_pct]):::fact
  crp{{croissance_marche_prospective.taux_pct}}:::judg
  brp([...prospective.base_rate
✓ ajouté #3]):::fact KEb2[(pattern_library)]:::src cyc{{cyclicite}}:::judg dv{{disruption_vectors}}:::judg pos{{position_vs_pairs}}:::judg refs>source_entry_refs]:::ref KEm --> crh KEb2 --> brp brp -. ancre R2 .-> crp crh --> crp KEm ==> s5 & cyc & dv KEp ==> pos crh --- refs classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7; classDef gap fill:#3a1414,stroke:#ff5252,color:#ffd6d6; classDef ref fill:#0b0d12,stroke:#7d8798,color:#9aa3b2,stroke-dasharray:3;

B8 · valuation — le sous-graphe le plus riche

flowchart LR
  KEf[(KE financials · A)]:::src
  KEp[(KE prix marché · A)]:::src
  KEb[(corpus / pattern_library
base-rate · B+)]:::src KEm[(KE moat · B+)]:::src cro{{drivers.croissance · hypothèse}}:::judg mfcf{{drivers.marge_fcf · hypothèse}}:::judg prix([prix_actuel]):::fact brt([base_rate_anchor.taux_base_pct]):::fact mult([relatif.multiple]):::fact dcf[dcf_scenarios]:::der iv[iv_range]:::der epv[epv.valeur_rentabilite]:::der rdc[reverse_dcf.croissance_implicite]:::der rdv[reverse_dcf.verdict]:::der mos["marge_securite_base_pct · indicateur #3 (A3)"]:::der KEf --> dcf & epv KEp --> prix KEb --> brt cro & mfcf --> dcf dcf --> iv prix & iv --> mos prix --> rdc --> rdv brt --> rdv brt -. ancre R2 .-> cro brt -. ancre R2 .-> dcf KEm --> epvn{{epv.note}}:::judg mult --> rh[relatif.vs_historique]:::der classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef fact fill:#12301c,stroke:#57d977,color:#d7f5dd; classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7; classDef der fill:#122238,stroke:#4a9eff,color:#d9e8ff;

Incertitudes — transverses, moteur Q4/Q5

flowchart LR
  ALL[/tous les blocs/]:::blk
  ub{{incertitudes_bloquantes
question · impact · statut}}:::judg ui{{incertitudes_investissables}}:::judg ALL --> ub & ui ub -->|statut=non_resolvable ET décisif| ESC[boucle Q5 / escalade Q4 · §8.3]:::out classDef blk fill:#1b2340,stroke:#3d5afe,color:#dfe6ff; classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7; classDef out fill:#12301c,stroke:#57d977,color:#d7f5dd;

Couche 3 — corpus illustratif NVDA — ce que la base *devra* contenir

Illustratif. Les tables V2 (knowledge_entries, knowledge_documents) ne sont pas encore créées en DB (migrations arrêtées à la V1). Ces entrées montrent ce que la migration 023 + l'ingestion produiraient pour NVDA — et donc d'où chaque champ du JSON est déduit. Quand on bâtira le lot « fondation données », cette vue affichera de vraies lignes.

Chaîne complète document → knowledge_entry (content NL + structured + tier) → champ JSON → refs pour un extrait représentatif :

flowchart LR
  D1[(10-K FY2025 · edgar · A)]:::doc
  D4[(web_search · CUDA & parts de marché)]:::doc
  D3[(DEF 14A proxy 2025 · edgar)]:::doc
  DK[(corpus / pattern_library)]:::doc
  MK[(yfinance · marché)]:::doc
  D1 --> E20(["E20 · roic=60 · A"]):::fact
  D1 --> E21(["E21 · fcf_conv=90 · A"]):::fact
  D4 --> E10(["E10 · CUDA 5M dev · B+"]):::fact
  D4 --> E11(["E11 · part GPU datacenter ~90 · B"]):::fact
  DK --> E42(["E42 · base-rate=15 · B+"]):::fact
  MK --> E40(["E40 · prix_actuel · A"]):::fact
  E20 --> F1["financials.roic_pct"]:::field
  E21 --> F2["financials.fcf_conversion_pct"]:::field
  E10 & E11 ==> F3["moat.trend / type / score"]:::field
  E40 --> F4["marge_securite · reverse_dcf"]:::field
  E42 -. ancre R2 .-> F4
  D3 --> E12(["E12 · skin-in-game & buybacks · A-"]):::fact
  E12 --> MGok["management.* — grounded · #1 résolu"]:::field
  classDef doc fill:#20242e,stroke:#7d8798,color:#e7e9ee;
  classDef docgap fill:#2a1a1a,stroke:#c0554f,color:#f0c8c8,stroke-dasharray:4;
  classDef fact fill:#12301c,stroke:#57d977,color:#d7f5dd;
  classDef field fill:#122238,stroke:#4a9eff,color:#d9e8ff;
  classDef gap fill:#3a1414,stroke:#ff5252,color:#ffd6d6;
    

Le corpus complet (19 entrées) qui alimente les 7 blocs de research_memo. Colonne « → champs » = ce que l'agent recopie/synthétise et cite dans source_entry_refs :

identry_typesource · tiercontent (langage naturel)content_structured→ champs nourris
E1fact_qualitative10-K · A-4 segments ; Data Center ~88% du CA FY2025{data_center_pct:88}business_model.description · .drivers_revenus
E2fact_financial10-K · APart récurrente (soft + networking) ~15%{recurring_pct:15}business_model.recurrence_pct
E3fact_financial10-K · AMarge brute ~75% FY2025{gross_margin:75}business_model.unit_economics (derived)
E10fact_qualitativeweb_search · B+Écosystème CUDA ~5M dev 2025 (vs ~3M 2022) → coûts de bascule{dev_2025:5e6, dev_2022:3e6}moat.preuves[0] · moat.trend · moat.type
E11fact_qualitativeweb_search · BPart GPU datacenter ~90% en 2025{gpu_dc_share:90}moat.preuves[1] · industry.position_vs_pairs
E20fact_financial10-K · AROIC FY2025 ~60% (NOPAT / capital investi){metric:"ROIC", value:60, period:"FY-2025"}financials.roic_pct
E21fact_financial10-K · AConversion FCF ~90%{fcf_conversion:90}financials.fcf_conversion_pct
E22fact_financial10-K · ATrésorerie nette ; dette nette / EBITDA ~ -0.5x{net_debt_ebitda:-0.5}financials.levier
E23fact_financial10-K · AIntensité CapEx ~3% du CA{capex_pct:3}financials.intensite_capex_pct
E24fact_financial10-K · AAccruals faibles → qualité des résultats élevée{accruals_flag:false}financials.earnings_quality
E30fact_qualitativeweb_search · B+Marché accélérateurs IA datacenter ~150 Md$ 2025, +40%/an{market_bn:150, growth_pct:40}industry.croissance_marche_pct ⚠ prospectif → base-rate (#3)
E31fact_qualitativeweb_search · BConcurrents : AMD MI300 · ASIC (Google TPU, AWS Trainium){competitors:["AMD","TPU","Trainium"]}industry.disruption_vectors · position_vs_pairs
E40fact_financialyfinance · APrix actuel = cours de clôture du jour{price:…, ts:…}valuation.prix_actuel (→ tout le bloc dérivé)
E41fact_financialFMP · AFCF normalisé de base pour le DCF{fcf_ttm:…}valuation.dcf_scenarios (derived) · epv
E42analysispattern_library · B+Base-rate : ~15% des méga-caps tech maintiennent >30% croissance sur 5 ans{reference_class:"megacap tech >30% 5y", taux:15}valuation.base_rate_anchor (ancre R2)
E43fact_financialFMP · AEV/FCF ~40x — prime vs historique{ev_fcf:40}valuation.relatif
E50riskweb_search · BContrôles export Chine : risque ~20-25% du CA datacenter{impact_pct:22}incertitudes_bloquantes[0] · risque lié
E60llm_memorymodèle · 0.40⚠ [mémoire modèle, cutoff 2025-08] estimation non sourcée — requires_human_review=true{note:"à confirmer"}filet de secours si aucune entrée (badge « à vérifier »)
E12fact_managementDEF 14A · A-Insiders ~4% du capital · buybacks opportunistes · pas de dilution{skin_in_game_pct:4, buybacks:"opportunistic"}management.incitations · skin_in_game_pct · scorecard (#1 résolu)

Deux leçons : (1) l'agent ne « déduit » rien du néant — il recopie/synthétise le content_structured des entrées et cite leurs id ; (2) le trou management (finding #1) est désormais résolu au contrat — ajout de fact_management + management.source_entry_refs + dimension MVDD §7 → l'entrée E12 (DEF 14A) nourrit le bloc, plus de champ orphelin.

bull_case / bear_case — étape B11 · jugement adversarial

Bascule de nature : là où research_memo était surtout factual/derived, le bull/bear est surtout judgment — c'est la frontière faits (couche cumulative) / jugement (couche contestée) de la Partie C. Deux garde-fous encodés : règle 2 (toute probabilité/prévision porte une ancre base-rate) et règle 6 (variant_perception obligatoire : pas d'edge ⇒ pas de thèse).

Architecture adversariale — Q3 isolation · Q4 une passe · A6 divergence

flowchart TB
  MEMO[[research_memo NEUTRE · base grounded]]:::out
  KE[(knowledge_entries partagées)]:::src
  MEMO --> BULL & BEAR
  KE --> BULL & BEAR
  BULL[bull-agent · contexte isolé]:::blk
  BEAR[bear-agent · contexte isolé
mandat recherche divergente A6]:::blk BULL --> REF[refutation_du_bull · 1 passe]:::judgblk BEAR -. voit le bull APRÈS production .-> REF REF --> SYNTH[[→ thesis-agent · synthèse]]:::out classDef out fill:#12301c,stroke:#57d977,color:#d7f5dd; classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef blk fill:#1b2340,stroke:#3d5afe,color:#dfe6ff; classDef judgblk fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7;

bull_case — provenance des champs

flowchart LR
  memo[(research_memo · grounded)]:::src
  div[(recherche divergente
nouvelles entries)]:::src br[(pattern_library · base-rates)]:::src vp{{variant_perception
type · enonce · catalyseur}}:::judg arg{{arguments.explication}}:::judg prob{{arguments.probabilite}}:::judg bra([arguments.base_rate]):::fact val[valorisation · scenarios · reverse_dcf]:::der mos[indicateurs.marge_securite]:::der conv{{conviction}}:::judg gr[grounding_report
← groundedness-checker A2]:::chk memo ==> vp & arg div ==> arg br --> bra bra -. ancre R2 .-> prob & val memo --> val --> mos arg --> conv arg -. vérifié .-> gr classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7; classDef fact fill:#12301c,stroke:#57d977,color:#d7f5dd; classDef der fill:#122238,stroke:#4a9eff,color:#d9e8ff; classDef chk fill:#241a2e,stroke:#a06cd5,color:#e5d4f5;

bear_case + réfutation — A6 divergence · Q3 dévoilement asymétrique

flowchart LR
  memo[(research_memo)]:::src
  bdiv[(bear divergent search
litiges · red flags · short theses)]:::src fb{{failles_bull_conventionnel}}:::judg sdv[scenario_destruction_valeur
prix_bear · perte_pct]:::der decl{{declencheurs}}:::judg bullargs[/arguments du bull/]:::blk refu{{refutation_du_bull
cible → contre-argument}}:::judg bdiv ==> fb & decl memo --> sdv bullargs -. dévoilé au round .-> refu bdiv ==> refu classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7; classDef der fill:#122238,stroke:#4a9eff,color:#d9e8ff; classDef blk fill:#1b2340,stroke:#3d5afe,color:#dfe6ff;

Couche données — bull/bear NVDA (illustratif)

Le bull part des entrées du memo (déjà grounded). Le bear crée ses propres entrées par recherche divergente (A6, marquées ⟂) — c'est son mécanisme de provisioning :

idagententry_type · source · tiercontent→ champ
E10/E11/E30bullfact_qualitative · web_search · B+(réutilise le memo) CUDA 5M dev · part GPU ~90 · marché +40%/anarguments[0] « le marché sous-estime la durabilité de la part »
E42bullanalysis · pattern_library · B+base-rate 15% (méga-caps >30% sur 5 ans)arguments[0].base_rate → probabilite ancrée (règle 2)
E70 ⟂bearfact_qualitative · web_search · BRamp AMD MI300 + ASIC hyperscalers (Trainium, TPU) → érosion de part possiblefailles_bull_conventionnel · refutation_du_bull → cible « part >80% »
E71 ⟂bearrisk · web_search · BNormalisation de la marge brute si la concurrence s'intensifiescenario_destruction_valeur · declencheurs
E50 ⟂bearrisk · web_search · BContrôles export Chine ~20-25% du CA datacenterscenario_destruction_valeur.declencheurs · risque

La réfutation asymétrique (Q3/Q4) : le bear, une fois le bull dévoilé, attaque « part >80% maintenue » via E70/E71 — refutation_du_bull[0] = {cible:"arg#0 bull", contre_argument:"…", source_entry_refs:[E70,E71]}. Le bull ne voit jamais le bear (dernier mot à l'avocat du diable). Une seule passe, sauf escalade Q4.

risk_matrix — étape B12 · synthèse / IC · SEUL verdict du flux (Q2)

Le thesis-agent réconcilie bull + bear + réfutation + memo + contexte portefeuille (A8). Trois invariants encodés : 4 axes séparés (A3, jamais fusionnés), sizing Kelly-capé ancré (Q6/A8), override tracé (A7).

Vue IC — entrées → sorties

flowchart TB
  BULL[(bull_case)]:::src
  BEAR[(bear_case + refutation)]:::src
  MEMO[(research_memo)]:::src
  PF[(contexte portefeuille
positions · corrélations · A8)]:::src BULL --> AX & RISK BEAR --> AX & RISK MEMO --> AX & PM AX[axes · 4 séparés A3]:::der RISK{{risques_acceptes
+ base_rate + hypothese_liee}}:::judg PM{{pre_mortem}}:::judg AX --> SIZE PF --> SIZE SIZE[position_sizing]:::der AX --> VERD RISK --> VERD VERD{{verdict · unique}}:::out classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef der fill:#122238,stroke:#4a9eff,color:#d9e8ff; classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7; classDef out fill:#12301c,stroke:#57d977,color:#d7f5dd;

Les 4 axes — jamais fusionnés (A3 / règle 4)

flowchart LR
  moatfin[(memo · moat / financials)]:::src
  srcsum[(sources_summary · tiers)]:::src
  bb[(bull / bear · convictions)]:::src
  val[(memo · valuation)]:::src
  qb{{axes.qualite_business}}:::judg
  qi[axes.qualite_info]:::der
  cv{{axes.conviction}}:::judg
  ms[axes.marge_securite]:::der
  moatfin --> qb
  srcsum --> qi
  bb --> cv
  val --> ms
  qb & qi & cv & ms --x FUSED[score global unique — INTERDIT A3]:::gap
  classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee;
  classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7;
  classDef der fill:#122238,stroke:#4a9eff,color:#d9e8ff;
  classDef gap fill:#3a1414,stroke:#ff5252,color:#ffd6d6;
    

position_sizing — formule Kelly-capée ancrée (Q6 · A8 · A7)

flowchart LR
  inp[/conviction · marge_securite · 1÷correlation/]:::src
  cap[(MAX_SECTOR_CONCENTRATION · cap dur)]:::src
  pf[(risques corrélés portefeuille · A8)]:::src
  form[pct_formule · Kelly capé]:::der
  reco{{pct_recommande
+ ajustement_justification}}:::judg ovr{{override_utilisateur
override_reason · A7}}:::user inp --> form cap -. cap dur .-> form pf -. exposition .-> reco form --> reco --> ovr classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef der fill:#122238,stroke:#4a9eff,color:#d9e8ff; classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7; classDef user fill:#2e2410,stroke:#e0b000,color:#f0d9a0;

Provisioning particulier : le sizing ne se nourrit pas des knowledge_entries du ticker mais du contexte portefeuille (positions existantes — facteur « CapEx datacenter » déjà à ~22% via NVDA/MSFT…). C'est la seule partie du flux dont l'entrée est le portefeuille, pas la KB du titre (A8).

thesis.hypotheses[] — étape B10 · falsifiabilité · pont décision → suivi

Chaque risque_accepté du risk_matrix (via hypothese_liee) devient une hypothèse falsifiable : KPI mesurable + seuil d'invalidation chiffré (règle 3) + ancre base-rate (règle 2). Le seuil pilote le monitoring — escalade uniquement sur franchissement (anti-churn, §10 / audit §1.3).

flowchart LR
  risk[(risque accepté
hypothese_liee=H3)]:::src br[(pattern_library · base-rate)]:::src en{{enonce falsifiable}}:::judg kpi{{kpi · unite}}:::judg sa{{seuil_alerte}}:::judg si{{seuil_invalidation · règle 3}}:::judg bra([base_rate]):::fact refs>source_entry_refs]:::ref risk ==> en en --> kpi --> sa & si br --> bra bra -. ancre R2 .-> si en --- refs si --> mon[[monitoring 2/3/6
escalade SI franchi · anti-churn]]:::out classDef src fill:#20242e,stroke:#7d8798,color:#e7e9ee; classDef judg fill:#3a2a12,stroke:#ffa94d,color:#ffe6c7; classDef fact fill:#12301c,stroke:#57d977,color:#d7f5dd; classDef ref fill:#0b0d12,stroke:#7d8798,color:#9aa3b2,stroke-dasharray:3; classDef out fill:#12301c,stroke:#57d977,color:#d7f5dd;

Exemple NVDA : H3 « conserve >80% PDM GPU IA jusqu'en 2028 » · kpi=part GPU datacenter · seuil_alerte=78 · seuil_invalidation=72 · base_rate=0.45. Le risques_acceptes[i].hypothese_liee=H3 du risk_matrix pointe ici — pont entre décision et suivi long terme.

Dérivation — la carte est la source unique — G1 : 1 source → 4 consommateurs

Les 4 cartes ne sont pas de la doc : elles se projettent mécaniquement sur les artefacts d'exécution. Le Pydantic est vérifié à l'exécution (pydantic 2.13.4, container backend) — verrou Q2, refs factual obligatoires (#1), edge obligatoire (R6), cap sizing (Q6) rejettent tous l'invalide.

flowchart LR
  CARD[[carte de provenance
champ · nature · grounding · dim MVDD · tier · base-rate]]:::out CARD --> PYD[Pydantic versionné
extra=forbid · Literal · refs ssi factual · validators]:::blk CARD --> RDY[checklist readiness
= champs factual groupés par dim MVDD]:::blk CARD --> GRD[règles groundedness A2
factual→direct · judgment→délégué · derived→hérité]:::blk CARD --> VIZ[cette visualisation]:::blk classDef out fill:#12301c,stroke:#57d977,color:#d7f5dd; classDef blk fill:#1b2340,stroke:#3d5afe,color:#dfe6ff;

Readiness ← champs factuels du research_memo

Une dimension MVDD atteint son plancher ssi chacun de ses champs factuels est fondable (≥1 knowledge_entry au tier requis) — calculable avant la recherche, car il suffit de vérifier l'existence d'entrées (= colonne « Gap si non-fondable »). ready exige les DEUX blocs ; thin_qualitative si le structuré est complet mais une dimension qualitative reste sous le plancher.

blocdimension MVDDchamps factuels requis fondablestiergap si manquant
structuréebusiness modelbusiness_model.description · drivers_revenus · recurrence_pctB+/Amodèle économique non documenté
≥3 ans financialsfinancials.roic_pct · fcf_conversion_pct · intensite_capex_pct · levierAfinancials insuffisants
valorisation actuellevaluation.prix_actuel · relatif.multiple · base_rate_anchorA/B+prix / multiples indispo
qualitativeproduits & propositionbusiness_model.description · unit_economicsB+proposition de valeur non documentée
positionnement concurrentielmoat.preuves[].fait · industry.position_vs_pairsB+dynamique concurrentielle absente
structure & état du marchéindustry.croissance_marche_historique_pct · structure_5forcesB+marché non documenté
management & allocation (#1)management.incitations · skin_in_game_pct (+ source_entry_refs)A-allocation du capital non documentée ← empêche un faux `ready`
risques principauxincertitudes_bloquantes[] (+ entries risk)Brisques principaux non identifiés

Corollaire : seuls les champs factual créent une exigence de couverture ; les judgment/derived sont produits à l'analyse. Deux provisionings sortent du readiness du titre : le sizing (contexte portefeuille, A8) et la recherche divergente du bear (A6, provisionnée à l'analyse). Artefacts : roadmap/provenance-cards/analysis_v2_schemas.py + readiness_derivation.md.