Volver a proyectos
Plataforma municipalPublicado Operativo

Oficina Virtual Municipal

Plataforma web municipal orientada a centralizar el acceso digital de ciudadanos y agentes municipales a servicios, trámites y módulos administrativos internos. El proyecto funciona como una oficina virtual: permite autenticación centralizada, gestión de perfiles, catálogo dinámico de aplicaciones, separación de accesos por tipo de usuario y módulos operativos para distintas áreas del municipio. Fue diseñado como un monolito modular con frontend Angular, backend NestJS y base de datos PostgreSQL, priorizando seguridad, trazabilidad, mantenibilidad y capacidad de crecimiento sin caer en una arquitectura innecesariamente compleja.

AngularNestJSTypeScriptPostgreSQLDockerNginx

Contexto

La Municipalidad necesitaba avanzar hacia una plataforma digital unificada que permitiera ordenar el acceso de ciudadanos y agentes a distintos servicios municipales. Antes del proyecto, muchos procesos dependían de circuitos manuales, sistemas separados o accesos poco integrados. Esto dificultaba la trazabilidad, el control de permisos, la experiencia del vecino y la posibilidad de escalar nuevos módulos de manera ordenada.

Complejidad

Alta

Mi rol en el proyecto

Arquitectura de software, desarrollo full-stack y diseño técnico de la solución

El problema

El municipio necesitaba resolver varios problemas al mismo tiempo: Falta de un punto único de acceso para ciudadanos. Procesos internos distribuidos entre distintas áreas y herramientas. Necesidad de diferenciar claramente usuarios ciudadanos y usuarios agentes. Requerimiento de permisos granulares según rol, área y responsabilidad. Manejo de información sensible con trazabilidad y controles de acceso. Dificultad para agregar nuevos módulos sin aumentar el desorden técnico.

La solución

Se desarrolló una plataforma web modular con autenticación centralizada, backend API, frontend administrativo/ciudadano y una base de datos relacional. La solución incluye: Portal de acceso para ciudadanos y agentes. Catálogo dinámico de aplicaciones y módulos. Separación de permisos por audiencia y perfil. Módulos internos para operación municipal. Registro de acciones relevantes para auditoría. Diseño preparado para sumar nuevas áreas y servicios. Infraestructura contenerizada para facilitar despliegue y mantenimiento.

Restricciones

  • No se expone información sensible de infraestructura.
  • Los datos personales requieren controles estrictos de acceso.
  • La plataforma debe contemplar ciudadanos y agentes con necesidades diferentes.
  • El crecimiento del sistema debe respetar los límites entre módulos.
  • La solución debe ser mantenible por un equipo reducido.
  • Los despliegues deben ser repetibles y documentados.
  • La arquitectura debe permitir sumar módulos sin rediseñar todo el sistema.

Arquitectura

La arquitectura se resolvió como un monolito modular. El backend está construido con NestJS y organizado por dominios funcionales, separando responsabilidades entre controladores, servicios, reglas de negocio, persistencia y contratos internos. El frontend está desarrollado en Angular con estructura modular, rutas separadas por dominio y componentes reutilizables. La persistencia se gestiona con PostgreSQL, utilizando migraciones versionadas para mantener control sobre la evolución del esquema. La infraestructura se apoya en contenedores Docker, reverse proxy, configuración por entorno y procesos documentados de despliegue, respaldo y mantenimiento.

Decisiones técnicas

  • Usar Angular para el frontend principal.
  • Usar NestJS para el backend API.
  • Adoptar TypeScript en frontend y backend.
  • Usar PostgreSQL como base de datos relacional principal.
  • Organizar el backend como monolito modular.
  • Separar módulos por dominio funcional.
  • Usar migraciones versionadas para cambios de base de datos.
  • Centralizar autenticación e identidad.
  • Implementar autorización local según reglas del sistema.
  • Contenerizar la aplicación para simplificar despliegue.
  • Documentar procesos críticos de operación y mantenimiento.

Seguridad

  • Autenticación centralizada.
  • Autorización por roles y permisos.
  • Validación de entrada en backend.
  • Controles de acceso sobre recursos sensibles.
  • Registro de acciones relevantes para auditoría.
  • Separación de configuración por entorno.
  • Buenas prácticas de despliegue con variables externas.
  • Protección de datos personales.
  • Revisión de dependencias y controles de calidad.
  • Diseño orientado a minimizar exposición pública innecesaria.

Resultado

El resultado es una plataforma municipal funcional, preparada para operar como punto de entrada digital para ciudadanos y agentes. El sistema permite ordenar accesos, centralizar módulos, mejorar la trazabilidad de operaciones y sentar una base técnica más mantenible para futuros desarrollos municipales. También dejó una arquitectura reutilizable para nuevos servicios internos, evitando que cada área tenga que resolver autenticación, permisos, estructura y auditoría desde cero.

Aprendizajes

Un monolito modular bien diseñado puede ser más adecuado que microservicios para una organización municipal. La seguridad debe resolverse principalmente en el backend; el frontend solo acompaña la experiencia de usuario. Separar identidad, permisos y módulos funcionales ayuda a sostener el crecimiento del sistema. La documentación técnica es clave cuando el proyecto crece en cantidad de módulos. En sistemas públicos, la trazabilidad y la mantenibilidad son tan importantes como la funcionalidad visible. La arquitectura debe adaptarse al contexto real de uso, no solo a criterios técnicos ideales.

Mejoras futuras

Ampliar la cantidad de trámites y servicios disponibles para ciudadanos. Consolidar nuevos módulos administrativos por área. Mejorar la experiencia de usuario en flujos complejos. Profundizar accesibilidad y usabilidad. Automatizar más controles de calidad en el pipeline. Incorporar más métricas operativas y alertas. Fortalecer documentación funcional para usuarios internos.