Presupuesto (Budget)
Fichero: backend/app/models/budget.py.
Un presupuesto es la unidad principal del módulo de producción. Agrupa partidas, mediciones, descompuestos, certificaciones y variables.
Campos principales
Sección titulada «Campos principales»| Campo | Tipo | Descripción |
|---|---|---|
id |
UUID | PK |
project_id |
UUID | Proyecto asociado (opcional al inicio). |
opportunity_id |
UUID | Oportunidad CRM de origen. |
client_id |
UUID | Cliente. |
codigo |
string(20) | Código único del presupuesto. |
titulo |
string(255) | Título descriptivo. |
version |
int | Número de versión. |
estado |
string(30) | draft, approved, finalizado, etc. |
total |
Numeric(18,2) | Total del presupuesto. |
observaciones |
text | Notas libres. |
origen_bc3 |
bool | Importado desde BC3. |
base_codigo |
string(40) | Código base para versionado. |
beneficio_industrial_pct |
Numeric(5,2) | BI por defecto. |
gastos_generales_pct |
Numeric(5,2) | GG por defecto. |
condiciones_generales |
text | Condiciones contractuales. |
es_version_activa |
bool | Indica la versión vigente. |
es_copia_proyecto |
bool | Copia de proyecto (editable en más estados). |
presupuesto_origen_id |
UUID | Presupuesto padre (versiones). |
currency_id |
UUID | Moneda. |
exchange_rate |
Numeric(12,6) | Tipo de cambio. |
amount_base |
Numeric(18,2) | Importe base. |
default_unit_id |
UUID | Unidad por defecto. |
default_iva_type_id |
UUID | Tipo de IVA por defecto. |
decimal_places |
int | Decimales de configuración (2 por defecto). |
Relaciones
Sección titulada «Relaciones»project: Mapped["Project | None"]presupuesto_origen: Mapped["Budget | None"]currency: Mapped["Currency | None"]default_unit: Mapped["Unit | None"]default_iva_type: Mapped["IvaType | None"]opportunity: Mapped["Opportunity | None"]client: Mapped["Client | None"]items: Mapped[list["BudgetItem"]]variables: Mapped[list["BudgetVariable"]]Estados de un presupuesto
Sección titulada «Estados de un presupuesto»draft: en elaboración.approved: aprobado; permite crear proyecto.finalizado: cerrado, bloquea edición (salvo copia de proyecto).- Otros estados transitorios manejados por
BudgetWorkflowService.
Configuración por presupuesto
Sección titulada «Configuración por presupuesto»El presupuesto almacena la configuración por defecto que heredan las partidas: unidad, IVA y decimales. Véase Variables y configuración y el endpoint /budgets/{id}/configuracion.
Ejemplo de uso
Sección titulada «Ejemplo de uso»from app.models.budget import Budget
budget = Budget( codigo="PRE-2026-001", titulo="Reforma edificio A", estado="draft", decimal_places=2,)