# π MΓ³dulo 06 β Score y Estado del Reino
## PropΓ³sito
Calcular la puntuaciΓ³n de seguridad (0β100) a partir de todos los hallazgos
recolectados por los scanners, determinar el estado narrativo LOTR y presentar
el veredicto al usuario antes de iniciar el flujo asistido.
---
## PASO 1 β Unificar hallazgos
Combinar todos los arrays producidos por los scanners ejecutados:
```
HALLAZGOS = AGENTES_HALLAZGOS
+ SKILLS_HALLAZGOS
+ MCPS_HALLAZGOS
+ CONFIGS_HALLAZGOS
+ TLOTP_HALLAZGOS (si se ejecutΓ³ el auto-anΓ‘lisis)
```
Contar hallazgos por severidad:
- `N_CRITICOS` = cuantos con `severidad: "critico"`
- `N_ALTOS` = cuantos con `severidad: "alto"`
- `N_MEDIOS` = cuantos con `severidad: "medio"`
- `N_INFO` = cuantos con `severidad: "info"`
---
## PASO 2 β Calcular el score
Aplicar la fΓ³rmula:
```
DEDUCCION = (N_CRITICOS Γ 25) + (N_ALTOS Γ 15) + (N_MEDIOS Γ 5) + (N_INFO Γ 1)
SCORE = max(0, 100 - DEDUCCION)
```
**Notas**:
- El score **nunca** baja de 0 (aunque la deducciΓ³n teΓ³rica fuera 500+)
- El score es entero
- Si no hay ningΓΊn hallazgo (reino limpio), `SCORE = 100`
---
## PASO 3 β Determinar el estado narrativo
Mapear el `SCORE` al estado correspondiente:
| Rango | Estado narrativo |
|-----------|------------------------------------------------------------------------------|
| `90β100` | *"El Bosque Antiguo estΓ‘ en paz. El Anillo duerme."* |
| `70β89` | *"Hay murmullos en los matorrales. Permanece alerta."* |
| `50β69` | *"Sombras se agitan en el este. Tom huele el peligro."* |
| `25β49` | *"Mordor llama a tus puertas. El reino estΓ‘ en riesgo."* |
| `0β24` | *"El Ojo de Sauron te observa. AcciΓ³n inmediata necesaria."* |
Mapear tambiΓ©n el estado a un emoji de alerta:
| Rango | Emoji |
|-----------|-------|
| `90β100` | π’ |
| `70β89` | π‘ |
| `50β69` | π‘ |
| `25β49` | π |
| `0β24` | π΄ |
---
## PASO 4 β Presentar el veredicto
Mostrar el siguiente banner, reemplazando los placeholders con los valores
reales calculados:
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
πΎ EL VEREDICTO DE TOM BOMBADIL
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
PUNTUACIΓN DE SEGURIDAD: {SCORE} / 100
{EMOJI_ESTADO} "{ESTADO_NARRATIVO}"
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π΄ CrΓticos Β· {N_CRITICOS} (-25 c/u = -{N_CRITICOS * 25})
π Altos Β· {N_ALTOS} (-15 c/u = -{N_ALTOS * 15})
π‘ Medios Β· {N_MEDIOS} (-5 c/u = -{N_MEDIOS * 5})
π’ Info Β· {N_INFO} (-1 c/u = -{N_INFO * 1})
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Total de hallazgos: {TOTAL}
Tom te guiarΓ‘ uno a uno. ΒΏComenzamos?
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
**OmisiΓ³n condicional**: si una categorΓa tiene 0 hallazgos, puede omitirse
la lΓnea correspondiente para limpiar la salida.
Si el total es 0:
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
πΎ EL VEREDICTO DE TOM BOMBADIL
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
PUNTUACIΓN DE SEGURIDAD: 100 / 100 β¨
π’ "El Bosque Antiguo estΓ‘ en paz. El Anillo duerme."
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
No se ha detectado ningΓΊn comportamiento sospechoso.
Tom Bombadillo se retira a su casa, complacido.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
En este caso, saltar directamente al loop del `tom-bombadil-main.md`
(volver al menΓΊ de escaneo), sin pasar por el mΓ³dulo 07.
---
## PASO 5 β Pregunta para iniciar el flujo asistido
Si hay al menos un hallazgo, preguntar con `AskUserQuestion`:
```json
{
"questions": [{
"header": "Tom Bombadil β ΒΏComenzamos a purificar?",
"question": "πΎ Tom ha reunido los hallazgos. ΒΏQuieres revisarlos uno a uno?",
"multiSelect": false,
"options": [
{
"label": "β
SΓ, Tom me guΓa hallazgo a hallazgo",
"description": "Flujo asistido con 4 opciones por cada hallazgo"
},
{
"label": "βοΈ Ahora no, volver al menΓΊ",
"description": "Dejar el reino como estΓ‘ y volver al menΓΊ principal"
}
]
}]
}
```
- Si elige **SΓ**: continuar con el mΓ³dulo `07-workflow-hallazgos.md`.
- Si elige **Ahora no**: volver al menΓΊ principal de Tom Bombadil.
---
## Guardar el score inicial
Registrar `SCORE_INICIAL = SCORE` para usarlo en el resumen final del
mΓ³dulo 07.
---
**MΓ³dulo**: `06-score-estado.md`
**Invocado desde**: `tom-bombadil-main.md` (PASO 4)
**Siguiente**: `07-workflow-hallazgos.md` (si el usuario acepta purificar)