@ingenx-io/valets-schema-mcp-server 0.2.5 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/data/docs/collections/firestore-paths.md +20 -0
  2. package/data/docs/enums/app-status.md +1 -1
  3. package/data/docs/enums/attention-status.md +1 -1
  4. package/data/docs/enums/booking-status.md +1 -1
  5. package/data/docs/enums/contract-status.md +24 -0
  6. package/data/docs/enums/customer-payment-status.md +2 -2
  7. package/data/docs/enums/customer-payment-target-type.md +2 -2
  8. package/data/docs/enums/delivery-type.md +2 -2
  9. package/data/docs/enums/deployment-link-type.md +2 -2
  10. package/data/docs/enums/event-status.md +2 -2
  11. package/data/docs/enums/expense-payment-status.md +24 -0
  12. package/data/docs/enums/fulfillment-status.md +2 -2
  13. package/data/docs/enums/loyalty-transaction-type.md +2 -2
  14. package/data/docs/enums/milestone-status.md +23 -0
  15. package/data/docs/enums/notification-channel.md +2 -2
  16. package/data/docs/enums/notification-entity-type.md +2 -2
  17. package/data/docs/enums/notification-status.md +2 -2
  18. package/data/docs/enums/order-status.md +2 -2
  19. package/data/docs/enums/outbound-message-format.md +2 -2
  20. package/data/docs/enums/outbound-message-purpose.md +2 -2
  21. package/data/docs/enums/outbound-message-status.md +2 -2
  22. package/data/docs/enums/payment-method.md +4 -3
  23. package/data/docs/enums/payment-proof-status.md +2 -2
  24. package/data/docs/enums/payment-status.md +2 -2
  25. package/data/docs/enums/pending-issue.md +2 -2
  26. package/data/docs/enums/return-status.md +2 -2
  27. package/data/docs/enums/session-status.md +2 -2
  28. package/data/docs/enums/site-status.md +2 -2
  29. package/data/docs/enums/stocktake-frequency.md +2 -2
  30. package/data/docs/enums/stocktake-item-status.md +2 -2
  31. package/data/docs/enums/stocktake-status.md +2 -2
  32. package/data/docs/enums/ticket-status.md +2 -2
  33. package/data/docs/enums/waba-label.md +3 -3
  34. package/data/docs/enums/whatsapp-button-sub-type.md +2 -2
  35. package/data/docs/enums/whatsapp-template-component.md +2 -2
  36. package/data/docs/enums/whatsapp-template-status.md +2 -2
  37. package/data/docs/index.md +15 -6
  38. package/data/docs/models/allowed-user.md +1 -1
  39. package/data/docs/models/analytics-backfill.md +1 -1
  40. package/data/docs/models/analytics-daily.md +1 -1
  41. package/data/docs/models/analytics-event.md +1 -1
  42. package/data/docs/models/analytics-hourly.md +1 -1
  43. package/data/docs/models/app-payment.md +1 -1
  44. package/data/docs/models/app.md +45 -21
  45. package/data/docs/models/booking-version.md +1 -1
  46. package/data/docs/models/booking.md +1 -1
  47. package/data/docs/models/contract.md +454 -0
  48. package/data/docs/models/customer-payment-allocation.md +2 -2
  49. package/data/docs/models/customer-payment.md +23 -22
  50. package/data/docs/models/customer.md +2 -2
  51. package/data/docs/models/event.md +2 -2
  52. package/data/docs/models/expense.md +434 -0
  53. package/data/docs/models/loyalty-config.md +2 -2
  54. package/data/docs/models/loyalty-reward.md +2 -2
  55. package/data/docs/models/loyalty-status.md +2 -2
  56. package/data/docs/models/loyalty-transaction.md +2 -2
  57. package/data/docs/models/magic-link-request.md +2 -2
  58. package/data/docs/models/metrics-current.md +22 -2
  59. package/data/docs/models/metrics-daily.md +92 -41
  60. package/data/docs/models/metrics-monthly.md +22 -2
  61. package/data/docs/models/notification-record.md +2 -2
  62. package/data/docs/models/order-item.md +2 -2
  63. package/data/docs/models/order.md +291 -270
  64. package/data/docs/models/outbound-payment-allocation.md +195 -0
  65. package/data/docs/models/outbound-payment.md +319 -0
  66. package/data/docs/models/payment-webhook-delivery.md +321 -0
  67. package/data/docs/models/payment-webhook-endpoint.md +191 -0
  68. package/data/docs/models/sale.md +2 -2
  69. package/data/docs/models/site-payment.md +2 -2
  70. package/data/docs/models/site.md +2 -2
  71. package/data/docs/models/stocktake-item.md +2 -2
  72. package/data/docs/models/stocktake.md +2 -2
  73. package/data/docs/models/ticket.md +2 -2
  74. package/data/docs/models/user.md +2 -2
  75. package/data/docs/models/whatsapp-inbound-message.md +6 -2
  76. package/data/docs/models/whatsapp-outbound-lifecycle-event.md +2 -2
  77. package/data/docs/models/whatsapp-outbound-message.md +39 -23
  78. package/data/docs/models/whatsapp-template.md +6 -2
  79. package/data/static/llms.txt +242 -10
  80. package/data/static/openapi.yaml +826 -23
  81. package/data/static/schemas.json +877 -71
  82. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Order"
3
3
  sidebar_label: "Order"
4
- sidebar_position: 23
4
+ sidebar_position: 25
5
5
  ---
6
6
 
7
7
  # Order
@@ -16,6 +16,7 @@ sidebar_position: 23
16
16
  "companyId": "comp_xyz789",
17
17
  "appId": null,
18
18
  "orderNumber": "ORD-2026-0042",
19
+ "followUpUrl": null,
19
20
  "status": "status",
20
21
  "paymentStatus": "paymentStatus",
21
22
  "fulfillmentStatus": "fulfillmentStatus",
@@ -70,114 +71,115 @@ sidebar_position: 23
70
71
  - [3. Property `companyId`](#companyId)
71
72
  - [4. Property `appId`](#appId)
72
73
  - [5. Property `orderNumber`](#orderNumber)
73
- - [6. Property `status`](#status)
74
- - [7. Property `paymentStatus`](#paymentStatus)
75
- - [7.1. Property `payment-status`](#paymentStatus_anyOf_i0)
76
- - [7.2. Property `item 1`](#paymentStatus_anyOf_i1)
77
- - [8. Property `fulfillmentStatus`](#fulfillmentStatus)
78
- - [8.1. Property `fulfillment-status`](#fulfillmentStatus_anyOf_i0)
79
- - [8.2. Property `item 1`](#fulfillmentStatus_anyOf_i1)
80
- - [9. Property `returnStatus`](#returnStatus)
81
- - [9.1. Property `return-status`](#returnStatus_anyOf_i0)
82
- - [9.2. Property `item 1`](#returnStatus_anyOf_i1)
83
- - [10. Property `deliveryType`](#deliveryType)
84
- - [10.1. Property `delivery-type`](#deliveryType_anyOf_i0)
85
- - [10.2. Property `item 1`](#deliveryType_anyOf_i1)
86
- - [11. Property `paymentMethod`](#paymentMethod)
87
- - [11.1. Property `payment-method`](#paymentMethod_anyOf_i0)
88
- - [11.2. Property `item 1`](#paymentMethod_anyOf_i1)
89
- - [12. Property `invoiceId`](#invoiceId)
90
- - [13. Property `customerId`](#customerId)
91
- - [14. Property `customerName`](#customerName)
92
- - [15. Property `customerEmail`](#customerEmail)
93
- - [16. Property `customerPhone`](#customerPhone)
94
- - [17. Property `clientEmail`](#clientEmail)
95
- - [18. Property `clientPhoneNumber`](#clientPhoneNumber)
96
- - [19. Property `items`](#items)
97
- - [19.1. order-item](#items_items)
98
- - [19.1.1. Property `name`](#items_items_name)
99
- - [19.1.2. Property `quantity`](#items_items_quantity)
100
- - [19.1.3. Property `price`](#items_items_price)
101
- - [19.1.4. Property `productId`](#items_items_productId)
102
- - [19.1.5. Property `increment`](#items_items_increment)
103
- - [19.1.6. Property `variantId`](#items_items_variantId)
104
- - [19.1.7. Property `supplierId`](#items_items_supplierId)
105
- - [19.1.8. Property `supplierName`](#items_items_supplierName)
106
- - [19.1.9. Property `sentAt`](#items_items_sentAt)
107
- - [19.1.9.1. Property `_seconds`](#items_items_sentAt__seconds)
108
- - [19.1.9.2. Property `_nanoseconds`](#items_items_sentAt__nanoseconds)
109
- - [19.1.10. Property `startedCookingAt`](#items_items_startedCookingAt)
110
- - [19.1.10.1. Property `_seconds`](#items_items_startedCookingAt__seconds)
111
- - [19.1.10.2. Property `_nanoseconds`](#items_items_startedCookingAt__nanoseconds)
112
- - [19.1.11. Property `readyAt`](#items_items_readyAt)
113
- - [19.1.11.1. Property `_seconds`](#items_items_readyAt__seconds)
114
- - [19.1.11.2. Property `_nanoseconds`](#items_items_readyAt__nanoseconds)
115
- - [19.1.12. Property `servedAt`](#items_items_servedAt)
116
- - [19.1.12.1. Property `_seconds`](#items_items_servedAt__seconds)
117
- - [19.1.12.2. Property `_nanoseconds`](#items_items_servedAt__nanoseconds)
118
- - [20. Property `amount`](#amount)
119
- - [21. Property `amountPaid`](#amountPaid)
120
- - [22. Property `total`](#total)
121
- - [23. Property `createdAt`](#createdAt)
122
- - [23.1. Property `_seconds`](#createdAt__seconds)
123
- - [23.2. Property `_nanoseconds`](#createdAt__nanoseconds)
124
- - [24. Property `orderDate`](#orderDate)
125
- - [25. Property `PROCESSING_ON`](#PROCESSING_ON)
126
- - [25.1. Property `firestore-timestamp`](#PROCESSING_ON_anyOf_i0)
127
- - [25.2. Property `item 1`](#PROCESSING_ON_anyOf_i1)
128
- - [26. Property `COMPLETED_ON`](#COMPLETED_ON)
129
- - [26.1. Property `firestore-timestamp`](#COMPLETED_ON_anyOf_i0)
130
- - [26.2. Property `item 1`](#COMPLETED_ON_anyOf_i1)
131
- - [27. Property `CANCELLED_ON`](#CANCELLED_ON)
132
- - [27.1. Property `firestore-timestamp`](#CANCELLED_ON_anyOf_i0)
133
- - [27.2. Property `item 1`](#CANCELLED_ON_anyOf_i1)
134
- - [28. Property `cancellationReason`](#cancellationReason)
135
- - [29. Property `shippingCarrier`](#shippingCarrier)
136
- - [30. Property `trackingNumber`](#trackingNumber)
137
- - [31. Property `estimatedDeliveryDate`](#estimatedDeliveryDate)
138
- - [31.1. Property `firestore-timestamp`](#estimatedDeliveryDate_anyOf_i0)
139
- - [31.2. Property `item 1`](#estimatedDeliveryDate_anyOf_i1)
140
- - [32. Property `shippingCost`](#shippingCost)
141
- - [33. Property `paymentProofUrl`](#paymentProofUrl)
142
- - [34. Property `paymentProofStatus`](#paymentProofStatus)
143
- - [34.1. Property `payment-proof-status`](#paymentProofStatus_anyOf_i0)
144
- - [34.2. Property `item 1`](#paymentProofStatus_anyOf_i1)
145
- - [35. Property `paymentProofAddedAt`](#paymentProofAddedAt)
146
- - [35.1. Property `firestore-timestamp`](#paymentProofAddedAt_anyOf_i0)
147
- - [35.2. Property `item 1`](#paymentProofAddedAt_anyOf_i1)
148
- - [36. Property `paymentProofAddedBy`](#paymentProofAddedBy)
149
- - [37. Property `paymentProofReviewedAt`](#paymentProofReviewedAt)
150
- - [37.1. Property `firestore-timestamp`](#paymentProofReviewedAt_anyOf_i0)
151
- - [37.2. Property `item 1`](#paymentProofReviewedAt_anyOf_i1)
152
- - [38. Property `paymentProofReviewedBy`](#paymentProofReviewedBy)
153
- - [39. Property `paymentProofRejectionReason`](#paymentProofRejectionReason)
154
- - [40. Property `paymentStatusChangeReason`](#paymentStatusChangeReason)
155
- - [41. Property `paymentStatusChangedBy`](#paymentStatusChangedBy)
156
- - [42. Property `paymentStatusChangedAt`](#paymentStatusChangedAt)
157
- - [42.1. Property `firestore-timestamp`](#paymentStatusChangedAt_anyOf_i0)
158
- - [42.2. Property `item 1`](#paymentStatusChangedAt_anyOf_i1)
159
- - [43. Property `payments`](#payments)
160
- - [43.1. payments items](#payments_items)
161
- - [43.1.1. Property `paymentId`](#payments_items_paymentId)
162
- - [43.1.2. Property `amount`](#payments_items_amount)
163
- - [43.1.3. Property `currency`](#payments_items_currency)
164
- - [43.1.4. Property `paymentMethod`](#payments_items_paymentMethod)
165
- - [43.1.5. Property `paymentDate`](#payments_items_paymentDate)
166
- - [43.1.6. Property `referenceNumber`](#payments_items_referenceNumber)
167
- - [43.1.7. Property `status`](#payments_items_status)
168
- - [44. Property `totalOverridden`](#totalOverridden)
169
- - [45. Property `notes`](#notes)
170
- - [45.1. notes items](#notes_items)
171
- - [45.1.1. Property `id`](#notes_items_id)
172
- - [45.1.2. Property `text`](#notes_items_text)
173
- - [45.1.3. Property `createdAt`](#notes_items_createdAt)
174
- - [45.1.3.1. Property `_seconds`](#createdAt__seconds)
175
- - [45.1.3.2. Property `_nanoseconds`](#createdAt__nanoseconds)
176
- - [45.1.4. Property `createdBy`](#notes_items_createdBy)
177
- - [45.1.5. Property `createdByName`](#notes_items_createdByName)
178
- - [46. Property `additionalInfo`](#additionalInfo)
179
- - [47. Property `appliedDiscountCode`](#appliedDiscountCode)
180
- - [48. Property `purchaseId`](#purchaseId)
74
+ - [6. Property `followUpUrl`](#followUpUrl)
75
+ - [7. Property `status`](#status)
76
+ - [8. Property `paymentStatus`](#paymentStatus)
77
+ - [8.1. Property `payment-status`](#paymentStatus_anyOf_i0)
78
+ - [8.2. Property `item 1`](#paymentStatus_anyOf_i1)
79
+ - [9. Property `fulfillmentStatus`](#fulfillmentStatus)
80
+ - [9.1. Property `fulfillment-status`](#fulfillmentStatus_anyOf_i0)
81
+ - [9.2. Property `item 1`](#fulfillmentStatus_anyOf_i1)
82
+ - [10. Property `returnStatus`](#returnStatus)
83
+ - [10.1. Property `return-status`](#returnStatus_anyOf_i0)
84
+ - [10.2. Property `item 1`](#returnStatus_anyOf_i1)
85
+ - [11. Property `deliveryType`](#deliveryType)
86
+ - [11.1. Property `delivery-type`](#deliveryType_anyOf_i0)
87
+ - [11.2. Property `item 1`](#deliveryType_anyOf_i1)
88
+ - [12. Property `paymentMethod`](#paymentMethod)
89
+ - [12.1. Property `payment-method`](#paymentMethod_anyOf_i0)
90
+ - [12.2. Property `item 1`](#paymentMethod_anyOf_i1)
91
+ - [13. Property `invoiceId`](#invoiceId)
92
+ - [14. Property `customerId`](#customerId)
93
+ - [15. Property `customerName`](#customerName)
94
+ - [16. Property `customerEmail`](#customerEmail)
95
+ - [17. Property `customerPhone`](#customerPhone)
96
+ - [18. Property `clientEmail`](#clientEmail)
97
+ - [19. Property `clientPhoneNumber`](#clientPhoneNumber)
98
+ - [20. Property `items`](#items)
99
+ - [20.1. order-item](#items_items)
100
+ - [20.1.1. Property `name`](#items_items_name)
101
+ - [20.1.2. Property `quantity`](#items_items_quantity)
102
+ - [20.1.3. Property `price`](#items_items_price)
103
+ - [20.1.4. Property `productId`](#items_items_productId)
104
+ - [20.1.5. Property `increment`](#items_items_increment)
105
+ - [20.1.6. Property `variantId`](#items_items_variantId)
106
+ - [20.1.7. Property `supplierId`](#items_items_supplierId)
107
+ - [20.1.8. Property `supplierName`](#items_items_supplierName)
108
+ - [20.1.9. Property `sentAt`](#items_items_sentAt)
109
+ - [20.1.9.1. Property `_seconds`](#items_items_sentAt__seconds)
110
+ - [20.1.9.2. Property `_nanoseconds`](#items_items_sentAt__nanoseconds)
111
+ - [20.1.10. Property `startedCookingAt`](#items_items_startedCookingAt)
112
+ - [20.1.10.1. Property `_seconds`](#items_items_startedCookingAt__seconds)
113
+ - [20.1.10.2. Property `_nanoseconds`](#items_items_startedCookingAt__nanoseconds)
114
+ - [20.1.11. Property `readyAt`](#items_items_readyAt)
115
+ - [20.1.11.1. Property `_seconds`](#items_items_readyAt__seconds)
116
+ - [20.1.11.2. Property `_nanoseconds`](#items_items_readyAt__nanoseconds)
117
+ - [20.1.12. Property `servedAt`](#items_items_servedAt)
118
+ - [20.1.12.1. Property `_seconds`](#items_items_servedAt__seconds)
119
+ - [20.1.12.2. Property `_nanoseconds`](#items_items_servedAt__nanoseconds)
120
+ - [21. Property `amount`](#amount)
121
+ - [22. Property `amountPaid`](#amountPaid)
122
+ - [23. Property `total`](#total)
123
+ - [24. Property `createdAt`](#createdAt)
124
+ - [24.1. Property `_seconds`](#createdAt__seconds)
125
+ - [24.2. Property `_nanoseconds`](#createdAt__nanoseconds)
126
+ - [25. Property `orderDate`](#orderDate)
127
+ - [26. Property `PROCESSING_ON`](#PROCESSING_ON)
128
+ - [26.1. Property `firestore-timestamp`](#PROCESSING_ON_anyOf_i0)
129
+ - [26.2. Property `item 1`](#PROCESSING_ON_anyOf_i1)
130
+ - [27. Property `COMPLETED_ON`](#COMPLETED_ON)
131
+ - [27.1. Property `firestore-timestamp`](#COMPLETED_ON_anyOf_i0)
132
+ - [27.2. Property `item 1`](#COMPLETED_ON_anyOf_i1)
133
+ - [28. Property `CANCELLED_ON`](#CANCELLED_ON)
134
+ - [28.1. Property `firestore-timestamp`](#CANCELLED_ON_anyOf_i0)
135
+ - [28.2. Property `item 1`](#CANCELLED_ON_anyOf_i1)
136
+ - [29. Property `cancellationReason`](#cancellationReason)
137
+ - [30. Property `shippingCarrier`](#shippingCarrier)
138
+ - [31. Property `trackingNumber`](#trackingNumber)
139
+ - [32. Property `estimatedDeliveryDate`](#estimatedDeliveryDate)
140
+ - [32.1. Property `firestore-timestamp`](#estimatedDeliveryDate_anyOf_i0)
141
+ - [32.2. Property `item 1`](#estimatedDeliveryDate_anyOf_i1)
142
+ - [33. Property `shippingCost`](#shippingCost)
143
+ - [34. Property `paymentProofUrl`](#paymentProofUrl)
144
+ - [35. Property `paymentProofStatus`](#paymentProofStatus)
145
+ - [35.1. Property `payment-proof-status`](#paymentProofStatus_anyOf_i0)
146
+ - [35.2. Property `item 1`](#paymentProofStatus_anyOf_i1)
147
+ - [36. Property `paymentProofAddedAt`](#paymentProofAddedAt)
148
+ - [36.1. Property `firestore-timestamp`](#paymentProofAddedAt_anyOf_i0)
149
+ - [36.2. Property `item 1`](#paymentProofAddedAt_anyOf_i1)
150
+ - [37. Property `paymentProofAddedBy`](#paymentProofAddedBy)
151
+ - [38. Property `paymentProofReviewedAt`](#paymentProofReviewedAt)
152
+ - [38.1. Property `firestore-timestamp`](#paymentProofReviewedAt_anyOf_i0)
153
+ - [38.2. Property `item 1`](#paymentProofReviewedAt_anyOf_i1)
154
+ - [39. Property `paymentProofReviewedBy`](#paymentProofReviewedBy)
155
+ - [40. Property `paymentProofRejectionReason`](#paymentProofRejectionReason)
156
+ - [41. Property `paymentStatusChangeReason`](#paymentStatusChangeReason)
157
+ - [42. Property `paymentStatusChangedBy`](#paymentStatusChangedBy)
158
+ - [43. Property `paymentStatusChangedAt`](#paymentStatusChangedAt)
159
+ - [43.1. Property `firestore-timestamp`](#paymentStatusChangedAt_anyOf_i0)
160
+ - [43.2. Property `item 1`](#paymentStatusChangedAt_anyOf_i1)
161
+ - [44. Property `payments`](#payments)
162
+ - [44.1. payments items](#payments_items)
163
+ - [44.1.1. Property `paymentId`](#payments_items_paymentId)
164
+ - [44.1.2. Property `amount`](#payments_items_amount)
165
+ - [44.1.3. Property `currency`](#payments_items_currency)
166
+ - [44.1.4. Property `paymentMethod`](#payments_items_paymentMethod)
167
+ - [44.1.5. Property `paymentDate`](#payments_items_paymentDate)
168
+ - [44.1.6. Property `referenceNumber`](#payments_items_referenceNumber)
169
+ - [44.1.7. Property `status`](#payments_items_status)
170
+ - [45. Property `totalOverridden`](#totalOverridden)
171
+ - [46. Property `notes`](#notes)
172
+ - [46.1. notes items](#notes_items)
173
+ - [46.1.1. Property `id`](#notes_items_id)
174
+ - [46.1.2. Property `text`](#notes_items_text)
175
+ - [46.1.3. Property `createdAt`](#notes_items_createdAt)
176
+ - [46.1.3.1. Property `_seconds`](#createdAt__seconds)
177
+ - [46.1.3.2. Property `_nanoseconds`](#createdAt__nanoseconds)
178
+ - [46.1.4. Property `createdBy`](#notes_items_createdBy)
179
+ - [46.1.5. Property `createdByName`](#notes_items_createdByName)
180
+ - [47. Property `additionalInfo`](#additionalInfo)
181
+ - [48. Property `appliedDiscountCode`](#appliedDiscountCode)
182
+ - [49. Property `purchaseId`](#purchaseId)
181
183
 
182
184
  | | |
183
185
  | ------------------------- | ------------------- |
@@ -188,56 +190,57 @@ sidebar_position: 23
188
190
 
189
191
  **Description:** Order model (D34). Collection: companies/\{companyId\}/orders/\{orderId\}. Status decomposed into 4 orthogonal fields per D34: status (OrderStatus), paymentStatus, fulfillmentStatus, returnStatus. deliveryType determines the fulfillment channel. MIG-11 migrates the old flat 20-value enum.
190
192
 
191
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
192
- | -------------------------------------------------------------- | ------- | ----------------------- | ---------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
193
- | + [id](#id ) | No | string | No | - | (Read-only) Firestore document ID. Note: some models also have uid; see ID conventions. |
194
- | + [uid](#uid ) | No | string | No | - | (Read-only) Entity UID. Often mirrors id. |
195
- | + [companyId](#companyId ) | No | string | No | - | (Immutable) FK → Company document ID. Scopes all queries. |
196
- | - [appId](#appId ) | No | string or null | No | - | (Immutable, Optional) FK → App document ID (D43 / ADR-003, renamed from siteId per D44). null = company-wide. |
197
- | + [orderNumber](#orderNumber ) | No | string | No | - | (Read-only) Server-generated order number. |
198
- | + [status](#status ) | No | enum (of string) | No | In #/definitions/order-status | Core lifecycle status (D34, MIG-11). See OrderStatus enum for the legacy value migration mapping. |
199
- | - [paymentStatus](#paymentStatus ) | No | Combination | No | - | Payment lifecycle (D34). Null until payment is initiated. |
200
- | - [fulfillmentStatus](#fulfillmentStatus ) | No | Combination | No | - | Delivery/fulfillment lifecycle (D34). |
201
- | - [returnStatus](#returnStatus ) | No | Combination | No | - | Return/exchange lifecycle (D34). Null until a return or exchange is initiated. |
202
- | - [deliveryType](#deliveryType ) | No | Combination | No | - | Fulfillment channel for this order (ON_SITE, PICK_UP, DELIVERY). |
203
- | - [paymentMethod](#paymentMethod ) | No | Combination | No | - | Unified payment method set with African + global methods (D02). |
204
- | - [invoiceId](#invoiceId ) | No | string or null | No | - | FK Invoice document ID. |
205
- | - [customerId](#customerId ) | No | string or null | No | - | FK → Customer.id (Firestore doc ID). Used to resolve customer details. |
206
- | - [customerName](#customerName ) | No | string or null | No | - | (Denormalized) From Customer.name at write time. |
207
- | - [customerEmail](#customerEmail ) | No | string or null | No | - | (Denormalized) From Customer.email at write time. Canonical field per D24. |
208
- | - [customerPhone](#customerPhone ) | No | string or null | No | - | (Denormalized) From Customer.phone at write time. Canonical field per D24. |
209
- | - [clientEmail](#clientEmail ) | No | string or null | No | - | (Denormalized) Legacy use \`customerEmail\`. D24 standardized to customer* prefix. |
210
- | - [clientPhoneNumber](#clientPhoneNumber ) | No | string or null | No | - | (Denormalized) Legacy — use \`customerPhone\`. D24 standardized to customer* prefix. |
211
- | - [items](#items ) | No | array or null | No | - | - |
212
- | + [amount](#amount ) | No | number | No | - | Total order amount. Canonical field for the order total. |
213
- | - [amountPaid](#amountPaid ) | No | number or null | No | - | Amount of \`amount\` paid to date. Derived from payment allocations. |
214
- | - [total](#total ) | No | number or null | No | - | Mobile-only legacy total field. Deprecated use \`amount\`. |
215
- | + [createdAt](#createdAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Server-generated creation timestamp. |
216
- | + [orderDate](#orderDate ) | No | object | No | Same as [createdAt](#createdAt ) | Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
217
- | - [PROCESSING_ON](#PROCESSING_ON ) | No | Combination | No | - | (Read-only) Timestamp when order entered PROCESSING (D04 SCREAMING_SNAKE). MIG-01 renames from camelCase. |
218
- | - [COMPLETED_ON](#COMPLETED_ON ) | No | Combination | No | - | (Read-only) Timestamp when order completed (D04 SCREAMING_SNAKE). MIG-01 renames from camelCase. |
219
- | - [CANCELLED_ON](#CANCELLED_ON ) | No | Combination | No | - | (Read-only) Timestamp when order cancelled (D04 SCREAMING_SNAKE). MIG-01 renames from camelCase. |
220
- | - [cancellationReason](#cancellationReason ) | No | string or null | No | - | - |
221
- | - [shippingCarrier](#shippingCarrier ) | No | string or null | No | - | - |
222
- | - [trackingNumber](#trackingNumber ) | No | string or null | No | - | - |
223
- | - [estimatedDeliveryDate](#estimatedDeliveryDate ) | No | Combination | No | - | Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
224
- | - [shippingCost](#shippingCost ) | No | number or null | No | - | - |
225
- | - [paymentProofUrl](#paymentProofUrl ) | No | string or null | No | - | URL to uploaded payment proof image/document. |
226
- | - [paymentProofStatus](#paymentProofStatus ) | No | Combination | No | - | Payment proof review status. |
227
- | - [paymentProofAddedAt](#paymentProofAddedAt ) | No | Combination | No | - | (Read-only) Timestamp when proof was uploaded. |
228
- | - [paymentProofAddedBy](#paymentProofAddedBy ) | No | string or null | No | - | FK User/staff UID who uploaded the payment proof. |
229
- | - [paymentProofReviewedAt](#paymentProofReviewedAt ) | No | Combination | No | - | (Read-only) Timestamp when proof was reviewed. |
230
- | - [paymentProofReviewedBy](#paymentProofReviewedBy ) | No | string or null | No | - | FK User/staff UID who reviewed the payment proof. |
231
- | - [paymentProofRejectionReason](#paymentProofRejectionReason ) | No | string or null | No | - | - |
232
- | - [paymentStatusChangeReason](#paymentStatusChangeReason ) | No | string or null | No | - | - |
233
- | - [paymentStatusChangedBy](#paymentStatusChangedBy ) | No | string or null | No | - | FK → User/staff UID who changed payment status. |
234
- | - [paymentStatusChangedAt](#paymentStatusChangedAt ) | No | Combination | No | - | (Read-only) Timestamp of last payment status change. |
235
- | - [payments](#payments ) | No | array of object or null | No | - | [TBD/WIP — IG-4] Denormalized snapshots of CustomerPayments allocated to this order. Sync rules pending IG-4 resolution. |
236
- | - [totalOverridden](#totalOverridden ) | No | boolean or null | No | - | Mobile-only. When true, total was manually overridden by user (D14). |
237
- | - [notes](#notes ) | No | array of object or null | No | - | - |
238
- | - [additionalInfo](#additionalInfo ) | No | string or null | No | - | - |
239
- | - [appliedDiscountCode](#appliedDiscountCode ) | No | string or null | No | - | - |
240
- | - [purchaseId](#purchaseId ) | No | string or null | No | - | FK → Sale.id. Link to associated Sale document. |
193
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
194
+ | -------------------------------------------------------------- | ------- | ----------------------- | ---------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
195
+ | + [id](#id ) | No | string | No | - | (Read-only) Firestore document ID. Note: some models also have uid; see ID conventions. |
196
+ | + [uid](#uid ) | No | string | No | - | (Read-only) Entity UID. Often mirrors id. |
197
+ | + [companyId](#companyId ) | No | string | No | - | (Immutable) FK → Company document ID. Scopes all queries. |
198
+ | - [appId](#appId ) | No | string or null | No | - | (Immutable, Optional) FK → App document ID (D43 / ADR-003, renamed from siteId per D44). null = company-wide. |
199
+ | + [orderNumber](#orderNumber ) | No | string | No | - | (Read-only) Server-generated order number. |
200
+ | - [followUpUrl](#followUpUrl ) | No | string or null | No | - | Optional URL for receipt QR code / post-order follow-up. Canonical casing: followUpUrl (#6). |
201
+ | + [status](#status ) | No | enum (of string) | No | In #/definitions/order-status | Core lifecycle status (D34, MIG-11). See OrderStatus enum for the legacy value migration mapping. |
202
+ | - [paymentStatus](#paymentStatus ) | No | Combination | No | - | Payment lifecycle (D34). Null until payment is initiated. |
203
+ | - [fulfillmentStatus](#fulfillmentStatus ) | No | Combination | No | - | Delivery/fulfillment lifecycle (D34). |
204
+ | - [returnStatus](#returnStatus ) | No | Combination | No | - | Return/exchange lifecycle (D34). Null until a return or exchange is initiated. |
205
+ | - [deliveryType](#deliveryType ) | No | Combination | No | - | Fulfillment channel for this order (ON_SITE, PICK_UP, DELIVERY). |
206
+ | - [paymentMethod](#paymentMethod ) | No | Combination | No | - | Unified payment method set with African + global methods (D02). Note: the metrics writer historically emits "OM" instead of "ORANGE_MONEY" as a paymentsByMethod map key — treat OM as deprecated; canonical value is ORANGE_MONEY (#21). |
207
+ | - [invoiceId](#invoiceId ) | No | string or null | No | - | FK → Invoice document ID. |
208
+ | - [customerId](#customerId ) | No | string or null | No | - | FK Customer.id (Firestore doc ID). Used to resolve customer details. |
209
+ | - [customerName](#customerName ) | No | string or null | No | - | (Denormalized) From Customer.name at write time. |
210
+ | - [customerEmail](#customerEmail ) | No | string or null | No | - | (Denormalized) From Customer.email at write time. Canonical field per D24. |
211
+ | - [customerPhone](#customerPhone ) | No | string or null | No | - | (Denormalized) From Customer.phone at write time. Canonical field per D24. |
212
+ | - [clientEmail](#clientEmail ) | No | string or null | No | - | (Denormalized) Legacy — use \`customerEmail\`. D24 standardized to customer* prefix. |
213
+ | - [clientPhoneNumber](#clientPhoneNumber ) | No | string or null | No | - | (Denormalized) Legacy — use \`customerPhone\`. D24 standardized to customer* prefix. |
214
+ | - [items](#items ) | No | array or null | No | - | - |
215
+ | + [amount](#amount ) | No | number | No | - | Total order amount. Canonical field for the order total. |
216
+ | - [amountPaid](#amountPaid ) | No | number or null | No | - | Amount of \`amount\` paid to date. Derived from payment allocations. |
217
+ | - [total](#total ) | No | number or null | No | - | Mobile-only legacy total field. Deprecated — use \`amount\`. |
218
+ | + [createdAt](#createdAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Server-generated creation timestamp. |
219
+ | + [orderDate](#orderDate ) | No | object | No | Same as [createdAt](#createdAt ) | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
220
+ | - [PROCESSING_ON](#PROCESSING_ON ) | No | Combination | No | - | (Read-only) Timestamp when order entered PROCESSING (D04 SCREAMING_SNAKE). MIG-01 renames from camelCase. |
221
+ | - [COMPLETED_ON](#COMPLETED_ON ) | No | Combination | No | - | (Read-only) Timestamp when order completed (D04 SCREAMING_SNAKE). MIG-01 renames from camelCase. |
222
+ | - [CANCELLED_ON](#CANCELLED_ON ) | No | Combination | No | - | (Read-only) Timestamp when order cancelled (D04 SCREAMING_SNAKE). MIG-01 renames from camelCase. |
223
+ | - [cancellationReason](#cancellationReason ) | No | string or null | No | - | - |
224
+ | - [shippingCarrier](#shippingCarrier ) | No | string or null | No | - | - |
225
+ | - [trackingNumber](#trackingNumber ) | No | string or null | No | - | - |
226
+ | - [estimatedDeliveryDate](#estimatedDeliveryDate ) | No | Combination | No | - | Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
227
+ | - [shippingCost](#shippingCost ) | No | number or null | No | - | - |
228
+ | - [paymentProofUrl](#paymentProofUrl ) | No | string or null | No | - | URL to uploaded payment proof image/document. |
229
+ | - [paymentProofStatus](#paymentProofStatus ) | No | Combination | No | - | Payment proof review status. |
230
+ | - [paymentProofAddedAt](#paymentProofAddedAt ) | No | Combination | No | - | (Read-only) Timestamp when proof was uploaded. |
231
+ | - [paymentProofAddedBy](#paymentProofAddedBy ) | No | string or null | No | - | FK User/staff UID who uploaded the payment proof. |
232
+ | - [paymentProofReviewedAt](#paymentProofReviewedAt ) | No | Combination | No | - | (Read-only) Timestamp when proof was reviewed. |
233
+ | - [paymentProofReviewedBy](#paymentProofReviewedBy ) | No | string or null | No | - | FK → User/staff UID who reviewed the payment proof. |
234
+ | - [paymentProofRejectionReason](#paymentProofRejectionReason ) | No | string or null | No | - | - |
235
+ | - [paymentStatusChangeReason](#paymentStatusChangeReason ) | No | string or null | No | - | - |
236
+ | - [paymentStatusChangedBy](#paymentStatusChangedBy ) | No | string or null | No | - | FK User/staff UID who changed payment status. |
237
+ | - [paymentStatusChangedAt](#paymentStatusChangedAt ) | No | Combination | No | - | (Read-only) Timestamp of last payment status change. |
238
+ | - [payments](#payments ) | No | array of object or null | No | - | [TBD/WIP — IG-4] Denormalized snapshots of CustomerPayments allocated to this order. Sync rules pending IG-4 resolution. |
239
+ | - [totalOverridden](#totalOverridden ) | No | boolean or null | No | - | Mobile-only. When true, total was manually overridden by user (D14). |
240
+ | - [notes](#notes ) | No | array of object or null | No | - | - |
241
+ | - [additionalInfo](#additionalInfo ) | No | string or null | No | - | - |
242
+ | - [appliedDiscountCode](#appliedDiscountCode ) | No | string or null | No | - | - |
243
+ | - [purchaseId](#purchaseId ) | No | string or null | No | - | FK → Sale.id. Link to associated Sale document. |
241
244
 
242
245
  ## <a name="id"></a>1. Property `id`
243
246
 
@@ -316,7 +319,24 @@ Set at order creation when the client knows which app the order originated from
316
319
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
317
320
  :::
318
321
 
319
- ## <a name="status"></a>6. Property `status`
322
+ ## <a name="followUpUrl"></a>6. Property `followUpUrl`
323
+
324
+ | | |
325
+ | ------------ | ---------------- |
326
+ | **Type** | `string or null` |
327
+ | **Required** | No |
328
+
329
+ **Description:** Optional URL for receipt QR code / post-order follow-up. Canonical casing: followUpUrl (#6).
330
+
331
+ :::note
332
+ Standardized casing is followUpUrl (not followUpURL). Mobile legacy code reads both casings for backward compat but writes followUpUrl going forward (#6).
333
+ :::
334
+
335
+ :::tip When to set
336
+ Used by mobile to generate QR codes on printed receipts. If absent, the mobile app derives a deterministic fallback: https://zahoui.web.app/reviews?orderNumber=\{orderNumber\}.
337
+ :::
338
+
339
+ ## <a name="status"></a>7. Property `status`
320
340
 
321
341
  | | |
322
342
  | -------------- | -------------------------- |
@@ -335,7 +355,7 @@ Must be one of:
335
355
  * "CANCELLED"
336
356
  * "EXPIRED"
337
357
 
338
- ## <a name="paymentStatus"></a>7. Property `paymentStatus`
358
+ ## <a name="paymentStatus"></a>8. Property `paymentStatus`
339
359
 
340
360
  | | |
341
361
  | ------------------------- | ---------------- |
@@ -350,7 +370,7 @@ Must be one of:
350
370
  | [payment-status](#paymentStatus_anyOf_i0) |
351
371
  | [item 1](#paymentStatus_anyOf_i1) |
352
372
 
353
- ### <a name="paymentStatus_anyOf_i0"></a>7.1. Property `payment-status`
373
+ ### <a name="paymentStatus_anyOf_i0"></a>8.1. Property `payment-status`
354
374
 
355
375
  | | |
356
376
  | -------------- | ---------------------------- |
@@ -369,14 +389,14 @@ Must be one of:
369
389
  * "REFUNDED"
370
390
  * "PARTIALLY_REFUNDED"
371
391
 
372
- ### <a name="paymentStatus_anyOf_i1"></a>7.2. Property `item 1`
392
+ ### <a name="paymentStatus_anyOf_i1"></a>8.2. Property `item 1`
373
393
 
374
394
  | | |
375
395
  | ------------ | ------ |
376
396
  | **Type** | `null` |
377
397
  | **Required** | No |
378
398
 
379
- ## <a name="fulfillmentStatus"></a>8. Property `fulfillmentStatus`
399
+ ## <a name="fulfillmentStatus"></a>9. Property `fulfillmentStatus`
380
400
 
381
401
  | | |
382
402
  | ------------------------- | ---------------- |
@@ -391,7 +411,7 @@ Must be one of:
391
411
  | [fulfillment-status](#fulfillmentStatus_anyOf_i0) |
392
412
  | [item 1](#fulfillmentStatus_anyOf_i1) |
393
413
 
394
- ### <a name="fulfillmentStatus_anyOf_i0"></a>8.1. Property `fulfillment-status`
414
+ ### <a name="fulfillmentStatus_anyOf_i0"></a>9.1. Property `fulfillment-status`
395
415
 
396
416
  | | |
397
417
  | -------------- | -------------------------------- |
@@ -409,7 +429,7 @@ Must be one of:
409
429
  * "DELIVERED"
410
430
  * "PICKED_UP"
411
431
 
412
- ### <a name="fulfillmentStatus_anyOf_i1"></a>8.2. Property `item 1`
432
+ ### <a name="fulfillmentStatus_anyOf_i1"></a>9.2. Property `item 1`
413
433
 
414
434
  | | |
415
435
  | ------------ | ------ |
@@ -424,7 +444,7 @@ Null for ON_SITE and PICK_UP orders. Set when deliveryType is DELIVERY and a phy
424
444
  **Decisions:** `D34`
425
445
  :::
426
446
 
427
- ## <a name="returnStatus"></a>9. Property `returnStatus`
447
+ ## <a name="returnStatus"></a>10. Property `returnStatus`
428
448
 
429
449
  | | |
430
450
  | ------------------------- | ---------------- |
@@ -439,7 +459,7 @@ Null for ON_SITE and PICK_UP orders. Set when deliveryType is DELIVERY and a phy
439
459
  | [return-status](#returnStatus_anyOf_i0) |
440
460
  | [item 1](#returnStatus_anyOf_i1) |
441
461
 
442
- ### <a name="returnStatus_anyOf_i0"></a>9.1. Property `return-status`
462
+ ### <a name="returnStatus_anyOf_i0"></a>10.1. Property `return-status`
443
463
 
444
464
  | | |
445
465
  | -------------- | --------------------------- |
@@ -457,14 +477,14 @@ Must be one of:
457
477
  * "EXCHANGE_PROCESSING"
458
478
  * "EXCHANGE_COMPLETED"
459
479
 
460
- ### <a name="returnStatus_anyOf_i1"></a>9.2. Property `item 1`
480
+ ### <a name="returnStatus_anyOf_i1"></a>10.2. Property `item 1`
461
481
 
462
482
  | | |
463
483
  | ------------ | ------ |
464
484
  | **Type** | `null` |
465
485
  | **Required** | No |
466
486
 
467
- ## <a name="deliveryType"></a>10. Property `deliveryType`
487
+ ## <a name="deliveryType"></a>11. Property `deliveryType`
468
488
 
469
489
  | | |
470
490
  | ------------------------- | ---------------- |
@@ -479,7 +499,7 @@ Must be one of:
479
499
  | [delivery-type](#deliveryType_anyOf_i0) |
480
500
  | [item 1](#deliveryType_anyOf_i1) |
481
501
 
482
- ### <a name="deliveryType_anyOf_i0"></a>10.1. Property `delivery-type`
502
+ ### <a name="deliveryType_anyOf_i0"></a>11.1. Property `delivery-type`
483
503
 
484
504
  | | |
485
505
  | -------------- | --------------------------- |
@@ -494,7 +514,7 @@ Must be one of:
494
514
  * "PICK_UP"
495
515
  * "DELIVERY"
496
516
 
497
- ### <a name="deliveryType_anyOf_i1"></a>10.2. Property `item 1`
517
+ ### <a name="deliveryType_anyOf_i1"></a>11.2. Property `item 1`
498
518
 
499
519
  | | |
500
520
  | ------------ | ------ |
@@ -505,7 +525,7 @@ Must be one of:
505
525
  Drives whether fulfillmentStatus is relevant. ON_SITE and PICK_UP orders typically have no fulfillmentStatus.
506
526
  :::
507
527
 
508
- ## <a name="paymentMethod"></a>11. Property `paymentMethod`
528
+ ## <a name="paymentMethod"></a>12. Property `paymentMethod`
509
529
 
510
530
  | | |
511
531
  | ------------------------- | ---------------- |
@@ -513,14 +533,14 @@ Drives whether fulfillmentStatus is relevant. ON_SITE and PICK_UP orders typical
513
533
  | **Required** | No |
514
534
  | **Additional properties** | Any type allowed |
515
535
 
516
- **Description:** Unified payment method set with African + global methods (D02).
536
+ **Description:** Unified payment method set with African + global methods (D02). Note: the metrics writer historically emits "OM" instead of "ORANGE_MONEY" as a paymentsByMethod map key — treat OM as deprecated; canonical value is ORANGE_MONEY (#21).
517
537
 
518
538
  | Any of(Option) |
519
539
  | ----------------------------------------- |
520
540
  | [payment-method](#paymentMethod_anyOf_i0) |
521
541
  | [item 1](#paymentMethod_anyOf_i1) |
522
542
 
523
- ### <a name="paymentMethod_anyOf_i0"></a>11.1. Property `payment-method`
543
+ ### <a name="paymentMethod_anyOf_i0"></a>12.1. Property `payment-method`
524
544
 
525
545
  | | |
526
546
  | -------------- | ---------------------------- |
@@ -528,7 +548,7 @@ Drives whether fulfillmentStatus is relevant. ON_SITE and PICK_UP orders typical
528
548
  | **Required** | No |
529
549
  | **Defined in** | #/definitions/payment-method |
530
550
 
531
- **Description:** Unified payment method set with African + global methods (D02).
551
+ **Description:** Unified payment method set with African + global methods (D02). Note: the metrics writer historically emits "OM" instead of "ORANGE_MONEY" as a paymentsByMethod map key — treat OM as deprecated; canonical value is ORANGE_MONEY (#21).
532
552
 
533
553
  Must be one of:
534
554
  * "CASH"
@@ -541,15 +561,16 @@ Must be one of:
541
561
  * "PAYPAL"
542
562
  * "STRIPE"
543
563
  * "OTHER"
564
+ * "OM"
544
565
 
545
- ### <a name="paymentMethod_anyOf_i1"></a>11.2. Property `item 1`
566
+ ### <a name="paymentMethod_anyOf_i1"></a>12.2. Property `item 1`
546
567
 
547
568
  | | |
548
569
  | ------------ | ------ |
549
570
  | **Type** | `null` |
550
571
  | **Required** | No |
551
572
 
552
- ## <a name="invoiceId"></a>12. Property `invoiceId`
573
+ ## <a name="invoiceId"></a>13. Property `invoiceId`
553
574
 
554
575
  | | |
555
576
  | ------------ | ---------------- |
@@ -558,7 +579,7 @@ Must be one of:
558
579
 
559
580
  **Description:** FK → Invoice document ID.
560
581
 
561
- ## <a name="customerId"></a>13. Property `customerId`
582
+ ## <a name="customerId"></a>14. Property `customerId`
562
583
 
563
584
  | | |
564
585
  | ------------ | ---------------- |
@@ -567,7 +588,7 @@ Must be one of:
567
588
 
568
589
  **Description:** FK → Customer.id (Firestore doc ID). Used to resolve customer details.
569
590
 
570
- ## <a name="customerName"></a>14. Property `customerName`
591
+ ## <a name="customerName"></a>15. Property `customerName`
571
592
 
572
593
  | | |
573
594
  | ------------ | ---------------- |
@@ -576,7 +597,7 @@ Must be one of:
576
597
 
577
598
  **Description:** (Denormalized) From Customer.name at write time.
578
599
 
579
- ## <a name="customerEmail"></a>15. Property `customerEmail`
600
+ ## <a name="customerEmail"></a>16. Property `customerEmail`
580
601
 
581
602
  | | |
582
603
  | ------------ | ---------------- |
@@ -585,7 +606,7 @@ Must be one of:
585
606
 
586
607
  **Description:** (Denormalized) From Customer.email at write time. Canonical field per D24.
587
608
 
588
- ## <a name="customerPhone"></a>16. Property `customerPhone`
609
+ ## <a name="customerPhone"></a>17. Property `customerPhone`
589
610
 
590
611
  | | |
591
612
  | ------------ | ---------------- |
@@ -594,7 +615,7 @@ Must be one of:
594
615
 
595
616
  **Description:** (Denormalized) From Customer.phone at write time. Canonical field per D24.
596
617
 
597
- ## <a name="clientEmail"></a>17. Property `clientEmail`
618
+ ## <a name="clientEmail"></a>18. Property `clientEmail`
598
619
 
599
620
  | | |
600
621
  | ------------ | ---------------- |
@@ -611,7 +632,7 @@ This field is deprecated. Do not write it in new code.
611
632
  Use `customerEmail` instead.
612
633
  :::
613
634
 
614
- ## <a name="clientPhoneNumber"></a>18. Property `clientPhoneNumber`
635
+ ## <a name="clientPhoneNumber"></a>19. Property `clientPhoneNumber`
615
636
 
616
637
  | | |
617
638
  | ------------ | ---------------- |
@@ -628,7 +649,7 @@ This field is deprecated. Do not write it in new code.
628
649
  Use `customerPhone` instead.
629
650
  :::
630
651
 
631
- ## <a name="items"></a>19. Property `items`
652
+ ## <a name="items"></a>20. Property `items`
632
653
 
633
654
  | | |
634
655
  | ------------ | --------------- |
@@ -647,7 +668,7 @@ Use `customerPhone` instead.
647
668
  | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
648
669
  | [order-item](#items_items) | Line item within an Order or Sale/Purchase. Canonical fields: name, quantity, price, productId. Optional commerce fields (increment, variantId, supplierId, supplierName) and kitchen tracking fields (sentAt, startedCookingAt, readyAt, servedAt) are TBD/WIP pending cross-platform alignment. |
649
670
 
650
- ### <a name="items_items"></a>19.1. order-item
671
+ ### <a name="items_items"></a>20.1. order-item
651
672
 
652
673
  | | |
653
674
  | ------------------------- | ------------------------ |
@@ -673,7 +694,7 @@ Use `customerPhone` instead.
673
694
  | - [readyAt](#items_items_readyAt ) | No | object | No | - | (Read-only) Timestamp when the item was ready for pickup or service. TBD/WIP — archived CBL flow. |
674
695
  | - [servedAt](#items_items_servedAt ) | No | object | No | - | (Read-only) Timestamp when the item was served to the customer. TBD/WIP — archived CBL flow. |
675
696
 
676
- #### <a name="items_items_name"></a>19.1.1. Property `name`
697
+ #### <a name="items_items_name"></a>20.1.1. Property `name`
677
698
 
678
699
  | | |
679
700
  | ------------ | -------- |
@@ -682,7 +703,7 @@ Use `customerPhone` instead.
682
703
 
683
704
  **Description:** Display name of the product or service.
684
705
 
685
- #### <a name="items_items_quantity"></a>19.1.2. Property `quantity`
706
+ #### <a name="items_items_quantity"></a>20.1.2. Property `quantity`
686
707
 
687
708
  | | |
688
709
  | ------------ | -------- |
@@ -691,7 +712,7 @@ Use `customerPhone` instead.
691
712
 
692
713
  **Description:** Number of units ordered.
693
714
 
694
- #### <a name="items_items_price"></a>19.1.3. Property `price`
715
+ #### <a name="items_items_price"></a>20.1.3. Property `price`
695
716
 
696
717
  | | |
697
718
  | ------------ | -------- |
@@ -700,7 +721,7 @@ Use `customerPhone` instead.
700
721
 
701
722
  **Description:** Unit price. Canonical name per D11.
702
723
 
703
- #### <a name="items_items_productId"></a>19.1.4. Property `productId`
724
+ #### <a name="items_items_productId"></a>20.1.4. Property `productId`
704
725
 
705
726
  | | |
706
727
  | ------------ | -------- |
@@ -709,7 +730,7 @@ Use `customerPhone` instead.
709
730
 
710
731
  **Description:** FK → Product document ID.
711
732
 
712
- #### <a name="items_items_increment"></a>19.1.5. Property `increment`
733
+ #### <a name="items_items_increment"></a>20.1.5. Property `increment`
713
734
 
714
735
  | | |
715
736
  | ------------ | -------- |
@@ -718,7 +739,7 @@ Use `customerPhone` instead.
718
739
 
719
740
  **Description:** Quantity step for bundle/bulk items (e.g. 5 for a 5-pack). Dashboard/Firebase only.
720
741
 
721
- #### <a name="items_items_variantId"></a>19.1.6. Property `variantId`
742
+ #### <a name="items_items_variantId"></a>20.1.6. Property `variantId`
722
743
 
723
744
  | | |
724
745
  | ------------ | -------- |
@@ -727,7 +748,7 @@ Use `customerPhone` instead.
727
748
 
728
749
  **Description:** FK → ProductVariant ID within the product. Dashboard/Firebase only.
729
750
 
730
- #### <a name="items_items_supplierId"></a>19.1.7. Property `supplierId`
751
+ #### <a name="items_items_supplierId"></a>20.1.7. Property `supplierId`
731
752
 
732
753
  | | |
733
754
  | ------------ | -------- |
@@ -736,7 +757,7 @@ Use `customerPhone` instead.
736
757
 
737
758
  **Description:** FK → Supplier document ID. B2B orders only.
738
759
 
739
- #### <a name="items_items_supplierName"></a>19.1.8. Property `supplierName`
760
+ #### <a name="items_items_supplierName"></a>20.1.8. Property `supplierName`
740
761
 
741
762
  | | |
742
763
  | ------------ | -------- |
@@ -745,7 +766,7 @@ Use `customerPhone` instead.
745
766
 
746
767
  **Description:** (Denormalized) From Supplier.name at write time. B2B orders only.
747
768
 
748
- #### <a name="items_items_sentAt"></a>19.1.9. Property `sentAt`
769
+ #### <a name="items_items_sentAt"></a>20.1.9. Property `sentAt`
749
770
 
750
771
  | | |
751
772
  | ------------------------- | ----------- |
@@ -760,7 +781,7 @@ Use `customerPhone` instead.
760
781
  | + [_seconds](#items_items_sentAt__seconds ) | No | integer | No | - | - |
761
782
  | + [_nanoseconds](#items_items_sentAt__nanoseconds ) | No | integer | No | - | - |
762
783
 
763
- ##### <a name="items_items_sentAt__seconds"></a>19.1.9.1. Property `_seconds`
784
+ ##### <a name="items_items_sentAt__seconds"></a>20.1.9.1. Property `_seconds`
764
785
 
765
786
  | | |
766
787
  | ------------ | --------- |
@@ -772,7 +793,7 @@ Use `customerPhone` instead.
772
793
  | **Minimum** | &ge; -9007199254740991 |
773
794
  | **Maximum** | &le; 9007199254740991 |
774
795
 
775
- ##### <a name="items_items_sentAt__nanoseconds"></a>19.1.9.2. Property `_nanoseconds`
796
+ ##### <a name="items_items_sentAt__nanoseconds"></a>20.1.9.2. Property `_nanoseconds`
776
797
 
777
798
  | | |
778
799
  | ------------ | --------- |
@@ -784,7 +805,7 @@ Use `customerPhone` instead.
784
805
  | **Minimum** | &ge; -9007199254740991 |
785
806
  | **Maximum** | &le; 9007199254740991 |
786
807
 
787
- #### <a name="items_items_startedCookingAt"></a>19.1.10. Property `startedCookingAt`
808
+ #### <a name="items_items_startedCookingAt"></a>20.1.10. Property `startedCookingAt`
788
809
 
789
810
  | | |
790
811
  | ------------------------- | ----------- |
@@ -799,7 +820,7 @@ Use `customerPhone` instead.
799
820
  | + [_seconds](#items_items_startedCookingAt__seconds ) | No | integer | No | - | - |
800
821
  | + [_nanoseconds](#items_items_startedCookingAt__nanoseconds ) | No | integer | No | - | - |
801
822
 
802
- ##### <a name="items_items_startedCookingAt__seconds"></a>19.1.10.1. Property `_seconds`
823
+ ##### <a name="items_items_startedCookingAt__seconds"></a>20.1.10.1. Property `_seconds`
803
824
 
804
825
  | | |
805
826
  | ------------ | --------- |
@@ -811,7 +832,7 @@ Use `customerPhone` instead.
811
832
  | **Minimum** | &ge; -9007199254740991 |
812
833
  | **Maximum** | &le; 9007199254740991 |
813
834
 
814
- ##### <a name="items_items_startedCookingAt__nanoseconds"></a>19.1.10.2. Property `_nanoseconds`
835
+ ##### <a name="items_items_startedCookingAt__nanoseconds"></a>20.1.10.2. Property `_nanoseconds`
815
836
 
816
837
  | | |
817
838
  | ------------ | --------- |
@@ -823,7 +844,7 @@ Use `customerPhone` instead.
823
844
  | **Minimum** | &ge; -9007199254740991 |
824
845
  | **Maximum** | &le; 9007199254740991 |
825
846
 
826
- #### <a name="items_items_readyAt"></a>19.1.11. Property `readyAt`
847
+ #### <a name="items_items_readyAt"></a>20.1.11. Property `readyAt`
827
848
 
828
849
  | | |
829
850
  | ------------------------- | ----------- |
@@ -838,7 +859,7 @@ Use `customerPhone` instead.
838
859
  | + [_seconds](#items_items_readyAt__seconds ) | No | integer | No | - | - |
839
860
  | + [_nanoseconds](#items_items_readyAt__nanoseconds ) | No | integer | No | - | - |
840
861
 
841
- ##### <a name="items_items_readyAt__seconds"></a>19.1.11.1. Property `_seconds`
862
+ ##### <a name="items_items_readyAt__seconds"></a>20.1.11.1. Property `_seconds`
842
863
 
843
864
  | | |
844
865
  | ------------ | --------- |
@@ -850,7 +871,7 @@ Use `customerPhone` instead.
850
871
  | **Minimum** | &ge; -9007199254740991 |
851
872
  | **Maximum** | &le; 9007199254740991 |
852
873
 
853
- ##### <a name="items_items_readyAt__nanoseconds"></a>19.1.11.2. Property `_nanoseconds`
874
+ ##### <a name="items_items_readyAt__nanoseconds"></a>20.1.11.2. Property `_nanoseconds`
854
875
 
855
876
  | | |
856
877
  | ------------ | --------- |
@@ -862,7 +883,7 @@ Use `customerPhone` instead.
862
883
  | **Minimum** | &ge; -9007199254740991 |
863
884
  | **Maximum** | &le; 9007199254740991 |
864
885
 
865
- #### <a name="items_items_servedAt"></a>19.1.12. Property `servedAt`
886
+ #### <a name="items_items_servedAt"></a>20.1.12. Property `servedAt`
866
887
 
867
888
  | | |
868
889
  | ------------------------- | ----------- |
@@ -877,7 +898,7 @@ Use `customerPhone` instead.
877
898
  | + [_seconds](#items_items_servedAt__seconds ) | No | integer | No | - | - |
878
899
  | + [_nanoseconds](#items_items_servedAt__nanoseconds ) | No | integer | No | - | - |
879
900
 
880
- ##### <a name="items_items_servedAt__seconds"></a>19.1.12.1. Property `_seconds`
901
+ ##### <a name="items_items_servedAt__seconds"></a>20.1.12.1. Property `_seconds`
881
902
 
882
903
  | | |
883
904
  | ------------ | --------- |
@@ -889,7 +910,7 @@ Use `customerPhone` instead.
889
910
  | **Minimum** | &ge; -9007199254740991 |
890
911
  | **Maximum** | &le; 9007199254740991 |
891
912
 
892
- ##### <a name="items_items_servedAt__nanoseconds"></a>19.1.12.2. Property `_nanoseconds`
913
+ ##### <a name="items_items_servedAt__nanoseconds"></a>20.1.12.2. Property `_nanoseconds`
893
914
 
894
915
  | | |
895
916
  | ------------ | --------- |
@@ -901,7 +922,7 @@ Use `customerPhone` instead.
901
922
  | **Minimum** | &ge; -9007199254740991 |
902
923
  | **Maximum** | &le; 9007199254740991 |
903
924
 
904
- ## <a name="amount"></a>20. Property `amount`
925
+ ## <a name="amount"></a>21. Property `amount`
905
926
 
906
927
  | | |
907
928
  | ------------ | -------- |
@@ -910,7 +931,7 @@ Use `customerPhone` instead.
910
931
 
911
932
  **Description:** Total order amount. Canonical field for the order total.
912
933
 
913
- ## <a name="amountPaid"></a>21. Property `amountPaid`
934
+ ## <a name="amountPaid"></a>22. Property `amountPaid`
914
935
 
915
936
  | | |
916
937
  | ------------ | ---------------- |
@@ -919,7 +940,7 @@ Use `customerPhone` instead.
919
940
 
920
941
  **Description:** Amount of `amount` paid to date. Derived from payment allocations.
921
942
 
922
- ## <a name="total"></a>22. Property `total`
943
+ ## <a name="total"></a>23. Property `total`
923
944
 
924
945
  | | |
925
946
  | ------------ | ---------------- |
@@ -940,7 +961,7 @@ Sent by Mobile only. Mirrors `amount`. Use `amount` for all new writes. Pending
940
961
  Use `amount` instead.
941
962
  :::
942
963
 
943
- ## <a name="createdAt"></a>23. Property `createdAt`
964
+ ## <a name="createdAt"></a>24. Property `createdAt`
944
965
 
945
966
  | | |
946
967
  | ------------------------- | --------------------------------- |
@@ -956,7 +977,7 @@ Use `amount` instead.
956
977
  | + [_seconds](#createdAt__seconds ) | No | integer | No | - | - |
957
978
  | + [_nanoseconds](#createdAt__nanoseconds ) | No | integer | No | - | - |
958
979
 
959
- ### <a name="createdAt__seconds"></a>23.1. Property `_seconds`
980
+ ### <a name="createdAt__seconds"></a>24.1. Property `_seconds`
960
981
 
961
982
  | | |
962
983
  | ------------ | --------- |
@@ -968,7 +989,7 @@ Use `amount` instead.
968
989
  | **Minimum** | &ge; -9007199254740991 |
969
990
  | **Maximum** | &le; 9007199254740991 |
970
991
 
971
- ### <a name="createdAt__nanoseconds"></a>23.2. Property `_nanoseconds`
992
+ ### <a name="createdAt__nanoseconds"></a>24.2. Property `_nanoseconds`
972
993
 
973
994
  | | |
974
995
  | ------------ | --------- |
@@ -984,7 +1005,7 @@ Use `amount` instead.
984
1005
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
985
1006
  :::
986
1007
 
987
- ## <a name="orderDate"></a>24. Property `orderDate`
1008
+ ## <a name="orderDate"></a>25. Property `orderDate`
988
1009
 
989
1010
  | | |
990
1011
  | ------------------------- | ----------------------- |
@@ -995,7 +1016,7 @@ Do not include in write requests. This field is set exclusively by the server (F
995
1016
 
996
1017
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
997
1018
 
998
- ## <a name="PROCESSING_ON"></a>25. Property `PROCESSING_ON`
1019
+ ## <a name="PROCESSING_ON"></a>26. Property `PROCESSING_ON`
999
1020
 
1000
1021
  | | |
1001
1022
  | ------------------------- | ---------------- |
@@ -1010,7 +1031,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1010
1031
  | [firestore-timestamp](#PROCESSING_ON_anyOf_i0) |
1011
1032
  | [item 1](#PROCESSING_ON_anyOf_i1) |
1012
1033
 
1013
- ### <a name="PROCESSING_ON_anyOf_i0"></a>25.1. Property `firestore-timestamp`
1034
+ ### <a name="PROCESSING_ON_anyOf_i0"></a>26.1. Property `firestore-timestamp`
1014
1035
 
1015
1036
  | | |
1016
1037
  | ------------------------- | ----------------------- |
@@ -1021,7 +1042,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1021
1042
 
1022
1043
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1023
1044
 
1024
- ### <a name="PROCESSING_ON_anyOf_i1"></a>25.2. Property `item 1`
1045
+ ### <a name="PROCESSING_ON_anyOf_i1"></a>26.2. Property `item 1`
1025
1046
 
1026
1047
  | | |
1027
1048
  | ------------ | ------ |
@@ -1041,7 +1062,7 @@ Never write this field directly. The server sets it automatically on status tran
1041
1062
  **Migrations:** `MIG-01`
1042
1063
  :::
1043
1064
 
1044
- ## <a name="COMPLETED_ON"></a>26. Property `COMPLETED_ON`
1065
+ ## <a name="COMPLETED_ON"></a>27. Property `COMPLETED_ON`
1045
1066
 
1046
1067
  | | |
1047
1068
  | ------------------------- | ---------------- |
@@ -1056,7 +1077,7 @@ Never write this field directly. The server sets it automatically on status tran
1056
1077
  | [firestore-timestamp](#COMPLETED_ON_anyOf_i0) |
1057
1078
  | [item 1](#COMPLETED_ON_anyOf_i1) |
1058
1079
 
1059
- ### <a name="COMPLETED_ON_anyOf_i0"></a>26.1. Property `firestore-timestamp`
1080
+ ### <a name="COMPLETED_ON_anyOf_i0"></a>27.1. Property `firestore-timestamp`
1060
1081
 
1061
1082
  | | |
1062
1083
  | ------------------------- | ----------------------- |
@@ -1067,7 +1088,7 @@ Never write this field directly. The server sets it automatically on status tran
1067
1088
 
1068
1089
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1069
1090
 
1070
- ### <a name="COMPLETED_ON_anyOf_i1"></a>26.2. Property `item 1`
1091
+ ### <a name="COMPLETED_ON_anyOf_i1"></a>27.2. Property `item 1`
1071
1092
 
1072
1093
  | | |
1073
1094
  | ------------ | ------ |
@@ -1078,7 +1099,7 @@ Never write this field directly. The server sets it automatically on status tran
1078
1099
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
1079
1100
  :::
1080
1101
 
1081
- ## <a name="CANCELLED_ON"></a>27. Property `CANCELLED_ON`
1102
+ ## <a name="CANCELLED_ON"></a>28. Property `CANCELLED_ON`
1082
1103
 
1083
1104
  | | |
1084
1105
  | ------------------------- | ---------------- |
@@ -1093,7 +1114,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1093
1114
  | [firestore-timestamp](#CANCELLED_ON_anyOf_i0) |
1094
1115
  | [item 1](#CANCELLED_ON_anyOf_i1) |
1095
1116
 
1096
- ### <a name="CANCELLED_ON_anyOf_i0"></a>27.1. Property `firestore-timestamp`
1117
+ ### <a name="CANCELLED_ON_anyOf_i0"></a>28.1. Property `firestore-timestamp`
1097
1118
 
1098
1119
  | | |
1099
1120
  | ------------------------- | ----------------------- |
@@ -1104,7 +1125,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1104
1125
 
1105
1126
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1106
1127
 
1107
- ### <a name="CANCELLED_ON_anyOf_i1"></a>27.2. Property `item 1`
1128
+ ### <a name="CANCELLED_ON_anyOf_i1"></a>28.2. Property `item 1`
1108
1129
 
1109
1130
  | | |
1110
1131
  | ------------ | ------ |
@@ -1115,28 +1136,28 @@ Do not include in write requests. This field is set exclusively by the server (F
1115
1136
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
1116
1137
  :::
1117
1138
 
1118
- ## <a name="cancellationReason"></a>28. Property `cancellationReason`
1139
+ ## <a name="cancellationReason"></a>29. Property `cancellationReason`
1119
1140
 
1120
1141
  | | |
1121
1142
  | ------------ | ---------------- |
1122
1143
  | **Type** | `string or null` |
1123
1144
  | **Required** | No |
1124
1145
 
1125
- ## <a name="shippingCarrier"></a>29. Property `shippingCarrier`
1146
+ ## <a name="shippingCarrier"></a>30. Property `shippingCarrier`
1126
1147
 
1127
1148
  | | |
1128
1149
  | ------------ | ---------------- |
1129
1150
  | **Type** | `string or null` |
1130
1151
  | **Required** | No |
1131
1152
 
1132
- ## <a name="trackingNumber"></a>30. Property `trackingNumber`
1153
+ ## <a name="trackingNumber"></a>31. Property `trackingNumber`
1133
1154
 
1134
1155
  | | |
1135
1156
  | ------------ | ---------------- |
1136
1157
  | **Type** | `string or null` |
1137
1158
  | **Required** | No |
1138
1159
 
1139
- ## <a name="estimatedDeliveryDate"></a>31. Property `estimatedDeliveryDate`
1160
+ ## <a name="estimatedDeliveryDate"></a>32. Property `estimatedDeliveryDate`
1140
1161
 
1141
1162
  | | |
1142
1163
  | ------------------------- | ---------------- |
@@ -1151,7 +1172,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1151
1172
  | [firestore-timestamp](#estimatedDeliveryDate_anyOf_i0) |
1152
1173
  | [item 1](#estimatedDeliveryDate_anyOf_i1) |
1153
1174
 
1154
- ### <a name="estimatedDeliveryDate_anyOf_i0"></a>31.1. Property `firestore-timestamp`
1175
+ ### <a name="estimatedDeliveryDate_anyOf_i0"></a>32.1. Property `firestore-timestamp`
1155
1176
 
1156
1177
  | | |
1157
1178
  | ------------------------- | ----------------------- |
@@ -1162,21 +1183,21 @@ Do not include in write requests. This field is set exclusively by the server (F
1162
1183
 
1163
1184
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1164
1185
 
1165
- ### <a name="estimatedDeliveryDate_anyOf_i1"></a>31.2. Property `item 1`
1186
+ ### <a name="estimatedDeliveryDate_anyOf_i1"></a>32.2. Property `item 1`
1166
1187
 
1167
1188
  | | |
1168
1189
  | ------------ | ------ |
1169
1190
  | **Type** | `null` |
1170
1191
  | **Required** | No |
1171
1192
 
1172
- ## <a name="shippingCost"></a>32. Property `shippingCost`
1193
+ ## <a name="shippingCost"></a>33. Property `shippingCost`
1173
1194
 
1174
1195
  | | |
1175
1196
  | ------------ | ---------------- |
1176
1197
  | **Type** | `number or null` |
1177
1198
  | **Required** | No |
1178
1199
 
1179
- ## <a name="paymentProofUrl"></a>33. Property `paymentProofUrl`
1200
+ ## <a name="paymentProofUrl"></a>34. Property `paymentProofUrl`
1180
1201
 
1181
1202
  | | |
1182
1203
  | ------------ | ---------------- |
@@ -1185,7 +1206,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1185
1206
 
1186
1207
  **Description:** URL to uploaded payment proof image/document.
1187
1208
 
1188
- ## <a name="paymentProofStatus"></a>34. Property `paymentProofStatus`
1209
+ ## <a name="paymentProofStatus"></a>35. Property `paymentProofStatus`
1189
1210
 
1190
1211
  | | |
1191
1212
  | ------------------------- | ---------------- |
@@ -1200,7 +1221,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1200
1221
  | [payment-proof-status](#paymentProofStatus_anyOf_i0) |
1201
1222
  | [item 1](#paymentProofStatus_anyOf_i1) |
1202
1223
 
1203
- ### <a name="paymentProofStatus_anyOf_i0"></a>34.1. Property `payment-proof-status`
1224
+ ### <a name="paymentProofStatus_anyOf_i0"></a>35.1. Property `payment-proof-status`
1204
1225
 
1205
1226
  | | |
1206
1227
  | -------------- | ---------------------------------- |
@@ -1215,14 +1236,14 @@ Must be one of:
1215
1236
  * "APPROVED"
1216
1237
  * "REJECTED"
1217
1238
 
1218
- ### <a name="paymentProofStatus_anyOf_i1"></a>34.2. Property `item 1`
1239
+ ### <a name="paymentProofStatus_anyOf_i1"></a>35.2. Property `item 1`
1219
1240
 
1220
1241
  | | |
1221
1242
  | ------------ | ------ |
1222
1243
  | **Type** | `null` |
1223
1244
  | **Required** | No |
1224
1245
 
1225
- ## <a name="paymentProofAddedAt"></a>35. Property `paymentProofAddedAt`
1246
+ ## <a name="paymentProofAddedAt"></a>36. Property `paymentProofAddedAt`
1226
1247
 
1227
1248
  | | |
1228
1249
  | ------------------------- | ---------------- |
@@ -1237,7 +1258,7 @@ Must be one of:
1237
1258
  | [firestore-timestamp](#paymentProofAddedAt_anyOf_i0) |
1238
1259
  | [item 1](#paymentProofAddedAt_anyOf_i1) |
1239
1260
 
1240
- ### <a name="paymentProofAddedAt_anyOf_i0"></a>35.1. Property `firestore-timestamp`
1261
+ ### <a name="paymentProofAddedAt_anyOf_i0"></a>36.1. Property `firestore-timestamp`
1241
1262
 
1242
1263
  | | |
1243
1264
  | ------------------------- | ----------------------- |
@@ -1248,7 +1269,7 @@ Must be one of:
1248
1269
 
1249
1270
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1250
1271
 
1251
- ### <a name="paymentProofAddedAt_anyOf_i1"></a>35.2. Property `item 1`
1272
+ ### <a name="paymentProofAddedAt_anyOf_i1"></a>36.2. Property `item 1`
1252
1273
 
1253
1274
  | | |
1254
1275
  | ------------ | ------ |
@@ -1259,7 +1280,7 @@ Must be one of:
1259
1280
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
1260
1281
  :::
1261
1282
 
1262
- ## <a name="paymentProofAddedBy"></a>36. Property `paymentProofAddedBy`
1283
+ ## <a name="paymentProofAddedBy"></a>37. Property `paymentProofAddedBy`
1263
1284
 
1264
1285
  | | |
1265
1286
  | ------------ | ---------------- |
@@ -1268,7 +1289,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1268
1289
 
1269
1290
  **Description:** FK → User/staff UID who uploaded the payment proof.
1270
1291
 
1271
- ## <a name="paymentProofReviewedAt"></a>37. Property `paymentProofReviewedAt`
1292
+ ## <a name="paymentProofReviewedAt"></a>38. Property `paymentProofReviewedAt`
1272
1293
 
1273
1294
  | | |
1274
1295
  | ------------------------- | ---------------- |
@@ -1283,7 +1304,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1283
1304
  | [firestore-timestamp](#paymentProofReviewedAt_anyOf_i0) |
1284
1305
  | [item 1](#paymentProofReviewedAt_anyOf_i1) |
1285
1306
 
1286
- ### <a name="paymentProofReviewedAt_anyOf_i0"></a>37.1. Property `firestore-timestamp`
1307
+ ### <a name="paymentProofReviewedAt_anyOf_i0"></a>38.1. Property `firestore-timestamp`
1287
1308
 
1288
1309
  | | |
1289
1310
  | ------------------------- | ----------------------- |
@@ -1294,7 +1315,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1294
1315
 
1295
1316
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1296
1317
 
1297
- ### <a name="paymentProofReviewedAt_anyOf_i1"></a>37.2. Property `item 1`
1318
+ ### <a name="paymentProofReviewedAt_anyOf_i1"></a>38.2. Property `item 1`
1298
1319
 
1299
1320
  | | |
1300
1321
  | ------------ | ------ |
@@ -1305,7 +1326,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1305
1326
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
1306
1327
  :::
1307
1328
 
1308
- ## <a name="paymentProofReviewedBy"></a>38. Property `paymentProofReviewedBy`
1329
+ ## <a name="paymentProofReviewedBy"></a>39. Property `paymentProofReviewedBy`
1309
1330
 
1310
1331
  | | |
1311
1332
  | ------------ | ---------------- |
@@ -1314,21 +1335,21 @@ Do not include in write requests. This field is set exclusively by the server (F
1314
1335
 
1315
1336
  **Description:** FK → User/staff UID who reviewed the payment proof.
1316
1337
 
1317
- ## <a name="paymentProofRejectionReason"></a>39. Property `paymentProofRejectionReason`
1338
+ ## <a name="paymentProofRejectionReason"></a>40. Property `paymentProofRejectionReason`
1318
1339
 
1319
1340
  | | |
1320
1341
  | ------------ | ---------------- |
1321
1342
  | **Type** | `string or null` |
1322
1343
  | **Required** | No |
1323
1344
 
1324
- ## <a name="paymentStatusChangeReason"></a>40. Property `paymentStatusChangeReason`
1345
+ ## <a name="paymentStatusChangeReason"></a>41. Property `paymentStatusChangeReason`
1325
1346
 
1326
1347
  | | |
1327
1348
  | ------------ | ---------------- |
1328
1349
  | **Type** | `string or null` |
1329
1350
  | **Required** | No |
1330
1351
 
1331
- ## <a name="paymentStatusChangedBy"></a>41. Property `paymentStatusChangedBy`
1352
+ ## <a name="paymentStatusChangedBy"></a>42. Property `paymentStatusChangedBy`
1332
1353
 
1333
1354
  | | |
1334
1355
  | ------------ | ---------------- |
@@ -1337,7 +1358,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1337
1358
 
1338
1359
  **Description:** FK → User/staff UID who changed payment status.
1339
1360
 
1340
- ## <a name="paymentStatusChangedAt"></a>42. Property `paymentStatusChangedAt`
1361
+ ## <a name="paymentStatusChangedAt"></a>43. Property `paymentStatusChangedAt`
1341
1362
 
1342
1363
  | | |
1343
1364
  | ------------------------- | ---------------- |
@@ -1352,7 +1373,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1352
1373
  | [firestore-timestamp](#paymentStatusChangedAt_anyOf_i0) |
1353
1374
  | [item 1](#paymentStatusChangedAt_anyOf_i1) |
1354
1375
 
1355
- ### <a name="paymentStatusChangedAt_anyOf_i0"></a>42.1. Property `firestore-timestamp`
1376
+ ### <a name="paymentStatusChangedAt_anyOf_i0"></a>43.1. Property `firestore-timestamp`
1356
1377
 
1357
1378
  | | |
1358
1379
  | ------------------------- | ----------------------- |
@@ -1363,7 +1384,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1363
1384
 
1364
1385
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1365
1386
 
1366
- ### <a name="paymentStatusChangedAt_anyOf_i1"></a>42.2. Property `item 1`
1387
+ ### <a name="paymentStatusChangedAt_anyOf_i1"></a>43.2. Property `item 1`
1367
1388
 
1368
1389
  | | |
1369
1390
  | ------------ | ------ |
@@ -1374,7 +1395,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1374
1395
  Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
1375
1396
  :::
1376
1397
 
1377
- ## <a name="payments"></a>43. Property `payments`
1398
+ ## <a name="payments"></a>44. Property `payments`
1378
1399
 
1379
1400
  | | |
1380
1401
  | ------------ | ------------------------- |
@@ -1395,7 +1416,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1395
1416
  | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1396
1417
  | [payments items](#payments_items) | [TBD/WIP — IG-4] Denormalized payment snapshot. Subset of CustomerPayment (D22), written when a payment is allocated to this order. Sync rules pending IG-4 resolution. |
1397
1418
 
1398
- ### <a name="payments_items"></a>43.1. payments items
1419
+ ### <a name="payments_items"></a>44.1. payments items
1399
1420
 
1400
1421
  | | |
1401
1422
  | ------------------------- | ----------- |
@@ -1415,7 +1436,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1415
1436
  | - [referenceNumber](#payments_items_referenceNumber ) | No | string | No | - | Payment reference (receipt number, transaction ID, etc.). |
1416
1437
  | + [status](#payments_items_status ) | No | enum (of string) | No | In #/definitions/customer-payment-status | Payment status at time of snapshot. May lag CustomerPayment.status until re-synced. |
1417
1438
 
1418
- #### <a name="payments_items_paymentId"></a>43.1.1. Property `paymentId`
1439
+ #### <a name="payments_items_paymentId"></a>44.1.1. Property `paymentId`
1419
1440
 
1420
1441
  | | |
1421
1442
  | ------------ | -------- |
@@ -1424,7 +1445,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1424
1445
 
1425
1446
  **Description:** (Immutable) FK → CustomerPayment.id. Source document for this snapshot.
1426
1447
 
1427
- #### <a name="payments_items_amount"></a>43.1.2. Property `amount`
1448
+ #### <a name="payments_items_amount"></a>44.1.2. Property `amount`
1428
1449
 
1429
1450
  | | |
1430
1451
  | ------------ | -------- |
@@ -1433,7 +1454,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1433
1454
 
1434
1455
  **Description:** Total payment amount.
1435
1456
 
1436
- #### <a name="payments_items_currency"></a>43.1.3. Property `currency`
1457
+ #### <a name="payments_items_currency"></a>44.1.3. Property `currency`
1437
1458
 
1438
1459
  | | |
1439
1460
  | ------------ | ------- |
@@ -1444,7 +1465,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1444
1465
 
1445
1466
  Specific value: `"XOF"`
1446
1467
 
1447
- #### <a name="payments_items_paymentMethod"></a>43.1.4. Property `paymentMethod`
1468
+ #### <a name="payments_items_paymentMethod"></a>44.1.4. Property `paymentMethod`
1448
1469
 
1449
1470
  | | |
1450
1471
  | ---------------------- | ------------------------------------------------- |
@@ -1454,7 +1475,7 @@ Specific value: `"XOF"`
1454
1475
 
1455
1476
  **Description:** Payment method used (D02).
1456
1477
 
1457
- #### <a name="payments_items_paymentDate"></a>43.1.5. Property `paymentDate`
1478
+ #### <a name="payments_items_paymentDate"></a>44.1.5. Property `paymentDate`
1458
1479
 
1459
1480
  | | |
1460
1481
  | ------------------------- | ----------------------- |
@@ -1465,7 +1486,7 @@ Specific value: `"XOF"`
1465
1486
 
1466
1487
  **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1467
1488
 
1468
- #### <a name="payments_items_referenceNumber"></a>43.1.6. Property `referenceNumber`
1489
+ #### <a name="payments_items_referenceNumber"></a>44.1.6. Property `referenceNumber`
1469
1490
 
1470
1491
  | | |
1471
1492
  | ------------ | -------- |
@@ -1474,7 +1495,7 @@ Specific value: `"XOF"`
1474
1495
 
1475
1496
  **Description:** Payment reference (receipt number, transaction ID, etc.).
1476
1497
 
1477
- #### <a name="payments_items_status"></a>43.1.7. Property `status`
1498
+ #### <a name="payments_items_status"></a>44.1.7. Property `status`
1478
1499
 
1479
1500
  | | |
1480
1501
  | -------------- | ------------------------------------- |
@@ -1500,7 +1521,7 @@ Shape and sync rules are TBD pending IG-4 resolution. Do not build production lo
1500
1521
  **Issues:** `IG-4`
1501
1522
  :::
1502
1523
 
1503
- ## <a name="totalOverridden"></a>44. Property `totalOverridden`
1524
+ ## <a name="totalOverridden"></a>45. Property `totalOverridden`
1504
1525
 
1505
1526
  | | |
1506
1527
  | ------------ | ----------------- |
@@ -1517,7 +1538,7 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1517
1538
  **Decisions:** `D14`
1518
1539
  :::
1519
1540
 
1520
- ## <a name="notes"></a>45. Property `notes`
1541
+ ## <a name="notes"></a>46. Property `notes`
1521
1542
 
1522
1543
  | | |
1523
1544
  | ------------ | ------------------------- |
@@ -1536,7 +1557,7 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1536
1557
  | ------------------------------- | -------------------------------------- |
1537
1558
  | [notes items](#notes_items) | Timestamped note attached to an Order. |
1538
1559
 
1539
- ### <a name="notes_items"></a>45.1. notes items
1560
+ ### <a name="notes_items"></a>46.1. notes items
1540
1561
 
1541
1562
  | | |
1542
1563
  | ------------------------- | ----------- |
@@ -1554,7 +1575,7 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1554
1575
  | - [createdBy](#notes_items_createdBy ) | No | string | No | - | (Immutable) FK → User/staff UID who created this note. |
1555
1576
  | - [createdByName](#notes_items_createdByName ) | No | string | No | - | (Denormalized) From User display name at write time. |
1556
1577
 
1557
- #### <a name="notes_items_id"></a>45.1.1. Property `id`
1578
+ #### <a name="notes_items_id"></a>46.1.1. Property `id`
1558
1579
 
1559
1580
  | | |
1560
1581
  | ------------ | -------- |
@@ -1563,14 +1584,14 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1563
1584
 
1564
1585
  **Description:** (Read-only) Note ID. Server-generated.
1565
1586
 
1566
- #### <a name="notes_items_text"></a>45.1.2. Property `text`
1587
+ #### <a name="notes_items_text"></a>46.1.2. Property `text`
1567
1588
 
1568
1589
  | | |
1569
1590
  | ------------ | -------- |
1570
1591
  | **Type** | `string` |
1571
1592
  | **Required** | Yes |
1572
1593
 
1573
- #### <a name="notes_items_createdAt"></a>45.1.3. Property `createdAt`
1594
+ #### <a name="notes_items_createdAt"></a>46.1.3. Property `createdAt`
1574
1595
 
1575
1596
  | | |
1576
1597
  | ------------------------- | --------------------------------- |
@@ -1586,7 +1607,7 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1586
1607
  | + [_seconds](#createdAt__seconds ) | No | integer | No | - | - |
1587
1608
  | + [_nanoseconds](#createdAt__nanoseconds ) | No | integer | No | - | - |
1588
1609
 
1589
- ##### <a name="createdAt__seconds"></a>45.1.3.1. Property `_seconds`
1610
+ ##### <a name="createdAt__seconds"></a>46.1.3.1. Property `_seconds`
1590
1611
 
1591
1612
  | | |
1592
1613
  | ------------ | --------- |
@@ -1598,7 +1619,7 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1598
1619
  | **Minimum** | &ge; -9007199254740991 |
1599
1620
  | **Maximum** | &le; 9007199254740991 |
1600
1621
 
1601
- ##### <a name="createdAt__nanoseconds"></a>45.1.3.2. Property `_nanoseconds`
1622
+ ##### <a name="createdAt__nanoseconds"></a>46.1.3.2. Property `_nanoseconds`
1602
1623
 
1603
1624
  | | |
1604
1625
  | ------------ | --------- |
@@ -1610,7 +1631,7 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1610
1631
  | **Minimum** | &ge; -9007199254740991 |
1611
1632
  | **Maximum** | &le; 9007199254740991 |
1612
1633
 
1613
- #### <a name="notes_items_createdBy"></a>45.1.4. Property `createdBy`
1634
+ #### <a name="notes_items_createdBy"></a>46.1.4. Property `createdBy`
1614
1635
 
1615
1636
  | | |
1616
1637
  | ------------ | -------- |
@@ -1619,7 +1640,7 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1619
1640
 
1620
1641
  **Description:** (Immutable) FK → User/staff UID who created this note.
1621
1642
 
1622
- #### <a name="notes_items_createdByName"></a>45.1.5. Property `createdByName`
1643
+ #### <a name="notes_items_createdByName"></a>46.1.5. Property `createdByName`
1623
1644
 
1624
1645
  | | |
1625
1646
  | ------------ | -------- |
@@ -1628,21 +1649,21 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1628
1649
 
1629
1650
  **Description:** (Denormalized) From User display name at write time.
1630
1651
 
1631
- ## <a name="additionalInfo"></a>46. Property `additionalInfo`
1652
+ ## <a name="additionalInfo"></a>47. Property `additionalInfo`
1632
1653
 
1633
1654
  | | |
1634
1655
  | ------------ | ---------------- |
1635
1656
  | **Type** | `string or null` |
1636
1657
  | **Required** | No |
1637
1658
 
1638
- ## <a name="appliedDiscountCode"></a>47. Property `appliedDiscountCode`
1659
+ ## <a name="appliedDiscountCode"></a>48. Property `appliedDiscountCode`
1639
1660
 
1640
1661
  | | |
1641
1662
  | ------------ | ---------------- |
1642
1663
  | **Type** | `string or null` |
1643
1664
  | **Required** | No |
1644
1665
 
1645
- ## <a name="purchaseId"></a>48. Property `purchaseId`
1666
+ ## <a name="purchaseId"></a>49. Property `purchaseId`
1646
1667
 
1647
1668
  | | |
1648
1669
  | ------------ | ---------------- |
@@ -1652,7 +1673,7 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1652
1673
  **Description:** FK → Sale.id. Link to associated Sale document.
1653
1674
 
1654
1675
  ----------------------------------------------------------------------------------------------------------------------------
1655
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:51 +0000
1676
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:28 +0000
1656
1677
 
1657
1678
  ## Related Decisions
1658
1679