Skip to main content

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:

ConsumerPurpose
Audit ServiceCreate immutable audit record
Notification ServiceAlert approvers if auto-submit
Analytics ServiceUpdate 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_by must differ from created_by (segregation of duties)
  • Triggers JournalEntryPosted if 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:

ConsumerPurpose
Reporting ServiceGenerate period-end reports
Compliance ServiceArchive period evidence
Notification ServiceNotify 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:

ConsumerPurpose
Notification ServiceAlert user of suggestions
Analytics ServiceTrack match rate metrics
ML PipelineCollect 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 GroupServicesEvents Consumed
audit-writersAudit ServiceAll events
notification-sendersNotification ServiceApprovals, completions, findings
analytics-processorsAnalytics ServiceAll events
compliance-monitorsCompliance ServiceJournal entries, period closes
ml-trainersML PipelineMatch confirmations, feedback

10. Event Retention

TopicRetentionCompaction
fpa.accounting.*30 daysNo
fpa.reconciliation.*14 daysNo
fpa.planning.*30 daysNo
fpa.agents.*7 daysNo
fpa.integration.*14 daysNo
fpa.compliance.*365 daysNo
fpa.audit.*7 yearsNo

Event Catalog v1.0 — FP&A Platform Document ID: ARCH-002