Skip to content

ETL Pipeline

De ETL (Extract-Transform-Load) pipeline synchroniseert data van de lokale Helios trading engine naar het cloudplatform. Het principe is eenvoudig: lokaal pusht naar cloud, nooit andersom.

Zie Architectuur voor het ecosysteem-overzicht.


3-stream dataflowarchitectuur

Stream 1: Equity Data

Wekelijkse equity-snapshots van de engine naar de cloud.

VeldTypeBeschrijving
dateDATEWeek-einddatum
equityNUMERICTotale portefeuillewaarde
cashNUMERICBeschikbaar kasgeld
cash_pctNUMERICKaspercentage
regimeVARCHARRisk-on / Risk-off
profile_idBIGINTRisicoprofiel FK

Stream 2: Holdings Data

Actuele posities per risicoprofiel.

VeldTypeBeschrijving
tickerVARCHARAandelensymbool
sharesNUMERICAantal aandelen
avg_costNUMERICGemiddelde instapprijs
current_valueNUMERICHuidige waarde
weight_pctNUMERICGewicht in portefeuille
profile_idBIGINTRisicoprofiel FK

Stream 3: Trades Data

Handelsgeschiedenis voor transparantie en reconciliatie.

VeldTypeBeschrijving
dateDATEHandelsdatum
actionVARCHARBUY, SELL, SHORT_ENTRY, etc.
tickerVARCHARAandelensymbool
sharesNUMERICAantal aandelen
priceNUMERICUitvoeringsprijs
reasonVARCHAREXIT_RANK, EXIT_MA, etc.
profile_idBIGINTRisicoprofiel FK

Flex cloud schema (7 tabellen)

TabelBronSync-frequentieDoel
engine_equity_snapshotsEquity streamWekelijksEquity-curve per profiel
engine_holdingsHoldings streamWekelijksActuele posities
engine_tradesTrades streamWekelijksHandelsgeschiedenis
reconciliation_logFlex API + EngineDagelijks3-tier vergelijking
risk_profilesConfiguratieBij wijzigingProfielparameters
nav_historyBerekeningMaandelijksNAV per profiel per maand
unit_transactionsFondstransactiesBij gebeurtenisOnveranderlijk unit-grootboek

Ingestion pipeline (3 Artisan commands)

De data-synchronisatie loopt via drie Laravel Artisan commands:

1. etl:sync-equity

Synchroniseert wekelijkse equity-snapshots van engine-output naar engine_equity_snapshots.

  • Methode: Truncate-and-reload (idempotent)
  • Locking: pg_advisory_lock(1001) voorkomt gelijktijdige ETL en Laravel-toegang
  • Bulk insert: psycopg3 COPY protocol voor snelle PostgreSQL-insert

2. etl:sync-holdings

Synchroniseert actuele posities naar engine_holdings.

  • Methode: Truncate-and-reload
  • Timing: Na wekelijkse rebalance

3. etl:sync-trades

Synchroniseert nieuwe trades naar engine_trades.

  • Methode: Append-only (nieuwe trades worden toegevoegd)
  • Deduplicatie: Op basis van datum + ticker + actie combinatie

3-tier reconciliatie

TierDrempelActie
OK< 0,1% verschilAutomatisch goedgekeurd
Waarschuwing0,1% - 1,0%Review vereist, NAV publiceerbaar
Fout> 1,0%Blokkeert NAV-publicatie

De reconciliatie vergelijkt drie bronnen:

  1. Engine-waarde — berekend uit engine equity-snapshots
  2. IBKR-waarde — opgevraagd via Flex API
  3. Cloud-waarde — opgeslagen in de database

IBKR is de primaire bron (belt), de engine fungeert als sanity check (suspenders).

ETL veiligheidsmechanismen

Atomiciteit en Foutafhandeling

  • Advisory locking: pg_advisory_lock(1001) zorgt ervoor dat ETL en Laravel-queries niet tegelijk op dezelfde tabellen draaien
  • Transactie-scope: Elke sync draait in een enkele database-transactie. Gaat er iets mis, dan draait de hele sync terug
  • Idempotentie: Truncate-and-reload betekent dat elke sync-run hetzelfde resultaat geeft, ongeacht hoe vaak je hem uitvoert
  • Logging: Elke sync-run krijgt een logregel met tijdstempel, aantal rijen en eventuele fouten

Wekelijkse Batch-Sync Rationale

De sync volgt de wekelijkse rebalance-cadans van System 1. Dat is een bewuste keuze:

  • Ontmoedigt dagelijks portfolio-checken
  • Past beter bij hoe beleggers in weken en maanden denken
  • Houdt serverbelasting en databasekosten laag
Python CLI specificatie

ETL Command-Line Interface

De ETL-synchronisatie wordt aangestuurd via een Python CLI (Click-gebaseerd):

helios etl sync --target equity # Sync equity-snapshots
helios etl sync --target holdings # Sync holdings
helios etl sync --target trades # Sync trades
helios etl sync --all # Alle streams
helios etl reconcile # Vergelijk engine vs IBKR vs cloud
helios etl status # Toon laatste sync-status

De CLI leest configuratie uit settings.toml en verbindt met de cloud-database via een beveiligde connectiestring.