Saltar a contenido

Modelo de datos

Visión de las entidades núcleo de Gestión Civis y de cómo cada módulo añade sus propias tablas. Los modelos transversales viven en app/models.py; cada módulo define los suyos en app/modules/<modulo>/models.py (o ficheros equivalentes).

Alcance de esta página

Aquí se documentan las entidades transversales y el mapa general. El detalle de las tablas de cada módulo se documenta en su página técnica (ver el módulo Registro como referencia).

Entidades transversales

Modelo Descripción
Entidad Ayuntamiento / organismo (raíz del multi-tenant).
Usuario Usuario del sistema.
Rol / Permiso RBAC: roles con permisos.
RolFuncional Cargo institucional (Alcalde, Interventor…).
Departamento Unidad organizativa jerárquica (con código DIR3).
Expediente Contenedor principal de documentos/casos.
UnidadDocumental Documento individual dentro de un expediente.
Workflow / Procedimiento Estados y transiciones de tramitación.
FirmaElectronica / CircuitoFirma Firma de documentos.
Tercero Tercero (proveedor, ciudadano, empleado).
Asiento / AsientoLinea Asiento contable.
Factura / FacturaLinea Factura.
PeriodoContable Periodo contable.
BaseConocimiento Artículo de la base de conocimiento (chatbot IA).

Núcleo documental

erDiagram
    ENTIDAD ||--o{ EXPEDIENTE : ""
    EXPEDIENTE ||--o{ UNIDADDOCUMENTAL : ""
    EXPEDIENTE }o--|| TIPOEXPEDIENTE : ""
    EXPEDIENTE }o--|| ESTADOEXPEDIENTE : ""
    UNIDADDOCUMENTAL }o--o| WORKFLOW : ""
    WORKFLOW ||--o{ PASOWORKFLOW : ""
    WORKFLOW ||--o{ TRANSICIONWORKFLOW : ""
    UNIDADDOCUMENTAL ||--o{ FIRMAELECTRONICA : ""

Núcleo de identidad y acceso

erDiagram
    ENTIDAD ||--o{ USUARIO : ""
    USUARIO }o--|| ROL : ""
    ROL }o--o{ PERMISO : "rol_permisos"
    USUARIO }o--o{ PERMISO : "usuario_permisos"
    USUARIO }o--o| ROLFUNCIONAL : ""
    USUARIO }o--o| DEPARTAMENTO : ""
    DEPARTAMENTO ||--o{ DEPARTAMENTO : "jerarquía"

Ver el detalle de RBAC en Autenticación y autorización.

Núcleo contable

erDiagram
    PERIODOCONTABLE ||--o{ ASIENTO : ""
    ASIENTO ||--o{ ASIENTOLINEA : ""
    FACTURA ||--o{ FACTURALINEA : ""
    FACTURA }o--|| TERCERO : ""
    ASIENTO }o--o| FACTURA : ""

Núcleo de auditoría (MOS)

Tablas en app/core/mos/models.py: core_audit_log, core_audit_payload, core_history_event, core_history_payload, core_event_catalog, core_event_rule, core_event_condition, core_event_action, core_event_queue, core_cron_job. Detalle en MOS.

Migraciones

  • Gestionadas con Flask-Migrate / Alembic.
  • Las migraciones viven en migrations/versions/ y siguen una numeración incremental (118_..., 127_..., 128_...).
flask db migrate -m "descripción"   # generar migración tras cambiar modelos
flask db upgrade                     # aplicar

Importación de modelos en la factoría

Todos los modelos deben importarse dentro del app_context en create_app() para que SQLAlchemy y Alembic los detecten. Los módulos cuyos modelos se cargan vía import ... # noqa: F401 dependen de ese registro.

Convenciones de modelado

  • Multi-tenant: la mayoría de tablas llevan entidad_id.
  • Auditoría de filas: campos creado_en / actualizado_en (o equivalentes fecha_creacion / fecha_modificacion).
  • to_dict(): los modelos exponen serialización a diccionario para las respuestas de la API, a menudo con un parámetro para incluir relaciones.
  • Enums: estados y tipos se modelan como Enum de SQLAlchemy.
  • Campos sensibles: ciertos valores se cifran en reposo (EncryptedString, p. ej. el secreto TOTP).