Expenses and Services
This area models property services, recurring utilities, bills, consumption, and manually tracked operational expenses.
property_services
Purpose
Represents active services or utilities linked to a property or property unit.
Suggested attributes
| Field | Description |
|---|---|
id | Primary identifier. |
property_id | Linked property. |
property_unit_id | Optional unit when the service is room/unit-specific. |
provider_party_id | Provider party. |
service_type | ELECTRICITY, GAS, WATER, INTERNET, PHONE, CONDOMINIUM, WASTE_TAX, PROPERTY_TAX, INSURANCE, or OTHER. |
contract_code | Provider contract code. |
pod_pdr_meter_code | POD/PDR/meter identifier where relevant. |
customer_code | Provider customer code. |
start_date | Service start date. |
end_date | Service end date. |
status | ACTIVE, INACTIVE, or SUSPENDED. |
billing_frequency | MONTHLY, BIMONTHLY, QUARTERLY, YEARLY, or CUSTOM. |
expected_amount | Expected recurring amount. |
currency | Currency. |
notes | Free-form notes. |
Relationships
| Relationship | Description |
|---|---|
property_services.property_id to properties.id | Each service belongs to one property. |
property_services.property_unit_id to property_units.id | Optional unit-specific service. |
property_services.provider_party_id to parties.id | Provider is a party. |
property_services to expected_expenses | Services can generate expected expenses. |
property_services to utility_bills | Services can have received bills. |
Notes and design rationale
Providers remain parties. Provider-specific details can be stored in service_provider_profiles.
utility_bills
Purpose
Represents bills received from service providers.
Suggested attributes
| Field | Description |
|---|---|
id | Primary identifier. |
property_service_id | Linked property service. |
provider_party_id | Provider party. |
property_id | Linked property. |
document_id | Linked bill document. |
bill_number | Provider bill number. |
issue_date | Bill issue date. |
due_date | Bill due date. |
period_start | Billing period start. |
period_end | Billing period end. |
total_amount | Bill total amount. |
currency | Currency. |
status | RECEIVED, PAID, OVERDUE, or DISPUTED. |
notes | Free-form notes. |
Relationships
| Relationship | Description |
|---|---|
utility_bills.property_service_id to property_services.id | Each bill belongs to a service. |
utility_bills.provider_party_id to parties.id | Provider party. |
utility_bills.property_id to properties.id | Property attribution. |
utility_bills.document_id to documents.id | Optional document link. |
utility_bills to utility_consumptions | A bill can contain many consumption lines. |
Notes and design rationale
Bills store the received document-level fact. Payment matching still happens through expected expenses, bank transactions, and split lines.
utility_consumptions
Purpose
Tracks consumption data extracted from utility bills.
Suggested attributes
| Field | Description |
|---|---|
id | Primary identifier. |
utility_bill_id | Linked utility bill. |
consumption_type | ELECTRICITY_KWH, GAS_SMC, WATER_M3, INTERNET_GB, PHONE_MINUTES, or OTHER. |
meter_start | Starting meter value. |
meter_end | Ending meter value. |
consumption_value | Consumed quantity. |
unit_of_measure | Unit of measure. |
unit_price | Unit price. |
amount | Amount for the consumption line. |
Relationships
| Relationship | Description |
|---|---|
utility_consumptions.utility_bill_id to utility_bills.id | One bill can have many consumption lines. |
Notes and design rationale
Consumption lines support anomaly detection, tenant recharge logic, and long-term usage trends.
expenses
Purpose
Optional operational expense entity for manually tracked expenses, invoices, or non-utility costs.
Suggested attributes
| Field | Description |
|---|---|
id | Primary identifier. |
property_id | Linked property. |
property_unit_id | Optional unit attribution. |
supplier_party_id | Supplier party. |
category_id | Expense category. |
expense_date | Expense date. |
amount | Expense amount. |
currency | Currency. |
description | Expense description. |
bank_transaction_id | Optional actual transaction link. |
document_id | Optional invoice/receipt document. |
status | Operational status. |
notes | Free-form notes. |
created_at | Creation timestamp. |
updated_at | Last update timestamp. |
Relationships
| Relationship | Description |
|---|---|
expenses.property_id to properties.id | Each expense belongs to a property. |
expenses.property_unit_id to property_units.id | Optional unit-level expense. |
expenses.supplier_party_id to parties.id | Supplier party. |
expenses.category_id to transaction_categories.id | Mandatory category. |
expenses.bank_transaction_id to bank_transactions.id | Optional actual bank transaction. |
expenses.document_id to documents.id | Optional supporting document. |
Notes and design rationale
Use expenses for manually tracked operational facts. Use expected_expenses for forecast and reconciliation schedules. The two may coexist when an expected item later becomes an invoice or manually managed expense.