Modelos de datos
Serconsa utiliza SQLAlchemy 2.0 con estilo Mapped y Pydantic v2 para los esquemas de API. Las tablas comparten una base común con auditoría y borrado lógico.
Mixins base
Sección titulada «Mixins base»Definidos en backend/app/models/base.py:
Base:DeclarativeBasede SQLAlchemy.AuditMixin: añadecreated_at,updated_at,created_by,updated_by.SoftDeleteMixin: añadedeleted_atpara borrado lógico.UUIDPrimaryKeyMixin: PKidde tipo UUID v4.
class Budget(Base, AuditMixin, SoftDeleteMixin, UUIDPrimaryKeyMixin): __tablename__ = "budgets"Convenciones de nomenclatura
Sección titulada «Convenciones de nomenclatura»- Tablas en
snake_caseplural:budgets,budget_items,users. - Claves foráneas:
{entidad}_id. - Timestamps automáticos:
created_at,updated_at. - Auditoría:
created_by,updated_by. - Borrado lógico:
deleted_aten entidades principales.
Entidades principales
Sección titulada «Entidades principales»| Entidad | Fichero | Descripción |
|---|---|---|
| Presupuesto | backend/app/models/budget.py |
Cabecera del presupuesto, estado, totales, configuración. |
| Partida / Capítulo | backend/app/models/budget_item.py |
Árbol jerárquico de conceptos. |
| Medición | backend/app/models/budget_measurement.py |
Líneas de medición N×L×A×H por partida. |
| Descompuesto | backend/app/models/budget_breakdown.py |
Recursos que componen una partida. |
| Certificación | backend/app/models/certification.py |
Certificaciones mensuales y líneas. |
| Variables | backend/app/models/budget_variable.py |
Variables de cálculo del presupuesto. |
| Usuario / Rol / Permiso | backend/app/models/user.py, role.py, permission.py |
RBAC. |
| Proyecto | backend/app/models/project.py |
Datos del proyecto de obra. |
Diagrama relacional simplificado
Sección titulada «Diagrama relacional simplificado»Project 1──────* Budget 1──────* BudgetItem 1──────* BudgetBreakdown │ * BudgetMeasurement 1──* BudgetMeasurementLine │ * BudgetItemScenario
Budget 1──────* BudgetVariable
Project 1──────* Certification 1──────* CertificationLine │ * CertificationSummary * CertificationCollection
User *──────* Role *──────* Permission