Risk Data Aggregation, BCBS 239, and Regulatory Reporting Readiness
Learn Java Core Banking System - Part 026
Risk data aggregation, BCBS 239 principles, regulatory reporting readiness, lineage, controls, reconciled numbers, and Java architecture for defensible banking data.
Part 026 — Risk Data Aggregation, BCBS 239, and Regulatory Reporting Readiness
Core banking tidak cukup hanya benar saat transaksi terjadi. Ia juga harus mampu menghasilkan angka yang complete, accurate, timely, adaptable, traceable, reconciled, dan dapat dipertanggungjawabkan saat ditanya risk, finance, audit, supervisor, atau regulator.
Banyak engineer melihat reporting sebagai downstream concern. Dalam banking, ini premis yang lemah.
Core banking adalah salah satu sumber utama angka yang masuk ke:
- liquidity monitoring;
- credit exposure;
- deposit concentration;
- loan delinquency;
- capital/risk reporting;
- regulatory returns;
- management information system;
- financial statements;
- audit sampling;
- supervisory examination.
Jika core banking tidak mendesain lineage dan control sejak awal, downstream reporting akan menjadi kumpulan ETL patch yang sulit diaudit.
1. Posisi Part Ini dalam Seri
Kita sudah membahas ledger, posting, product engine, EOD, reconciliation, audit, dan exception queue. Sekarang kita membahas bagaimana semua artefak itu menjadi angka risk/reporting yang defensible.
Part ini bukan membahas semua format laporan regulator per negara. Fokusnya adalah capability engineering agar laporan apa pun dapat dibangun dengan dasar yang kuat.
2. BCBS 239 sebagai Mental Model Engineering
BCBS 239 adalah prinsip Basel Committee tentang effective risk data aggregation dan risk reporting. Walaupun awalnya ditargetkan pada bank sistemik penting, prinsipnya sangat relevan untuk sistem banking mana pun yang ingin angka risk-nya dapat dipercaya.
Dalam kacamata engineer, BCBS 239 bukan hanya dokumen compliance. Ia adalah checklist arsitektur data:
- governance;
- data architecture;
- accuracy;
- integrity;
- completeness;
- timeliness;
- adaptability;
- report clarity;
- report usefulness;
- frequency;
- distribution;
- supervisory review.
Kita akan menerjemahkannya menjadi engineering practices.
3. Risk Data Aggregation Bukan BI Dashboard
BI dashboard bertanya:
How many accounts? How much balance? What is the trend?
Risk data aggregation bertanya:
Can the institution aggregate material risk exposures accurately and quickly across legal entity, business line, product, customer segment, geography, currency, time bucket, and stress scenario — and prove where each number came from?
Perbedaannya:
| Dimensi | BI Dashboard | Risk Data Aggregation |
|---|---|---|
| Toleransi angka | kadang approximate | harus controlled |
| Lineage | sering opsional | wajib |
| Reconciliation | tidak selalu | wajib |
| Frequency | business-driven | risk/regulatory-driven |
| Governance | analytics team | enterprise control |
| Explainability | chart-level | record-to-report |
| Stress readiness | jarang | penting |
| Data quality | best effort | measured and controlled |
4. Core Banking Data yang Masuk Risk/Reporting
Contoh data core banking bernilai risk:
| Domain | Data | Contoh Reporting Impact |
|---|---|---|
| Account | balance, status, product, currency | deposit report, liquidity, dormant account |
| Ledger | journal, posting date, value date | financial reporting, GL reconciliation |
| Loan | outstanding principal, interest, DPD | credit risk, NPL, impairment input |
| Deposit | maturity, rate, rollover | liquidity gap, concentration risk |
| Customer/Party | segment, residency, relationship | KYC, concentration, regulatory classification |
| Collateral/Limit | secured amount, exposure | credit risk aggregation |
| Payment | unsettled amount, returns | settlement risk, operational risk |
| Fee/Tax | accrued/charged/waived | revenue reporting, tax reporting |
| Exception | open breaks, suspense aging | operational risk |
| Audit | approvals, overrides, changes | control effectiveness |
Jika data ini hanya tersedia sebagai side effect UI atau log, reporting akan rapuh.
5. Record-to-Report Mental Model
Regulatory-ready system harus bisa menjelaskan perjalanan angka.
Pertanyaan defensible:
- angka ini berasal dari transaksi apa;
- rule mana yang memasukkan transaksi ke bucket ini;
- versi rule apa yang dipakai;
- data cut-off kapan;
- apakah data sudah direkonsiliasi;
- apakah ada exception yang dikecualikan;
- apakah ada manual adjustment;
- siapa menyetujui adjustment;
- apakah angka bisa direproduksi;
- apakah angka berubah setelah submission.
6. Data Architecture: Source, Extract, Product, Report
Jangan langsung query production OLTP untuk semua laporan besar.
Gunakan layer eksplisit:
Layer:
| Layer | Tanggung Jawab |
|---|---|
| OLTP source | transaksi dan state operasional yang benar |
| Controlled extract | snapshot konsisten berdasarkan business date/cutoff |
| Data product | cleaned, typed, versioned, documented, reconciled |
| Aggregation mart | risk/reporting-specific grouping and metrics |
| Report output | submission-ready numbers and metadata |
7. Extract Manifest
Setiap extract harus punya manifest.
Contoh:
{
"extractId": "EXT-CORE-ACCOUNT-20260628-EOD",
"sourceSystem": "CORE_BANKING",
"businessDate": "2026-06-28",
"cutoffInstant": "2026-06-28T23:59:59+07:00",
"sourceSchemaVersion": "account-balance-v12",
"recordCount": 12004512,
"totalLedgerBalanceByCurrency": {
"IDR": "9210000000000.00",
"USD": "12000000.00"
},
"controlHash": "sha256:9f1e...",
"createdAt": "2026-06-29T00:45:00+07:00",
"createdByJob": "core-eod-extract-v8.3.1"
}
Manifest membantu:
- completeness check;
- reproducibility;
- comparison antar run;
- audit trail;
- lineage;
- rerun safety;
- downstream contract.
8. Completeness
Completeness berarti semua data material yang harus masuk memang masuk.
Contoh completeness failure:
- cabang tertentu tidak masuk extract;
- loan product baru belum dipetakan;
- closed account masih harus reportable tetapi terfilter;
- suspense account tidak masuk exposure report;
- backdated posting setelah cutoff tidak masuk correction flow;
- joint account hanya dihitung satu owner secara salah;
- timezone menyebabkan transaksi akhir hari hilang.
Control:
-- Control total per currency dari source ledger
SELECT currency, COUNT(*) AS entry_count, SUM(amount_minor) AS total_minor
FROM ledger_entry
WHERE business_date = DATE '2026-06-28'
GROUP BY currency;
-- Control total di extract
SELECT currency, COUNT(*) AS entry_count, SUM(amount_minor) AS total_minor
FROM reporting_ledger_extract
WHERE extract_id = 'EXT-LEDGER-20260628-EOD'
GROUP BY currency;
Angka harus cocok berdasarkan rule yang jelas. Jika tidak cocok, harus ada documented exclusion.
9. Accuracy dan Integrity
Accuracy bukan hanya “query-nya benar”. Accuracy berarti angka merepresentasikan realitas bisnis sesuai definisi.
Contoh:
| Data | Accuracy Rule |
|---|---|
| ledger balance | berasal dari posted journal yang balanced |
| available balance | ledger balance - holds - lien + overdraft limit |
| loan outstanding | principal not yet repaid/write-off adjusted |
| DPD | dihitung dari due schedule dan payment allocation |
| maturity bucket | berdasarkan contractual maturity/effective date |
| customer segment | berdasarkan party classification yang effective pada business date |
Integrity berarti relasi dan constraint tidak rusak:
- setiap account punya product;
- setiap posting line punya journal;
- setiap journal balanced;
- currency amount tidak campur minor unit;
- status valid menurut lifecycle;
- product parameter version ada;
- reference data effective-date valid;
- no orphan reporting row.
10. Timeliness
Timeliness adalah kemampuan menyediakan data sesuai waktu yang dibutuhkan.
Bukan semua data harus real-time. Yang penting adalah kesesuaian dengan kebutuhan risk/reporting.
| Use Case | Timeliness |
|---|---|
| intraday liquidity view | near real-time / frequent batch |
| EOD balance report | after EOD controlled extract |
| regulatory monthly return | period close + validation cycle |
| crisis/stress aggregation | accelerated aggregation |
| fraud operational dashboard | near real-time |
| board risk pack | scheduled with sign-off |
Kesalahan umum:
- menjanjikan real-time tanpa reconciliation;
- batch harian tanpa kemampuan stress run;
- extract terlalu lambat karena query langsung OLTP;
- report bisa cepat tapi tidak lengkap;
- “latest” mencampur business date berbeda.
Core system harus menyimpan business date dan cutoff secara eksplisit.
11. Adaptability
BCBS-style readiness menuntut kemampuan beradaptasi terhadap kebutuhan baru, terutama saat stress.
Adaptability untuk engineer berarti:
- report dimension mudah ditambah;
- product baru tidak merusak report lama;
- mapping rule versioned;
- reference data effective-dated;
- aggregation dapat dijalankan ulang;
- lineage tetap tersedia;
- report dapat dibuat untuk ad-hoc supervisory request;
- schema evolution terkendali;
- backward compatibility jelas;
- manual spreadsheet patch diminimalkan.
Anti-pattern:
Regulator minta breakdown baru -> tim export CSV -> edit Excel -> submit manual -> tidak ada lineage.
Pattern lebih baik:
New breakdown -> define versioned dimension mapping -> run controlled aggregation -> validate totals -> produce report output + lineage manifest.
12. Data Lineage: Technical dan Business
Lineage harus menjelaskan transformasi teknis dan makna bisnis.
12.1 Technical Lineage
core.ledger_entry.amount_minor
-> extract.ledger_line.amount_minor
-> reporting.daily_balance.amount_minor
-> risk.deposit_by_currency.total_minor
-> report.LCR_LINE_12.amount
12.2 Business Lineage
Customer deposit liability balance as of EOD 2026-06-28
filtered by account.status in ACTIVE,DORMANT
excluding internal bank-owned accounts
mapped by product family = RETAIL_DEPOSIT
aggregated by currency and legal entity
Keduanya dibutuhkan. Technical lineage tanpa business definition tidak membantu regulator. Business definition tanpa technical lineage tidak bisa diverifikasi.
13. Lineage Record Model
Contoh model sederhana:
public record LineageNode(
String nodeId,
LineageNodeType type,
String name,
String schemaVersion,
String businessDefinition
) {}
public record LineageEdge(
String fromNodeId,
String toNodeId,
String transformationId,
String transformationVersion,
String ruleDescription,
String codeReference,
String configHash
) {}
public enum LineageNodeType {
SOURCE_TABLE,
EXTRACT,
DATA_PRODUCT,
AGGREGATION,
REPORT_LINE,
SUBMITTED_REPORT
}
Lineage tidak harus langsung memakai platform besar. Mulai dengan metadata yang konsisten.
14. Regulatory Reporting Readiness
Readiness bukan berarti semua laporan sudah dibuat. Readiness berarti sistem punya capability untuk membuat laporan yang benar.
Checklist:
| Capability | Pertanyaan |
|---|---|
| Source ownership | siapa pemilik data account/loan/customer? |
| Definition governance | definisi balance/exposure/DPD disetujui siapa? |
| Extract reproducibility | bisa rerun report tanggal tertentu? |
| Data quality | rule apa yang memastikan completeness/accuracy? |
| Reconciliation | apakah totals match dengan ledger/GL/source? |
| Lineage | bisa trace report line ke source? |
| Adjustment control | manual adjustment disetujui dan terlihat? |
| Versioning | mapping/report rule versioned? |
| Evidence | submission punya evidence pack? |
| Sign-off | siapa approve final number? |
15. Report Definition as Code + Configuration
Jangan hardcode report line dalam query acak.
Contoh definisi:
report: DEPOSIT_CONCENTRATION
version: 2026.06
businessDate: 2026-06-28
lines:
- code: DC_001
name: Retail deposit balance by currency
source: DAILY_ACCOUNT_BALANCE
filters:
productFamily: RETAIL_DEPOSIT
accountOwnership: CUSTOMER
status: [ACTIVE, DORMANT]
groupBy: [legalEntity, currency]
measure: ledgerBalance
reconciliation:
compareTo: GL_CONTROL_ACCOUNT_CUSTOMER_DEPOSIT
toleranceMinor: 0
Rule harus versioned karena definisi laporan bisa berubah.
16. Java Architecture: Reporting Pipeline
Contoh komponen:
Package design:
com.bank.core.reporting
├── extract
│ ├── ExtractJob.java
│ ├── ExtractManifest.java
│ └── SourceReader.java
├── quality
│ ├── DataQualityRule.java
│ ├── DataQualityResult.java
│ └── DataQualityRunner.java
├── lineage
│ ├── LineageNode.java
│ ├── LineageEdge.java
│ └── LineageRepository.java
├── aggregation
│ ├── AggregationDefinition.java
│ ├── AggregationEngine.java
│ └── AggregationResult.java
├── reconciliation
│ ├── ReportReconciliationRule.java
│ └── ReconciliationResult.java
└── submission
├── ReportPackage.java
├── SignOff.java
└── ReportRenderer.java
17. Data Quality Rules
Data quality rule harus executable dan menghasilkan evidence.
public interface DataQualityRule<T> {
String id();
String description();
DataQualitySeverity severity();
DataQualityResult evaluate(T dataset, DataQualityContext context);
}
public record DataQualityResult(
String ruleId,
boolean passed,
DataQualitySeverity severity,
long checkedCount,
long failedCount,
String evidenceRef,
String message
) {}
Contoh rule:
public final class JournalBalancedRule implements DataQualityRule<LedgerExtract> {
@Override
public String id() {
return "LEDGER_JOURNAL_BALANCED";
}
@Override
public DataQualityResult evaluate(LedgerExtract extract, DataQualityContext ctx) {
List<String> failedJournals = extract.journals().stream()
.filter(j -> !j.isBalanced())
.map(JournalExtractRow::journalId)
.toList();
return new DataQualityResult(
id(),
failedJournals.isEmpty(),
DataQualitySeverity.CRITICAL,
extract.journals().size(),
failedJournals.size(),
ctx.writeEvidence(failedJournals),
failedJournals.isEmpty()
? "All journals balanced"
: "Unbalanced journals found"
);
}
}
Rule categories:
- completeness;
- uniqueness;
- validity;
- referential integrity;
- consistency;
- reconciliation;
- timeliness;
- plausibility;
- lineage completeness;
- access/privacy compliance.
18. Control Totals
Control totals adalah primitive sederhana tetapi sangat kuat.
Contoh controls:
- row count;
- sum amount by currency;
- sum debit/credit by journal;
- account count by status;
- loan outstanding by product;
- suspense balance by aging bucket;
- extract hash;
- min/max business date;
- unmatched reference count;
- rejected record count.
Control totals harus disimpan:
CREATE TABLE extract_control_total (
extract_id VARCHAR(80) NOT NULL,
control_name VARCHAR(120) NOT NULL,
dimension_key VARCHAR(300) NOT NULL,
numeric_value DECIMAL(38, 6),
text_value VARCHAR(500),
created_at TIMESTAMP NOT NULL,
PRIMARY KEY (extract_id, control_name, dimension_key)
);
19. Reconciliation for Reports
Regulatory reporting readiness membutuhkan reconciliation point.
Contoh:
| Report Area | Reconcile To |
|---|---|
| deposit balance | deposit liability GL control account |
| loan outstanding | loan principal subledger + GL control |
| interest income | accrued/earned interest ledger |
| suspense aging | suspense GL/subledger |
| payment unsettled | clearing/settlement accounts |
| fees charged | fee income GL |
| tax withheld | tax payable GL/control report |
Jika report tidak reconcile, jangan tutup dengan “rounding difference” tanpa evidence.
20. Adjustment dan Override dalam Reporting
Kadang report membutuhkan adjustment. Ini normal, tetapi harus controlled.
Jenis adjustment:
- mapping correction;
- late posting adjustment;
- manual regulatory classification;
- exclusion dengan reason;
- consolidation adjustment;
- currency conversion adjustment;
- rounding adjustment.
Model:
public record ReportingAdjustment(
String adjustmentId,
String reportId,
String lineCode,
BigDecimal amount,
String currency,
AdjustmentType type,
String reason,
String evidenceRef,
String makerId,
String checkerId,
Instant approvedAt
) {}
Aturan:
- adjustment tidak boleh silent;
- adjustment harus punya reason;
- high-materiality adjustment harus approved;
- original number tetap disimpan;
- adjusted number ditandai;
- adjustment harus masuk lineage.
21. Period Close dan Freezing
Reporting butuh cut-off yang jelas.
State machine period close:
Setelah submission, correction tidak boleh overwrite report lama. Buat amendment package.
22. Reproducibility
Sistem harus bisa menjawab:
Can we reproduce the report exactly as submitted last month?
Untuk itu simpan:
- source extract id;
- source schema version;
- report definition version;
- reference data versions;
- transformation code version;
- parameter snapshot;
- data quality results;
- reconciliation results;
- manual adjustments;
- rendered report artifact hash.
Jika report hanya hasil query live, reproducibility lemah.
23. Stress Reporting dan Ad-Hoc Request
Dalam kondisi stress, management/regulator bisa meminta aggregation cepat:
- top deposit outflows by segment;
- exposure by sector/geography;
- loan delinquency by product;
- maturity gap by currency;
- unsettled payment exposure;
- concentration by related parties;
- branch/region liquidity position;
- collateral coverage.
Architecture yang baik harus bisa merespons tanpa spreadsheet panic.
Kuncinya:
- canonical dimensions;
- effective-dated mappings;
- reusable aggregation engine;
- consistent business date;
- data product yang sudah validated;
- lineage otomatis;
- controlled report package.
24. Privacy dan Minimum Necessary Reporting
Regulatory reporting sering butuh data sensitif. Namun tidak semua downstream consumer boleh melihat PII detail.
Design:
- use surrogate keys where possible;
- mask PII in non-production/reporting workbench;
- separate identifiable and aggregated datasets;
- enforce purpose-based access;
- log report export;
- restrict ad-hoc query;
- keep evidence access controlled;
- apply retention policy;
- avoid raw card/payment sensitive data;
- produce aggregated views when detail not needed.
Reporting readiness bukan alasan untuk membuat data lake bebas akses.
25. Failure Modes
25.1 Silent Mapping Gap
Produk baru launch tetapi report mapping belum diperbarui.
Dampak:
- balance tidak masuk report;
- GL masih balance tetapi regulatory line salah;
- problem ditemukan setelah submission.
Control:
- every product must map to reporting category;
- mapping completeness DQ rule;
- product release gate includes reporting impact.
25.2 Business Date Mixing
Report menggabungkan account balance EOD tanggal 28 dengan customer classification tanggal 29.
Dampak:
- inconsistent segmentation;
- non-reproducible report;
- hard-to-explain variance.
Control:
- as-of date for all dimensions;
- effective-dated reference data;
- extract manifest.
25.3 Manual Spreadsheet Adjustment
Adjustment dilakukan di luar system.
Dampak:
- no lineage;
- no approval evidence;
- number cannot be reproduced;
- operational key-person dependency.
Control:
- reporting adjustment module;
- maker-checker;
- artifact hash;
- sign-off pack.
25.4 Reconciliation Tolerance Abuse
Semua mismatch diberi label “immaterial”.
Dampak:
- hidden control weakness;
- growing breaks;
- audit finding.
Control:
- tolerance by rule and approved threshold;
- aging monitor;
- cumulative difference monitor;
- mandatory reason.
26. Regulatory Submission Package
Submission package minimal berisi:
- report output;
- report definition version;
- business date/period;
- extract manifests;
- DQ results;
- reconciliation results;
- adjustment list;
- sign-off record;
- lineage graph snapshot;
- artifact hash;
- exception list and waivers;
- submission timestamp;
- submitter/approver identity.
Contoh metadata:
{
"reportPackageId": "RPTPKG-DEP-202606",
"reportCode": "DEPOSIT_CONCENTRATION",
"period": "2026-06",
"definitionVersion": "2026.06",
"sourceExtracts": [
"EXT-ACCOUNT-20260630-EOD",
"EXT-PARTY-20260630-EOD",
"EXT-LEDGER-20260630-EOD"
],
"dataQualityStatus": "PASSED_WITH_WARNINGS",
"reconciliationStatus": "PASSED",
"manualAdjustments": 2,
"signedOffBy": "risk.head@example.bank",
"artifactHash": "sha256:91ab..."
}
27. Sign-Off Workflow
Sign-off bukan formalitas.
Role umum:
| Role | Fokus |
|---|---|
| Data owner | source data valid |
| Report owner | definition and interpretation valid |
| Finance/Risk owner | numbers make business sense |
| Compliance/regulatory reporting | submission requirement met |
| Technology owner | extract/process completed correctly |
| Internal control/audit | evidence and control adequate |
Workflow:
28. Variance Analysis
Report bukan hanya angka final. Variance harus dijelaskan.
Contoh variance questions:
- mengapa deposit balance turun 8% dari kemarin;
- mengapa loan delinquency naik 2% month-over-month;
- mengapa suspense aging bertambah;
- mengapa produk baru muncul di bucket lain;
- mengapa GL reconcile difference muncul;
- mengapa jumlah account dormant berubah besar.
Variance analysis harus menghubungkan angka ke driver:
- transaction volume;
- product migration;
- rate change;
- campaign;
- calendar/cutoff;
- correction batch;
- data quality issue;
- external event.
29. Java Implementation Pattern: Aggregation Engine
Aggregation engine harus pure sejauh mungkin.
public final class AggregationEngine {
public AggregationResult aggregate(
AggregationDefinition definition,
DataSet dataSet,
AggregationContext context
) {
List<DataRow> eligible = dataSet.rows().stream()
.filter(row -> definition.filter().matches(row, context))
.toList();
Map<GroupKey, BigDecimal> grouped = new HashMap<>();
for (DataRow row : eligible) {
GroupKey key = definition.groupBy().keyOf(row, context);
BigDecimal measure = definition.measure().valueOf(row, context);
grouped.merge(key, measure, BigDecimal::add);
}
return new AggregationResult(
definition.id(),
definition.version(),
grouped,
context.lineageFor(definition, dataSet)
);
}
}
Prinsip:
- input immutable snapshot;
- definition versioned;
- deterministic output;
- no hidden global clock;
- explicit rounding;
- explicit currency handling;
- lineage emitted;
- DQ before and after aggregation.
30. Property Tests untuk Reporting
Beberapa invariant dapat diuji dengan property-based thinking.
Contoh invariant:
- sum by product equals total by currency after grouping;
- every account maps to exactly one report bucket;
- excluded records have exclusion reason;
- adjustment preserves original value;
- rerun with same input and definition produces same output;
- report line total reconciles with control account within approved tolerance;
- no report row has unknown currency;
- no effective-dated mapping overlaps ambiguously.
Pseudo-test:
@Test
void aggregationIsDeterministicForSameSnapshotAndDefinition() {
AggregationResult first = engine.aggregate(definition, snapshot, context);
AggregationResult second = engine.aggregate(definition, snapshot, context);
assertEquals(first.values(), second.values());
assertEquals(first.lineageHash(), second.lineageHash());
}
31. Operational Runbook
Reporting runbook minimal:
- confirm EOD completed;
- create controlled extract;
- validate extract manifest;
- run data quality rules;
- resolve critical DQ exceptions;
- publish validated data product;
- run aggregation;
- reconcile totals;
- analyze variances;
- record adjustments;
- collect sign-offs;
- submit report;
- lock evidence package;
- archive artifacts;
- monitor post-submission amendments.
32. Self-Correction Checklist
| Pertanyaan | Red Flag |
|---|---|
| Apakah report bisa direproduksi? | query live tanpa snapshot |
| Apakah source extract punya manifest? | file CSV tanpa metadata |
| Apakah rule report versioned? | SQL ad-hoc di laptop analyst |
| Apakah completeness diuji? | hanya row count global |
| Apakah mapping product lengkap? | unknown bucket dibiarkan |
| Apakah business date konsisten? | join data dengan tanggal berbeda |
| Apakah reconciliation formal? | “selisih kecil” tanpa reason |
| Apakah adjustment controlled? | angka diedit di spreadsheet |
| Apakah lineage record-to-report tersedia? | hanya nama tabel source |
| Apakah sign-off punya evidence? | approval via chat tanpa artifact |
33. Mini Project: Reporting Readiness Slice
Bangun slice kecil:
- source ledger extract untuk satu business date;
- account balance extract;
- product mapping table effective-dated;
- extract manifest;
- DQ rules: balanced journals, valid currency, product mapping complete;
- aggregation: deposit balance by product family and currency;
- reconciliation to GL control total;
- reporting adjustment with maker-checker;
- report package metadata;
- lineage graph export.
Acceptance criteria:
- rerun deterministic;
- missing product mapping fails DQ;
- report cannot submit if critical DQ fails;
- adjustment requires reason and checker;
- report package shows extract id, definition version, DQ result, recon result, and artifact hash;
- one report line can be traced back to source rows.
34. Ringkasan
Risk data aggregation dan regulatory reporting readiness adalah architecture concern, bukan hanya reporting team concern.
Prinsip utama:
- core banking harus menghasilkan data yang reportable sejak desain awal;
- BCBS 239 berguna sebagai mental model engineering untuk governance, accuracy, completeness, timeliness, adaptability, dan distribution;
- report harus berbasis controlled extract, bukan query live yang tidak reproducible;
- manifest, control totals, data quality, reconciliation, dan lineage adalah artefak utama;
- business date, effective date, dan versioning harus eksplisit;
- manual adjustment harus controlled, approved, dan masuk lineage;
- report package harus menyimpan evidence lengkap;
- regulatory readiness berarti mampu menjelaskan angka, bukan hanya menghasilkan angka;
- stress/ad-hoc request membutuhkan reusable dimensions dan aggregation engine;
- sistem yang matang mampu menjawab record-to-report.
Pada part berikutnya kita akan membahas data ownership, master data, reference data, dan effective dating: fondasi agar customer, product, branch, calendar, rate, dan mapping tidak menjadi sumber error tersembunyi.
References
- Basel Committee on Banking Supervision, Principles for effective risk data aggregation and risk reporting (BCBS 239), 2013. https://www.bis.org/publ/bcbs239.pdf
- Basel Committee on Banking Supervision, Implementation of the Principles for effective risk data aggregation and risk reporting, 2026 newsletter. https://www.bis.org/publ/bcbs_nl36.htm
- European Central Bank Banking Supervision, Guide on effective risk data aggregation and risk reporting, 2024. https://www.bankingsupervision.europa.eu/ecb/pub/pdf/ssm.supervisory_guides240503_riskreporting.en.pdf
- FFIEC, Architecture, Infrastructure, and Operations Booklet, 2021. https://ithandbook.ffiec.gov/it-booklets/architecture,-infrastructure,-and-operations.aspx
- NIST, Cybersecurity Framework 2.0, 2024. https://www.nist.gov/cyberframework
You just completed lesson 26 in deepen practice. Use the series map if you want to review the broader track, or continue directly into the next lesson while the context is still warm.
Keep the momentum while the lesson is still fresh. Move backward for review or continue forward into the next concept.