Ir al contenido

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.

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).
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"]]
  • draft: en elaboración.
  • approved: aprobado; permite crear proyecto.
  • finalizado: cerrado, bloquea edición (salvo copia de proyecto).
  • Otros estados transitorios manejados por BudgetWorkflowService.

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.

from app.models.budget import Budget
budget = Budget(
codigo="PRE-2026-001",
titulo="Reforma edificio A",
estado="draft",
decimal_places=2,
)