Skip to content

feat(h4-3): modo simulación con flota ficticia (RF-12)#27

Merged
Jacket-69 merged 2 commits into
mainfrom
feat/h4-3-simulacion
May 21, 2026
Merged

feat(h4-3): modo simulación con flota ficticia (RF-12)#27
Jacket-69 merged 2 commits into
mainfrom
feat/h4-3-simulacion

Conversation

@Jacket-69
Copy link
Copy Markdown
Owner

Resumen

Tercera fase de H4: modo simulación que ejecuta el cálculo de despacho sobre flota ficticia sin afectar el estado operativo real. Cierra RF-12.

Cambios

application/simulacion.py:

  • ReporteSimulacion dataclass frozen+slots con métricas agregadas (pct por motivo, ETA media, ETA p95).
  • simular(incidentes, flota_ficticia, grafo, *, repositorio_eventos=None, factor_hora=1.0, factor_sirena=1.0) → ReporteSimulacion.
  • Persistencia opt-in: por default NO escribe al log canónico; si se provee repositorio_eventos, los eventos van con despacho_id prefijado SD-SIM-.

CLI interfaces/cli/simular_cmd.py:

  • sentinel simular --flota --incidentes --graph --out [--persistir-en].
  • Reporte JSON con campo \"modo\": \"simulacion\" como marca explícita.

Decisiones intencionales

  • Sin evolución temporal entre incidentes (v1): cada incidente ve la flota inicial. Equivale a paralelizar conceptualmente. Para event-driven (liberación por eta_segundos) haría falta reloj virtual + ADR nuevo. Documentado en el docstring del módulo.
  • Persistencia opt-in (no por default): "sin afectar el estado operativo real" se interpreta literalmente. Si el operador quiere auditar la simulación, pasa --persistir-en data/eventos_sim.jsonl (archivo separado).
  • SD-SIM- prefix: el despacho_id de eventos simulados es distinguible visualmente de los operativos (SD-), facilitando filtros downstream.

Validación local

  • ruff check + ruff format --check: ✓ (71 archivos).
  • mypy src/sentinel_dispatch: ✓ (38 archivos).
  • pytest tests/unit tests/integration --no-cov: 256 passed in 3.61s (249 baseline + 7 nuevos).
  • Cobertura global: 90.60 %.

DoD

  • RF-12 cerrado funcionalmente.
  • El log canónico operativo NO se modifica (RN-03 preservado).
  • No requiere ADR (la decisión "sin evolución temporal" se documenta en el docstring; un ADR queda registrado solo si futuro PR agrega event-driven).
  • Trazabilidad actualizada: RF-12 → ✅.
  • CHANGELOG entry bajo [Unreleased].
  • CI compare debe seguir 12/12 OK bit-exacto (no se toca RT-02).

Commits

  1. cc41075 feat(h4-3): modo simulación con flota ficticia (RF-12)
  2. 8b783a0 docs(quality): RF-12 ✅ + entrada H4-3 en CHANGELOG

Estado H4

Con este PR, los 3 RFs sustanciales de H4 quedan ✅ (RF-06, RF-11, RF-12). Siguen: H4 fase 4 = spike CP-12 + ADR-0019; fase 5 = calibración CP-01c (ADR-0013 → accepted); fase 6 = FTR-03 formal de cierre.

Jacket-69 added 2 commits May 21, 2026 13:29
Nuevo `application/simulacion.py` con:
- `ReporteSimulacion` (dataclass frozen+slots): incidentes_procesados,
  tupla de ResultadoDespacho, pct por motivo, ETA media y p95.
- `simular(incidentes, flota_ficticia, grafo, *, repositorio_eventos,
  factor_hora, factor_sirena) → ReporteSimulacion`.

Semántica v1: sin evolución temporal entre incidentes (cada uno ve la
flota inicial). Determinístico — sólo depende de los inputs. Para
event-driven simulation con liberación por eta_segundos haría falta
ADR nuevo y reloj virtual.

Persistencia opt-in: por default NO escribe al log canónico (modo
simulación ≠ operativo). Si el caller provee `repositorio_eventos`,
los eventos persisten con `despacho_id` prefijado `SD-SIM-` para
distinguir despachos simulados de operativos.

Nuevo subcomando CLI `sentinel simular --flota --incidentes --graph
--out [--persistir-en]`. El reporte JSON incluye `"modo": "simulacion"`
como marca explícita.

Tests: 7 nuevos verdes (Normal/Borde/RN/Métricas). Suite total 256/256,
cov 90.60 %.
Trazabilidad: RF-12 ✅ apuntando a `application/simulacion.py` +
`interfaces/cli/simular_cmd.py`. Documenta la semántica v1 (sin
evolución temporal) y la persistencia opt-in vía `--persistir-en`.

CHANGELOG: entrada "H4 fase 3: modo simulación" bajo [Unreleased]
con resumen del módulo, decisiones de diseño y métricas del test suite.
@Jacket-69 Jacket-69 merged commit 1a8bb28 into main May 21, 2026
6 checks passed
@Jacket-69 Jacket-69 deleted the feat/h4-3-simulacion branch May 21, 2026 17:31
Jacket-69 added a commit that referenced this pull request May 29, 2026
feat(h4-3): modo simulación con flota ficticia (RF-12)
Jacket-69 added a commit that referenced this pull request May 29, 2026
feat(h4-3): modo simulación con flota ficticia (RF-12)
Jacket-69 added a commit that referenced this pull request May 29, 2026
feat(h4-3): modo simulación con flota ficticia (RF-12)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant