Decision rules (22)· decisão
Aplicada na decisão (após approve) — avalia drift, votos do comitê, margem vs teto, owner confidence, etc. Live no endpoint /api/v1/decision/{id}.
- warn
Drift Pdisp alto
approved_with_high_drift - warn
Sem voto formal em Top-30
approved_without_votes_top30 - warn
Aprovado com maioria rejeitando
approved_minority_reject - warn
Curtailment crônico (margem ONS)
approved_with_high_curtailment_warning - warn
Margem vs teto baixa
approved_low_margin_vs_teto - warn
Owner inferido (medium confidence)
approved_with_medium_parent_group_confidence - warn
Owner inferido (low — cluster propagation)
approved_with_low_parent_group_confidence - warn
Top-30 sem owner resolvido (SPE opaca)
approved_top30_with_unresolved_owners - warn
β não resolvido (ANEEL pendente)
approved_with_unresolved_beta - warn
Concentração > 15% (regra de ouro)
approved_with_overconcentrated_parent_group - warn
JV sem waterfall model
approved_with_jv_without_waterfall_model - warn
β bonificado de fonte não-EPE
approved_beta_from_unofficial_source - warn
CAPEX BNEF stale (>90 dias)
approved_with_capex_from_stale_source - warn
Cenário greenfield
approved_greenfield - warn
Falha de qualidade no ingest-fonte
approved_with_quality_failure - warn
Concentração > 10% num único barramento
approved_with_overconcentrated_barramento - warn
Concentração > 30% numa única UF
approved_with_overconcentrated_uf - warn
Gate legal unknown/red (Stage ≥ 2)
approved_with_unknown_legal_gates - warn
Gate legal em análise jurídica
approved_with_pending_legal_gates - warn
Sem host — gates legais não checados
approved_legal_gates_unchecked_host_unselected - warn
Margem ONS zero todos os anos (NT-ONS DPL 0029) — não-bid-grade
approved_with_zero_margem_all_years - warn
Margem ONS média < 50 MW (risco de fila)
approved_with_margem_temporal_low
Candidate rules (11)· candidate
Aplicada no candidate (stress-test pré-decisão) — avalia score vs info disponível, curtailment saturation, JV sem owner, etc. Persistida em atlas_core.generator_host_candidate.red_team_findings.
- warn
Score alto com SE/owner desconhecido
high_score_low_info - warn
Curtailment > 60% (saturação)
curtailment_saturation - info
Planta subescala (< 10 MW)
subscale_plant - info
Top-30 mas distância > 50 km
top30_distance_inconsistency - warn
JV recomendada sem owner resolvido
jv_recommended_owner_unresolved - blocker
Aquisição pós-COD sem distress
post_cod_acquisition_no_distress - warn
CCEAR-Curva sem UFV solar
ccear_curva_without_solar - info
CCEAR-Curva sem contrato verificado
ccear_curva_without_verified_contract - info
Score alto com curtail zero
zero_curtailment_with_high_score - info
Owner tier-1 estrangeiro (close longo)
foreign_tier1_long_close - info
Distress dirigido por news LLM sem URL
unverified_news_drove_distress
Labels PT-BR sincronizados Python↔TS (Phase 12.h/12.g). Source:
packages/red-team-validator/src/red_team_validator/decision_rules.py + rules.py · TS mirror em apps/web/src/lib/red-team-labels.ts.