Validación técnica

Validacion Tecnica

Resultados de pruebas de carga (k6) sobre los 8 productos desplegados en Cloud Run. Smoke profile = 1 VU / 30s contra produccion.

"Los numeros validan lo que el codigo promete. Sin baseline, no hay mejora medible."

Resultados Smoke (2026-04-17)

ProductoTierPass Ratep95Estado
SanigestBasic100%~600ms
OK
IndustCoreBasic100%~600ms
OK
VitaCoreBasic100%~600ms
OK
SafeHubBasic100%~600ms
OK
IndustCorePlus100%614ms
OK
SanigestPlus100%614ms
OK
VitaCorePlus100%611ms
OK
SafeHubPlus97.3%850ms
Aceptable

SafeHub Plus: el endpoint stats/dashboard es inherentemente pesado (~2s). No es bug, aceptable para smoke.

Plus — Smoke / Load / Stress (con indices optimizados)

Perfiles completos contra Cloud Run (max-instances=10). Load: 10→25→50 VUs. Stress: 25→50→100 VUs sostenidos.

ProductoSmoke p95Load p95Stress p95Errores HTTP
IndustCore Plus614ms3.83s11.98s
0%
Sanigest Plus614ms3.84s13.09s
0%
SafeHub Plus850ms5.82s15.92s
0%
VitaCore Plus611ms4.09s20.03s
0%

0% errores HTTP en los 3 perfiles. Latencia degrada bajo carga pero ningún backend cayó. 13 indices creados via startup hook bajaron p95 en Load ~28% en IndustCore y ~11% en VitaCore.

Thresholds definidos

  • p95 latency(< 2000ms)
    cumple
  • p99 latency(< 5000ms)
    cumple
  • Fail rate(< 5%)
    cumple

Bugs encontrados y corregidos

IndustCore Plus — Purchase Orders seed

Campos incorrectos en seed (order_number vs po_number, total vs subtotal, ObjectId vs string para approved_by).

fix/purchase-orders-seed-fields

VitaCore Plus — Changelog ObjectId

changelog_repository.py no sanitizaba ObjectId en campos before/after antes de serializar. Fix con _sanitize_changelog_doc() (patron reusado de IndustCore Plus).

fix/changelogs-objectid-serialization

VitaCore Plus — Analytics sin hospital

Endpoints epidemiologicos requieren hospital_id. Script k6 ahora obtiene hospitalId en setup y skipea analytics si no hay hospitales seeded.

inline (en test script)

Escala y costos — Free / Low tier

Post-testing la infraestructura se escaló a mínimos: scale-to-zero en Cloud Run y Atlas shared. Costo recurrente total: ~$1-3 USD/mes.

CapaConfigCostoNota
Cloud Run (30 services)min=0, max=3-10
$0 sin trafico
Pay-per-request. Solo cobra cuando hay requests reales.
MongoDB AtlasM0/M2 Shared
$0 - $9/mes
Free tier 512MB aguanta 10-50 clientes. Upgrade M10 (~$57/mes) solo para enterprise.
Cloud Build120 min/dia
$0
~4 deploys completos diarios sin costo.
Secret Manager6 versiones activas
$0
Todas las credenciales gestionadas en free tier.
Artifact RegistryDocker images
~$1-3 USD/mes
Unico costo recurrente real.

Estado final

  • Smoke + Load + Stress corridos sobre los 4 Plus — 0% errores HTTP en los 3 perfiles

  • 13 indices creados y persistidos via startup hook (idempotente)

  • 3 bugs detectados, arreglados y mergeados a main

  • Cloud Run escalado a min=0 (scale-to-zero) post-testing

  • Atlas en free/low tier: M0 shared 512MB — suficiente para MVP y pilotos