FP&A Platform — Event Catalog
Version: 1.0
Last Updated: 2026-02-03
Document ID: ARCH-002
Classification: Internal
1. Overview
This document catalogs all domain events in the FP&A Platform's event-driven architecture. Events follow the CloudEvents specification v1.0 and are published to Apache Kafka.
Event Architecture
┌─────────────────────────────────────────────────────────────────────┐
│ EVENT-DRIVEN ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────┐ ┌───────────────┐ ┌───────────────────────┐ │
│ │ Producer │───▶│ Kafka Topic │───▶│ Consumers │ │
│ │ Service │ │ (partitioned) │ │ (consumer groups) │ │
│ └───────────┘ └───────────────┘ └───────────────────────┘ │
│ │
│ Topics: │
│ ├── fpa.accounting.journal-entries │
│ ├── fpa.accounting.periods │
│ ├── fpa.reconciliation.sessions │
│ ├── fpa.reconciliation.matches │
│ ├── fpa.planning.budgets │
│ ├── fpa.planning.forecasts │
│ ├── fpa.integration.syncs │
│ ├── fpa.agents.sessions │
│ ├── fpa.compliance.controls │
│ └── fpa.audit.events │
│ │
└─────────────────────────────────────────────────────────────────────┘
Event Envelope (CloudEvents)
{
"specversion": "1.0",
"type": "com.fpa.accounting.journal-entry.created",
"source": "/services/gl-service",
"id": "evt_abc123def456",
"time": "2026-02-03T10:15:30.123Z",
"datacontenttype": "application/json",
"subject": "je_2026020001",
"tenantid": "tenant_acme",
"correlationid": "corr_xyz789",
"data": {
// Event-specific payload
}
}
2. Accounting Domain Events
2.1 JournalEntryCreated
Type: com.fpa.accounting.journal-entry.created
Source: /services/gl-service
Topic: fpa.accounting.journal-entries
Description: Emitted when a new journal entry is created in draft status.
Schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["journal_entry_id", "entity_id", "entry_date", "total_debit", "total_credit", "status", "created_by"],
"properties": {
"journal_entry_id": {
"type": "string",
"pattern": "^je_[a-z0-9]+$",
"description": "Unique journal entry identifier"
},
"entity_id": {
"type": "string",
"description": "Legal entity identifier"
},
"entry_number": {
"type": "string",
"description": "Sequential entry number"
},
"entry_date": {
"type": "string",
"format": "date",
"description": "Transaction date"
},
"period_id": {
"type": "string",
"description": "Accounting period"
},
"description": {
"type": "string",
"description": "Entry description"
},
"entry_type": {
"type": "string",
"enum": ["standard", "adjusting", "closing", "reversing", "recurring"]
},
"total_debit": {
"type": "number",
"description": "Sum of debit amounts"
},
"total_credit": {
"type": "number",
"description": "Sum of credit amounts"
},
"line_count": {
"type": "integer",
"description": "Number of journal lines"
},
"status": {
"type": "string",
"enum": ["draft"]
},
"created_by": {
"type": "string",
"description": "User who created the entry"
},
"source_system": {
"type": "string",
"description": "Originating system if imported"
}
}
}
Example:
{
"journal_entry_id": "je_2026020001",
"entity_id": "ent_us_hq_001",
"entry_number": "JE-2026-000001",
"entry_date": "2026-02-03",
"period_id": "period_2026_02",
"description": "Monthly revenue accrual",
"entry_type": "adjusting",
"total_debit": 50000.00,
"total_credit": 50000.00,
"line_count": 2,
"status": "draft",
"created_by": "user_john_doe",
"source_system": null
}
Consumers:
| Consumer | Purpose |
|---|---|
| Audit Service | Create immutable audit record |
| Notification Service | Alert approvers if auto-submit |
| Analytics Service | Update real-time dashboards |
2.2 JournalEntryApproved
Type: com.fpa.accounting.journal-entry.approved
Source: /services/gl-service
Topic: fpa.accounting.journal-entries
Description: Emitted when a journal entry receives approval.
Schema (additional fields):
{
"journal_entry_id": "string",
"entity_id": "string",
"approved_by": "string",
"approved_at": "string (ISO 8601)",
"previous_status": "string",
"new_status": "approved",
"approval_level": "integer",
"requires_further_approval": "boolean"
}
Business Rules:
approved_bymust differ fromcreated_by(segregation of duties)- Triggers
JournalEntryPostedif no further approval required
2.3 JournalEntryPosted
Type: com.fpa.accounting.journal-entry.posted
Source: /services/gl-service
Topic: fpa.accounting.journal-entries
Description: Emitted when a journal entry is posted to the general ledger.
Schema:
{
"journal_entry_id": "string",
"entity_id": "string",
"posted_by": "string",
"posted_at": "string (ISO 8601)",
"period_id": "string",
"total_debit": "number",
"total_credit": "number",
"account_impacts": [
{
"account_id": "string",
"account_number": "string",
"debit": "number",
"credit": "number"
}
]
}
Side Effects:
- Account balances updated
- Trial balance cache invalidated
- Financial statements require regeneration
2.4 JournalEntryReversed
Type: com.fpa.accounting.journal-entry.reversed
Source: /services/gl-service
Topic: fpa.accounting.journal-entries
Description: Emitted when a posted journal entry is reversed.
Schema:
{
"original_entry_id": "string",
"reversing_entry_id": "string",
"entity_id": "string",
"reversal_date": "string (date)",
"reversal_reason": "string",
"reversed_by": "string",
"reversed_at": "string (ISO 8601)"
}
2.5 PeriodOpened
Type: com.fpa.accounting.period.opened
Source: /services/gl-service
Topic: fpa.accounting.periods
Description: Emitted when a new accounting period is opened.
Schema:
{
"period_id": "string",
"entity_id": "string",
"year": "integer",
"period": "integer",
"start_date": "string (date)",
"end_date": "string (date)",
"opened_by": "string",
"opened_at": "string (ISO 8601)"
}
2.6 PeriodClosed
Type: com.fpa.accounting.period.closed
Source: /services/gl-service
Topic: fpa.accounting.periods
Description: Emitted when an accounting period is closed.
Schema:
{
"period_id": "string",
"entity_id": "string",
"year": "integer",
"period": "integer",
"closed_by": "string",
"closed_at": "string (ISO 8601)",
"final_balances": {
"total_assets": "number",
"total_liabilities": "number",
"total_equity": "number",
"net_income": "number"
},
"close_duration_minutes": "integer",
"checklist_completion": "number (percentage)"
}
Consumers:
| Consumer | Purpose |
|---|---|
| Reporting Service | Generate period-end reports |
| Compliance Service | Archive period evidence |
| Notification Service | Notify stakeholders |
3. Reconciliation Domain Events
3.1 ReconciliationSessionStarted
Type: com.fpa.reconciliation.session.started
Source: /services/reconciliation-service
Topic: fpa.reconciliation.sessions
Description: Emitted when a new reconciliation session begins.
Schema:
{
"session_id": "string",
"entity_id": "string",
"bank_account_id": "string",
"gl_account_id": "string",
"period_start": "string (date)",
"period_end": "string (date)",
"initiated_by": "string",
"initiated_at": "string (ISO 8601)",
"bank_transaction_count": "integer",
"gl_entry_count": "integer",
"opening_bank_balance": "number",
"opening_gl_balance": "number"
}
3.2 BankTransactionsImported
Type: com.fpa.reconciliation.bank-transactions.imported
Source: /services/integration-service
Topic: fpa.reconciliation.sessions
Description: Emitted when bank transactions are imported for reconciliation.
Schema:
{
"session_id": "string",
"bank_account_id": "string",
"connection_id": "string",
"import_source": "string (plaid|open_finance|file)",
"transaction_count": "integer",
"date_range": {
"start": "string (date)",
"end": "string (date)"
},
"total_debits": "number",
"total_credits": "number",
"imported_at": "string (ISO 8601)"
}
3.3 MatchSuggested
Type: com.fpa.reconciliation.match.suggested
Source: /services/reconciliation-service
Topic: fpa.reconciliation.matches
Description: Emitted when the system suggests a transaction match.
Schema:
{
"suggestion_id": "string",
"session_id": "string",
"bank_transaction_id": "string",
"journal_line_id": "string",
"confidence_score": "number (0-1)",
"match_type": "string (exact|fuzzy|ml_suggested)",
"match_criteria": {
"amount_match": "boolean",
"date_proximity": "integer (days)",
"description_similarity": "number",
"reference_match": "boolean"
},
"suggested_at": "string (ISO 8601)",
"model_version": "string"
}
Consumers:
| Consumer | Purpose |
|---|---|
| Notification Service | Alert user of suggestions |
| Analytics Service | Track match rate metrics |
| ML Pipeline | Collect feedback for retraining |
3.4 MatchConfirmed
Type: com.fpa.reconciliation.match.confirmed
Source: /services/reconciliation-service
Topic: fpa.reconciliation.matches
Description: Emitted when a match is confirmed by user or auto-approved.
Schema:
{
"match_id": "string",
"session_id": "string",
"bank_transaction_id": "string",
"journal_line_id": "string",
"confirmation_type": "string (auto|manual)",
"confirmed_by": "string",
"confirmed_at": "string (ISO 8601)",
"original_confidence": "number",
"was_suggestion": "boolean"
}
3.5 ExceptionCreated
Type: com.fpa.reconciliation.exception.created
Source: /services/reconciliation-service
Topic: fpa.reconciliation.sessions
Description: Emitted when a reconciliation exception is identified.
Schema:
{
"exception_id": "string",
"session_id": "string",
"exception_type": "string (unmatched_bank|unmatched_gl|timing|duplicate|error)",
"related_transaction_id": "string",
"amount": "number",
"description": "string",
"days_outstanding": "integer",
"severity": "string (low|medium|high)",
"suggested_action": "string",
"created_at": "string (ISO 8601)"
}
3.6 ReconciliationCompleted
Type: com.fpa.reconciliation.session.completed
Source: /services/reconciliation-service
Topic: fpa.reconciliation.sessions
Description: Emitted when a reconciliation session is finalized.
Schema:
{
"session_id": "string",
"entity_id": "string",
"bank_account_id": "string",
"completed_by": "string",
"completed_at": "string (ISO 8601)",
"results": {
"total_transactions": "integer",
"matched_count": "integer",
"exception_count": "integer",
"match_rate": "number (percentage)",
"auto_match_rate": "number (percentage)",
"unreconciled_amount": "number"
},
"duration_minutes": "integer",
"closing_bank_balance": "number",
"closing_gl_balance": "number",
"variance": "number"
}
4. Planning Domain Events
4.1 BudgetCreated
Type: com.fpa.planning.budget.created
Source: /services/planning-service
Topic: fpa.planning.budgets
Schema:
{
"budget_id": "string",
"entity_id": "string",
"fiscal_year": "integer",
"budget_type": "string (operating|capital|cash)",
"version": "integer",
"total_revenue": "number",
"total_expense": "number",
"created_by": "string",
"created_at": "string (ISO 8601)"
}
4.2 BudgetApproved
Type: com.fpa.planning.budget.approved
Source: /services/planning-service
Topic: fpa.planning.budgets
Schema:
{
"budget_id": "string",
"entity_id": "string",
"approved_by": "string",
"approved_at": "string (ISO 8601)",
"approval_level": "string (manager|director|cfo|board)",
"effective_date": "string (date)"
}
4.3 ForecastGenerated
Type: com.fpa.planning.forecast.generated
Source: /services/forecast-service
Topic: fpa.planning.forecasts
Schema:
{
"forecast_id": "string",
"entity_id": "string",
"horizon": "string (13_weeks|12_months)",
"model_used": "string (neuralprophet|arima|ensemble)",
"accuracy_metrics": {
"mape": "number",
"rmse": "number",
"coverage_90": "number"
},
"generated_at": "string (ISO 8601)",
"generated_by": "string (user|scheduled|agent)"
}
4.4 VarianceAnalyzed
Type: com.fpa.planning.variance.analyzed
Source: /services/variance-service
Topic: fpa.planning.budgets
Schema:
{
"analysis_id": "string",
"entity_id": "string",
"period_id": "string",
"budget_id": "string",
"total_variance": "number",
"variance_percentage": "number",
"material_variances_count": "integer",
"drivers_identified": [
{
"driver": "string",
"impact": "number"
}
],
"analyzed_by": "string (user|agent)",
"analyzed_at": "string (ISO 8601)"
}
5. Agent Domain Events
5.1 AgentSessionStarted
Type: com.fpa.agents.session.started
Source: /services/agent-orchestrator
Topic: fpa.agents.sessions
Schema:
{
"session_id": "string",
"agent_type": "string (orchestrator|reconciliation|variance|forecast|compliance)",
"tenant_id": "string",
"user_id": "string",
"input_summary": "string",
"model_id": "string",
"started_at": "string (ISO 8601)"
}
5.2 AgentToolCalled
Type: com.fpa.agents.tool.called
Source: /services/agent-orchestrator
Topic: fpa.agents.sessions
Schema:
{
"session_id": "string",
"tool_call_id": "string",
"tool_name": "string",
"tool_input": "object",
"tool_output": "object",
"duration_ms": "integer",
"tokens_used": "integer",
"success": "boolean",
"called_at": "string (ISO 8601)"
}
5.3 HumanApprovalRequested
Type: com.fpa.agents.approval.requested
Source: /services/agent-orchestrator
Topic: fpa.agents.sessions
Schema:
{
"approval_id": "string",
"session_id": "string",
"checkpoint_type": "string (match_confirmation|finding_classification|forecast_override)",
"description": "string",
"options": ["array of options"],
"recommended_option": "string",
"requested_at": "string (ISO 8601)",
"timeout_at": "string (ISO 8601)",
"escalation_path": ["array of user_ids"]
}
5.4 AgentSessionCompleted
Type: com.fpa.agents.session.completed
Source: /services/agent-orchestrator
Topic: fpa.agents.sessions
Schema:
{
"session_id": "string",
"agent_type": "string",
"status": "string (completed|failed|timeout|cancelled)",
"output_summary": "string",
"total_tokens": "integer",
"total_tool_calls": "integer",
"duration_ms": "integer",
"human_interventions": "integer",
"completed_at": "string (ISO 8601)",
"error_message": "string (if failed)"
}
6. Integration Domain Events
6.1 SyncStarted
Type: com.fpa.integration.sync.started
Source: /services/integration-service
Topic: fpa.integration.syncs
Schema:
{
"sync_id": "string",
"connection_id": "string",
"connector_type": "string (quickbooks|netsuite|plaid|totvs)",
"sync_type": "string (full|incremental)",
"entity_id": "string",
"started_at": "string (ISO 8601)"
}
6.2 SyncCompleted
Type: com.fpa.integration.sync.completed
Source: /services/integration-service
Topic: fpa.integration.syncs
Schema:
{
"sync_id": "string",
"connection_id": "string",
"records_synced": "integer",
"records_created": "integer",
"records_updated": "integer",
"records_deleted": "integer",
"duration_ms": "integer",
"completed_at": "string (ISO 8601)"
}
6.3 SyncFailed
Type: com.fpa.integration.sync.failed
Source: /services/integration-service
Topic: fpa.integration.syncs
Schema:
{
"sync_id": "string",
"connection_id": "string",
"error_code": "string",
"error_message": "string",
"failed_at_record": "string",
"retry_count": "integer",
"will_retry": "boolean",
"failed_at": "string (ISO 8601)"
}
7. Compliance Domain Events
7.1 ControlTestExecuted
Type: com.fpa.compliance.control.tested
Source: /services/compliance-service
Topic: fpa.compliance.controls
Schema:
{
"test_id": "string",
"control_id": "string",
"framework": "string (sox|hipaa|fda|lgpd)",
"test_date": "string (date)",
"tester": "string (user|agent)",
"result": "string (passed|failed|passed_with_exception)",
"sample_size": "integer",
"exceptions_found": "integer",
"evidence_collected": ["array of evidence_ids"],
"executed_at": "string (ISO 8601)"
}
7.2 FindingCreated
Type: com.fpa.compliance.finding.created
Source: /services/compliance-service
Topic: fpa.compliance.controls
Schema:
{
"finding_id": "string",
"control_id": "string",
"framework": "string",
"severity": "string (deficiency|significant_deficiency|material_weakness)",
"title": "string",
"description": "string",
"impact": "string",
"recommendation": "string",
"remediation_due": "string (date)",
"created_at": "string (ISO 8601)"
}
8. Event Flow Diagrams
8.1 Journal Entry Flow
User Creates Entry
│
▼
┌───────────────────┐
│ JournalEntryCreated│
└─────────┬─────────┘
│
▼
User Approves
│
▼
┌───────────────────┐
│ JournalEntryApproved│
└─────────┬─────────┘
│
▼
System Posts
│
▼
┌───────────────────┐
│ JournalEntryPosted │───────▶ Account Balances Updated
└───────────────────┘ Trial Balance Invalidated
8.2 Reconciliation Flow
┌─────────────────────────┐
│ ReconciliationSessionStarted │
└────────────┬────────────┘
│
┌────────────────────────┼────────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│BankTransactions│ │ MatchSuggested │ │ ExceptionCreated│
│ Imported │ │ (multiple) │ │ (multiple) │
└───────┬───────┘ └───────┬───────┘ └───────────────┘
│ │
│ ┌───────┴───────┐
│ ▼ ▼
│ ┌─────────────┐ ┌─────────────┐
│ │MatchConfirmed│ │MatchRejected │
│ └──────┬──────┘ └─────────────┘
│ │
└─────────────┼─────────────────────────────────┐
│ │
▼ ▼
┌───────────────────────┐ ┌───────────────┐
│ ReconciliationCompleted│ │ExceptionResolved│
└───────────────────────┘ └───────────────┘
9. Consumer Groups
| Consumer Group | Services | Events Consumed |
|---|---|---|
audit-writers | Audit Service | All events |
notification-senders | Notification Service | Approvals, completions, findings |
analytics-processors | Analytics Service | All events |
compliance-monitors | Compliance Service | Journal entries, period closes |
ml-trainers | ML Pipeline | Match confirmations, feedback |
10. Event Retention
| Topic | Retention | Compaction |
|---|---|---|
fpa.accounting.* | 30 days | No |
fpa.reconciliation.* | 14 days | No |
fpa.planning.* | 30 days | No |
fpa.agents.* | 7 days | No |
fpa.integration.* | 14 days | No |
fpa.compliance.* | 365 days | No |
fpa.audit.* | 7 years | No |
Event Catalog v1.0 — FP&A Platform Document ID: ARCH-002