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

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 (73) hide show
  1. package/data/docs/collections/firestore-paths.md +32 -20
  2. package/data/docs/enums/app-status.md +24 -0
  3. package/data/docs/enums/attention-status.md +2 -2
  4. package/data/docs/enums/booking-status.md +2 -2
  5. package/data/docs/enums/customer-payment-status.md +2 -2
  6. package/data/docs/enums/customer-payment-target-type.md +2 -2
  7. package/data/docs/enums/delivery-type.md +2 -2
  8. package/data/docs/enums/deployment-link-type.md +2 -2
  9. package/data/docs/enums/event-status.md +2 -2
  10. package/data/docs/enums/fulfillment-status.md +2 -2
  11. package/data/docs/enums/loyalty-transaction-type.md +2 -2
  12. package/data/docs/enums/notification-channel.md +2 -2
  13. package/data/docs/enums/notification-entity-type.md +2 -2
  14. package/data/docs/enums/notification-status.md +2 -2
  15. package/data/docs/enums/order-status.md +2 -2
  16. package/data/docs/enums/outbound-message-format.md +2 -2
  17. package/data/docs/enums/outbound-message-purpose.md +2 -2
  18. package/data/docs/enums/outbound-message-status.md +2 -2
  19. package/data/docs/enums/payment-method.md +2 -2
  20. package/data/docs/enums/payment-proof-status.md +2 -2
  21. package/data/docs/enums/payment-status.md +2 -2
  22. package/data/docs/enums/pending-issue.md +2 -2
  23. package/data/docs/enums/return-status.md +2 -2
  24. package/data/docs/enums/session-status.md +2 -2
  25. package/data/docs/enums/site-status.md +2 -2
  26. package/data/docs/enums/stocktake-frequency.md +2 -2
  27. package/data/docs/enums/stocktake-item-status.md +2 -2
  28. package/data/docs/enums/stocktake-status.md +2 -2
  29. package/data/docs/enums/ticket-status.md +2 -2
  30. package/data/docs/enums/waba-label.md +2 -2
  31. package/data/docs/enums/whatsapp-button-sub-type.md +2 -2
  32. package/data/docs/enums/whatsapp-template-component.md +2 -2
  33. package/data/docs/enums/whatsapp-template-status.md +2 -2
  34. package/data/docs/index.md +9 -5
  35. package/data/docs/models/allowed-user.md +7 -7
  36. package/data/docs/models/analytics-backfill.md +7 -7
  37. package/data/docs/models/analytics-daily.md +6 -6
  38. package/data/docs/models/analytics-event.md +7 -7
  39. package/data/docs/models/analytics-hourly.md +6 -6
  40. package/data/docs/models/app-payment.md +200 -0
  41. package/data/docs/models/app.md +561 -0
  42. package/data/docs/models/booking-version.md +2 -2
  43. package/data/docs/models/booking.md +127 -127
  44. package/data/docs/models/customer-payment-allocation.md +20 -20
  45. package/data/docs/models/customer-payment.md +23 -23
  46. package/data/docs/models/customer.md +11 -11
  47. package/data/docs/models/event.md +22 -22
  48. package/data/docs/models/loyalty-config.md +4 -4
  49. package/data/docs/models/loyalty-reward.md +3 -3
  50. package/data/docs/models/loyalty-status.md +6 -6
  51. package/data/docs/models/loyalty-transaction.md +2 -2
  52. package/data/docs/models/magic-link-request.md +9 -9
  53. package/data/docs/models/metrics-current.md +169 -37
  54. package/data/docs/models/metrics-daily.md +172 -40
  55. package/data/docs/models/metrics-monthly.md +172 -40
  56. package/data/docs/models/notification-record.md +3 -3
  57. package/data/docs/models/order-item.md +6 -6
  58. package/data/docs/models/order.md +78 -78
  59. package/data/docs/models/sale.md +18 -18
  60. package/data/docs/models/site-payment.md +2 -2
  61. package/data/docs/models/site.md +2 -2
  62. package/data/docs/models/stocktake-item.md +4 -4
  63. package/data/docs/models/stocktake.md +5 -5
  64. package/data/docs/models/ticket.md +3 -3
  65. package/data/docs/models/user.md +249 -0
  66. package/data/docs/models/whatsapp-inbound-message.md +2 -2
  67. package/data/docs/models/whatsapp-outbound-lifecycle-event.md +2 -2
  68. package/data/docs/models/whatsapp-outbound-message.md +6 -6
  69. package/data/docs/models/whatsapp-template.md +2 -2
  70. package/data/static/llms.txt +179 -33
  71. package/data/static/openapi.yaml +626 -60
  72. package/data/static/schemas.json +680 -69
  73. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Order"
3
3
  sidebar_label: "Order"
4
- sidebar_position: 21
4
+ sidebar_position: 23
5
5
  ---
6
6
 
7
7
  # Order
@@ -14,7 +14,7 @@ sidebar_position: 21
14
14
  "id": "bk_abc123def456",
15
15
  "uid": "user_u8x92kqm",
16
16
  "companyId": "comp_xyz789",
17
- "siteId": null,
17
+ "appId": null,
18
18
  "orderNumber": "ORD-2026-0042",
19
19
  "status": "status",
20
20
  "paymentStatus": "paymentStatus",
@@ -68,7 +68,7 @@ sidebar_position: 21
68
68
  - [1. Property `id`](#id)
69
69
  - [2. Property `uid`](#uid)
70
70
  - [3. Property `companyId`](#companyId)
71
- - [4. Property `siteId`](#siteId)
71
+ - [4. Property `appId`](#appId)
72
72
  - [5. Property `orderNumber`](#orderNumber)
73
73
  - [6. Property `status`](#status)
74
74
  - [7. Property `paymentStatus`](#paymentStatus)
@@ -188,56 +188,56 @@ sidebar_position: 21
188
188
 
189
189
  **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
190
 
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
- | - [siteId](#siteId ) | No | string or null | No | - | (Immutable, Optional) FK → Site document ID (D43 / ADR-003). 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 serialized representation |
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 serialized representation |
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. |
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. |
241
241
 
242
242
  ## <a name="id"></a>1. Property `id`
243
243
 
@@ -278,29 +278,29 @@ Do not include in write requests. This field is set exclusively by the server (F
278
278
  Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
279
279
  :::
280
280
 
281
- ## <a name="siteId"></a>4. Property `siteId`
281
+ ## <a name="appId"></a>4. Property `appId`
282
282
 
283
283
  | | |
284
284
  | ------------ | ---------------- |
285
285
  | **Type** | `string or null` |
286
286
  | **Required** | No |
287
287
 
288
- **Description:** (Immutable, Optional) FK → Site document ID (D43 / ADR-003). null = company-wide.
288
+ **Description:** (Immutable, Optional) FK → App document ID (D43 / ADR-003, renamed from siteId per D44). null = company-wide.
289
289
 
290
290
  :::info Immutable
291
291
  Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.
292
292
  :::
293
293
 
294
294
  :::note
295
- D43 / ADR-003: optional site attribution. Absent/null means company-wide (legacy). When set, the order is attributed to a specific site for analytics and site-scoped dashboards. No migration — existing orders keep null. Flat path; Order continues to live at `companies/\{companyId\}/orders/\{orderId\}`.
295
+ D43 / ADR-003: optional app attribution (renamed from siteId per D44). Absent/null means company-wide (legacy). When set, the order is attributed to a specific app for analytics and app-scoped dashboards. No migration — existing orders keep null. Flat path; Order continues to live at `companies/\{companyId\}/orders/\{orderId\}`.
296
296
  :::
297
297
 
298
298
  :::tip When to set
299
- Set at order creation when the client knows which site the order originated from (e.g. SR Single, Lifesense). Leave null for legacy/company-wide orders. Composite index: (companyId, siteId, createdAt).
299
+ Set at order creation when the client knows which app the order originated from (e.g. SR Single, Lifesense). Leave null for legacy/company-wide orders. Composite index: (companyId, appId, createdAt).
300
300
  :::
301
301
 
302
302
  :::info See also
303
- **Decisions:** `D43`
303
+ **Decisions:** `D43` · `D44`
304
304
  :::
305
305
 
306
306
  ## <a name="orderNumber"></a>5. Property `orderNumber`
@@ -993,7 +993,7 @@ Do not include in write requests. This field is set exclusively by the server (F
993
993
  | **Additional properties** | Not allowed |
994
994
  | **Same definition as** | [createdAt](#createdAt) |
995
995
 
996
- **Description:** Firestore Timestamp serialized representation
996
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
997
997
 
998
998
  ## <a name="PROCESSING_ON"></a>25. Property `PROCESSING_ON`
999
999
 
@@ -1019,7 +1019,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1019
1019
  | **Additional properties** | Not allowed |
1020
1020
  | **Same definition as** | [createdAt](#createdAt) |
1021
1021
 
1022
- **Description:** Firestore Timestamp serialized representation
1022
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1023
1023
 
1024
1024
  ### <a name="PROCESSING_ON_anyOf_i1"></a>25.2. Property `item 1`
1025
1025
 
@@ -1065,7 +1065,7 @@ Never write this field directly. The server sets it automatically on status tran
1065
1065
  | **Additional properties** | Not allowed |
1066
1066
  | **Same definition as** | [createdAt](#createdAt) |
1067
1067
 
1068
- **Description:** Firestore Timestamp serialized representation
1068
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1069
1069
 
1070
1070
  ### <a name="COMPLETED_ON_anyOf_i1"></a>26.2. Property `item 1`
1071
1071
 
@@ -1102,7 +1102,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1102
1102
  | **Additional properties** | Not allowed |
1103
1103
  | **Same definition as** | [createdAt](#createdAt) |
1104
1104
 
1105
- **Description:** Firestore Timestamp serialized representation
1105
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1106
1106
 
1107
1107
  ### <a name="CANCELLED_ON_anyOf_i1"></a>27.2. Property `item 1`
1108
1108
 
@@ -1144,7 +1144,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1144
1144
  | **Required** | No |
1145
1145
  | **Additional properties** | Any type allowed |
1146
1146
 
1147
- **Description:** Firestore Timestamp serialized representation
1147
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1148
1148
 
1149
1149
  | Any of(Option) |
1150
1150
  | ------------------------------------------------------ |
@@ -1160,7 +1160,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1160
1160
  | **Additional properties** | Not allowed |
1161
1161
  | **Same definition as** | [createdAt](#createdAt) |
1162
1162
 
1163
- **Description:** Firestore Timestamp serialized representation
1163
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1164
1164
 
1165
1165
  ### <a name="estimatedDeliveryDate_anyOf_i1"></a>31.2. Property `item 1`
1166
1166
 
@@ -1246,7 +1246,7 @@ Must be one of:
1246
1246
  | **Additional properties** | Not allowed |
1247
1247
  | **Same definition as** | [createdAt](#createdAt) |
1248
1248
 
1249
- **Description:** Firestore Timestamp serialized representation
1249
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1250
1250
 
1251
1251
  ### <a name="paymentProofAddedAt_anyOf_i1"></a>35.2. Property `item 1`
1252
1252
 
@@ -1292,7 +1292,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1292
1292
  | **Additional properties** | Not allowed |
1293
1293
  | **Same definition as** | [createdAt](#createdAt) |
1294
1294
 
1295
- **Description:** Firestore Timestamp serialized representation
1295
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1296
1296
 
1297
1297
  ### <a name="paymentProofReviewedAt_anyOf_i1"></a>37.2. Property `item 1`
1298
1298
 
@@ -1361,7 +1361,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1361
1361
  | **Additional properties** | Not allowed |
1362
1362
  | **Same definition as** | [createdAt](#createdAt) |
1363
1363
 
1364
- **Description:** Firestore Timestamp serialized representation
1364
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1365
1365
 
1366
1366
  ### <a name="paymentStatusChangedAt_anyOf_i1"></a>42.2. Property `item 1`
1367
1367
 
@@ -1405,15 +1405,15 @@ Do not include in write requests. This field is set exclusively by the server (F
1405
1405
 
1406
1406
  **Description:** [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.
1407
1407
 
1408
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
1409
- | ----------------------------------------------------- | ------- | ---------------- | ---------- | ---------------------------------------------------------- | ----------------------------------------------------------------------------------- |
1410
- | + [paymentId](#payments_items_paymentId ) | No | string | No | - | (Immutable) FK → CustomerPayment.id. Source document for this snapshot. |
1411
- | + [amount](#payments_items_amount ) | No | number | No | - | Total payment amount. |
1412
- | + [currency](#payments_items_currency ) | No | const | No | - | Currency code. Locked to XOF. |
1413
- | + [paymentMethod](#payments_items_paymentMethod ) | No | enum (of string) | No | Same as [paymentMethod_anyOf_i0](#paymentMethod_anyOf_i0 ) | Payment method used (D02). |
1414
- | + [paymentDate](#payments_items_paymentDate ) | No | object | No | Same as [createdAt](#createdAt ) | Firestore Timestamp serialized representation |
1415
- | - [referenceNumber](#payments_items_referenceNumber ) | No | string | No | - | Payment reference (receipt number, transaction ID, etc.). |
1416
- | + [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. |
1408
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
1409
+ | ----------------------------------------------------- | ------- | ---------------- | ---------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
1410
+ | + [paymentId](#payments_items_paymentId ) | No | string | No | - | (Immutable) FK → CustomerPayment.id. Source document for this snapshot. |
1411
+ | + [amount](#payments_items_amount ) | No | number | No | - | Total payment amount. |
1412
+ | + [currency](#payments_items_currency ) | No | const | No | - | Currency code. Locked to XOF. |
1413
+ | + [paymentMethod](#payments_items_paymentMethod ) | No | enum (of string) | No | Same as [paymentMethod_anyOf_i0](#paymentMethod_anyOf_i0 ) | Payment method used (D02). |
1414
+ | + [paymentDate](#payments_items_paymentDate ) | 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). |
1415
+ | - [referenceNumber](#payments_items_referenceNumber ) | No | string | No | - | Payment reference (receipt number, transaction ID, etc.). |
1416
+ | + [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
1417
 
1418
1418
  #### <a name="payments_items_paymentId"></a>43.1.1. Property `paymentId`
1419
1419
 
@@ -1463,7 +1463,7 @@ Specific value: `"XOF"`
1463
1463
  | **Additional properties** | Not allowed |
1464
1464
  | **Same definition as** | [createdAt](#createdAt) |
1465
1465
 
1466
- **Description:** Firestore Timestamp serialized representation
1466
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1467
1467
 
1468
1468
  #### <a name="payments_items_referenceNumber"></a>43.1.6. Property `referenceNumber`
1469
1469
 
@@ -1652,7 +1652,7 @@ Set only by the mobile app when the user manually edits the order total. Dashboa
1652
1652
  **Description:** FK → Sale.id. Link to associated Sale document.
1653
1653
 
1654
1654
  ----------------------------------------------------------------------------------------------------------------------------
1655
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 15:51:05 +0000
1655
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:51 +0000
1656
1656
 
1657
1657
  ## Related Decisions
1658
1658
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Sale"
3
3
  sidebar_label: "Sale"
4
- sidebar_position: 23
4
+ sidebar_position: 25
5
5
  ---
6
6
 
7
7
  # Sale
@@ -77,20 +77,20 @@ sidebar_position: 23
77
77
 
78
78
  **Description:** Sale/Purchase model (D06). Collection: companies/\{companyId\}/purchases/\{purchaseId\}. Code alias: SalesService. [Deprecated path: customers/\{custId\}/purchases/\{purchaseId\} — migrate to company-wide path per MIG-04/IG-5]
79
79
 
80
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
81
- | -------------------------------- | ------- | -------------- | ---------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
82
- | - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID. Note: optional in current schema — some legacy docs may lack this field. |
83
- | - [companyId](#companyId ) | No | string or null | No | - | (Immutable) FK → Company document ID. Note: optional in current schema — should be required (see ID consistency audit). |
84
- | - [customerId](#customerId ) | No | string or null | No | - | FK → Customer.id (Firestore doc ID). |
85
- | - [customerName](#customerName ) | No | string or null | No | - | (Denormalized) From Customer.name at write time. |
86
- | - [amount](#amount ) | No | number or null | No | - | - |
87
- | - [items](#items ) | No | array or null | No | - | Line items. Reuses Order item schema. |
88
- | - [imageUrl](#imageUrl ) | No | string or null | No | - | - |
89
- | - [notes](#notes ) | No | string or null | No | - | - |
90
- | - [orderId](#orderId ) | No | string or null | No | - | FK → Order.id. Link to associated Order document. |
91
- | - [bookingId](#bookingId ) | No | string or null | No | - | FK → Booking.id. Link to associated Booking document (IG-12). |
92
- | + [purchaseDate](#purchaseDate ) | No | object | No | In #/definitions/firestore-timestamp | Firestore Timestamp serialized representation |
93
- | - [createdAt](#createdAt ) | No | Combination | No | - | (Read-only) Server-generated creation timestamp. |
80
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
81
+ | -------------------------------- | ------- | -------------- | ---------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
82
+ | - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID. Note: optional in current schema — some legacy docs may lack this field. |
83
+ | - [companyId](#companyId ) | No | string or null | No | - | (Immutable) FK → Company document ID. Note: optional in current schema — should be required (see ID consistency audit). |
84
+ | - [customerId](#customerId ) | No | string or null | No | - | FK → Customer.id (Firestore doc ID). |
85
+ | - [customerName](#customerName ) | No | string or null | No | - | (Denormalized) From Customer.name at write time. |
86
+ | - [amount](#amount ) | No | number or null | No | - | - |
87
+ | - [items](#items ) | No | array or null | No | - | Line items. Reuses Order item schema. |
88
+ | - [imageUrl](#imageUrl ) | No | string or null | No | - | - |
89
+ | - [notes](#notes ) | No | string or null | No | - | - |
90
+ | - [orderId](#orderId ) | No | string or null | No | - | FK → Order.id. Link to associated Order document. |
91
+ | - [bookingId](#bookingId ) | No | string or null | No | - | FK → Booking.id. Link to associated Booking document (IG-12). |
92
+ | + [purchaseDate](#purchaseDate ) | No | object | No | In #/definitions/firestore-timestamp | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
93
+ | - [createdAt](#createdAt ) | No | Combination | No | - | (Read-only) Server-generated creation timestamp. |
94
94
 
95
95
  ## <a name="id"></a>1. Property `id`
96
96
 
@@ -459,7 +459,7 @@ Set at creation only. This field cannot be modified after the document is create
459
459
  | **Additional properties** | Not allowed |
460
460
  | **Defined in** | #/definitions/firestore-timestamp |
461
461
 
462
- **Description:** Firestore Timestamp serialized representation
462
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
463
463
 
464
464
  | Property | Pattern | Type | Deprecated | Definition | Title/Description |
465
465
  | --------------------------------------------- | ------- | ------- | ---------- | ---------- | ----------------- |
@@ -514,7 +514,7 @@ Set at creation only. This field cannot be modified after the document is create
514
514
  | **Additional properties** | Not allowed |
515
515
  | **Same definition as** | [purchaseDate](#purchaseDate) |
516
516
 
517
- **Description:** Firestore Timestamp serialized representation
517
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
518
518
 
519
519
  ### <a name="createdAt_anyOf_i1"></a>12.2. Property `item 1`
520
520
 
@@ -524,7 +524,7 @@ Set at creation only. This field cannot be modified after the document is create
524
524
  | **Required** | No |
525
525
 
526
526
  ----------------------------------------------------------------------------------------------------------------------------
527
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 15:51:05 +0000
527
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:51 +0000
528
528
 
529
529
  :::warning Server-set
530
530
  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.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "SitePayment"
3
3
  sidebar_label: "SitePayment"
4
- sidebar_position: 25
4
+ sidebar_position: 27
5
5
  ---
6
6
 
7
7
  # SitePayment
@@ -197,4 +197,4 @@ Set at creation only. This field cannot be modified after the document is create
197
197
  | **Maximum** | &le; 9007199254740991 |
198
198
 
199
199
  ----------------------------------------------------------------------------------------------------------------------------
200
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 15:51:05 +0000
200
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:51 +0000
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Site"
3
3
  sidebar_label: "Site"
4
- sidebar_position: 24
4
+ sidebar_position: 26
5
5
  ---
6
6
 
7
7
  # Site
@@ -546,7 +546,7 @@ Do not include in write requests. This field is set exclusively by the server (F
546
546
  **Description:** Timestamp of the most recent analytics event seen for this site.
547
547
 
548
548
  ----------------------------------------------------------------------------------------------------------------------------
549
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 15:51:05 +0000
549
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:51 +0000
550
550
 
551
551
  :::warning Server-set
552
552
  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.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "StocktakeItem"
3
3
  sidebar_label: "StocktakeItem"
4
- sidebar_position: 27
4
+ sidebar_position: 29
5
5
  ---
6
6
 
7
7
  # StocktakeItem
@@ -363,7 +363,7 @@ Read-time hint snapshot of the counter's display name (GH#29 §3 / Q10).
363
363
  | **Additional properties** | Not allowed |
364
364
  | **Defined in** | #/definitions/firestore-timestamp |
365
365
 
366
- **Description:** Firestore Timestamp serialized representation
366
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
367
367
 
368
368
  | Property | Pattern | Type | Deprecated | Definition | Title/Description |
369
369
  | --------------------------------------------------- | ------- | ------- | ---------- | ---------- | ----------------- |
@@ -487,7 +487,7 @@ Read-time hint snapshot of the verifier's display name (GH#29 §3 / Q10).
487
487
  | **Additional properties** | Not allowed |
488
488
  | **Same definition as** | [countedAt_anyOf_i0](#countedAt_anyOf_i0) |
489
489
 
490
- **Description:** Firestore Timestamp serialized representation
490
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
491
491
 
492
492
  ### <a name="verifiedAt_anyOf_i1"></a>16.2. Property `item 1`
493
493
 
@@ -497,4 +497,4 @@ Read-time hint snapshot of the verifier's display name (GH#29 §3 / Q10).
497
497
  | **Required** | No |
498
498
 
499
499
  ----------------------------------------------------------------------------------------------------------------------------
500
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 15:51:05 +0000
500
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:51 +0000
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Stocktake"
3
3
  sidebar_label: "Stocktake"
4
- sidebar_position: 26
4
+ sidebar_position: 28
5
5
  ---
6
6
 
7
7
  # Stocktake
@@ -462,7 +462,7 @@ Server-derived = sum of (item.delta × item.costPerUnit) across COUNTED items, i
462
462
  | **Additional properties** | Not allowed |
463
463
  | **Same definition as** | [stocktakeDate](#stocktakeDate) |
464
464
 
465
- **Description:** Firestore Timestamp serialized representation
465
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
466
466
 
467
467
  ### <a name="completedAt_anyOf_i1"></a>15.2. Property `item 1`
468
468
 
@@ -503,7 +503,7 @@ Server-set on transition to COMPLETED. Distinct from stocktakeDate (the period c
503
503
  | **Additional properties** | Not allowed |
504
504
  | **Same definition as** | [stocktakeDate](#stocktakeDate) |
505
505
 
506
- **Description:** Firestore Timestamp serialized representation
506
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
507
507
 
508
508
  ### <a name="createdAt_anyOf_i1"></a>16.2. Property `item 1`
509
509
 
@@ -632,7 +632,7 @@ Read-time hint snapshot of the completer's display name (GH#29 §3 / Q10).
632
632
  | **Additional properties** | Not allowed |
633
633
  | **Same definition as** | [stocktakeDate](#stocktakeDate) |
634
634
 
635
- **Description:** Firestore Timestamp serialized representation
635
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
636
636
 
637
637
  ### <a name="updatedAt_anyOf_i1"></a>21.2. Property `item 1`
638
638
 
@@ -642,7 +642,7 @@ Read-time hint snapshot of the completer's display name (GH#29 §3 / Q10).
642
642
  | **Required** | No |
643
643
 
644
644
  ----------------------------------------------------------------------------------------------------------------------------
645
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 15:51:05 +0000
645
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:51 +0000
646
646
 
647
647
  :::warning Server-set
648
648
  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.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Ticket"
3
3
  sidebar_label: "Ticket"
4
- sidebar_position: 28
4
+ sidebar_position: 30
5
5
  ---
6
6
 
7
7
  # Ticket
@@ -208,7 +208,7 @@ Must be one of:
208
208
  | **Additional properties** | Not allowed |
209
209
  | **Defined in** | #/definitions/firestore-timestamp |
210
210
 
211
- **Description:** Firestore Timestamp serialized representation
211
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
212
212
 
213
213
  | Property | Pattern | Type | Deprecated | Definition | Title/Description |
214
214
  | ------------------------------------------------ | ------- | ------- | ---------- | ---------- | ----------------- |
@@ -388,7 +388,7 @@ Do not include in write requests. This field is set exclusively by the server (F
388
388
  **Description:** (Immutable) FK → User/staff UID who created this ticket.
389
389
 
390
390
  ----------------------------------------------------------------------------------------------------------------------------
391
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 15:51:05 +0000
391
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:51 +0000
392
392
 
393
393
  :::info Immutable
394
394
  Set at creation only. This field cannot be modified after the document is created. Include it in CREATE payloads; omit it (or leave unchanged) in UPDATE payloads.