Légende
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 :
| id | entry_type | source · tier | content (langage naturel) | content_structured | → champs nourris |
|---|---|---|---|---|---|
| E1 | fact_qualitative | 10-K · A- | 4 segments ; Data Center ~88% du CA FY2025 | {data_center_pct:88} | business_model.description · .drivers_revenus |
| E2 | fact_financial | 10-K · A | Part récurrente (soft + networking) ~15% | {recurring_pct:15} | business_model.recurrence_pct |
| E3 | fact_financial | 10-K · A | Marge brute ~75% FY2025 | {gross_margin:75} | business_model.unit_economics (derived) |
| E10 | fact_qualitative | web_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 |
| E11 | fact_qualitative | web_search · B | Part GPU datacenter ~90% en 2025 | {gpu_dc_share:90} | moat.preuves[1] · industry.position_vs_pairs |
| E20 | fact_financial | 10-K · A | ROIC FY2025 ~60% (NOPAT / capital investi) | {metric:"ROIC", value:60, period:"FY-2025"} | financials.roic_pct |
| E21 | fact_financial | 10-K · A | Conversion FCF ~90% | {fcf_conversion:90} | financials.fcf_conversion_pct |
| E22 | fact_financial | 10-K · A | Trésorerie nette ; dette nette / EBITDA ~ -0.5x | {net_debt_ebitda:-0.5} | financials.levier |
| E23 | fact_financial | 10-K · A | Intensité CapEx ~3% du CA | {capex_pct:3} | financials.intensite_capex_pct |
| E24 | fact_financial | 10-K · A | Accruals faibles → qualité des résultats élevée | {accruals_flag:false} | financials.earnings_quality |
| E30 | fact_qualitative | web_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) |
| E31 | fact_qualitative | web_search · B | Concurrents : AMD MI300 · ASIC (Google TPU, AWS Trainium) | {competitors:["AMD","TPU","Trainium"]} | industry.disruption_vectors · position_vs_pairs |
| E40 | fact_financial | yfinance · A | Prix actuel = cours de clôture du jour | {price:…, ts:…} | valuation.prix_actuel (→ tout le bloc dérivé) |
| E41 | fact_financial | FMP · A | FCF normalisé de base pour le DCF | {fcf_ttm:…} | valuation.dcf_scenarios (derived) · epv |
| E42 | analysis | pattern_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) |
| E43 | fact_financial | FMP · A | EV/FCF ~40x — prime vs historique | {ev_fcf:40} | valuation.relatif |
| E50 | risk | web_search · B | Contrôles export Chine : risque ~20-25% du CA datacenter | {impact_pct:22} | incertitudes_bloquantes[0] · risque lié |
| E60 | llm_memory | modè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 ») |
| E12 | fact_management | DEF 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 :
| id | agent | entry_type · source · tier | content | → champ |
|---|---|---|---|---|
| E10/E11/E30 | bull | fact_qualitative · web_search · B+ | (réutilise le memo) CUDA 5M dev · part GPU ~90 · marché +40%/an | arguments[0] « le marché sous-estime la durabilité de la part » |
| E42 | bull | analysis · pattern_library · B+ | base-rate 15% (méga-caps >30% sur 5 ans) | arguments[0].base_rate → probabilite ancrée (règle 2) |
| E70 ⟂ | bear | fact_qualitative · web_search · B | Ramp AMD MI300 + ASIC hyperscalers (Trainium, TPU) → érosion de part possible | failles_bull_conventionnel · refutation_du_bull → cible « part >80% » |
| E71 ⟂ | bear | risk · web_search · B | Normalisation de la marge brute si la concurrence s'intensifie | scenario_destruction_valeur · declencheurs |
| E50 ⟂ | bear | risk · web_search · B | Contrôles export Chine ~20-25% du CA datacenter | scenario_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.
| bloc | dimension MVDD | champs factuels requis fondables | tier | gap si manquant |
|---|---|---|---|---|
| structurée | business model | business_model.description · drivers_revenus · recurrence_pct | B+/A | modèle économique non documenté |
| ≥3 ans financials | financials.roic_pct · fcf_conversion_pct · intensite_capex_pct · levier | A | financials insuffisants | |
| valorisation actuelle | valuation.prix_actuel · relatif.multiple · base_rate_anchor | A/B+ | prix / multiples indispo | |
| qualitative | produits & proposition | business_model.description · unit_economics | B+ | proposition de valeur non documentée |
| positionnement concurrentiel | moat.preuves[].fait · industry.position_vs_pairs | B+ | dynamique concurrentielle absente | |
| structure & état du marché | industry.croissance_marche_historique_pct · structure_5forces | B+ | 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 principaux | incertitudes_bloquantes[] (+ entries risk) | B | risques 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.