The GiroPro Data Lake
The GiroPro platform records everything that happens - an investor is onboarded, an order is placed, a price is updated - as events: plain JSONL documents delivered to your own cloud storage. Each event carries an envelope and a payload:
{
"Id": "36524e3b-9ef4-413c-9e14-2ad2a203a904",
"TopicName": "common_c_data_duplication_ledgeritem_changed",
"TimeStampSend": "2026-05-27T10:52:19.1716653Z",
"DefinitionVersion": "1.0.25",
"LabelId": "e38a3720-5cb9-486a-a550-d8f1b0cc3b3d",
"PayloadType": "Ledger_MS.BaseControllers.LedgerItem",
"Payload": { "...": "the entity, see the Glossary for its meaning" }
}
The payload is an entity as defined in the Glossary - a Ledger, a JournalEntry, an Asset, and so on.
Important Note:
- It is highly recommended to not process the payload at all in the first layer of your data lake. (E.g. Staging or Bronze).
- This allows for any issues or mistakes in Silver to be easily corrected with a backfill from the first layer.
- Events are adds & updates (for communication items: deletes too). The same update can be delivered more than once, and
every update carries the full entity. To build current state: deduplicate on the envelope
Id, then keep the latest event perPayload.id(ordered byTimeStampSend).
In this section
- Ledgers and Balances - building the ledger dimension and deriving correct balances from journal entries.
- Calculating Portfolio Value - a worked example from events to the total value of an investor account.
More guides (delivery guarantees, schema evolution) will follow.