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 equivalentesfecha_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
Enumde SQLAlchemy. - Campos sensibles: ciertos valores se cifran en reposo (
EncryptedString, p. ej. el secreto TOTP).