ADAntonydany

Case Study

SIGEMV2

Plataforma SaaS para gestión de servicios y equipos médicos: unidades, técnicos, gerente, finanzas y administración con trazabilidad completa.

Estado
En producción
Categoría
SaaS médico y gestión operativa
Rol
Desarrollador web fullstack
  • TypeScript Full-Stack
  • React 19 + Vite
  • Fastify 5 + Node 22
  • PostgreSQL 16 + Drizzle
  • Redis 7
  • Docker

SIGEMV2 es una plataforma multi-rol para gestión de servicios médicos, flota vehicular, inventario de equipos y viáticos, desarrollada como sistema SaaS y desplegada en VPS con Docker. Centraliza inventarios, personal, viáticos, flotilla vehicular, documentos y finanzas en una sola plataforma web segura, moderna e intuitiva.

El sistema opera para Medingenium S.A de C.V. y cuenta con manual de usuario público organizado por rol, con capturas de cada pantalla. La plataforma está en producción como servicio SaaS.

Objetivo del sistema

  • Centralizar la operación: equipos, personal, viáticos, flotilla, documentos y finanzas en un solo lugar.
  • Dar trazabilidad completa a cada servicio, desde la solicitud de la unidad médica hasta el completado en sitio.
  • Separar responsabilidades por rol, con accesos y acciones distintas para cada perfil.
  • Ofrecer información en tiempo real para mejores decisiones, con acceso seguro desde cualquier lugar.

Roles y módulos (verificado en el manual)

  • Unidad Médica: solicita servicios (equipo → tipo correctivo/preventivo → prioridad → descripción → fecha sugerida), ve sus equipos, da seguimiento y puede cancelar mientras no esté completado.
  • Técnico: ejecuta el servicio en sitio (agendar → en camino → iniciar → completar / cancelar), registra consumibles usados con validación de stock y usa el chat con gerente y contador por servicio.
  • Gerente: coordina servicios, asigna técnico, registra viáticos (monto + facturable), envía la solicitud de viáticos y conversa con el técnico.
  • Finanzas (Contador): autoriza o rechaza solicitudes de viáticos (método de pago: efectivo o depósito), gestiona catálogo de viáticos, consumibles y resumen de totales facturables / no facturables.
  • Administrador: alta y edición de todo el catálogo (equipos, técnicos, unidades, oficinas, flota, certificados, contadores), configuración de empresa, despacho inteligente de técnicos y gestión completa de servicios con timeline de cambios.

Arquitectura

  • Monorepo TypeScript con frontend/ (Vite + React) y backend/ (Fastify modular con 20 módulos: auth, admin, técnicos, gerentes, unidades, vehículos, equipos, viáticos, tickets de soporte, planes preventivos, etc.).
  • Frontend: React 19.2 + React Router 7 + TypeScript 6, Vite 8 + Tailwind CSS 4, Framer Motion 12, Leaflet + React-Leaflet (mapas OSM + Nominatim), QRCode.react y React-Markdown + Mermaid para manuales y diagramas. Dashboards por rol: admin, gerente, tecnico, finanzas, unidad, sadmin.
  • Backend: Node 22 + Fastify 5, Drizzle ORM 0.45 + Drizzle Kit (migraciones SQL versionadas), validación Zod 4, auth por sesión en Redis (@fastify/session + RedisSessionStore con ioredis, cookies httpOnly + Secure + SameSite=Lax, bcryptjs).
  • Datos: PostgreSQL 16-Alpine (persistencia) + Redis 7-Alpine (sesiones con TTL 12h / idle 30m, appendonly). Dataset 145k códigos postales precargados.
  • Despliegue en producción con Docker multi-stage en un solo contenedor (Nginx + Node 22-Alpine), con PostgreSQL y Redis externos, proxy same-origin /api/*, usuario non-root, healthchecks y headers de seguridad endurecidos. Nginx sirve la SPA y proxya /api a Fastify, con gzip, caché immutable para assets con hash y no-cache para index.html.
  • Dos puertas de acceso: Acceso Soporte (admin, gerente, técnico, finanzas) y Acceso Unidad (unidades médicas), con RBAC por middleware.
  • Manual de usuario público versionado junto a la plataforma, con tabla de contenidos por rol.

Decisiones de ingeniería

  • Máquina de estados explícita para el servicio: borrador → pendiente confirmación → asignado → agendado → en camino → en progreso → completado / cancelado, con recálculo automático de planes preventivos al completar.
  • Despacho inteligente: al asignar técnico se proponen los mejor calificados por certificados y cualidades coincidentes, distancia desde oficina y tipo (empleado / externo).
  • Validaciones en borde con Zod: stock de consumibles (sin sobregiro), viáticos con al menos un concepto antes de solicitar, contraseña mínima de 6 y CLABE de 18 dígitos para pagos por depósito.
  • Seguridad endurecida: @fastify/helmet con CSP estricta, CORS same-origin, anti-CSRF por Origin/Referer + X-Requested-With, rate-limit 100 req/min y uploads con @fastify/multipart (10MB/archivo).
  • Trazabilidad: historial timeline por servicio, chats por servicio (Gerente / Contador) y mensajes de sistema ante cada cambio de estado.
  • Calidad: Vitest + Testing Library + jsdom y Playwright E2E + @axe-core para accesibilidad.
  • Separación de contextos: catálogos (equipos, viáticos, consumibles, certificados, oficinas, flota) vs. operación diaria (servicios y solicitudes de viáticos).

Resultado

SIGEMV2 refleja mi capacidad como desarrollador fullstack para llevar un SaaS real a producción: del modelado por roles y el ciclo de vida del servicio, al despliegue en VPS con Docker multi-stage, la documentación pública por rol y la operación diaria con trazabilidad completa.

Vistas del producto

Toca cualquier miniatura para verla a tamaño completo.

Vista móvil