Red-team · M22

Red-team rules (33)

Catálogo determinístico dos rules M22 — duas camadas ortogonais: candidate (pré-decisão) e decision (pós-approve). Fonte single-of-truth: /api/v1/red-team/rules.

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.