Data Schema (Zoho Creator)
1. Streams
Strategic & Operational Portfolio Entity.
- Name:
name(Single Line, Mandatory) [e.g. "Roll-out of new website", "IT Operations"] - Code:
code(Single Line) [e.g. "1.25.6"] - Description:
description(Multi Line) - Owner(s):
owners(List/Multi-select Users) - Status:
status(Picking: Planning, Active, Closed) - Type:
stream_type(Picklist: Strategic, Operational) - Display Label:
display_label(Formula)- Logic:
if(code != null && code != "", code + " - " + name, name) - Usage: Main display field for lookups.
- Logic:
2. Providers
Central Entity for "just-in-time" provider management.
- Name:
provider_name(Text - Unique) - Notes:
notes(Textarea)
3. Fiscal_Years
Configuration Table (e.g., Oct 1st - Sep 30th).
- Name:
fy_name(String, PK) [e.g., "FY25"] - Start Date:
start_date(Date) - End Date:
end_date(Date) - Status:
status(Picklist: "Planning", "Open", "Closed")
4. Budget_Buckets
Budget Container (Header).
- Name:
bucket_name(Text, Mandatory) [e.g., "Website - Devel", "Cyber Security Tool"] - Stream:
stream(Lookup → Streams)- Binding: References
display_labelfrom Streams
- Binding: References
- Domain:
domain(Picklist)- Values: "IT", "AI", "Website", "M&A", "Trainings" (Sorted Ascending, Others Allowed)
- Owners:
owners(List: maurizio, margherita, chiara, alice, roberta) - Description:
description(Textarea) - Display Label:
display_label(Formula)- Logic:
bucket_name + if(stream != null," - " + stream.name,"") + if(domain != null && domain != ""," (" + domain + ")","") - Usage: Main display field for lookups.
- Logic:
5. Budget_Versions
Financial Snapshots (Transactional). Note: Financial metrics are calculated via workflow, not live formulas.
- Bucket Link:
budget_bucket(Lookup: Budget_Buckets) - Snapshot Month:
snapshot_month(Date) - Fiscal Year:
fiscal_year(Lookup: Fiscal_Years) - Expense Type:
expense_type(Picklist: "Capex", "Opex") - Proposed Amount:
proposed_amount(Currency - Manual Input, updated quarterly by budget manager) - Approved Amount:
approved_amount(Currency - Manual Input, updated quarterly by budget manager) - Review Status:
review_status(Picklist: Draft, In Review, Approved, Rejected, Archived) - Display Label:
display_label(Formula)- Logic:
budget_bucket.bucket_name + " - " + snapshot_month.toString("MMM yyyy") + " (" + fiscal_year.fy_name + " " + expense_type + ")"
- Logic:
Financial Metrics (Calculated)
- Total Contracts:
total_contracts_value(EUR, Default 0) - Committed:
committed_amount(EUR, Default 0, Derived) -> Sum of Approved/In Delivery/Closed contracts. - Remaining Estimate:
remaining_estimate(EUR, Default 0, Derived) ->approved - committed. - Spent Amount:
spent_amount(EUR, Default 0, Derived) -> Calculated based on Invoices. - Remaining Payments:
remaining_payments(EUR, Default 0, Derived) ->committed - spent. - Residual:
residual(EUR, Default 0, Derived) ->approved - spent. - Closing Forecast:
closing_forecast(EUR, Default 0, Derived) ->max(approved, committed).
System Fields
- Last Recalculated:
last_recalculated(DateTime, Private) -> Used for sync logic.
6. Contracts
Operational Core.
- Code:
contract_code(Text - Mandatory Unique) - Object:
object_name(Text - Mandatory) - Provider:
provider(Lookup: Providers, Allow New Entries) - Budget Bucket:
budget_bucket(Lookup: Budget_Buckets - Mandatory) - Status:
status(Picklist: Proposed, Approved, In Delivery, Closed) - Expense Type:
expense_type(Picklist: Capex, Opex - Mandatory) - Priority:
priority(Picklist: High, Medium, Low) - Service Type:
service_type(Picklist: Service Agreement, Software Licensing, Consulting, Equipment Rental - Others Allowed) - Invoice Type:
invoice_type(Picklist: Monthly, Quarterly, Yearly, Milestone) - Start Date:
start_date(Date) - End Date:
end_date(Date) - Total Contract Value:
total_contract_value(EUR - Mandatory) - Total Invoiced:
total_invoiced(EUR - Read Only, Calculated) - Notes:
notes(Textarea, Scope details and import context) - Contract Document:
contract_doc(URL) - Renewal Option:
renewal_option(Picklist: Automatic, Optional, Conditional, None) - Termination Notice:
termination_notice_period(Number) - Erosion Applied:
erosion_applied(Checkboxes, Private) -> Used for FIFO logic. - Original Currency Data:
original_currency_data(Multi Line Text, Optional) -> YAML format: original_amount, currency, date, rate. - Display Label:
display_label(Formula)- Logic:
if(contract_code != null && contract_code != "",input.object_name + " - " + input.contract_code,input.object_name)
- Logic:
- Allocation:
fy_allocation(Subform/Grid)- Fiscal Year:
fiscal_year(Lookup: Fiscal_Years) - Amount Due:
amount_due(EUR)
- Fiscal Year:
7. Invoices
Accounts Payable.
- Number:
invoice_number(Text - Mandatory) - Date:
invoice_date(Date - Mandatory) - Service Start:
service_start_date(Date, Optional - for allocation) - Service End:
service_end_date(Date, Optional - for allocation) - Amount:
amount(EUR - Mandatory) - Import ID:
imported_id(Text - Unique) - Contract Link:
contract_id(Lookup: Contracts - Mandatory) - Status:
status(Picklist: To Review, To Pay, Paid, Disputed, Association Error) - Invoice File:
invoice_file(URL) - Original Currency Data:
original_currency_data(Multi Line Text, Optional) -> YAML format: original_amount, currency, date, rate. - Allocation:
invoice_fy_allocation(Subform/Grid)- Fiscal Year:
fiscal_year(Lookup: Fiscal_Years) - Amount Allocated:
amount_allocated(EUR)
- Fiscal Year:
Automation & Logic
The system relies on specific Deluge scripts to maintain data integrity (see .ds file):
-
Centralised Recalculation (
Recalculate_Budget_Version):- Updates
Commitment,Spent, and other derived metrics on Budget Version. - Triggered by Schedule (Daily) or Manual Action ("Recalculate Selected Versions").
- Updates
-
FIFO Erosion (
Run_FIFO_Erosion):- Manually triggered on Contracts.
- Reduces "Proposed" placeholder contracts when a new "Approved" contract is entered, maintaining the budget balance.
-
FY Allocation (
Calculate_FY_Allocation):- Automatically splits Contract Value across Fiscal Years based on Start/End dates.
- Triggered
on successof Contract add/edit.
-
Invoice Allocation (
Calculate_Invoice_FY_Allocation):- Automatically splits Invoice Amount across Fiscal Years based on Service Dates.
- Fallback: Allocates 100% to Invoice Date FY.
-
Approve & Roll (Custom Action):
- Trigger: Manual button on
Budget_Versions. - Purpose: Locks current quarter and generates the next one.
- Inheritance Logic:
- Same FY: Copies
approved_amountandproposed_amount. - New FY: Resets
approved_amountandproposed_amountto 0.
- Same FY: Copies
- Locking: Sets current version to "Approved".
- Clean-up: Sets previous quarter version to "Archived" (Waterfall Logic).
- Trigger: Manual button on
-
Strict Date Snapping (On Input):
- Forces
snapshot_monthto be 1st of Oct, Jan, Apr, Jul. - If user enters random date, snaps to next valid quarter start.
- Forces