Saltar al contenido principal

Gestion de Catalogos Maestros (Backoffice)

1. Definicion y Proposito

Este modulo administra la fuente unica de catalogos que consume toda la plataforma (registro, buscador, agenda, validaciones y dashboards).

  • Evita texto libre y duplicados.
  • Mantiene jerarquias consistentes entre paises y especialidades.
  • Controla habilitacion/deshabilitacion sin perder historico.

2. Modelo Canonico de Catalogos

2.1 Taxonomia medica (2 niveles obligatorios)

  • Nivel 0: Area medica.
  • Nivel 1: Especialidad.
  • No se usa tercer nivel en el modelo transaccional.

2.2 Geografia (canonico, multi-pais)

  • Nivel 0: Pais (country).
  • Nivel 1: Region administrativa (region) (Departamento / Estado / Provincia).
  • Nivel 2: Localidad (locality) (Municipio / Ciudad / Partido / Comuna).

El backend conserva nombres tecnicos estables (level + node_type) y la UI renderiza etiquetas por pais.

2.3 Etiquetas por pais (display labels)

  • GT: region=Departamento, locality=Municipio
  • MX: region=Estado, locality=Municipio
  • CO: region=Departamento, locality=Municipio
  • AR: region=Provincia, locality=Municipio/Partido (segun catalogo cargado)

Recomendacion: exponer /api/v1/meta/location-levels?country_code=XX para que frontend no codifique reglas hardcoded.

3. Logica Visual y Procesos

3.1 Flujo (Miro)

3.1.1 Pais

3.1.2 Departamento/Region

3.1.3 Municipalidad/Localidad

3.2 Resumen textual (fallback)

  • Pais: alta individual, valida ISO alpha-2 unico.
  • Region/Localidad: alta individual y bulk, validando padre obligatorio.
  • Geografia: Pais -> Region -> Localidad.
  • Taxonomia: Area -> Especialidad.
  • Borrado logico preferido (enabled=false) para no romper referencias.

4. Actores y Permisos (RBAC)

ActorPermiso
SUPERADMINControl total sobre Geo, Taxonomia y Seguros
CATALOG_ADMINCRUD operativo de catalogos

5. Reglas de Negocio

  • BR-CAT-01: No se puede eliminar nodo geo con hijos o referencias; usar enabled=false.
  • BR-CAT-02: Cascada estricta en selectores (pais -> region -> localidad).
  • BR-CAT-03: Solo especialidades creadas por admin.
  • BR-CAT-04: country.code debe ser ISO 3166-1 alpha-2 y unico.
  • BR-CAT-05: Normalizar nombre + slug para busqueda.
  • BR-CAT-06: Si un pais se deshabilita, el usuario debe reconfirmar pais en la siguiente sesion.

6. Diccionario UX-Tecnico

[CAT-100] Dashboard catalogos

Elemento UIID tecnicoComportamiento
Card Geografialink_geoRedirige a CAT-200
Card Especialidadeslink_specialtiesRedirige a CAT-300
Card Aseguradoraslink_insurancesRedirige a CAT-400

[CAT-200] Geografia

Elemento UIID tecnicoValidacionError
Nombre Paiscountry_nameObligatorio y unico"Pais ya registrado"
Codigo ISOiso_code2 caracteres"Formato ISO invalido"
Lista Bulkitems_arrayMinimo 1 item"La lista no puede estar vacia"
Boton eliminar itemui_remove_itemSolo cliente antes de persistirN/A

[CAT-300] Taxonomia (2 niveles)

Elemento UIID tecnicoValidacionError
Nombrecatalog_nameUnico en nivel"Nombre duplicado"
DescripciondescriptionMax 250 chars"Descripcion muy larga"
Imagen portadaimage_urlSVG/WebP"Archivo no soportado"
Relacion padreparent_idObligatorio para especialidad"Debe seleccionar area"

7. Acciones Tecnicas (Backend)

  1. Soft-disable por defecto (enabled=false) antes que borrado fisico.
  2. Invalida cache de catalogos despues de cada mutacion.
  3. Bulk transaccional para regiones/localidades.
  4. No crear especialidad si su area padre esta inactiva.
  5. Resolver labels por pais desde catalogo, no por condicionales hardcoded en frontend.
  6. Auditoria obligatoria con trace_id, user_id, ip, user_agent.

8. Contrato API (OpenAPI)

EndpointMetodoProposito
/api/v1/admin/catalogs/geoGETListar geografia por level, country_code, parent_id, enabled
/api/v1/admin/catalogs/geoPOSTCrear nodo geo generico
/api/v1/admin/catalogs/geo/countriesPOSTCrear pais
/api/v1/admin/catalogs/geo/departmentsPOSTCrear region (individual)
/api/v1/admin/catalogs/geo/departments/bulkPOSTCrear regiones en lote
/api/v1/admin/catalogs/geo/municipalitiesPOSTCrear localidad (individual)
/api/v1/admin/catalogs/geo/municipalities/bulkPOSTCrear localidades en lote
/api/v1/admin/catalogs/geo/{id}PATCHActualizar nombre/estado
/api/v1/admin/catalogs/geo/{id}DELETEEliminar si no tiene hijos/referencias
/api/v1/admin/catalogs/specialtiesGET/POSTListar/crear taxonomia medica
/api/v1/meta/countriesGETLista publica de paises habilitados
/api/v1/meta/location-levelsGETLabels de region/localidad por pais

9. NFR, Seguridad y Observabilidad

  • P95 lectura catalogos < 300ms; bulk < 800ms.
  • Cache hit rate > 80% para geo y taxonomia.
  • Rate limit soft en bulk: 10 ops/min por usuario admin.
  • Eventos: CAT_GEO_CREATED, CAT_GEO_UPDATED, CAT_SPECIALTY_CREATED, CAT_SPECIALTY_UPDATED.
  • Logs minimos: trace_id, user_id, role, resource, operation, bulk_size.

10. Checklist QA

  • Crear pais con ISO unico.
  • Bulk region/localidad hace rollback si un item falla.
  • No permite borrar nodo con hijos o referencias.
  • Taxonomia bloquea especialidad cuando area padre esta inactiva.
  • Selector usa labels por pais desde /meta/location-levels.
  • Cache se invalida correctamente tras mutacion.

11. Trazabilidad

  • Swagger UI: /swagger.html (acceso desde /swagger) y contrato YAML en /openapi.yaml.
  • Relacionados: registro.md, buscador.md, localizacion.md, esquema-de-base-de-datos.md.

12. Gobernanza de catalogos (operación y control)

12.1 Flujo de cambio

  1. Solicitud de cambio (ticket con motivo de negocio/regulatorio).
  2. Revisión funcional (PO) y técnica (Backend Lead).
  3. Ejecución por CATALOG_ADMIN o SUPERADMIN.
  4. Verificación en staging y publicación controlada.
  5. Registro en audit_logs y comunicación de impacto.

12.2 Controles obligatorios

  • Todo cambio en catálogos debe registrar before/after, reason, approver.
  • Cambios masivos (bulk) requieren doble aprobación (maker-checker).
  • No se permite hard delete si hay referencias activas; usar enabled=false.
  • Toda mutación crítica debe tener rollback documentado (snapshot lógico o script inverso).
  • Cada cambio relevante incrementa catalog_version (ej. geo: 2026.02.13.1).
  • Frontend puede invalidar caché por versión sin redeploy.
  • Historial de versiones debe ser consultable por backoffice para auditoría.