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

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 (79) 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/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/fulfillment-status.md +2 -2
  12. package/data/docs/enums/loyalty-transaction-type.md +2 -2
  13. package/data/docs/enums/milestone-status.md +23 -0
  14. package/data/docs/enums/notification-channel.md +2 -2
  15. package/data/docs/enums/notification-entity-type.md +2 -2
  16. package/data/docs/enums/notification-status.md +2 -2
  17. package/data/docs/enums/order-status.md +2 -2
  18. package/data/docs/enums/outbound-message-format.md +2 -2
  19. package/data/docs/enums/outbound-message-purpose.md +2 -2
  20. package/data/docs/enums/outbound-message-status.md +2 -2
  21. package/data/docs/enums/payment-method.md +2 -2
  22. package/data/docs/enums/payment-proof-status.md +2 -2
  23. package/data/docs/enums/payment-status.md +2 -2
  24. package/data/docs/enums/pending-issue.md +2 -2
  25. package/data/docs/enums/return-status.md +2 -2
  26. package/data/docs/enums/session-status.md +2 -2
  27. package/data/docs/enums/site-status.md +2 -2
  28. package/data/docs/enums/stocktake-frequency.md +2 -2
  29. package/data/docs/enums/stocktake-item-status.md +2 -2
  30. package/data/docs/enums/stocktake-status.md +2 -2
  31. package/data/docs/enums/ticket-status.md +2 -2
  32. package/data/docs/enums/waba-label.md +3 -3
  33. package/data/docs/enums/whatsapp-button-sub-type.md +2 -2
  34. package/data/docs/enums/whatsapp-template-component.md +2 -2
  35. package/data/docs/enums/whatsapp-template-status.md +2 -2
  36. package/data/docs/index.md +17 -7
  37. package/data/docs/models/allowed-user.md +7 -7
  38. package/data/docs/models/analytics-backfill.md +7 -7
  39. package/data/docs/models/analytics-daily.md +6 -6
  40. package/data/docs/models/analytics-event.md +7 -7
  41. package/data/docs/models/analytics-hourly.md +6 -6
  42. package/data/docs/models/app-payment.md +200 -0
  43. package/data/docs/models/app.md +585 -0
  44. package/data/docs/models/booking-version.md +2 -2
  45. package/data/docs/models/booking.md +127 -127
  46. package/data/docs/models/contract.md +454 -0
  47. package/data/docs/models/customer-payment-allocation.md +20 -20
  48. package/data/docs/models/customer-payment.md +23 -23
  49. package/data/docs/models/customer.md +11 -11
  50. package/data/docs/models/event.md +22 -22
  51. package/data/docs/models/loyalty-config.md +4 -4
  52. package/data/docs/models/loyalty-reward.md +3 -3
  53. package/data/docs/models/loyalty-status.md +6 -6
  54. package/data/docs/models/loyalty-transaction.md +2 -2
  55. package/data/docs/models/magic-link-request.md +9 -9
  56. package/data/docs/models/metrics-current.md +169 -37
  57. package/data/docs/models/metrics-daily.md +172 -40
  58. package/data/docs/models/metrics-monthly.md +172 -40
  59. package/data/docs/models/notification-record.md +3 -3
  60. package/data/docs/models/order-item.md +6 -6
  61. package/data/docs/models/order.md +314 -294
  62. package/data/docs/models/outbound-payment-allocation.md +195 -0
  63. package/data/docs/models/outbound-payment.md +318 -0
  64. package/data/docs/models/payment-webhook-endpoint.md +191 -0
  65. package/data/docs/models/sale.md +18 -18
  66. package/data/docs/models/site-payment.md +2 -2
  67. package/data/docs/models/site.md +2 -2
  68. package/data/docs/models/stocktake-item.md +4 -4
  69. package/data/docs/models/stocktake.md +5 -5
  70. package/data/docs/models/ticket.md +3 -3
  71. package/data/docs/models/user.md +249 -0
  72. package/data/docs/models/whatsapp-inbound-message.md +6 -2
  73. package/data/docs/models/whatsapp-outbound-lifecycle-event.md +2 -2
  74. package/data/docs/models/whatsapp-outbound-message.md +43 -27
  75. package/data/docs/models/whatsapp-template.md +6 -2
  76. package/data/static/llms.txt +322 -36
  77. package/data/static/openapi.yaml +1074 -66
  78. package/data/static/schemas.json +1183 -104
  79. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Booking"
3
3
  sidebar_label: "Booking"
4
- sidebar_position: 6
4
+ sidebar_position: 8
5
5
  ---
6
6
 
7
7
  # Booking
@@ -232,60 +232,60 @@ sidebar_position: 6
232
232
 
233
233
  **Description:** Booking model. Collection: companies/\{companyId\}/bookings/\{bookingId\}. All platforms. Uses BookingStatus (6 values) and SessionStatus (D19) for per-date/slot tracking.
234
234
 
235
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
236
- | -------------------------------------------------------------- | ------- | ----------------------- | ---------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
237
- | + [id](#id ) | No | string | No | - | (Read-only) Firestore document ID. |
238
- | + [uid](#uid ) | No | string | No | - | (Read-only) Entity UID. Often mirrors id. |
239
- | - [companyId](#companyId ) | No | string or null | No | - | (Immutable) FK → Company document ID. Note: optional in current schema — should be required (see ID consistency audit). |
240
- | + [status](#status ) | No | enum (of string) | No | In #/definitions/booking-status | Booking lifecycle status. COMPLETED_MIXED = some sessions completed, others cancelled/no-show. |
241
- | + [totalAmount](#totalAmount ) | No | number | No | - | - |
242
- | + [bookingDates](#bookingDates ) | No | array of object | No | - | - |
243
- | - [customerId](#customerId ) | No | string or null | No | - | FK → Customer.id (Firestore doc ID). Links booking to customer record. |
244
- | - [client](#client ) | No | object or null | No | - | (Denormalized) Embedded client snapshot from Customer at write time. |
245
- | - [customerName](#customerName ) | No | string or null | No | - | (Denormalized) From Customer.name at write time. Canonical field per D24. |
246
- | - [customerEmail](#customerEmail ) | No | string or null | No | - | (Denormalized) From Customer.email at write time. Canonical field per D24. |
247
- | - [customerPhone](#customerPhone ) | No | string or null | No | - | (Denormalized) From Customer.phone at write time. Canonical field per D24. |
248
- | - [clientName](#clientName ) | No | string or null | No | - | (Denormalized) Legacy — use \`customerName\`. D24 standardized to customer* prefix. |
249
- | + [clientReference](#clientReference ) | No | string | No | - | - |
250
- | - [clientEmail](#clientEmail ) | No | string or null | No | - | (Denormalized) Legacy — use \`customerEmail\`. D24 standardized to customer* prefix. |
251
- | - [clientPhone](#clientPhone ) | No | string or null | No | - | (Denormalized) Legacy — use \`customerPhone\`. D24 standardized to customer* prefix. |
252
- | - [service](#service ) | No | object or null | No | - | - |
253
- | - [serviceId](#serviceId ) | No | string or null | No | - | FK → Service document ID. |
254
- | - [serviceName](#serviceName ) | No | string or null | No | - | (Denormalized) From Service.name at write time. |
255
- | - [timeSlot](#timeSlot ) | No | string or null | No | - | - |
256
- | - [date](#date ) | No | string or null | No | - | - |
257
- | - [startDate](#startDate ) | No | string or null | No | - | - |
258
- | - [endDate](#endDate ) | No | string or null | No | - | - |
259
- | - [startTime](#startTime ) | No | string or null | No | - | - |
260
- | - [endTime](#endTime ) | No | string or null | No | - | - |
261
- | - [notes](#notes ) | No | array of object or null | No | - | - |
262
- | - [technicalInfo](#technicalInfo ) | No | string or null | No | - | - |
263
- | - [paymentStatus](#paymentStatus ) | No | Combination | No | - | Payment lifecycle status (D01 amended). Used by Order, Sale/Purchase, Booking. |
264
- | - [amountPaid](#amountPaid ) | No | number or null | No | - | - |
265
- | - [amountRefunded](#amountRefunded ) | No | number or null | No | - | - |
266
- | - [amountPending](#amountPending ) | No | number or null | No | - | - |
267
- | - [purchaseId](#purchaseId ) | No | string or null | No | - | FK → Sale.id. Link to associated Sale document. |
268
- | - [paymentStatusChangeReason](#paymentStatusChangeReason ) | No | string or null | No | - | - |
269
- | - [paymentStatusChangedBy](#paymentStatusChangedBy ) | No | string or null | No | - | FK → User/staff UID who changed payment status. |
270
- | - [paymentStatusChangedAt](#paymentStatusChangedAt ) | No | Combination | No | - | Firestore Timestamp serialized representation |
271
- | - [paymentProofUrl](#paymentProofUrl ) | No | string or null | No | - | URL to uploaded payment proof image/document. |
272
- | - [paymentProofStatus](#paymentProofStatus ) | No | Combination | No | - | Payment proof review status. Used by Order and Booking payment proof workflows. |
273
- | - [paymentProofAddedAt](#paymentProofAddedAt ) | No | Combination | No | - | Firestore Timestamp serialized representation |
274
- | - [paymentProofAddedBy](#paymentProofAddedBy ) | No | string or null | No | - | FK → User/staff UID who uploaded the payment proof. |
275
- | - [paymentProofReviewedBy](#paymentProofReviewedBy ) | No | string or null | No | - | FK → User/staff UID who reviewed the payment proof. |
276
- | - [paymentProofReviewedAt](#paymentProofReviewedAt ) | No | Combination | No | - | Firestore Timestamp serialized representation |
277
- | - [paymentProofRejectionReason](#paymentProofRejectionReason ) | No | string or null | No | - | - |
278
- | - [cancellationRequestedById](#cancellationRequestedById ) | No | string or null | No | - | FK → User/staff UID who requested cancellation. |
279
- | - [cancellationRequestReason](#cancellationRequestReason ) | No | string or null | No | - | - |
280
- | - [cancellationProcessedById](#cancellationProcessedById ) | No | string or null | No | - | FK → User/staff UID who processed the cancellation. |
281
- | - [cancellationProcessedAt](#cancellationProcessedAt ) | No | Combination | No | - | Firestore Timestamp serialized representation |
282
- | - [cancelledByRole](#cancelledByRole ) | No | string or null | No | - | - |
283
- | - [cancellationReason](#cancellationReason ) | No | string or null | No | - | - |
284
- | + [createdAt](#createdAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Server-generated creation timestamp. |
285
- | - [updatedAt](#updatedAt ) | No | Combination | No | - | (Read-only) Server-generated update timestamp. |
286
- | - [createdBy](#createdBy ) | No | string or null | No | - | (Immutable) FK → User/staff UID who created this booking. |
287
- | - [updatedBy](#updatedBy ) | No | string or null | No | - | FK → User/staff UID who last updated this booking. |
288
- | - [createdFromBackend](#createdFromBackend ) | No | boolean or null | No | - | When true, suppresses Firebase notification triggers (D20/IG-8). |
235
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
236
+ | -------------------------------------------------------------- | ------- | ----------------------- | ---------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
237
+ | + [id](#id ) | No | string | No | - | (Read-only) Firestore document ID. |
238
+ | + [uid](#uid ) | No | string | No | - | (Read-only) Entity UID. Often mirrors id. |
239
+ | - [companyId](#companyId ) | No | string or null | No | - | (Immutable) FK → Company document ID. Note: optional in current schema — should be required (see ID consistency audit). |
240
+ | + [status](#status ) | No | enum (of string) | No | In #/definitions/booking-status | Booking lifecycle status. COMPLETED_MIXED = some sessions completed, others cancelled/no-show. |
241
+ | + [totalAmount](#totalAmount ) | No | number | No | - | - |
242
+ | + [bookingDates](#bookingDates ) | No | array of object | No | - | - |
243
+ | - [customerId](#customerId ) | No | string or null | No | - | FK → Customer.id (Firestore doc ID). Links booking to customer record. |
244
+ | - [client](#client ) | No | object or null | No | - | (Denormalized) Embedded client snapshot from Customer at write time. |
245
+ | - [customerName](#customerName ) | No | string or null | No | - | (Denormalized) From Customer.name at write time. Canonical field per D24. |
246
+ | - [customerEmail](#customerEmail ) | No | string or null | No | - | (Denormalized) From Customer.email at write time. Canonical field per D24. |
247
+ | - [customerPhone](#customerPhone ) | No | string or null | No | - | (Denormalized) From Customer.phone at write time. Canonical field per D24. |
248
+ | - [clientName](#clientName ) | No | string or null | No | - | (Denormalized) Legacy — use \`customerName\`. D24 standardized to customer* prefix. |
249
+ | + [clientReference](#clientReference ) | No | string | No | - | - |
250
+ | - [clientEmail](#clientEmail ) | No | string or null | No | - | (Denormalized) Legacy — use \`customerEmail\`. D24 standardized to customer* prefix. |
251
+ | - [clientPhone](#clientPhone ) | No | string or null | No | - | (Denormalized) Legacy — use \`customerPhone\`. D24 standardized to customer* prefix. |
252
+ | - [service](#service ) | No | object or null | No | - | - |
253
+ | - [serviceId](#serviceId ) | No | string or null | No | - | FK → Service document ID. |
254
+ | - [serviceName](#serviceName ) | No | string or null | No | - | (Denormalized) From Service.name at write time. |
255
+ | - [timeSlot](#timeSlot ) | No | string or null | No | - | - |
256
+ | - [date](#date ) | No | string or null | No | - | - |
257
+ | - [startDate](#startDate ) | No | string or null | No | - | - |
258
+ | - [endDate](#endDate ) | No | string or null | No | - | - |
259
+ | - [startTime](#startTime ) | No | string or null | No | - | - |
260
+ | - [endTime](#endTime ) | No | string or null | No | - | - |
261
+ | - [notes](#notes ) | No | array of object or null | No | - | - |
262
+ | - [technicalInfo](#technicalInfo ) | No | string or null | No | - | - |
263
+ | - [paymentStatus](#paymentStatus ) | No | Combination | No | - | Payment lifecycle status (D01 amended). Used by Order, Sale/Purchase, Booking. |
264
+ | - [amountPaid](#amountPaid ) | No | number or null | No | - | - |
265
+ | - [amountRefunded](#amountRefunded ) | No | number or null | No | - | - |
266
+ | - [amountPending](#amountPending ) | No | number or null | No | - | - |
267
+ | - [purchaseId](#purchaseId ) | No | string or null | No | - | FK → Sale.id. Link to associated Sale document. |
268
+ | - [paymentStatusChangeReason](#paymentStatusChangeReason ) | No | string or null | No | - | - |
269
+ | - [paymentStatusChangedBy](#paymentStatusChangedBy ) | No | string or null | No | - | FK → User/staff UID who changed payment status. |
270
+ | - [paymentStatusChangedAt](#paymentStatusChangedAt ) | No | Combination | No | - | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
271
+ | - [paymentProofUrl](#paymentProofUrl ) | No | string or null | No | - | URL to uploaded payment proof image/document. |
272
+ | - [paymentProofStatus](#paymentProofStatus ) | No | Combination | No | - | Payment proof review status. Used by Order and Booking payment proof workflows. |
273
+ | - [paymentProofAddedAt](#paymentProofAddedAt ) | No | Combination | No | - | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
274
+ | - [paymentProofAddedBy](#paymentProofAddedBy ) | No | string or null | No | - | FK → User/staff UID who uploaded the payment proof. |
275
+ | - [paymentProofReviewedBy](#paymentProofReviewedBy ) | No | string or null | No | - | FK → User/staff UID who reviewed the payment proof. |
276
+ | - [paymentProofReviewedAt](#paymentProofReviewedAt ) | No | Combination | No | - | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
277
+ | - [paymentProofRejectionReason](#paymentProofRejectionReason ) | No | string or null | No | - | - |
278
+ | - [cancellationRequestedById](#cancellationRequestedById ) | No | string or null | No | - | FK → User/staff UID who requested cancellation. |
279
+ | - [cancellationRequestReason](#cancellationRequestReason ) | No | string or null | No | - | - |
280
+ | - [cancellationProcessedById](#cancellationProcessedById ) | No | string or null | No | - | FK → User/staff UID who processed the cancellation. |
281
+ | - [cancellationProcessedAt](#cancellationProcessedAt ) | No | Combination | No | - | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
282
+ | - [cancelledByRole](#cancelledByRole ) | No | string or null | No | - | - |
283
+ | - [cancellationReason](#cancellationReason ) | No | string or null | No | - | - |
284
+ | + [createdAt](#createdAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Server-generated creation timestamp. |
285
+ | - [updatedAt](#updatedAt ) | No | Combination | No | - | (Read-only) Server-generated update timestamp. |
286
+ | - [createdBy](#createdBy ) | No | string or null | No | - | (Immutable) FK → User/staff UID who created this booking. |
287
+ | - [updatedBy](#updatedBy ) | No | string or null | No | - | FK → User/staff UID who last updated this booking. |
288
+ | - [createdFromBackend](#createdFromBackend ) | No | boolean or null | No | - | When true, suppresses Firebase notification triggers (D20/IG-8). |
289
289
 
290
290
  ## <a name="id"></a>1. Property `id`
291
291
 
@@ -388,25 +388,25 @@ Booking uses `totalAmount`; Order uses `amount` for the equivalent field (D05 lo
388
388
 
389
389
  **Description:** Single date entry within a Booking. Contains time slots, session statuses (D19), and CRDT metadata.
390
390
 
391
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
392
- | ----------------------------------------------------------------- | ------- | ---------------- | ---------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
393
- | + [date](#bookingDates_items_date ) | No | string | No | - | - |
394
- | + [selectedTimeSlots](#bookingDates_items_selectedTimeSlots ) | No | array of object | No | - | - |
395
- | + [slotKitTypes](#bookingDates_items_slotKitTypes ) | No | object | No | - | Kit type per slot (IG-11). Firebase parity gap — exists in Firestore but Firebase type lacked it. |
396
- | + [slotAddOns](#bookingDates_items_slotAddOns ) | No | object | No | - | Add-on IDs per slot. Numeric IDs to be normalized to descriptive names (MIG-07/D10). |
397
- | + [extraHours](#bookingDates_items_extraHours ) | No | number | No | - | - |
398
- | - [status](#bookingDates_items_status ) | No | enum (of string) | No | In #/definitions/session-status | Per-date session status (D19). Dashboard is sole writer; Mobile is read-only. |
399
- | - [statusUpdatedAt](#bookingDates_items_statusUpdatedAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Timestamp of last status change. |
400
- | - [statusUpdatedBy](#bookingDates_items_statusUpdatedBy ) | No | string | No | - | FK → User/staff UID who updated this date status. |
401
- | - [slotStatuses](#bookingDates_items_slotStatuses ) | No | object | No | - | Per-slot session statuses (D19). Keyed by slot ID string. |
402
- | - [slotStatusUpdatedAt](#bookingDates_items_slotStatusUpdatedAt ) | No | object | No | - | - |
403
- | - [slotStatusUpdatedBy](#bookingDates_items_slotStatusUpdatedBy ) | No | object | No | - | - |
404
- | - [_deleted](#bookingDates_items__deleted ) | No | boolean | No | - | Soft-delete flag. Dashboard writes; Mobile filters (IG-6). |
405
- | - [_deletedAt](#bookingDates_items__deletedAt ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp serialized representation |
406
- | - [_deletedBy](#bookingDates_items__deletedBy ) | No | string | No | - | FK → User/staff UID who soft-deleted this item. |
407
- | - [_lastModifiedAt](#bookingDates_items__lastModifiedAt ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp serialized representation |
408
- | - [_lastModifiedBy](#bookingDates_items__lastModifiedBy ) | No | string | No | - | FK → User/staff UID who last modified this item. |
409
- | - [_version](#bookingDates_items__version ) | No | number | No | - | Monotonic version counter for conflict detection. |
391
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
392
+ | ----------------------------------------------------------------- | ------- | ---------------- | ---------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
393
+ | + [date](#bookingDates_items_date ) | No | string | No | - | - |
394
+ | + [selectedTimeSlots](#bookingDates_items_selectedTimeSlots ) | No | array of object | No | - | - |
395
+ | + [slotKitTypes](#bookingDates_items_slotKitTypes ) | No | object | No | - | Kit type per slot (IG-11). Firebase parity gap — exists in Firestore but Firebase type lacked it. |
396
+ | + [slotAddOns](#bookingDates_items_slotAddOns ) | No | object | No | - | Add-on IDs per slot. Numeric IDs to be normalized to descriptive names (MIG-07/D10). |
397
+ | + [extraHours](#bookingDates_items_extraHours ) | No | number | No | - | - |
398
+ | - [status](#bookingDates_items_status ) | No | enum (of string) | No | In #/definitions/session-status | Per-date session status (D19). Dashboard is sole writer; Mobile is read-only. |
399
+ | - [statusUpdatedAt](#bookingDates_items_statusUpdatedAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Timestamp of last status change. |
400
+ | - [statusUpdatedBy](#bookingDates_items_statusUpdatedBy ) | No | string | No | - | FK → User/staff UID who updated this date status. |
401
+ | - [slotStatuses](#bookingDates_items_slotStatuses ) | No | object | No | - | Per-slot session statuses (D19). Keyed by slot ID string. |
402
+ | - [slotStatusUpdatedAt](#bookingDates_items_slotStatusUpdatedAt ) | No | object | No | - | - |
403
+ | - [slotStatusUpdatedBy](#bookingDates_items_slotStatusUpdatedBy ) | No | object | No | - | - |
404
+ | - [_deleted](#bookingDates_items__deleted ) | No | boolean | No | - | Soft-delete flag. Dashboard writes; Mobile filters (IG-6). |
405
+ | - [_deletedAt](#bookingDates_items__deletedAt ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
406
+ | - [_deletedBy](#bookingDates_items__deletedBy ) | No | string | No | - | FK → User/staff UID who soft-deleted this item. |
407
+ | - [_lastModifiedAt](#bookingDates_items__lastModifiedAt ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
408
+ | - [_lastModifiedBy](#bookingDates_items__lastModifiedBy ) | No | string | No | - | FK → User/staff UID who last modified this item. |
409
+ | - [_version](#bookingDates_items__version ) | No | number | No | - | Monotonic version counter for conflict detection. |
410
410
 
411
411
  #### <a name="bookingDates_items_date"></a>6.1.1. Property `date`
412
412
 
@@ -444,26 +444,26 @@ Booking uses `totalAmount`; Order uses `amount` for the equivalent field (D05 lo
444
444
 
445
445
  **Description:** Selected time slot within a BookingDate. Carries CRDT metadata for conflict-free editing.
446
446
 
447
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
448
- | --------------------------------------------------------------------------------------------------------- | ------- | ------- | ---------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
449
- | + [id](#bookingDates_items_selectedTimeSlots_items_id ) | No | number | No | - | - |
450
- | + [name](#bookingDates_items_selectedTimeSlots_items_name ) | No | string | No | - | - |
451
- | + [timeRange](#bookingDates_items_selectedTimeSlots_items_timeRange ) | No | string | No | - | - |
452
- | + [price](#bookingDates_items_selectedTimeSlots_items_price ) | No | number | No | - | Canonical price field (D11). Replaces legacy standardPrice/fullPrice (MIG-08). |
453
- | + [notMainPurposePrice](#bookingDates_items_selectedTimeSlots_items_notMainPurposePrice ) | No | number | No | - | Price when slot is not the main purpose (D11). Canonical name; replaces legacy aliases (MIG-08). |
454
- | + [hours](#bookingDates_items_selectedTimeSlots_items_hours ) | No | string | No | - | - |
455
- | + [startTime](#bookingDates_items_selectedTimeSlots_items_startTime ) | No | string | No | - | - |
456
- | + [endTime](#bookingDates_items_selectedTimeSlots_items_endTime ) | No | string | No | - | - |
457
- | - [isNightSlot](#bookingDates_items_selectedTimeSlots_items_isNightSlot ) | No | boolean | No | - | - |
458
- | - [isNotMainPurpose](#bookingDates_items_selectedTimeSlots_items_isNotMainPurpose ) | No | boolean | No | - | - |
459
- | - [isNotMainPurposeReason](#bookingDates_items_selectedTimeSlots_items_isNotMainPurposeReason ) | No | string | No | - | - |
460
- | - [isNotMainPurposeOtherReason](#bookingDates_items_selectedTimeSlots_items_isNotMainPurposeOtherReason ) | No | string | No | - | - |
461
- | - [_deleted](#bookingDates_items_selectedTimeSlots_items__deleted ) | No | boolean | No | - | Soft-delete flag. Dashboard writes; Mobile filters (IG-6). |
462
- | - [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | No | object | No | In #/definitions/firestore-timestamp | Firestore Timestamp serialized representation |
463
- | - [_deletedBy](#bookingDates_items_selectedTimeSlots_items__deletedBy ) | No | string | No | - | FK → User/staff UID who soft-deleted this item. |
464
- | - [_lastModifiedAt](#bookingDates_items_selectedTimeSlots_items__lastModifiedAt ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp serialized representation |
465
- | - [_lastModifiedBy](#bookingDates_items_selectedTimeSlots_items__lastModifiedBy ) | No | string | No | - | FK → User/staff UID who last modified this item. |
466
- | - [_version](#bookingDates_items_selectedTimeSlots_items__version ) | No | number | No | - | Monotonic version counter for conflict detection. |
447
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
448
+ | --------------------------------------------------------------------------------------------------------- | ------- | ------- | ---------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
449
+ | + [id](#bookingDates_items_selectedTimeSlots_items_id ) | No | number | No | - | - |
450
+ | + [name](#bookingDates_items_selectedTimeSlots_items_name ) | No | string | No | - | - |
451
+ | + [timeRange](#bookingDates_items_selectedTimeSlots_items_timeRange ) | No | string | No | - | - |
452
+ | + [price](#bookingDates_items_selectedTimeSlots_items_price ) | No | number | No | - | Canonical price field (D11). Replaces legacy standardPrice/fullPrice (MIG-08). |
453
+ | + [notMainPurposePrice](#bookingDates_items_selectedTimeSlots_items_notMainPurposePrice ) | No | number | No | - | Price when slot is not the main purpose (D11). Canonical name; replaces legacy aliases (MIG-08). |
454
+ | + [hours](#bookingDates_items_selectedTimeSlots_items_hours ) | No | string | No | - | - |
455
+ | + [startTime](#bookingDates_items_selectedTimeSlots_items_startTime ) | No | string | No | - | - |
456
+ | + [endTime](#bookingDates_items_selectedTimeSlots_items_endTime ) | No | string | No | - | - |
457
+ | - [isNightSlot](#bookingDates_items_selectedTimeSlots_items_isNightSlot ) | No | boolean | No | - | - |
458
+ | - [isNotMainPurpose](#bookingDates_items_selectedTimeSlots_items_isNotMainPurpose ) | No | boolean | No | - | - |
459
+ | - [isNotMainPurposeReason](#bookingDates_items_selectedTimeSlots_items_isNotMainPurposeReason ) | No | string | No | - | - |
460
+ | - [isNotMainPurposeOtherReason](#bookingDates_items_selectedTimeSlots_items_isNotMainPurposeOtherReason ) | No | string | No | - | - |
461
+ | - [_deleted](#bookingDates_items_selectedTimeSlots_items__deleted ) | No | boolean | No | - | Soft-delete flag. Dashboard writes; Mobile filters (IG-6). |
462
+ | - [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | 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). |
463
+ | - [_deletedBy](#bookingDates_items_selectedTimeSlots_items__deletedBy ) | No | string | No | - | FK → User/staff UID who soft-deleted this item. |
464
+ | - [_lastModifiedAt](#bookingDates_items_selectedTimeSlots_items__lastModifiedAt ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
465
+ | - [_lastModifiedBy](#bookingDates_items_selectedTimeSlots_items__lastModifiedBy ) | No | string | No | - | FK → User/staff UID who last modified this item. |
466
+ | - [_version](#bookingDates_items_selectedTimeSlots_items__version ) | No | number | No | - | Monotonic version counter for conflict detection. |
467
467
 
468
468
  ###### <a name="bookingDates_items_selectedTimeSlots_items_id"></a>6.1.2.1.1. Property `id`
469
469
 
@@ -571,7 +571,7 @@ Booking uses `totalAmount`; Order uses `amount` for the equivalent field (D05 lo
571
571
  | **Additional properties** | Not allowed |
572
572
  | **Defined in** | #/definitions/firestore-timestamp |
573
573
 
574
- **Description:** Firestore Timestamp serialized representation
574
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
575
575
 
576
576
  | Property | Pattern | Type | Deprecated | Definition | Title/Description |
577
577
  | -------------------------------------------------------------------------------------- | ------- | ------- | ---------- | ---------- | ----------------- |
@@ -620,7 +620,7 @@ Booking uses `totalAmount`; Order uses `amount` for the equivalent field (D05 lo
620
620
  | **Additional properties** | Not allowed |
621
621
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
622
622
 
623
- **Description:** Firestore Timestamp serialized representation
623
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
624
624
 
625
625
  ###### <a name="bookingDates_items_selectedTimeSlots_items__lastModifiedBy"></a>6.1.2.1.17. Property `_lastModifiedBy`
626
626
 
@@ -807,9 +807,9 @@ Must be one of:
807
807
  | **Required** | No |
808
808
  | **Additional properties** | [Each additional property must conform to the schema](#bookingDates_items_slotStatusUpdatedAt_additionalProperties) |
809
809
 
810
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
811
- | ------------------------------------------------------------------- | ------- | ------ | ---------- | ----------------------------------------------------------------------------- | --------------------------------------------- |
812
- | - [](#bookingDates_items_slotStatusUpdatedAt_additionalProperties ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp serialized representation |
810
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
811
+ | ------------------------------------------------------------------- | ------- | ------ | ---------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
812
+ | - [](#bookingDates_items_slotStatusUpdatedAt_additionalProperties ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
813
813
 
814
814
  ##### <a name="bookingDates_items_slotStatusUpdatedAt_additionalProperties"></a>6.1.10.1. Property `firestore-timestamp`
815
815
 
@@ -820,7 +820,7 @@ Must be one of:
820
820
  | **Additional properties** | Not allowed |
821
821
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
822
822
 
823
- **Description:** Firestore Timestamp serialized representation
823
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
824
824
 
825
825
  #### <a name="bookingDates_items_slotStatusUpdatedBy"></a>6.1.11. Property `slotStatusUpdatedBy`
826
826
 
@@ -859,7 +859,7 @@ Must be one of:
859
859
  | **Additional properties** | Not allowed |
860
860
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
861
861
 
862
- **Description:** Firestore Timestamp serialized representation
862
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
863
863
 
864
864
  #### <a name="bookingDates_items__deletedBy"></a>6.1.14. Property `_deletedBy`
865
865
 
@@ -879,7 +879,7 @@ Must be one of:
879
879
  | **Additional properties** | Not allowed |
880
880
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
881
881
 
882
- **Description:** Firestore Timestamp serialized representation
882
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
883
883
 
884
884
  #### <a name="bookingDates_items__lastModifiedBy"></a>6.1.16. Property `_lastModifiedBy`
885
885
 
@@ -1144,19 +1144,19 @@ Use `customerPhone` instead.
1144
1144
 
1145
1145
  **Description:** Timestamped note attached to a Booking. Carries CRDT metadata.
1146
1146
 
1147
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
1148
- | -------------------------------------------------- | ------- | ------- | ---------- | ----------------------------------------------------------------------------- | ---------------------------------------------------------- |
1149
- | + [id](#notes_items_id ) | No | string | No | - | (Read-only) Note ID. |
1150
- | + [text](#notes_items_text ) | No | string | No | - | - |
1151
- | + [createdAt](#notes_items_createdAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Firestore Timestamp serialized representation. |
1152
- | - [createdBy](#notes_items_createdBy ) | No | string | No | - | (Immutable) FK → User/staff UID who created this note. |
1153
- | - [createdByName](#notes_items_createdByName ) | No | string | No | - | (Denormalized) From User display name at write time. |
1154
- | - [_deleted](#notes_items__deleted ) | No | boolean | No | - | Soft-delete flag. Dashboard writes; Mobile filters (IG-6). |
1155
- | - [_deletedAt](#notes_items__deletedAt ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp serialized representation |
1156
- | - [_deletedBy](#notes_items__deletedBy ) | No | string | No | - | FK → User/staff UID who soft-deleted this item. |
1157
- | - [_lastModifiedAt](#notes_items__lastModifiedAt ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp serialized representation |
1158
- | - [_lastModifiedBy](#notes_items__lastModifiedBy ) | No | string | No | - | FK → User/staff UID who last modified this item. |
1159
- | - [_version](#notes_items__version ) | No | number | No | - | Monotonic version counter for conflict detection. |
1147
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
1148
+ | -------------------------------------------------- | ------- | ------- | ---------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
1149
+ | + [id](#notes_items_id ) | No | string | No | - | (Read-only) Note ID. |
1150
+ | + [text](#notes_items_text ) | No | string | No | - | - |
1151
+ | + [createdAt](#notes_items_createdAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Firestore Timestamp serialized representation. |
1152
+ | - [createdBy](#notes_items_createdBy ) | No | string | No | - | (Immutable) FK → User/staff UID who created this note. |
1153
+ | - [createdByName](#notes_items_createdByName ) | No | string | No | - | (Denormalized) From User display name at write time. |
1154
+ | - [_deleted](#notes_items__deleted ) | No | boolean | No | - | Soft-delete flag. Dashboard writes; Mobile filters (IG-6). |
1155
+ | - [_deletedAt](#notes_items__deletedAt ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
1156
+ | - [_deletedBy](#notes_items__deletedBy ) | No | string | No | - | FK → User/staff UID who soft-deleted this item. |
1157
+ | - [_lastModifiedAt](#notes_items__lastModifiedAt ) | No | object | No | Same as [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt ) | Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10). |
1158
+ | - [_lastModifiedBy](#notes_items__lastModifiedBy ) | No | string | No | - | FK → User/staff UID who last modified this item. |
1159
+ | - [_version](#notes_items__version ) | No | number | No | - | Monotonic version counter for conflict detection. |
1160
1160
 
1161
1161
  #### <a name="notes_items_id"></a>25.1.1. Property `id`
1162
1162
 
@@ -1250,7 +1250,7 @@ Use `customerPhone` instead.
1250
1250
  | **Additional properties** | Not allowed |
1251
1251
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
1252
1252
 
1253
- **Description:** Firestore Timestamp serialized representation
1253
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1254
1254
 
1255
1255
  #### <a name="notes_items__deletedBy"></a>25.1.8. Property `_deletedBy`
1256
1256
 
@@ -1270,7 +1270,7 @@ Use `customerPhone` instead.
1270
1270
  | **Additional properties** | Not allowed |
1271
1271
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
1272
1272
 
1273
- **Description:** Firestore Timestamp serialized representation
1273
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1274
1274
 
1275
1275
  #### <a name="notes_items__lastModifiedBy"></a>25.1.10. Property `_lastModifiedBy`
1276
1276
 
@@ -1392,7 +1392,7 @@ Must be one of:
1392
1392
  | **Required** | No |
1393
1393
  | **Additional properties** | Any type allowed |
1394
1394
 
1395
- **Description:** Firestore Timestamp serialized representation
1395
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1396
1396
 
1397
1397
  | Any of(Option) |
1398
1398
  | ------------------------------------------------------- |
@@ -1408,7 +1408,7 @@ Must be one of:
1408
1408
  | **Additional properties** | Not allowed |
1409
1409
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
1410
1410
 
1411
- **Description:** Firestore Timestamp serialized representation
1411
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1412
1412
 
1413
1413
  ### <a name="paymentStatusChangedAt_anyOf_i1"></a>34.2. Property `item 1`
1414
1414
 
@@ -1471,7 +1471,7 @@ Must be one of:
1471
1471
  | **Required** | No |
1472
1472
  | **Additional properties** | Any type allowed |
1473
1473
 
1474
- **Description:** Firestore Timestamp serialized representation
1474
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1475
1475
 
1476
1476
  | Any of(Option) |
1477
1477
  | ---------------------------------------------------- |
@@ -1487,7 +1487,7 @@ Must be one of:
1487
1487
  | **Additional properties** | Not allowed |
1488
1488
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
1489
1489
 
1490
- **Description:** Firestore Timestamp serialized representation
1490
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1491
1491
 
1492
1492
  ### <a name="paymentProofAddedAt_anyOf_i1"></a>37.2. Property `item 1`
1493
1493
 
@@ -1522,7 +1522,7 @@ Must be one of:
1522
1522
  | **Required** | No |
1523
1523
  | **Additional properties** | Any type allowed |
1524
1524
 
1525
- **Description:** Firestore Timestamp serialized representation
1525
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1526
1526
 
1527
1527
  | Any of(Option) |
1528
1528
  | ------------------------------------------------------- |
@@ -1538,7 +1538,7 @@ Must be one of:
1538
1538
  | **Additional properties** | Not allowed |
1539
1539
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
1540
1540
 
1541
- **Description:** Firestore Timestamp serialized representation
1541
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1542
1542
 
1543
1543
  ### <a name="paymentProofReviewedAt_anyOf_i1"></a>40.2. Property `item 1`
1544
1544
 
@@ -1587,7 +1587,7 @@ Must be one of:
1587
1587
  | **Required** | No |
1588
1588
  | **Additional properties** | Any type allowed |
1589
1589
 
1590
- **Description:** Firestore Timestamp serialized representation
1590
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1591
1591
 
1592
1592
  | Any of(Option) |
1593
1593
  | -------------------------------------------------------- |
@@ -1603,7 +1603,7 @@ Must be one of:
1603
1603
  | **Additional properties** | Not allowed |
1604
1604
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
1605
1605
 
1606
- **Description:** Firestore Timestamp serialized representation
1606
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1607
1607
 
1608
1608
  ### <a name="cancellationProcessedAt_anyOf_i1"></a>45.2. Property `item 1`
1609
1609
 
@@ -1694,7 +1694,7 @@ Do not include in write requests. This field is set exclusively by the server (F
1694
1694
  | **Additional properties** | Not allowed |
1695
1695
  | **Same definition as** | [_deletedAt](#bookingDates_items_selectedTimeSlots_items__deletedAt) |
1696
1696
 
1697
- **Description:** Firestore Timestamp serialized representation
1697
+ **Description:** Firestore Timestamp Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
1698
1698
 
1699
1699
  ### <a name="updatedAt_anyOf_i1"></a>49.2. Property `item 1`
1700
1700
 
@@ -1739,7 +1739,7 @@ Set at creation only. This field cannot be modified after the document is create
1739
1739
  **Description:** When true, suppresses Firebase notification triggers (D20/IG-8).
1740
1740
 
1741
1741
  ----------------------------------------------------------------------------------------------------------------------------
1742
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-27 at 15:51:05 +0000
1742
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:38:45 +0000
1743
1743
 
1744
1744
  ## Related Decisions
1745
1745