# CERTIFICACION_B5_FOLIOS_BACKEND_V1

## Objetivo
Certificar la emisión de folios backend de MIDAS sin conectar producción ni pedir credenciales reales.

## Entorno de certificación
- Base MariaDB local efímera para pruebas.
- MIDAS apuntando a `127.0.0.1` en entorno de certificación local.
- Sin conexión a VPS real ni BD productiva.

## Alcance validado
- `midas/api/cotizaciones.php`
- `midas/api/contratos.php`
- `midas/api/edp.php`
- helper backend en `midas/api/config.php`:
  - `midas_next_folio()`
  - `midas_needs_backend_folio()`

## Prueba 1 — Cotización simple (5 consecutivos)
Resultado: **OK**
- `COT-000001`
- `COT-000002`
- `COT-000003`
- `COT-000004`
- `COT-000005`

## Prueba 2 — Contrato simple (5 consecutivos)
Resultado: **OK**
- `CONT-000001`
- `CONT-000002`
- `CONT-000003`
- `CONT-000004`
- `CONT-000005`

## Prueba 3 — EDP simple (5 consecutivos)
Resultado: **OK**
- `EDP-000001`
- `EDP-000002`
- `EDP-000003`
- `EDP-000004`
- `EDP-000005`

## Prueba 4 — Concurrencia multiusuario
Escenario:
- 2 usuarias simuladas (`U1` y `U2`)
- 10 altas concurrentes totales
- prueba ejecutada sobre EDP usando el mismo helper transaccional compartido

Resultado: **OK**
Folios emitidos:
- `EDP-000001`
- `EDP-000002`
- `EDP-000003`
- `EDP-000004`
- `EDP-000005`
- `EDP-000006`
- `EDP-000007`
- `EDP-000008`
- `EDP-000009`
- `EDP-000010`

Validación:
- total registros: `10`
- total folios distintos: `10`
- duplicados: `0`
- rango: `EDP-000001` a `EDP-000010`

## Prueba 5 — UNIQUE
Resultado: **OK**
Índices únicos confirmados en:
- `cotizaciones.cot_num`
- `contratos.contrato_num`
- `edp.edp_num`

## Prueba 6 — Transacciones
Resultado: **OK**
Validado por implementación y ejecución:
- `SELECT ... FOR UPDATE` sobre tabla `folios`
- incremento de folio dentro de transacción
- `commit` solo al completar inserción
- `rollback` si falla inserción

## Prueba 7 — Rollback
Escenario:
- se forzó una inserción fallida por `UNIQUE`
- se verificó que el contador de folios no avanzara después del fallo

Resultado: **OK**
- antes: `15`
- después del fallo: `15`
- siguiente folio exitoso: `COT-000016`

Interpretación:
- el folio reservado en transacción fallida **no quedó consumido**
- rollback restauró correctamente el contador

## Observaciones
1. La certificación se hizo en entorno local efímero, no en producción.
2. La prueba concurrente se ejecutó sobre EDP porque los 3 módulos comparten el mismo helper backend de folios y la misma estrategia transaccional.
3. Se observó una sensibilidad de `estado` en contratos cuando se usa cierto valor textual en este esquema temporal; no afecta la lógica de folios y no invalida la certificación B.5.

## Veredicto
## **B.5 CERTIFICADO** para entorno multiusuario liviano (2 a 4 usuarias) en lo relativo a:
- emisión backend de folios
- correlatividad
- bloqueo transaccional
- ausencia de duplicados
- rollback ante fallo

## Estado final
B.5 queda apto para pasar a siguiente etapa de integración, sujeto a repetir smoke test breve cuando se conecte la BD real/staging definitiva.
