Life ConnectLife Connect
Wiki index
Architecture
Services
Concepts
Runbooks
Infra
Swagger Docs
GitHub
Wiki index
Architecture
Services
Concepts
Runbooks
Infra
Swagger Docs
GitHub
  • Archive
  • Data Dictionary
  • Functional Epics

    • DICTIONARY OF ATTRIBUTES
    • Search Condos
    • Display

      • DisplayAll

        • Display all - Contracts
        • Display all - invoices
        • Display all - parts
        • Display all - Persons Relationships
        • Display all - Persons
        • Display tickets
      • DisplayContract

        • Display bank account Contract
        • Display Condo Member Contract
        • Display contact contract
        • Display Employee Contract
        • Display Generic Contract
        • Display Insurance Contract
        • Display Legal Represent Contract
        • Display Oral Contract
        • Display Owner Contract
        • Display Condo Regulation Contract
        • Display rental Contract
        • Display Supplier Contract
        • Display Trustee Contract
      • DisplayDelegate

        • Display Delegate
      • DisplayHistory

        • Display history
      • DisplayPerson

        • Display Company Person
        • Display Condo Person
        • Display Division Person
        • Display Group Person
        • Display Indivision Person
        • Display Natural Person
        • Display Union Person
        • Display Unknown Person
      • DisplayPersonsContracts

        • Display all Interventions
      • DisplayProperty

        • Display part
        • Display part
      • UiPerson

        • Display "mini" Persons
    • Process

      • Create

        • Create property & condo
      • Delete

        • Delete objects according to state machine
      • RC Renewal

        • RC RESIDENTIAL - automatic renewal
      • Review

        • rent amount review - RC residential - creation
        • rent amount review - RC residential - take-over
      • Sell

        • Sell a unit
    • Reporting

      • GRR

        • GLOBAL RENT REPORT
    • Search

      • Search
    • StateMachine

      • CreatingContract

        • State machine - creating a rental contract
        • State machine - creating a rental delegate contract
        • State machine - Referencing a abstract part contract
        • State machine - Referencing a bank contract
        • State machine - Referencing a condo regulation contract
        • State machine - Referencing a contact contract
        • State machine - Referencing an employee contract
        • State machine - Referencing a generic contract
        • State machine - Referencing a legal represent contract
        • State machine - Referencing a owner contract
        • State machine - Referencing a rental contract
        • State machine - Referencing a supplier contract
        • State machine - Referencing a trustee contract
      • CreatingIntervention

        • State machine - creating a ticket
        • State machine - Referencing a message
      • CreatingInvoice

        • State machine - creating a incoming (supplier) invoice
      • CreatingPayments

        • State machine - creating an incoming payment
      • EncodingPart

        • CreatingPart

          • State machine - Referencing part relationships
          • State machine - Referencing a part
      • EncodingPerson

        • CreatingAddresses

          • State machine - Creating email address
          • State machine - Creating phone address
          • State machine - Creating postal address
          • State machine - Creating web address
        • CreatingPerson

          • State machine - Referencing a company person
          • State machine - Referencing a condo person
          • State machine - Referencing a division person
          • State machine - Referencing an group person
          • State machine - Referencing an indivision person
          • State machine - Referencing a natural person
          • State machine - Referencing a union person
        • CreatingShareHolders

          • State machine - valuing a shareholder
      • Scanning

        • State machine scanning - analyze a document
        • State machine scanning - matching a document
        • State machine scanning - encoding a document : related information
    • Utility

      • Allocation keys
      • Company settings
      • Document data & file
      • Revision Index
    • Validations

      • Shareholders validation
  • Implicit

    • Callback

      • Logging In
  • ProductBoard

    • Rental Process

      • Rental delegate process
    • Ticketing

      • Create a ticket - link a ticket in Outlook add-in - add a call - display a ticket
      • Display Person Info in Outlook add-in
  • Technical Epics

    • Indexation Feature Documentation
    • Rent Amount Management Feature Documentation
    • I have an API
    • I can store the balance of an account
    • I Have Person Notifications
    • 🧩 System Process Diagrams
    • The Team has a DEV environment
    • The Team is organized
    • Accounting

      • Re-generation of Invoices
      • I can call the rent for my Rental Contract
      • Payment Creation Strategy Feature Documentation
      • I Can Revese

        • Payment Reversal
      • I Have Invoices

        • I have direction on invoice's item level
      • I Have Subsidies

        • I Can Receive Family Allowance Payments - Technical Documentation
        • Subsidies + Direct Debit Documentation
    • Communication Module

      • Communication module
    • Contracts

      • I can have contract guarantors
      • API Models
      • I Have Call For Rent Process

        • Call For Rent (CFR) Process Documentation
      • Occupancy Compensation

        • **OCCUPANCY COMPENSATION Documentation**
      • State Machine

        • I can have the Rental Contract state machine
    • Database

      • Database Indexes
    • E2e Testing

      • I can create an E2E dataset
    • Env Setup

      • Adapt env to stateless UI build
      • Blockhound
      • Table of Environments and Their Specifications
      • Environment How-To
      • Java Flight Recorder Management Documentation
      • Local Environment Setup
      • Kubernetes Logs Retrieval Documentation
      • Monitoring
      • I can create a new organisation
      • Production Environment Configuration
      • Remote Environment Setup
      • Set up of separate DB for env
      • Terraform Aws S3 Buckets
      • adb-ui Service Version Update
    • Files

      • I can have tags for files
    • Globals

      • boundaries
      • boundaries
      • boundaries
      • boundaries
    • Messaging

      • MongoDB Trigger Model Documentation
    • Open Api

      • Swagger Documentation Guide
      • Swagger
    • Parts

      • I Have A Forecast And Actuals Module
      • I can have part equipments
    • Process

      • Pre-Meeting Questionnaire
      • I Can Release My Feature
    • Security

      • I can create and provision an organisation
      • a user is granted access to the application
    • Stress Test

      • Introduction
      • Reports

        • Introduction
        • Introduction
        • Introduction
        • Introduction
        • Introduction
        • Table of contents
    • Tickets

      • Ticket Details Functionality
    • Troubleshooting

      • Prometheus Memory Issue Handling
Last updated 2025-02-03⚠️ 1 year 4 months old — verify against current code before relying on details.

Overview

In this feature we introduce an ability to create different budget (forecast) versions for the year.

Single budget is always attached to the property/building.

From the technical point of view, budget as an object doesn't exist - it is composed of the lines inside it.

States

Each line has its own lineState - ACTIVE or ARCHIVED, and also contains global budgetState - DRAFT or VALIDATED.

As physical budget doesn't exist, it can be uniquely identified by partId + year + version.

Amounts & lines

Doesn't matter how budget lines are presented on UI, we will always have a single object for one line.

Depending on amounts inside, client should be able to identify where and how to display the line.

Every line will have the following arrays of amounts:

  • forecastAmounts
  • forecastRecoverableAmounts
  • actualsAmounts

Each Amount object inside the array has the following structure:

{
  "period": "2025-01",
  "amount": {
    "amount": 1000,
    "currency": "EURO"
  }
}

Also, each budget line will have the following properties, which are calculated by summarizing corresponding amount arrays:

  • forecastTotal
  • forecastRecoverableTotal
  • actualsTotal

Each amounts array will contain up to 12 amounts at a time, split by period (monthly). If user decides to enter each month amount manually, BE will just accept this information from the client, otherwise total will be automatically split into 12 months.

Array forecastRecoverableAmounts will be propagated only in case if line has recoverable flag set to true.

Validations & display

When the user wants to create a new budget, it should be pre-filled with the latest validated version for the currently selected year or the last validated version from the previous year.

When the budget is created, each line inside has lineState: 'ACTIVE' and budgetState: 'DRAFT' by default.

Amount split mode by default is automatic, and can be changed to manual only when monthly amounts are edited by the user.

When the budget becomes validated - budgetState: 'VALIDATED', every line inside it will be frozen and no action on it will be available.

VALIDATED budget can contain ARCHIVED lines. Only line with no amounts on the current year can be archived.

Line can be deleted only in case the line for the previous version/year doesn't exist.

Special cases

Budget line can be created without being attached to the concrete budget.

Such a row can be identified by amounts - it will have only actualsAmounts array filled in, and others will be empty.

Later on, when creating a new budget, user will be proposed to attach such rows to it.

Actions & URLs

adb-views

Endpoints should return a collection of lines, paginated; 
1. GET /views/financials/forecast-income?q={q}

2. GET /views/financials/forecast-outcome?q={q}

3. GET /views/financials/actuals-income?q={q}

4. GET /views/financials/actuals-outcome?q={q}

5. GET /views/financials/latest?year={year} or GET /views/financials/latest?q={q}

6. GET /views/financials/charges-totals/{partId} - to calculate total budget lines summary per single part

adb-parts

1. GET    /parts/id

2. POST   /parts/{partId}/budgets

3. POST   /parts/{partId}/budgets/{budgetId}/lines

4. GET    /parts/{partId}/budgets/{budgetId}/lines/{budgetLineId}

5. DELETE /parts/{partId}/budgets/{budgetId}/lines/{budgetLineId}

6. PATCH  /parts/{partId}/budgets/{budgetId}/lines/{budgetLineId}/line-state/{line-state}

7. PATCH  /parts/{partId}/budgets/{budgetId}/state/{budget-state}

8. PATCH  /parts/{partId}/budgets/{budgetId}/lines/{budgetLineId} - patch amounts, type, category, description, allocation keys and other stuff at once

9. GET    /parts/{partId}/budgetless

Objects

Budget

On POST request we can have different cases:

  1. No validated budget exists in this and or/previous year. Then, we will have no lines, and we need to create one automatically, filling only year, type and category.
  2. We already have a validated budget version for this/previous year. In this case, UI has to set year field to the user selection, copy lines array and for each line set a new budgetId and set id to null.

On GET request (by ID) we return:

{
    "type": "Budget",
    "year": "2025",
    "version": "1",
    "rootPartId": "property1",
    "lines": [
        {
            "type": "BudgetLine",
            "partId": "building1", // maybe target object?
            "lineType": {...catalog...},
            "category": {...catalog...},
            "description": "some text",
            "allocationKeys": [..array of target objects..]
        }
    ]
}

Q:

  • delete the row: we need to add either a flag or a new call
  • will we have the global budget state on the Budget object level? open question
Edit this page
Last Updated:
Contributors: Yevhenii Khudolii
Next
I can have part equipments