Date: 2026-03-29
Status: Proposal
Author: Francois van Heyningen
Bureau submission (also called "PUB" — Publishing to Bureau) is the process of credit providers reporting account performance data to credit bureaux. This is a legal compliance obligation under the National Credit Act (NCA) in South Africa and equivalent legislation in other markets.
Most credit providers struggle with this because:
- Complex file formats (fixed-width, specific field codes)
- Multiple bureau formats (TransUnion, Experian, XDS each have different specs)
- Monthly submission deadlines with penalties for late/incorrect data
- Data quality validation before submission
- Reconciliation after submission
- Historical corrections and disputes
Opportunity: Build this as an Axion service — credit providers configure their data mapping once, and the platform handles formatting, validation, submission, and reconciliation automatically.
Client Data (MariaDB/API)
│
▼
┌─────────────────────────┐
│ ObjBureauSubmission │ ← New module
│ │
│ 1. Extract client data │ ← Workflow (batch)
│ 2. Map to bureau format │ ← Decision Matrix (field mapping)
│ 3. Validate │ ← Rule Sets (NCA compliance)
│ 4. Generate file │ ← Templates per bureau
│ 5. Submit │ ← SFTP/API per bureau
│ 6. Reconcile response │ ← Workflow (batch)
│ 7. Report exceptions │ ← ObjAlert + ObjNotify
└─────────────────────────┘
│
▼
Credit Bureaux (TransUnion, Experian, XDS)
| Mode |
Engine |
Use Case |
| Batch |
ObjWorkflow (batch mode) |
Monthly submission — process all accounts, generate bureau file, submit |
| Singleton |
ObjWorkflow (single mode) |
Real-time updates — account opened/closed, payment received, dispute filed |
| Simulation |
ObjSimulation |
Test submission — validate data quality before live submission, compare against previous month |
Note: ObjSimulation is specifically for simulation/testing. ObjWorkflow handles both singleton (real-time single record) and batch (bulk processing) execution modes.
- Format: Fixed-width flat file (CAIS format)
- Transport: SFTP to TransUnion gateway
- Frequency: Monthly (by 15th of following month)
- Records: Header → Account records → Trailer
- Fields: ~120 fields per account (account type, balance, payment status, delinquency, terms, etc.)
- Format: Fixed-width (DA format)
- Transport: SFTP
- Frequency: Monthly
- Fields: Similar to TransUnion but different field positions and codes
- Format: CSV or API
- Transport: API or SFTP
- Frequency: Monthly or real-time
| Component |
Role |
| ObjWorkflow |
Orchestrates the full submission pipeline — both batch (monthly) and singleton (real-time) |
| ObjSimulation |
Dry-run simulation of submission — validates data quality, compares against expected outcomes before live submission |
| ObjDecisionMatrix |
Field mapping tables — maps client field names to bureau field codes |
| ObjDecisionSwitch |
Validation rules — NCA compliance checks, data quality rules |
| ObjFeatureStore |
Derived variables — calculate delinquency cycles, payment ratios, balance aggregations |
| ObjScorecard |
Risk categorisation for submission segments |
| ObjHook |
SFTP upload, API calls to bureau endpoints |
| ObjDataImport |
Ingest bureau response/reconciliation files |
| ObjAlert |
Flag submission failures, data quality issues, deadline warnings |
| ObjNotify |
Email/Slack notification on submission status |
| ObjScheduler |
Monthly submission scheduling with deadline tracking |
| ObjDataExport |
Generate fixed-width/CSV output files |
| ObjFtp |
SFTP transport to bureau gateways |
| ObjVersionMixin |
Version track submission configurations and field mappings |
| Component |
Purpose |
| ObjBureauSubmission |
Core module — orchestrates extract → map → validate → generate → submit → reconcile |
| ObjBureauFormat |
Bureau-specific file format generators (TransUnion CAIS, Experian DA, XDS) |
| ObjBureauReconciliation |
Parse bureau response files, match against submitted records, flag exceptions |
-- Submission configuration per client per bureau
def_bureau_submission (
SubmissionName, Package, BureauName,
Format, Transport, SftpHost, SftpUser, SftpPath,
ScheduleDay, DataTable, MappingMatrix,
ValidationTree, Enabled
)
-- Field mapping (which client field → which bureau field)
def_bureau_field_mapping (
SubmissionName, Package,
ClientField, BureauField, BureauPosition, BureauLength,
DataType, DefaultValue, TransformRule
)
-- Submission history
data_bureau_submission_log (
Guid, SubmissionName, Package, BureauName,
SubmissionDate, RecordCount, FileSize, FileName,
Status, ErrorCount, ResponseFile,
SubmittedAt, ReconciledAt
)
-- Record-level exceptions
data_bureau_submission_exceptions (
Guid, SubmissionGuid, AccountRef,
ExceptionType, Field, Value, ExpectedValue,
Severity, Resolution
)
1. EXTRACT
- Query client account data (active, closed in period, status changes)
- Join with previous month's submission for delta detection
- ObjWorkflow batch mode processes all qualifying accounts
2. ENRICH
- Calculate derived fields via ObjFeatureStore
- Delinquency cycle calculation
- Payment ratio, balance movements
- NCA affordability flags
3. MAP
- Apply ObjDecisionMatrix field mapping (client → bureau format)
- Handle data type conversions (date formats, numeric padding)
- Apply default values for optional fields
4. VALIDATE
- Run ObjDecisionSwitch validation rules
- NCA compliance checks (mandatory fields, valid ranges)
- Cross-field validations (e.g., closed account must have zero balance)
- Flag exceptions → data_bureau_submission_exceptions
5. SIMULATE (optional)
- ObjSimulation dry-run against previous month
- Compare record counts, balance totals, delinquency distribution
- Flag significant deviations for review before submission
6. GENERATE
- ObjBureauFormat generates fixed-width/CSV file
- Header record (submission metadata)
- Account records (one per account)
- Trailer record (checksums, totals)
7. SUBMIT
- ObjFtp SFTP upload to bureau gateway
- Log submission in data_bureau_submission_log
- ObjNotify alert on success/failure
8. RECONCILE
- ObjDataImport reads bureau response file
- ObjBureauReconciliation matches against submitted records
- Flag rejected records
- ObjAlert on reconciliation exceptions
| Event |
Trigger |
Bureau Update |
| Account opened |
New credit agreement signed |
New account record |
| Account closed |
Settlement or write-off |
Status update to closed |
| Payment received |
Debit order or manual payment |
Payment status update |
| Missed payment |
Failed debit order |
Delinquency cycle increment |
| Dispute filed |
Customer dispute |
Dispute flag |
| Limit change |
Credit limit adjustment |
Limit field update |
| Address change |
Customer update |
Demographics update |
Each event triggers a singleton ObjWorkflow that:
- Extracts the single record
- Maps to bureau format
- Validates
- Submits via real-time API (if bureau supports) or queues for next batch
| Pain Point |
Axion Solution |
| Complex bureau formats |
Configure once via Decision Matrix — field mapping is visual, versionable |
| Multiple bureaux |
Single data extract, multiple format generators — submit to all bureaux from one pipeline |
| Data quality issues |
Pre-submission validation via Decision Trees — catch errors before they reach the bureau |
| Late submissions |
ObjScheduler with deadline alerts — automated monthly runs with ObjAlert escalation |
| Reconciliation pain |
Automated response parsing — exceptions flagged, dashboards track acceptance rates |
| Audit trail |
Full version history, submission logs, exception records — NCA audit ready |
| Testing changes |
ObjSimulation dry-run — compare before/after without submitting to bureau |
| Client |
Current Submission |
Axion Opportunity |
| HomeChoice |
Manual/semi-automated |
Automate via existing HC integration |
| FullHouse |
Manual |
New service — furniture credit accounts |
| FinChoice |
Unknown |
Micro-lending bureau reporting |
| AlefBet |
Unknown |
Collections — need accurate bureau reporting |
| Any NCA-registered credit provider |
Pain point |
SaaS offering |
| Phase |
What |
Effort |
| 1 |
ObjBureauSubmission + field mapping tables |
2-3 days |
| 2 |
TransUnion CAIS format generator |
2-3 days |
| 3 |
Validation rules (NCA compliance) |
1-2 days |
| 4 |
Workflow templates (batch + singleton) |
1-2 days |
| 5 |
Reconciliation parser |
1-2 days |
| 6 |
Experian/XDS format generators |
2-3 days each |
| Total |
|
~2-3 weeks |