Skip to main content

Leave to Payroll Integration Events

Summary​

Payroll directly subscribes to LeaveApproved, LeaveRejected, and LeaveCancelled and updates a Payroll-owned period snapshot.

Audience​

Leave/Payroll developers, QA, architects, operations/support, and integration owners.

Concept​

Payroll resolves employee/date/type/unit categories from the contract and maintains approved, rejected, and cancelled classifications in its own read model. Paid/unpaid classification is inferred from Leave-type text in consumer code; LeaveType metadata is not carried by these decision contracts. This boundary is Transitional and does not document Payroll formulas.

An EventId ledger suppresses successfully synchronized duplicates. Snapshot occurrence time guards older events. A stale/skipped result is audited but not added to the processed ledger. Consumer failures are negatively acknowledged and requeued. Payroll does not subscribe to LeaveRequested, LeaveBalanceUpdated, or LeaveEncashed.

The current consumer increments categories from each accepted decision event; reconciliation of approval followed by cancellation/rejection and full cross-event ordering requires explicit testing.

Source References​

  • microservices/src/payroll-service/Messaging/PayrollReadModelConsumer.cs
  • microservices/src/payroll-service/Infrastructure/PayrollDbContext.cs
  • microservices/src/contracts/Events/LeaveLifecycleEvents.cs
  • microservices/src/leave-service/Infrastructure/LeaveDbContext.cs

See Also​

Keywords​

  • Payroll read model
  • Leave decision events
  • Staleness guard

Revision Information​

  • Status: Draft
  • Last reviewed: 2026-07-15
  • Review cycle: Quarterly