// Expediente de evidencia
Sistema Gubernamental Confidencial
Expedientes administrativos digitales para una unidad con operación local: consulta, actualización según rol, documentos protegidos, auditoría verificable y recuperación guiada. El software fue desplegado en red institucional aislada; esta ficha técnica valida su funcionamiento a través de una copia de laboratorio independiente.
- Para quién
Personal administrativo y jefatura de una unidad que consulta expedientes en una red local aislada.
- Mi responsabilidad
Desarrollo full-stack integral y autónomo: arquitectura de API Express 5, persistencia Prisma/SQLite, SPA local-first, auditoría criptográfica HMAC-SHA256, respaldos cifrados y automatización de despliegue en Windows.
- Estado actual
Software desarrollado, probado y operado localmente en red institucional aislada. Identidad institucional reservada.
- Qué permite hacer
Consulta compartida de carpetas y movimientos; el ahorro de tiempo cercano al 60 % es una estimación personal basada en la operación observada sin medición formal conservada.
Contexto
Sistema administrativo y documental diseñado para una unidad con red local aislada. La interfaz y la API pueden operar con recursos locales. La plantilla conserva una fuente externa opcional que no carga sin internet; las funciones centrales no dependen de ella. Identidad institucional, expedientes y topología quedan reservados.
Problema
El trabajo previo dependía de archivadores físicos y planillas separadas. Eso dificultaba ubicar un expediente, conocer el estado de documentos y reconstruir movimientos. La centralización busca reducir consultas manuales y discrepancias de versión. No hay medición conservada del tiempo previo ni estudio formal de incidentes.
Mi rol
Diseño y desarrollo full-stack del sistema integral 100% individual y autónomo: arquitectura de API REST en Express 5, modelos de persistencia local en Prisma/SQLite, interfaz SPA local-first con iconos vectoriales auto-alojados, motor de auditoría criptográfica HMAC-SHA256, canal de respaldos cifrados con AES-256-GCM y automatización de despliegue en Windows Server y PCs cliente mediante Windows Service y scripts BAT. No existió delegación en terceros en la arquitectura ni en la programación. La identidad de la institución, la información del personal y el código fuente permanecen reservados.
Restricciones
La operación prevista usa una red institucional aislada y equipos Windows. No se publican datos de personal, capturas con información real, código reservado, credenciales, direcciones ni detalles de infraestructura. La confidencialidad también limita la comprobación pública del despliegue. El uso sin internet exige activos locales; una fuente tipográfica opcional puede faltar.
Solución
El panel reúne secciones, personas, estados de checklist, documentos y movimientos. La búsqueda normaliza texto y filtra datos ya cargados en el navegador. El perfil administrador puede modificar y exportar; el perfil de lectura consulta recursos permitidos. Los archivos se almacenan aparte y se entregan tras autenticación. El sistema registra eventos para inspección posterior.
Arquitectura
Express 5 sirve HTML/CSS/JS y la API. Prisma escribe los registros en SQLite; los documentos se guardan en disco con referencias en la base. Las rutas aplican controles HTTP, identidad y rol antes de la operación. La auditoría HMAC-SHA256 se intenta después de cambios relevantes. Un proceso programado crea copias de base y archivos; el cifrado AES-256-GCM depende de una clave válida. HTTPS depende de certificados configurados. El diagrama representa rutas alternativas de datos y una tarea de respaldo separada.
Leer el diagrama y sus límites
Las solicitudes del puesto autorizado ingresan a la API Express para validar sesión y rol. Si el acceso es válido, las consultas o cambios administrativos se ejecutan sobre SQLite (vía Prisma) o documentos protegidos. La auditoría se registra con posterioridad a la operación. La respuesta retorna datos o error a la capa de presentación. El respaldo de base y archivos opera como un proceso programado separado.
Inicio y recorrido: La solicitud comienza en el puesto de trabajo autorizado mediante el cliente web, conectando a la API Express para verificar la sesión y el rol del operador antes de admitir cualquier acción.
Componentes y conexiones: Si el permiso no es válido, se deniega inmediatamente el acceso. Si es válido, la API ejecuta la consulta o cambio administrativo sobre SQLite (vía Prisma) o el almacenamiento local de documentos protegidos. La auditoría se escribe de forma desacoplada después de completar la operación.
Simplificaciones del mapa: Se agrupan los diferentes tipos de trámites y consultas administrativas en un único bloque operativo de alto nivel para preservar la confidencialidad del organismo y sus procedimientos internos.
Estado de validación: La autenticación por sesión, las consultas tipadas en SQLite con Prisma, la gestión de documentos locales y la muestra de búsqueda se verificaron localmente en tests automatizados con datos sintéticos.
Alcance y límites: El diagrama no demuestra alta disponibilidad, réplica distribuida ni aislamiento en red real. La auditoría posterior no comparte transacción atómica con el cambio de datos (un fallo en auditoría no revierte la operación) y el respaldo programado opera en un proceso separado cuya restauración requiere verificación independiente.
Mapa de arquitectura de alto nivel. Sistema administrativo confidencial; autenticación, persistencia SQLite y búsqueda probadas localmente con datos sintéticos.
Flujo crítico y procesamiento
1. Una persona inicia sesión; el servidor valida la credencial y emite una sesión JWT revocable.
2. En rutas protegidas, Express comprueba la sesión y el rol. Las mutaciones con cuerpo definido pasan por validación Zod.
3. El operador consulta o actualiza personas, checklist y movimientos. Prisma persiste registros en SQLite; la carga de archivos añade comprobación del tipo binario y almacenamiento en disco. La interfaz presenta y filtra lo recibido.
4. Tras una operación relevante, se intenta registrar un evento encadenado. Esa escritura tiene transacción propia: una falla de auditoría no revierte automáticamente el cambio principal.
5. En otro momento, la tarea de respaldo recoge base y archivos. La restauración se ejecuta y comprueba mediante un comando separado.
Concurrencia e integridad de datos
La cola de auditoría serializa escrituras dentro de un proceso. En la copia aislada, 25 promesas concurrentes produjeron 25 eventos encadenados y una verificación íntegra. No se probaron varios procesos ni carga sostenida. La operación administrativa y la auditoría no son atómicas entre sí. El control de acceso es por rol compartido, no por propiedad individual del expediente; no se afirma aislamiento entre usuarios del mismo rol. Recuperar requiere base y archivos correspondientes.
Decisiones de ingeniería
SQLite con Prisma mantiene la persistencia en el servidor local sin operar otro motor; el coste es que no hay evidencia de escalado o WAL configurado explícitamente. Separar archivos del registro permite controlar descargas y respaldar ambos, pero exige restaurarlos juntos. El encadenamiento HMAC detecta cambios en eventos conservados, sin hacerlos inmutables. Los scripts Windows automatizan tareas repetibles, con decisiones manuales del operador. Estas razones se reconstruyen del código y las restricciones documentadas: no existen ADR formales que fechen cada elección.
Seguridad y defensa en profundidad
Se implementan JWT revocables, roles admin/viewer, validación Zod en cuerpos definidos, límites de solicitudes y cabeceras Helmet. Los archivos requieren sesión. La cabecera X-Requested-With es una barrera de solicitud, no un token CSRF. La cadena HMAC-SHA256 detecta alteraciones de eventos conservados con claves conocidas; no prueba que cada operación quedó registrada ni evita su borrado. Los respaldos solo se cifran con una clave válida. Una red aislada reduce exposición externa, sin sustituir controles del puesto o auditoría operativa.
Pruebas y alcance
Se copió el código fuente a una carpeta temporal separada y se instaló su lockfile. Las pruebas usaron SQLite temporal, usuarios ficticios y loopback. Aprobaron 17/17 pruebas originales en dos archivos: sesión, roles, CRUD, persistencia, exportación de auditoría, carga y descarga, validadores y utilidades. Aprobaron 10/10 comprobaciones adicionales en el código real: 25 escrituras concurrentes de auditoría en un proceso, alteración y borrado de eslabones, rotación de claves y sanitización. Pasaron seis simulaciones BAT y los chequeos de mensajes/filtros. El esquema Prisma fue válido al aportar una URL de prueba; sin ella, la validación inicial falló por configuración. npm audit --omit=dev informó cuatro avisos y salida no limpia. No se ejecutó el despliegue ni el servicio institucional.
| Comprobación | Resultado | Alcance |
|---|---|---|
| Suite original | 17/17 aprobadas | 12 casos de integración y 5 de utilidades, con base SQLite temporal y servidor en loopback. |
| Comprobaciones adicionales | 10/10 aprobadas | Módulos reales: 25 escrituras concurrentes en un proceso, integridad, rotación y sanitización. |
| Instalador cliente | 6/6 simulaciones aprobadas | BAT con archivo hosts temporal y modo de simulación; no modifica puestos reales. |
| Frontend y esquema | Chequeos aprobados | Sintaxis del cliente; mensajes y filtros estáticos; esquema Prisma con URL SQLite ficticia. |
| Dependencias de producción | 4 avisos; salida fallida | npm audit --omit=dev: 1 bajo, 1 moderado y 2 altos. No se actualizó la fuente. |
| Restauración cifrada | Evidencia histórica | El registro anterior documenta una restauración aislada; no se repitió en esta revisión. |
| Operación institucional | No comprobada | Sin acceso al servicio, equipos reales, métricas de uso o prueba de carga sostenida. |
Despliegue y operación
El repositorio prepara el servidor mediante un asistente PowerShell y los clientes mediante BAT. El operador debe decidir parámetros de instalación y certificados; HTTPS depende de su configuración. Hay tarea programada de respaldo, cifrada solo con clave válida; verificar la restauración es un paso aparte. Desarrollé, probé y operé el software localmente en red institucional aislada. Esta comprobación técnica validó una copia de laboratorio separada y no accedió a la instalación institucional.
Resultado
El sistema implementa expedientes digitales consultables, estados documentales, movimientos y eventos conservados cuya integridad puede verificarse. Estimo cerca de un 60 % menos tiempo de procesamiento y consulta frente al trabajo manual anterior. Es una estimación personal: no conservo línea base, periodo, muestra ni método que permitan auditar ese porcentaje. Tampoco se midió aquí el uso o desempeño de la instalación institucional.
Evidencia y límites
Implementado: rutas, esquema, interfaz, auditoría, respaldos y scripts en la copia revisada. Comprobado localmente: suite original, arnés adicional, sintaxis, filtros y esquema, siempre con datos ficticios. Simulado: configuración BAT de los puestos. Desarrollo y despliegue: desarrollo 100% individual, despliegue institucional en red aislada y estimación empírica del 60 % de optimización. Pendiente: estado actual del servicio, restauración contemporánea, carga sostenida y resolución de avisos de dependencias. La interfaz web pública del repositorio privado no fue accesible. No se publican expedientes ni código reservado.
Observaciones de campo
El despliegue se realizó y operó en red institucional aislada. Esta validación técnica se ejecutó en una copia de laboratorio separada, sin interactuar con los equipos de producción.
Pruebas de concurrencia y carga
25 llamadas simultáneas a la auditoría produjeron 25 registros y una cadena verificable en SQLite temporal. La cola del módulo las serializa dentro de un proceso. Esta prueba no acredita concurrencia entre servidores ni rendimiento bajo carga continua.
Calidad de software y UX
La interfaz agrupa registros por sección y permite buscar por nombre o grado con normalización de acentos y varios términos. Los filtros de estado y los mensajes de error se comprobaron con herramientas locales; no hubo una sesión de usabilidad con operadores. La muestra siguiente explica la búsqueda sobre filas cargadas y su prueba con datos ficticios. No representa permisos ni expone lógica de seguridad.
Muestra de código y prueba de ingeniería
Muestra pública aislada de calidad de software y experiencia de usuario (UX): búsqueda por varios términos, sin distinguir acentos ni mayúsculas, sobre filas ya cargadas. Resume un comportamiento visible del cliente; no es el módulo institucional literal ni implementa permisos.
// Ejemplo aislado de UX: filtrar filas ya cargadas en el navegador. |
export function findPeople(rows, query) { |
const normalize = (value) => String(value ?? '') |
.normalize('NFD') |
.replace(/[\u0300-\u036f]/g, '') |
.replace(/[^\p{L}\p{N}\s]/gu, '') |
.toLowerCase() |
.trim(); |
const terms = normalize(query).split(/\s+/).filter(Boolean); |
if (terms.length === 0) return rows; |
return rows.filter(({ grade, name }) => { |
const visibleText = normalize(`${grade} ${name}`); |
return terms.every((term) => visibleText.includes(term)); |
}); |
} |
Prueba de la muestra aislada
import assert from 'node:assert/strict'; |
|
const rows = [ |
{ grade: 'Inspector', name: 'Ana Pérez' }, |
{ grade: 'Analista', name: 'Mario Soto' }, |
]; |
assert.deepEqual(findPeople(rows, 'PEREZ inspector'), [rows[0]]); |
assert.deepEqual(findPeople(rows, 'ana inexistente'), []); |
assert.deepEqual(findPeople(rows, ' '), rows); |
console.log('3/3 casos de búsqueda sintéticos aprobados'); |
Se ejecutó exactamente el código mostrado junto con su prueba: 3/3 casos sintéticos aprobados (acentos y orden de términos, ausencia de coincidencias, consulta vacía). No utiliza datos institucionales.