
Maestría en Arquitectura de Software
Hecho por: Yerlinson Maturana Serna
ParkControl es un proyecto Node.js para administrar la operacion basica de un parqueadero publico en Colombia: ingresos, salidas, disponibilidad por tipo de vehiculo, liquidacion, factura en COP e historial reciente.
- Registro de ingreso por placa, tipo de vehiculo y propietario opcional.
- Control de cupos para automoviles, motocicletas y bicicletas.
- Bloqueo de placas duplicadas con tiquete abierto.
- Liquidacion por minutos, tarifa minima, tope diario e IVA del 19%.
- Generacion de factura basica en pesos colombianos.
- Dashboard web con ocupacion, tiquetes abiertos e historial.
- Pruebas unitarias automatizadas con
node:test. - Reporte de cobertura con
--experimental-test-coverage.
- Node.js 22 o superior.
- Ejecutar
npm installpara instalar las dependencias de desarrollo, incluyendo Playwright.
npm startLuego abrir:
http://localhost:3000
npm testnpm run coverageLas pruebas de integracion validan que dominio, calculo tarifario y persistencia JSON trabajen juntos. Cubren registro, recarga desde storage, liquidacion, factura persistida, bloqueo de duplicados, sobrecupo y consecutivos de factura.
npm run integrationParkControl incluye pruebas e2e reales con Playwright. Estas abren Chromium, interactuan con la interfaz, registran una entrada, liquidan una salida, validan la factura de tirilla en modal y comprueban mensajes de error visibles.
npm run e2ePara ver el navegador durante la ejecucion:
npm run e2e:headedPara una demostracion mas lenta y facil de ver, con navegador visible y pausa aproximada de 1.2 segundos entre acciones:
npm run e2e:demoResultado verificado:
npm test: tests 33, pass 33, fail 0
npm run coverage: src 100% lineas, 100% ramas, 100% funciones
npm run e2e: 2 passed
El repositorio incluye GitHub Actions en .github/workflows/ci.yml. El pipeline se ejecuta en push, pull_request y manualmente con workflow_dispatch.
Checks del job principal:
npm test
npm run integration
npm run coverage
npm run e2eTambien hay un job de rendimiento que ejecuta npm run perf contra el servidor local y falla si algun escenario reporta errores.
La entrega de Unidad 5 incluye pruebas de rendimiento para los flujos principales de ParkControl.
Equipo Unidad 05:
- Yerlinson Maturana Serna
- Brayan Estif Calderon Gomez
- Sadane Geronimo Miguel Santiago Acevedo Virgues
- Julian Camilo Corredor Rojas
npm run perfEste comando genera resultados en performance/results/:
performance-summary.json: metricas consolidadas.performance-summary.md: tabla resumen.performance-results.csv: muestras por solicitud.throughput-chart.svg: grafica de throughput.
Tambien se incluye el plan JMeter performance/ParkControl_LoadTest.jmx y el reporte docs/reporte-rendimiento-carga.md.
src/domain/ Reglas de negocio y calculo tarifario
src/server/ Servidor HTTP y utilidades API
src/storage/ Persistencia JSON local
public/ Interfaz web
test/ Pruebas unitarias, integracion e integracion HTTP
e2e/ Pruebas e2e reales de navegador con Playwright
docs/ Plan, trazabilidad y evidencia de pruebas
data/ Archivo JSON generado por la aplicacion
ParkingLot: administra cupos, tiquetes abiertos, cierres e historial.tariffCalculator: normaliza placas, valida tipos de vehiculo y calcula cobros.JsonStore: guarda y lee el estado del parqueadero endata/parking-lot.json.app.js: expone API HTTP y sirve la interfaz web.
Al liquidar una salida, ParkControl muestra una factura tipo tirilla con formato de recibo termico. El boton Imprimir tirilla abre una ventana de impresion optimizada para papel de 80 mm, incluyendo placa, tipo de vehiculo, entrada, salida, tiempo, subtotal, IVA y total.
GET /api/dashboard: ocupacion, tiquetes abiertos, historial y tarifas.POST /api/entries: registra entrada.POST /api/exits: liquida y cierra salida.
Ejemplo de entrada:
{
"plate": "ABC123",
"vehicleType": "car",
"ownerName": "Ana Perez"
}Ejemplo de salida:
{
"plate": "ABC123"
}