Models#
Data model documentation for Construbot.
Overview#
Construbot’s data models are organized into several apps:
users: User, Company, Customer, NivelAcceso
proyectos: Contrato, Contraparte, Sitio, Estimate, Concept, Retenciones
core: Base models and utilities
Multi-Tenant Architecture#
All business models include:
class BusinessModel(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
# ... other fields
See Multi-Tenancy for details.
Key Models#
User Models (users app)#
Customer - Top-level account
Company - Business entity (tenant)
User - Custom user model with email authentication
NivelAcceso - Permission levels (1-6)
See users for complete reference.
Business Models (proyectos app)#
Contrato - Contract/Project (hierarchical using django-treebeard)
Contraparte - Counterparty (Client, Subcontractor, Piecework Contractor)
Sitio - Construction site
Estimate - Progress payment/estimate
Concept - Line item in contract catalog
Retenciones - Financial retentions/withholdings
See proyectos for complete reference.
Model Relationships#
Customer
└── Company
├── User (M2M)
├── Contrato
│ ├── Contraparte (FK)
│ ├── Sitio (FK)
│ ├── Estimate (reverse FK)
│ └── Concept (reverse FK)
├── Contraparte
└── Sitio
Common Patterns#
Company-scoped queries:
# Always filter by company
contracts = Contrato.objects.filter(company=request.user.active_company)
Tree operations:
# Hierarchical contracts
children = contract.get_children()
ancestors = contract.get_ancestors()
descendants = contract.get_descendants()
Unique per company:
class Meta:
unique_together = ('company', 'folio')
See Also#
Database Schema - Database design
Multi-Tenancy - Multi-tenant architecture
API - API reference