Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Appendix C: Domain Events Catalog

Version: 1.0.0 Last Updated: December 29, 2025 Total Events: 45+


Overview

This appendix contains the complete catalog of domain events for the POS Platform. These events form the foundation of the event-driven architecture, enabling real-time updates, audit trails, and offline synchronization.


Event Structure

All events follow this standard envelope:

{
  "eventId": "evt_uuid",
  "eventType": "EventName",
  "timestamp": "2025-12-29T14:30:00.000Z",
  "tenantId": "tenant_nexus",
  "correlationId": "uuid",
  "causationId": "uuid",
  "version": 1,
  "payload": { }
}
FieldTypeDescription
eventIdUUIDUnique event identifier
eventTypestringEvent type name
timestampISO 8601When event occurred
tenantIdstringTenant identifier
correlationIdUUIDLinks related events
causationIdUUIDEvent that caused this event
versionintSchema version
payloadobjectEvent-specific data

Sales Events

1. OrderCreated

Trigger: Customer begins checkout Producer: POS Terminal, Web Store Consumers: Analytics, Inventory Reservation

{
  "eventType": "OrderCreated",
  "eventId": "evt_ord_001",
  "timestamp": "2025-12-29T14:30:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "orderId": "ord_xyz789",
    "orderNumber": "ORD-2025-00001",
    "locationId": "loc_gm",
    "registerId": "reg_01",
    "createdBy": "usr_cashier1",
    "customerId": "cust_john_doe",
    "lineItems": [
      {
        "lineItemId": "li_001",
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "name": "Classic V-Neck Tee - M Black",
        "quantity": 2,
        "unitPrice": 29.99,
        "discountAmount": 0,
        "taxAmount": 4.80,
        "lineTotal": 64.78
      }
    ],
    "subtotal": 59.98,
    "discountTotal": 0,
    "taxTotal": 4.80,
    "total": 64.78,
    "status": "pending",
    "channel": "pos"
  }
}

2. PaymentAttempted

Trigger: Customer initiates payment Producer: Payment Terminal Consumers: Payment Gateway, Fraud Detection

{
  "eventType": "PaymentAttempted",
  "eventId": "evt_pay_001",
  "timestamp": "2025-12-29T14:31:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "orderId": "ord_xyz789",
    "paymentAttemptId": "pa_001",
    "paymentMethod": "card",
    "terminalId": "term_verifone_01",
    "amount": 64.78,
    "currency": "USD",
    "cardPresent": true,
    "entryMethod": "chip",
    "cardBrand": "visa",
    "lastFour": "4242"
  }
}

3. PaymentCompleted

Trigger: Payment gateway confirms success Producer: Payment Gateway Adapter Consumers: Order Service, Receipt Service, Inventory

{
  "eventType": "PaymentCompleted",
  "eventId": "evt_pay_002",
  "timestamp": "2025-12-29T14:31:15Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "orderId": "ord_xyz789",
    "paymentId": "pay_001",
    "paymentAttemptId": "pa_001",
    "amount": 64.78,
    "authorizationCode": "AUTH123456",
    "transactionId": "txn_gateway_abc",
    "batchId": "batch_2025-12-29",
    "cardBrand": "visa",
    "lastFour": "4242",
    "entryMethod": "chip",
    "receiptData": {
      "merchantName": "Nexus Clothing - Greenbrier",
      "merchantId": "MID123456",
      "approvalCode": "123456"
    }
  }
}

4. PaymentFailed

Trigger: Payment gateway declines Producer: Payment Gateway Adapter Consumers: Order Service, POS UI, Analytics

{
  "eventType": "PaymentFailed",
  "eventId": "evt_pay_003",
  "timestamp": "2025-12-29T14:31:20Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "orderId": "ord_xyz789",
    "paymentAttemptId": "pa_001",
    "failureReason": "insufficient_funds",
    "failureCode": "DECLINED_05",
    "retriable": true,
    "suggestedAction": "Try different payment method",
    "gatewayResponse": {
      "code": "51",
      "message": "Insufficient funds"
    }
  }
}

5. OrderCompleted

Trigger: All payments successful, order finalized Producer: Order Service Consumers: Inventory, Analytics, Loyalty, Receipt

{
  "eventType": "OrderCompleted",
  "eventId": "evt_ord_002",
  "timestamp": "2025-12-29T14:31:30Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "orderId": "ord_xyz789",
    "orderNumber": "ORD-2025-00001",
    "receiptNumber": "GM-2025-001234",
    "locationId": "loc_gm",
    "registerId": "reg_01",
    "customerId": "cust_john_doe",
    "lineItems": [
      {
        "lineItemId": "li_001",
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "quantity": 2,
        "unitPrice": 29.99,
        "lineTotal": 59.98
      }
    ],
    "payments": [
      {
        "paymentId": "pay_001",
        "method": "card",
        "amount": 64.78
      }
    ],
    "subtotal": 59.98,
    "discountTotal": 0,
    "taxTotal": 4.80,
    "total": 64.78,
    "loyaltyPointsEarned": 65,
    "completedAt": "2025-12-29T14:31:30Z",
    "completedBy": "usr_cashier1",
    "shiftId": "shift_2025-12-29_am"
  }
}

6. OrderVoided

Trigger: Manager voids order Producer: POS Application Consumers: Inventory, Analytics, Audit

{
  "eventType": "OrderVoided",
  "eventId": "evt_ord_003",
  "timestamp": "2025-12-29T14:35:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "orderId": "ord_xyz789",
    "orderNumber": "ORD-2025-00001",
    "voidReason": "customer_changed_mind",
    "voidedBy": "usr_manager1",
    "voidedAt": "2025-12-29T14:35:00Z",
    "authorizationCode": "MGR-VOID-001",
    "originalTotal": 64.78,
    "refundRequired": false,
    "inventoryReleased": true,
    "lineItems": [
      {
        "variantId": "var_nxp0323_m_blk",
        "quantity": 2
      }
    ]
  }
}

7. ReturnInitiated

Trigger: Customer requests return Producer: POS Application Consumers: Return Service, Inventory, Fraud

{
  "eventType": "ReturnInitiated",
  "eventId": "evt_ret_001",
  "timestamp": "2025-12-29T15:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ret_abc123",
  "payload": {
    "returnId": "ret_abc123",
    "originalOrderId": "ord_xyz789",
    "originalReceiptNumber": "GM-2025-001234",
    "locationId": "loc_hm",
    "customerId": "cust_john_doe",
    "returnItems": [
      {
        "originalLineItemId": "li_001",
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "quantityReturned": 1,
        "returnReason": "wrong_size",
        "condition": "resaleable",
        "refundAmount": 32.39
      }
    ],
    "totalRefund": 32.39,
    "refundMethod": "original_payment",
    "initiatedBy": "usr_cashier2"
  }
}

8. ReturnCompleted

Trigger: Refund processed Producer: Return Service Consumers: Inventory, Payment, Loyalty, Analytics

{
  "eventType": "ReturnCompleted",
  "eventId": "evt_ret_002",
  "timestamp": "2025-12-29T15:05:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ret_abc123",
  "payload": {
    "returnId": "ret_abc123",
    "returnReceiptNumber": "RET-HM-2025-0001",
    "originalOrderId": "ord_xyz789",
    "refundTransactionId": "refund_txn_001",
    "refundAmount": 32.39,
    "refundMethod": "card",
    "loyaltyPointsDeducted": 32,
    "inventoryRestocked": [
      {
        "variantId": "var_nxp0323_m_blk",
        "locationId": "loc_hm",
        "quantityAdded": 1,
        "condition": "resaleable"
      }
    ],
    "processedBy": "usr_cashier2",
    "completedAt": "2025-12-29T15:05:00Z",
    "shiftId": "shift_2025-12-29_pm"
  }
}

9. ReceiptRequested

Trigger: Customer requests receipt Producer: POS Application Consumers: Receipt Service, Communication

{
  "eventType": "ReceiptRequested",
  "eventId": "evt_rcpt_001",
  "timestamp": "2025-12-29T14:32:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "orderId": "ord_xyz789",
    "receiptNumber": "GM-2025-001234",
    "deliveryMethod": "email",
    "destination": "john@example.com",
    "includePromotions": true,
    "loyaltyBalance": 1250,
    "requestedBy": "usr_cashier1"
  }
}

Inventory Events

10. StockReserved

Trigger: Order created, items reserved Producer: Inventory Service Consumers: Order Service, Stock Visibility

{
  "eventType": "StockReserved",
  "eventId": "evt_inv_001",
  "timestamp": "2025-12-29T14:30:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "reservationId": "res_001",
    "orderId": "ord_xyz789",
    "locationId": "loc_gm",
    "items": [
      {
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "quantityReserved": 2,
        "previousOnHand": 15,
        "previousAvailable": 15,
        "newAvailable": 13
      }
    ],
    "expiresAt": "2025-12-29T15:00:00Z"
  }
}

11. StockCommitted

Trigger: Payment completed Producer: Inventory Service Consumers: Reporting, Reorder, Sync

{
  "eventType": "StockCommitted",
  "eventId": "evt_inv_002",
  "timestamp": "2025-12-29T14:31:30Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "commitId": "commit_001",
    "reservationId": "res_001",
    "orderId": "ord_xyz789",
    "receiptNumber": "GM-2025-001234",
    "locationId": "loc_gm",
    "items": [
      {
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "quantitySold": 2,
        "previousOnHand": 15,
        "newOnHand": 13,
        "unitCost": 12.50,
        "totalCostOfGoodsSold": 25.00
      }
    ],
    "transactionType": "sale"
  }
}

12. StockReleased

Trigger: Order voided/abandoned Producer: Inventory Service Consumers: Order Service, Stock Visibility

{
  "eventType": "StockReleased",
  "eventId": "evt_inv_003",
  "timestamp": "2025-12-29T14:40:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "releaseId": "rel_001",
    "reservationId": "res_001",
    "orderId": "ord_xyz789",
    "locationId": "loc_gm",
    "releaseReason": "order_voided",
    "items": [
      {
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "quantityReleased": 2,
        "previousAvailable": 13,
        "newAvailable": 15
      }
    ]
  }
}

13. StockReceived

Trigger: Vendor shipment received Producer: Receiving Service Consumers: Inventory, AP, Reporting

{
  "eventType": "StockReceived",
  "eventId": "evt_inv_004",
  "timestamp": "2025-12-29T09:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "po_12345",
  "payload": {
    "receiptId": "rcpt_001",
    "purchaseOrderId": "po_12345",
    "vendorId": "vendor_nike",
    "locationId": "loc_hq",
    "receivedBy": "usr_warehouse1",
    "items": [
      {
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "quantityOrdered": 50,
        "quantityReceived": 48,
        "quantityDamaged": 2,
        "previousOnHand": 100,
        "newOnHand": 148,
        "unitCost": 12.50,
        "totalCost": 600.00
      }
    ],
    "totalItemsReceived": 48,
    "totalCost": 600.00,
    "discrepancyNotes": "2 units damaged in shipping"
  }
}

14. StockAdjusted

Trigger: Manual adjustment (count, shrinkage) Producer: Inventory Management Consumers: Inventory, Reporting, Audit

{
  "eventType": "StockAdjusted",
  "eventId": "evt_inv_005",
  "timestamp": "2025-12-29T11:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "adj_001",
  "payload": {
    "adjustmentId": "adj_001",
    "locationId": "loc_gm",
    "adjustedBy": "usr_manager1",
    "adjustmentType": "cycle_count",
    "authorizationCode": "MGR-ADJ-001",
    "items": [
      {
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "systemQuantity": 15,
        "countedQuantity": 13,
        "variance": -2,
        "varianceReason": "shrinkage",
        "previousOnHand": 15,
        "newOnHand": 13,
        "costImpact": -25.00
      }
    ],
    "totalVariance": -2,
    "totalCostImpact": -25.00,
    "notes": "Quarterly cycle count - Section A"
  }
}

15. TransferRequested

Trigger: Store requests stock Producer: Inventory Management Consumers: Transfer Service, Notifications

{
  "eventType": "TransferRequested",
  "eventId": "evt_inv_006",
  "timestamp": "2025-12-29T10:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "xfer_001",
  "payload": {
    "transferId": "xfer_001",
    "fromLocationId": "loc_hq",
    "toLocationId": "loc_gm",
    "requestedBy": "usr_gm_manager",
    "priority": "normal",
    "requestReason": "low_stock",
    "items": [
      {
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "quantityRequested": 10,
        "sourceOnHand": 100,
        "destinationOnHand": 3
      }
    ],
    "expectedShipDate": "2025-12-30",
    "expectedArrivalDate": "2025-12-31"
  }
}

16. TransferShipped

Trigger: Source location ships Producer: Transfer Service Consumers: Inventory, Tracking

{
  "eventType": "TransferShipped",
  "eventId": "evt_inv_007",
  "timestamp": "2025-12-29T14:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "xfer_001",
  "payload": {
    "transferId": "xfer_001",
    "fromLocationId": "loc_hq",
    "toLocationId": "loc_gm",
    "shippedBy": "usr_warehouse1",
    "items": [
      {
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "quantityShipped": 10,
        "previousFromOnHand": 100,
        "newFromOnHand": 90
      }
    ],
    "trackingNumber": "1Z999AA10123456784",
    "carrier": "UPS",
    "shippedAt": "2025-12-29T14:00:00Z"
  }
}

17. TransferReceived

Trigger: Destination receives Producer: Transfer Service Consumers: Inventory, Notifications

{
  "eventType": "TransferReceived",
  "eventId": "evt_inv_008",
  "timestamp": "2025-12-30T09:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "xfer_001",
  "payload": {
    "transferId": "xfer_001",
    "fromLocationId": "loc_hq",
    "toLocationId": "loc_gm",
    "receivedBy": "usr_gm_associate1",
    "items": [
      {
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "quantityExpected": 10,
        "quantityReceived": 10,
        "quantityDamaged": 0,
        "previousToOnHand": 3,
        "newToOnHand": 13
      }
    ],
    "receivedAt": "2025-12-30T09:00:00Z",
    "discrepancyNotes": null
  }
}

18. StockRestocked

Trigger: Return item restocked Producer: Return Service Consumers: Inventory, Reporting

{
  "eventType": "StockRestocked",
  "eventId": "evt_inv_009",
  "timestamp": "2025-12-29T15:05:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ret_abc123",
  "payload": {
    "restockId": "restock_001",
    "returnId": "ret_abc123",
    "originalOrderId": "ord_xyz789",
    "locationId": "loc_hm",
    "items": [
      {
        "variantId": "var_nxp0323_m_blk",
        "sku": "NXP0323-M-BLK",
        "quantityRestocked": 1,
        "condition": "resaleable",
        "restockLocation": "sales_floor",
        "previousOnHand": 20,
        "newOnHand": 21
      }
    ],
    "restockedBy": "usr_cashier2"
  }
}

Customer Events

19. CustomerCreated

Trigger: New customer registered Producer: Customer Service Consumers: Loyalty, Marketing, Analytics

{
  "eventType": "CustomerCreated",
  "eventId": "evt_cust_001",
  "timestamp": "2025-12-29T14:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "cust_john_doe",
  "payload": {
    "customerId": "cust_john_doe",
    "customerNumber": "CUST-2025-00001",
    "createdAt": "2025-12-29T14:00:00Z",
    "createdBy": "usr_cashier1",
    "creationSource": "pos",
    "locationId": "loc_gm",
    "profile": {
      "firstName": "John",
      "lastName": "Doe",
      "email": "john.doe@example.com",
      "phone": "555-0100",
      "marketingOptIn": true,
      "smsOptIn": false
    },
    "loyalty": {
      "enrolled": true,
      "programId": "loyalty_standard",
      "tierLevel": "bronze",
      "pointsBalance": 0
    }
  }
}

20. CustomerUpdated

Trigger: Profile modified Producer: Customer Service Consumers: Sync, Marketing, Analytics

{
  "eventType": "CustomerUpdated",
  "eventId": "evt_cust_002",
  "timestamp": "2025-12-29T15:30:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "cust_john_doe",
  "payload": {
    "customerId": "cust_john_doe",
    "updatedBy": "usr_cashier2",
    "updateSource": "pos",
    "locationId": "loc_hm",
    "changes": [
      {
        "field": "phone",
        "previousValue": "555-0100",
        "newValue": "555-0200",
        "changedAt": "2025-12-29T15:30:00Z"
      },
      {
        "field": "address.city",
        "previousValue": null,
        "newValue": "Chesapeake",
        "changedAt": "2025-12-29T15:30:00Z"
      }
    ]
  }
}

21. CustomerMerged

Trigger: Duplicates consolidated Producer: Customer Service Consumers: Order, Loyalty, Analytics

{
  "eventType": "CustomerMerged",
  "eventId": "evt_cust_003",
  "timestamp": "2025-12-29T16:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "merge_001",
  "payload": {
    "mergeId": "merge_001",
    "survivingCustomerId": "cust_john_doe",
    "mergedCustomerIds": ["cust_john_d", "cust_jdoe"],
    "mergedBy": "usr_admin1",
    "mergeReason": "duplicate_registration",
    "dataConsolidation": {
      "ordersTransferred": 5,
      "loyaltyPointsCombined": 1500,
      "previousTierLevels": ["bronze", "silver"],
      "newTierLevel": "silver"
    },
    "conflictResolutions": [
      {
        "field": "email",
        "values": ["john.doe@example.com", "jdoe@work.com"],
        "resolution": "kept_primary",
        "selectedValue": "john.doe@example.com"
      }
    ]
  }
}

22. LoyaltyPointsEarned

Trigger: Purchase completed Producer: Loyalty Service Consumers: Customer, Notifications, Analytics

{
  "eventType": "LoyaltyPointsEarned",
  "eventId": "evt_cust_004",
  "timestamp": "2025-12-29T14:31:30Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "customerId": "cust_john_doe",
    "orderId": "ord_xyz789",
    "receiptNumber": "GM-2025-001234",
    "locationId": "loc_gm",
    "pointsEarned": 65,
    "earnRate": 1.0,
    "bonusMultiplier": 1.0,
    "qualifyingAmount": 64.78,
    "excludedAmount": 0,
    "previousBalance": 1250,
    "newBalance": 1315,
    "tierLevel": "silver",
    "pointsToNextTier": 685
  }
}

23. LoyaltyPointsRedeemed

Trigger: Points used for discount Producer: Loyalty Service Consumers: Order, Analytics

{
  "eventType": "LoyaltyPointsRedeemed",
  "eventId": "evt_cust_005",
  "timestamp": "2025-12-29T14:30:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "customerId": "cust_john_doe",
    "orderId": "ord_xyz789",
    "locationId": "loc_gm",
    "pointsRedeemed": 500,
    "redemptionType": "discount",
    "discountAmount": 5.00,
    "redemptionRate": 100,
    "previousBalance": 1750,
    "newBalance": 1250,
    "minimumBalanceRequired": 100
  }
}

24. LoyaltyPointsDeducted

Trigger: Return processed Producer: Loyalty Service Consumers: Customer, Notifications

{
  "eventType": "LoyaltyPointsDeducted",
  "eventId": "evt_cust_006",
  "timestamp": "2025-12-29T15:05:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ret_abc123",
  "payload": {
    "customerId": "cust_john_doe",
    "returnId": "ret_abc123",
    "originalOrderId": "ord_xyz789",
    "pointsDeducted": 32,
    "deductionReason": "return",
    "refundAmount": 32.39,
    "previousBalance": 1315,
    "newBalance": 1283,
    "tierImpact": "none"
  }
}

25. LoyaltyTierChanged

Trigger: Threshold reached Producer: Loyalty Service Consumers: Customer, Marketing, Notifications

{
  "eventType": "LoyaltyTierChanged",
  "eventId": "evt_cust_007",
  "timestamp": "2025-12-29T14:31:30Z",
  "tenantId": "tenant_nexus",
  "correlationId": "cust_john_doe",
  "payload": {
    "customerId": "cust_john_doe",
    "previousTier": "silver",
    "newTier": "gold",
    "changeType": "upgrade",
    "changeReason": "spending_threshold",
    "qualifyingSpend": 2000.00,
    "tierThreshold": 2000.00,
    "effectiveDate": "2025-12-29",
    "expirationDate": "2026-12-29",
    "newBenefits": [
      "1.5x points on all purchases",
      "Free shipping on orders $50+",
      "Early access to sales",
      "Birthday triple points"
    ]
  }
}

26. CustomerTagged

Trigger: Tag applied Producer: Marketing Service Consumers: Marketing Automation, Analytics

{
  "eventType": "CustomerTagged",
  "eventId": "evt_cust_008",
  "timestamp": "2025-12-29T14:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "cust_john_doe",
  "payload": {
    "customerId": "cust_john_doe",
    "tagId": "tag_vip_2025",
    "tagName": "VIP 2025",
    "tagCategory": "loyalty",
    "taggedBy": "system",
    "tagSource": "auto_rule",
    "ruleId": "rule_vip_qualification",
    "expiresAt": "2025-12-31T23:59:59Z",
    "metadata": {
      "qualificationReason": "annual_spend_over_5000"
    }
  }
}

27. CustomerOptInChanged

Trigger: Preference changed Producer: Customer Service Consumers: Marketing, Compliance

{
  "eventType": "CustomerOptInChanged",
  "eventId": "evt_cust_009",
  "timestamp": "2025-12-29T14:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "cust_john_doe",
  "payload": {
    "customerId": "cust_john_doe",
    "optInType": "sms_marketing",
    "previousValue": false,
    "newValue": true,
    "changedBy": "cust_john_doe",
    "changeSource": "self_service",
    "ipAddress": "192.168.1.100",
    "consentTimestamp": "2025-12-29T14:00:00Z",
    "consentMethod": "checkbox",
    "consentText": "I agree to receive promotional SMS messages"
  }
}

Gift Card Events

28. GiftCardPurchased

Trigger: Gift card sold Producer: Gift Card Service Consumers: Customer, Financial, Analytics

{
  "eventType": "GiftCardPurchased",
  "eventId": "evt_gc_001",
  "timestamp": "2025-12-29T14:30:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "gc_001",
  "payload": {
    "giftCardId": "gc_001",
    "cardNumber": "6012XXXXXXXXXXXX1234",
    "purchasedBy": "cust_john_doe",
    "recipientEmail": "jane@example.com",
    "recipientName": "Jane Doe",
    "orderId": "ord_gc001",
    "locationId": "loc_gm",
    "initialBalance": 50.00,
    "purchaseAmount": 50.00,
    "cardType": "digital",
    "deliveryMethod": "email",
    "activationDate": "2025-12-29",
    "expirationDate": null,
    "personalMessage": "Happy Birthday!"
  }
}

29. GiftCardRedeemed

Trigger: Card used as payment Producer: Gift Card Service Consumers: Order, Financial

{
  "eventType": "GiftCardRedeemed",
  "eventId": "evt_gc_002",
  "timestamp": "2025-12-29T15:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz790",
  "payload": {
    "giftCardId": "gc_001",
    "cardNumber": "6012XXXXXXXXXXXX1234",
    "redeemedBy": "cust_jane_doe",
    "orderId": "ord_xyz790",
    "locationId": "loc_hm",
    "amountRedeemed": 35.00,
    "previousBalance": 50.00,
    "newBalance": 15.00,
    "transactionType": "purchase"
  }
}

30. GiftCardBalanceChecked

Trigger: Balance inquiry Producer: Gift Card Service Consumers: Analytics

{
  "eventType": "GiftCardBalanceChecked",
  "eventId": "evt_gc_003",
  "timestamp": "2025-12-29T14:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "gc_001",
  "payload": {
    "giftCardId": "gc_001",
    "cardNumber": "6012XXXXXXXXXXXX1234",
    "currentBalance": 15.00,
    "checkedBy": null,
    "checkSource": "web",
    "locationId": null
  }
}

Employee Events

31. EmployeeClockedIn

Trigger: Employee starts shift Producer: Time Clock Service Consumers: Payroll, Reporting

{
  "eventType": "EmployeeClockedIn",
  "eventId": "evt_emp_001",
  "timestamp": "2025-12-29T08:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "tc_001",
  "payload": {
    "timeClockEntryId": "tc_001",
    "employeeId": "usr_cashier1",
    "locationId": "loc_gm",
    "registerId": "reg_01",
    "clockInTime": "2025-12-29T08:00:00Z",
    "clockInMethod": "pin",
    "scheduledStart": "2025-12-29T08:00:00Z",
    "minutesEarly": 0,
    "minutesLate": 0
  }
}

32. EmployeeClockedOut

Trigger: Employee ends shift Producer: Time Clock Service Consumers: Payroll, Reporting

{
  "eventType": "EmployeeClockedOut",
  "eventId": "evt_emp_002",
  "timestamp": "2025-12-29T17:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "tc_001",
  "payload": {
    "timeClockEntryId": "tc_001",
    "employeeId": "usr_cashier1",
    "locationId": "loc_gm",
    "clockOutTime": "2025-12-29T17:00:00Z",
    "clockOutMethod": "pin",
    "totalHoursWorked": 9.0,
    "breakMinutes": 30,
    "overtimeHours": 1.0,
    "scheduledEnd": "2025-12-29T16:00:00Z"
  }
}

33. BreakStarted

Trigger: Employee starts break Producer: Time Clock Service Consumers: Floor Coverage

{
  "eventType": "BreakStarted",
  "eventId": "evt_emp_003",
  "timestamp": "2025-12-29T12:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "tc_001",
  "payload": {
    "timeClockEntryId": "tc_001",
    "employeeId": "usr_cashier1",
    "locationId": "loc_gm",
    "breakType": "lunch",
    "breakStartTime": "2025-12-29T12:00:00Z",
    "expectedDuration": 30
  }
}

34. BreakEnded

Trigger: Employee returns from break Producer: Time Clock Service Consumers: Floor Coverage

{
  "eventType": "BreakEnded",
  "eventId": "evt_emp_004",
  "timestamp": "2025-12-29T12:30:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "tc_001",
  "payload": {
    "timeClockEntryId": "tc_001",
    "employeeId": "usr_cashier1",
    "locationId": "loc_gm",
    "breakType": "lunch",
    "breakEndTime": "2025-12-29T12:30:00Z",
    "actualDuration": 30,
    "overBreak": false
  }
}

Cash Management Events

35. ShiftOpened

Trigger: Manager opens cash drawer Producer: Cash Management Service Consumers: Reporting, Audit

{
  "eventType": "ShiftOpened",
  "eventId": "evt_cash_001",
  "timestamp": "2025-12-29T08:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "shift_001",
  "payload": {
    "shiftId": "shift_001",
    "registerId": "reg_01",
    "locationId": "loc_gm",
    "openedBy": "usr_manager1",
    "openedAt": "2025-12-29T08:00:00Z",
    "openingFloat": 267.50,
    "floatBreakdown": {
      "bills_20": 5,
      "bills_10": 5,
      "bills_5": 10,
      "bills_1": 50,
      "quarters": 40,
      "dimes": 50,
      "nickels": 40,
      "pennies": 50
    },
    "countVariance": 0
  }
}

36. TillDropped

Trigger: Cash removed to safe Producer: Cash Management Service Consumers: Reporting, Audit

{
  "eventType": "TillDropped",
  "eventId": "evt_cash_002",
  "timestamp": "2025-12-29T14:30:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "shift_001",
  "payload": {
    "shiftId": "shift_001",
    "dropId": "drop_001",
    "registerId": "reg_01",
    "locationId": "loc_gm",
    "droppedBy": "usr_cashier1",
    "dropAmount": 200.00,
    "breakdown": {
      "bills_100": 2
    },
    "drawerBalanceBefore": 467.50,
    "drawerBalanceAfter": 267.50,
    "dropReason": "excess_cash",
    "dropSlipNumber": "DROP-2025-12-29-001"
  }
}

37. CashPickedUp

Trigger: Manager removes cash Producer: Cash Management Service Consumers: Reporting, Audit

{
  "eventType": "CashPickedUp",
  "eventId": "evt_cash_003",
  "timestamp": "2025-12-29T15:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "shift_001",
  "payload": {
    "shiftId": "shift_001",
    "pickupId": "pickup_001",
    "registerId": "reg_01",
    "locationId": "loc_gm",
    "performedBy": "usr_manager1",
    "witnessedBy": "usr_cashier1",
    "pickupAmount": 300.00,
    "pickupReason": "bank_deposit",
    "drawerBalanceBefore": 567.50,
    "drawerBalanceAfter": 267.50
  }
}

38. PaidOut

Trigger: Petty cash expense Producer: Cash Management Service Consumers: Reporting, AP, Audit

{
  "eventType": "PaidOut",
  "eventId": "evt_cash_004",
  "timestamp": "2025-12-29T11:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "shift_001",
  "payload": {
    "shiftId": "shift_001",
    "paidOutId": "paidout_001",
    "registerId": "reg_01",
    "locationId": "loc_gm",
    "performedBy": "usr_manager1",
    "amount": 25.00,
    "category": "office_supplies",
    "description": "Printer paper",
    "vendorName": "Office Depot",
    "receiptAttached": true,
    "drawerBalanceBefore": 292.50,
    "drawerBalanceAfter": 267.50
  }
}

39. ShiftClosed

Trigger: End of day close Producer: Cash Management Service Consumers: Reporting, Audit

{
  "eventType": "ShiftClosed",
  "eventId": "evt_cash_005",
  "timestamp": "2025-12-29T21:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "shift_001",
  "payload": {
    "shiftId": "shift_001",
    "registerId": "reg_01",
    "locationId": "loc_gm",
    "closedBy": "usr_manager1",
    "closedAt": "2025-12-29T21:00:00Z",
    "expectedCash": 725.50,
    "actualCash": 723.00,
    "variance": -2.50,
    "varianceSeverity": "notable",
    "closingBreakdown": {
      "bills_100": 2,
      "bills_50": 3,
      "bills_20": 15,
      "bills_10": 10,
      "bills_5": 20,
      "bills_1": 75,
      "quarters": 80,
      "dimes": 100
    },
    "summary": {
      "openingFloat": 267.50,
      "cashSales": 458.00,
      "cashReturns": -45.00,
      "paidOuts": -25.00,
      "paidIns": 0,
      "tillDrops": -200.00,
      "expectedClosing": 455.50
    }
  }
}

RFID Events

40. RfidTagPrinted

Trigger: Tag printed and encoded Producer: RFID Print Service Consumers: Tag Registry, Inventory

{
  "eventType": "RfidTagPrinted",
  "eventId": "evt_rfid_001",
  "timestamp": "2025-12-29T08:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "print_job_001",
  "payload": {
    "tagId": "tag_001",
    "epc": "30340123456789012345678901",
    "variantId": "var_nxp0323_m_blk",
    "sku": "NXP0323-M-BLK",
    "serialNumber": 1234567,
    "printJobId": "print_job_001",
    "printerId": "printer_zebra_01",
    "locationId": "loc_hq",
    "printedBy": "usr_warehouse1",
    "templateId": "tmpl_standard"
  }
}

41. RfidScanSessionStarted

Trigger: Inventory scan begins Producer: RFID Mobile App Consumers: Scan Session Service

{
  "eventType": "RfidScanSessionStarted",
  "eventId": "evt_rfid_002",
  "timestamp": "2025-12-29T10:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "scan_session_001",
  "payload": {
    "sessionId": "scan_session_001",
    "locationId": "loc_gm",
    "zoneId": "zone_sales_floor",
    "startedBy": "usr_associate1",
    "deviceId": "rfid_handheld_01",
    "sessionType": "cycle_count",
    "expectedSkuCount": 150
  }
}

42. RfidTagScanned

Trigger: Tag read during scan Producer: RFID Mobile App Consumers: Real-time Dashboard

{
  "eventType": "RfidTagScanned",
  "eventId": "evt_rfid_003",
  "timestamp": "2025-12-29T10:05:23Z",
  "tenantId": "tenant_nexus",
  "correlationId": "scan_session_001",
  "payload": {
    "scanEventId": "scan_evt_001",
    "sessionId": "scan_session_001",
    "tagId": "tag_001",
    "epc": "30340123456789012345678901",
    "rssi": -45,
    "antennaId": 1,
    "readCount": 3,
    "firstSeenAt": "2025-12-29T10:05:23Z",
    "lastSeenAt": "2025-12-29T10:05:25Z"
  }
}

43. RfidScanSessionCompleted

Trigger: Scan session ends Producer: RFID Mobile App Consumers: Inventory, Variance Report

{
  "eventType": "RfidScanSessionCompleted",
  "eventId": "evt_rfid_004",
  "timestamp": "2025-12-29T10:30:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "scan_session_001",
  "payload": {
    "sessionId": "scan_session_001",
    "locationId": "loc_gm",
    "completedBy": "usr_associate1",
    "duration": 1800,
    "summary": {
      "totalTagsScanned": 145,
      "uniqueSkusFound": 142,
      "expectedSkus": 150,
      "varianceCount": 8,
      "missingSkus": ["NXP0323-M-BLK", "NXP0324-L-WHT"],
      "extraSkus": []
    },
    "variancePercentage": 5.33,
    "requiresRecount": false,
    "autoAdjust": false
  }
}

44. RfidTagStatusChanged

Trigger: Tag lifecycle change Producer: Various Services Consumers: Tag Registry, Analytics

{
  "eventType": "RfidTagStatusChanged",
  "eventId": "evt_rfid_005",
  "timestamp": "2025-12-29T14:31:30Z",
  "tenantId": "tenant_nexus",
  "correlationId": "ord_xyz789",
  "payload": {
    "tagId": "tag_001",
    "epc": "30340123456789012345678901",
    "previousStatus": "active",
    "newStatus": "sold",
    "triggeredBy": "sale",
    "referenceId": "ord_xyz789",
    "referenceType": "order",
    "locationId": "loc_gm",
    "changedAt": "2025-12-29T14:31:30Z"
  }
}

Sync Events

45. SyncConflictDetected

Trigger: Offline sync conflict Producer: Sync Service Consumers: Conflict Resolution, Admin Dashboard

{
  "eventType": "SyncConflictDetected",
  "eventId": "evt_sync_001",
  "timestamp": "2025-12-29T12:00:00Z",
  "tenantId": "tenant_nexus",
  "correlationId": "sync_batch_001",
  "payload": {
    "conflictId": "conflict_001",
    "deviceId": "dev_pos_01",
    "conflictType": "inventory_quantity",
    "entityType": "inventory_level",
    "entityId": "invlvl_001",
    "variantId": "var_nxp0323_m_blk",
    "locationId": "loc_gm",
    "serverValue": {
      "quantity": 12,
      "lastUpdated": "2025-12-29T11:45:00Z"
    },
    "localValue": {
      "quantity": 15,
      "lastUpdated": "2025-12-29T10:30:00Z",
      "delta": -2
    },
    "resolution": {
      "method": "delta_merge",
      "resolvedValue": 10,
      "automated": true
    },
    "syncTimestamp": "2025-12-29T12:00:00Z"
  }
}

Event Summary by Domain

DomainEvent CountEvents
Sales9OrderCreated, PaymentAttempted, PaymentCompleted, PaymentFailed, OrderCompleted, OrderVoided, ReturnInitiated, ReturnCompleted, ReceiptRequested
Inventory9StockReserved, StockCommitted, StockReleased, StockReceived, StockAdjusted, TransferRequested, TransferShipped, TransferReceived, StockRestocked
Customer9CustomerCreated, CustomerUpdated, CustomerMerged, LoyaltyPointsEarned, LoyaltyPointsRedeemed, LoyaltyPointsDeducted, LoyaltyTierChanged, CustomerTagged, CustomerOptInChanged
Gift Card3GiftCardPurchased, GiftCardRedeemed, GiftCardBalanceChecked
Employee4EmployeeClockedIn, EmployeeClockedOut, BreakStarted, BreakEnded
Cash5ShiftOpened, TillDropped, CashPickedUp, PaidOut, ShiftClosed
RFID5RfidTagPrinted, RfidScanSessionStarted, RfidTagScanned, RfidScanSessionCompleted, RfidTagStatusChanged
Sync1SyncConflictDetected
TOTAL45

This catalog documents all 45+ domain events that power the POS Platform’s event-driven architecture.