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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/data/docs/collections/firestore-paths.md +20 -0
  2. package/data/docs/enums/app-status.md +1 -1
  3. package/data/docs/enums/attention-status.md +1 -1
  4. package/data/docs/enums/booking-status.md +1 -1
  5. package/data/docs/enums/contract-status.md +24 -0
  6. package/data/docs/enums/customer-payment-status.md +2 -2
  7. package/data/docs/enums/customer-payment-target-type.md +2 -2
  8. package/data/docs/enums/delivery-type.md +2 -2
  9. package/data/docs/enums/deployment-link-type.md +2 -2
  10. package/data/docs/enums/event-status.md +2 -2
  11. package/data/docs/enums/expense-payment-status.md +24 -0
  12. package/data/docs/enums/fulfillment-status.md +2 -2
  13. package/data/docs/enums/loyalty-transaction-type.md +2 -2
  14. package/data/docs/enums/milestone-status.md +23 -0
  15. package/data/docs/enums/notification-channel.md +2 -2
  16. package/data/docs/enums/notification-entity-type.md +2 -2
  17. package/data/docs/enums/notification-status.md +2 -2
  18. package/data/docs/enums/order-status.md +2 -2
  19. package/data/docs/enums/outbound-message-format.md +2 -2
  20. package/data/docs/enums/outbound-message-purpose.md +2 -2
  21. package/data/docs/enums/outbound-message-status.md +2 -2
  22. package/data/docs/enums/payment-method.md +4 -3
  23. package/data/docs/enums/payment-proof-status.md +2 -2
  24. package/data/docs/enums/payment-status.md +2 -2
  25. package/data/docs/enums/pending-issue.md +2 -2
  26. package/data/docs/enums/return-status.md +2 -2
  27. package/data/docs/enums/session-status.md +2 -2
  28. package/data/docs/enums/site-status.md +2 -2
  29. package/data/docs/enums/stocktake-frequency.md +2 -2
  30. package/data/docs/enums/stocktake-item-status.md +2 -2
  31. package/data/docs/enums/stocktake-status.md +2 -2
  32. package/data/docs/enums/ticket-status.md +2 -2
  33. package/data/docs/enums/waba-label.md +3 -3
  34. package/data/docs/enums/whatsapp-button-sub-type.md +2 -2
  35. package/data/docs/enums/whatsapp-template-component.md +2 -2
  36. package/data/docs/enums/whatsapp-template-status.md +2 -2
  37. package/data/docs/index.md +15 -6
  38. package/data/docs/models/allowed-user.md +1 -1
  39. package/data/docs/models/analytics-backfill.md +1 -1
  40. package/data/docs/models/analytics-daily.md +1 -1
  41. package/data/docs/models/analytics-event.md +1 -1
  42. package/data/docs/models/analytics-hourly.md +1 -1
  43. package/data/docs/models/app-payment.md +1 -1
  44. package/data/docs/models/app.md +45 -21
  45. package/data/docs/models/booking-version.md +1 -1
  46. package/data/docs/models/booking.md +1 -1
  47. package/data/docs/models/contract.md +454 -0
  48. package/data/docs/models/customer-payment-allocation.md +2 -2
  49. package/data/docs/models/customer-payment.md +23 -22
  50. package/data/docs/models/customer.md +2 -2
  51. package/data/docs/models/event.md +2 -2
  52. package/data/docs/models/expense.md +434 -0
  53. package/data/docs/models/loyalty-config.md +2 -2
  54. package/data/docs/models/loyalty-reward.md +2 -2
  55. package/data/docs/models/loyalty-status.md +2 -2
  56. package/data/docs/models/loyalty-transaction.md +2 -2
  57. package/data/docs/models/magic-link-request.md +2 -2
  58. package/data/docs/models/metrics-current.md +22 -2
  59. package/data/docs/models/metrics-daily.md +92 -41
  60. package/data/docs/models/metrics-monthly.md +22 -2
  61. package/data/docs/models/notification-record.md +2 -2
  62. package/data/docs/models/order-item.md +2 -2
  63. package/data/docs/models/order.md +291 -270
  64. package/data/docs/models/outbound-payment-allocation.md +195 -0
  65. package/data/docs/models/outbound-payment.md +319 -0
  66. package/data/docs/models/payment-webhook-delivery.md +321 -0
  67. package/data/docs/models/payment-webhook-endpoint.md +191 -0
  68. package/data/docs/models/sale.md +2 -2
  69. package/data/docs/models/site-payment.md +2 -2
  70. package/data/docs/models/site.md +2 -2
  71. package/data/docs/models/stocktake-item.md +2 -2
  72. package/data/docs/models/stocktake.md +2 -2
  73. package/data/docs/models/ticket.md +2 -2
  74. package/data/docs/models/user.md +2 -2
  75. package/data/docs/models/whatsapp-inbound-message.md +6 -2
  76. package/data/docs/models/whatsapp-outbound-lifecycle-event.md +2 -2
  77. package/data/docs/models/whatsapp-outbound-message.md +39 -23
  78. package/data/docs/models/whatsapp-template.md +6 -2
  79. package/data/static/llms.txt +242 -10
  80. package/data/static/openapi.yaml +826 -23
  81. package/data/static/schemas.json +877 -71
  82. package/package.json +1 -1
@@ -19,7 +19,7 @@ Developers own the Zod source in `packages/schema/src/`. When schemas change, th
19
19
 
20
20
  ## What's documented
21
21
 
22
- ### Enums (32)
22
+ ### Enums (35)
23
23
 
24
24
  Status enums that drive business logic across Order, Booking, Event, and Loyalty domains:
25
25
 
@@ -28,13 +28,16 @@ Status enums that drive business logic across Order, Booking, Event, and Loyalty
28
28
  | [AppStatus](enums/app-status) | 4 values | Lifecycle status for an App (formerly Site — renamed per decision #40 / D44). Drives whether the app is reachable and whether analytics/payments flow. |
29
29
  | [AttentionStatus](enums/attention-status) | 4 values | Operational attention status for Order and Booking (D39). Controls home-page queue assignment. Server-owned — set via triggers or callable fn only. |
30
30
  | [BookingStatus](enums/booking-status) | 6 values | Booking lifecycle status. COMPLETED_MIXED = some sessions completed, others cancelled/no-show. |
31
+ | [ContractStatus](enums/contract-status) | 4 values | Lifecycle status of a Contract. DRAFT = not yet signed. ACTIVE = in force. COMPLETED = all milestones paid and obligations met. TERMINATED = ended early by either party. |
31
32
  | [CustomerPaymentStatus](enums/customer-payment-status) | 6 values | Customer payment lifecycle status (D22). Tracks allocation progress of received payments. |
32
33
  | [CustomerPaymentTargetType](enums/customer-payment-target-type) | 3 values | Target document type for customer payment allocation. |
33
34
  | [DeliveryType](enums/delivery-type) | 3 values | Fulfillment channel for an order. Determines whether the customer comes to the business (ON_SITE), collects their order themselves (PICK_UP), or receives a physical delivery (DELIVERY). Drives whether fulfillmentStatus is relevant. |
34
35
  | [DeploymentLinkType](enums/deployment-link-type) | 6 values | Category of a Site deployment link (D41). Used for UI icon/labelling and deep-link handling. |
35
36
  | [EventStatus](enums/event-status) | 4 values | Ticketed event lifecycle (D32). Mobile-only today; Dashboard in Wave 4. |
37
+ | [ExpensePaymentStatus](enums/expense-payment-status) | 4 values | Payment status of an Expense. Stored enum — OVERDUE is not stored, it is derived at read time from dueDate (#13). |
36
38
  | [FulfillmentStatus](enums/fulfillment-status) | 6 values | Delivery/fulfillment lifecycle (D34). Optional — null for in-person orders. |
37
39
  | [LoyaltyTransactionType](enums/loyalty-transaction-type) | 6 values | Loyalty point transaction type (D07). SCREAMING_SNAKE past tense. |
40
+ | [MilestoneStatus](enums/milestone-status) | 3 values | Status of a ContractMilestone (#17). PENDING = created, not yet invoiced. INVOICED = invoice issued, awaiting payment. PAID = payment received. |
38
41
  | [NotificationChannel](enums/notification-channel) | 4 values | Delivery channel of a NotificationRecord (GH#48). |
39
42
  | [NotificationEntityType](enums/notification-entity-type) | 6 values | Type of entity a NotificationRecord relates to. When `order`, the record is dual-written to the order-scoped subcollection (GH#48). |
40
43
  | [NotificationStatus](enums/notification-status) | 3 values | Delivery status of a NotificationRecord, set by the Cloud Function after a send attempt (GH#48). |
@@ -42,7 +45,7 @@ Status enums that drive business logic across Order, Booking, Event, and Loyalty
42
45
  | [OutboundMessageFormat](enums/outbound-message-format) | 2 values | Outbound WhatsApp message format. `text` is a free-form body (only valid inside the 24h customer-care window); `template` is a pre-approved WhatsApp template send. The backend is the authority on which is allowed (GH#43). |
43
46
  | [OutboundMessagePurpose](enums/outbound-message-purpose) | 4 values | Business purpose of an outbound WhatsApp message — orthogonal to its format (see OutboundMessageFormat). `otp`/`review_request`/`adhoc` are system-originated; `conversational` is a human agent reply from the dashboard inbox. Optional signal carried for analytics/triggers (GH#43; supersedes the GH#38 OutboundMessageKind). |
44
47
  | [OutboundMessageStatus](enums/outbound-message-status) | 5 values | Outbound WhatsApp message delivery status. Lifecycle: queued → sent → delivered → read, or queued → failed. The dashboard creates the message with status `queued`; the whatsapp-server backend owns every transition after, updating in place from Meta delivery callbacks (GH#43). |
45
- | [PaymentMethod](enums/payment-method) | 10 values | Unified payment method set with African + global methods (D02). |
48
+ | [PaymentMethod](enums/payment-method) | 11 values | Unified payment method set with African + global methods (D02). Note: the metrics writer historically emits "OM" instead of "ORANGE_MONEY" as a paymentsByMethod map key — treat OM as deprecated; canonical value is ORANGE_MONEY (#21). |
46
49
  | [PaymentProofStatus](enums/payment-proof-status) | 3 values | Payment proof review status. Used by Order and Booking payment proof workflows. |
47
50
  | [PaymentStatus](enums/payment-status) | 7 values | Payment lifecycle status (D01 amended). Used by Order, Sale/Purchase, Booking. |
48
51
  | [PendingIssue](enums/pending-issue) | 11 values | Specific detected conditions on an Order or Booking requiring human action (D39). Stored as an array — multiple issues can be active simultaneously. Server-owned. |
@@ -53,13 +56,13 @@ Status enums that drive business logic across Order, Booking, Event, and Loyalty
53
56
  | [StocktakeItemStatus](enums/stocktake-item-status) | 4 values | Per-line workflow status inside a Stocktake (GH#29 §4, audit Q21). |
54
57
  | [StocktakeStatus](enums/stocktake-status) | 4 values | Lifecycle status of a Stocktake session (GH#29 §3, §4). |
55
58
  | [TicketStatus](enums/ticket-status) | 3 values | Event ticket status (D32). VALID = active and unused. |
56
- | [WabaLabel](enums/waba-label) | 2 values | Human-readable WABA label identifying which Meta business number received the message (GH#36). |
59
+ | [WabaLabel](enums/waba-label) | 2 values | WABA label identifying which Meta Business Account sent/received the message. cmz = Chez Miss Zahoui sender; val = Valets sender. See WhatsApp platform constraints doc (#50). |
57
60
  | [WhatsappButtonSubType](enums/whatsapp-button-sub-type) | 2 values | Sub-type of a WhatsApp template button parameter. Set when WhatsappTemplateParameter.component === "button" — maps to Meta `components[].sub_type` (GH#46). |
58
61
  | [WhatsappTemplateComponent](enums/whatsapp-template-component) | 3 values | WhatsApp template component a parameter targets. Determines which Meta `components` entry the supplied value is placed in at send time (GH#46). |
59
62
  | [WhatsappTemplateStatus](enums/whatsapp-template-status) | 6 values | Meta review status of a WhatsApp message template, synced from the WhatsApp Business API. Only APPROVED templates can be sent. The fuller Meta status set is used deliberately (vs just APPROVED/PENDING/REJECTED) so this enum has a distinct value signature from PaymentProofStatus in the JSON-Schema $ref matcher (GH#43). |
60
63
 
61
64
 
62
- ### Models (35)
65
+ ### Models (41)
63
66
 
64
67
  Core Firestore document schemas:
65
68
 
@@ -70,14 +73,16 @@ Core Firestore document schemas:
70
73
  | [AnalyticsDaily](models/analytics-daily) | 16 | 14 | — |
71
74
  | [AnalyticsEvent](models/analytics-event) | 12 | 10 | — |
72
75
  | [AnalyticsHourly](models/analytics-hourly) | 17 | 15 | — |
73
- | [App](models/app) | 14 | 6 | — |
76
+ | [App](models/app) | 14 | 5 | — |
74
77
  | [AppPayment](models/app-payment) | 10 | 9 | — |
75
78
  | [Booking](models/booking) | 52 | 7 | — |
76
79
  | [BookingVersion](models/booking-version) | 9 | 6 | — |
80
+ | [Contract](models/contract) | 15 | 8 | — |
77
81
  | [Customer](models/customer) | 17 | 4 | — |
78
82
  | [CustomerPayment](models/customer-payment) | 17 | 12 | — |
79
83
  | [CustomerPaymentAllocation](models/customer-payment-allocation) | 14 | 8 | — |
80
84
  | [Event](models/event) | 15 | 9 | — |
85
+ | [Expense](models/expense) | 17 | 6 | — |
81
86
  | [LoyaltyConfig](models/loyalty-config) | 11 | 2 | — |
82
87
  | [LoyaltyReward](models/loyalty-reward) | 11 | 5 | — |
83
88
  | [LoyaltyStatus](models/loyalty-status) | 9 | 2 | — |
@@ -87,8 +92,12 @@ Core Firestore document schemas:
87
92
  | [MetricsDaily](models/metrics-daily) | 31 | 26 | — |
88
93
  | [MetricsMonthly](models/metrics-monthly) | 31 | 26 | — |
89
94
  | [NotificationRecord](models/notification-record) | 12 | 6 | — |
90
- | [Order](models/order) | 48 | 8 | — |
95
+ | [Order](models/order) | 49 | 8 | — |
91
96
  | [OrderItem](models/order-item) | 12 | 3 | — |
97
+ | [OutboundPayment](models/outbound-payment) | 13 | 7 | — |
98
+ | [OutboundPaymentAllocation](models/outbound-payment-allocation) | 7 | 4 | — |
99
+ | [PaymentWebhookDelivery](models/payment-webhook-delivery) | 15 | 13 | — |
100
+ | [PaymentWebhookEndpoint](models/payment-webhook-endpoint) | 6 | 5 | — |
92
101
  | [Sale](models/sale) | 12 | 1 | — |
93
102
  | [Site](models/site) | 14 | 6 | — |
94
103
  | [SitePayment](models/site-payment) | 10 | 9 | — |
@@ -185,4 +185,4 @@ Set at creation only. This field cannot be modified after the document is create
185
185
  | **Maximum** | ≤ 9007199254740991 |
186
186
 
187
187
  ----------------------------------------------------------------------------------------------------------------------------
188
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:50 +0000
188
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:28 +0000
@@ -391,7 +391,7 @@ Do not include in write requests. This field is set exclusively by the server (F
391
391
  | **Required** | No |
392
392
 
393
393
  ----------------------------------------------------------------------------------------------------------------------------
394
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:50 +0000
394
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:28 +0000
395
395
 
396
396
  :::warning Server-set
397
397
  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.
@@ -344,7 +344,7 @@ Do not include in write requests. This field is set exclusively by the server (F
344
344
  | **Maximum** | ≤ 9007199254740991 |
345
345
 
346
346
  ----------------------------------------------------------------------------------------------------------------------------
347
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:50 +0000
347
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:28 +0000
348
348
 
349
349
  :::warning Server-set
350
350
  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.
@@ -530,4 +530,4 @@ Must be one of:
530
530
  | **Additional properties** | Any type allowed |
531
531
 
532
532
  ----------------------------------------------------------------------------------------------------------------------------
533
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:50 +0000
533
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:28 +0000
@@ -365,7 +365,7 @@ Do not include in write requests. This field is set exclusively by the server (F
365
365
  | **Maximum** | ≤ 9007199254740991 |
366
366
 
367
367
  ----------------------------------------------------------------------------------------------------------------------------
368
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:50 +0000
368
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:28 +0000
369
369
 
370
370
  :::warning Server-set
371
371
  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.
@@ -197,4 +197,4 @@ Set at creation only. This field cannot be modified after the document is create
197
197
  | **Maximum** | ≤ 9007199254740991 |
198
198
 
199
199
  ----------------------------------------------------------------------------------------------------------------------------
200
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:50 +0000
200
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:28 +0000
@@ -42,6 +42,8 @@ sidebar_position: 6
42
42
  - [3. Property `name`](#name)
43
43
  - [4. Property `description`](#description)
44
44
  - [5. Property `status`](#status)
45
+ - [5.1. Property `app-status`](#status_anyOf_i0)
46
+ - [5.2. Property `item 1`](#status_anyOf_i1)
45
47
  - [6. Property `deploymentLinks`](#deploymentLinks)
46
48
  - [6.1. deploymentLinks items](#deploymentLinks_items)
47
49
  - [6.1.1. Property `label`](#deploymentLinks_items_label)
@@ -81,22 +83,22 @@ sidebar_position: 6
81
83
 
82
84
  **Description:** App model (D41 / ING-304). Collection: companies/\{companyId\}/apps/\{appId\}. Per-company product surface. Sub-collections (magic_link_requests, allowed_users, payments, analytics_events, analytics_daily, analytics_hourly, analytics_backfills) live under this document per D40/D42.
83
85
 
84
- | Property | Pattern | Type | Deprecated | Definition | Title/Description |
85
- | ------------------------------------------ | ------- | ---------------- | ---------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------- |
86
- | - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID, auto-generated. |
87
- | + [companyId](#companyId ) | No | string | No | - | (Immutable) FK → Company document ID. Scopes all app sub-collections. |
88
- | + [name](#name ) | No | string | No | - | Human-readable app name shown in dashboards. |
89
- | - [description](#description ) | No | string or null | No | - | Optional freeform description. |
90
- | + [status](#status ) | No | enum (of string) | No | In #/definitions/app-status | Lifecycle status (D41/D44). Clients filter by ACTIVE. |
91
- | + [deploymentLinks](#deploymentLinks ) | No | array of object | No | - | Ordered list of deployment URLs (web, mobile, PWA, store links). |
92
- | - [expiresAt](#expiresAt ) | No | Combination | No | - | Optional expiration timestamp. When set and elapsed, \`isExpired\` flips true and status typically moves to EXPIRED. |
93
- | - [isExpired](#isExpired ) | No | boolean or null | No | - | (Read-only) Derived — true when \`expiresAt\` is in the past. Maintained by server trigger. |
94
- | - [createdAt](#createdAt ) | No | Combination | No | - | (Read-only) Server-generated creation timestamp. |
95
- | - [updatedAt](#updatedAt ) | No | Combination | No | - | (Read-only) Server-generated update timestamp. |
96
- | + [createdBy](#createdBy ) | No | string | No | - | (Immutable) FK → User/staff UID who created the app. |
97
- | + [analyticsEnabled](#analyticsEnabled ) | No | boolean | No | - | Feature flag — when false, clients should not emit analytics events for this app. |
98
- | - [lastAnalyticsSync](#lastAnalyticsSync ) | No | Combination | No | - | (Read-only) Last time the analytics rollup pipeline refreshed \`cachedMetrics\`. |
99
- | - [cachedMetrics](#cachedMetrics ) | No | object or null | No | - | (Read-only, Denormalized) Cached metrics snapshot for quick dashboard rendering. |
86
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
87
+ | ------------------------------------------ | ------- | --------------- | ---------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------- |
88
+ | - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID, auto-generated. |
89
+ | + [companyId](#companyId ) | No | string | No | - | (Immutable) FK → Company document ID. Scopes all app sub-collections. |
90
+ | + [name](#name ) | No | string | No | - | Human-readable app name shown in dashboards. |
91
+ | - [description](#description ) | No | string or null | No | - | Optional freeform description. |
92
+ | - [status](#status ) | No | Combination | No | - | Lifecycle status (D41/D44). Optional pending backfill of pre-existing records (#26) — treat absent as ACTIVE. Clients filter by ACTIVE. |
93
+ | + [deploymentLinks](#deploymentLinks ) | No | array of object | No | - | Ordered list of deployment URLs (web, mobile, PWA, store links). |
94
+ | - [expiresAt](#expiresAt ) | No | Combination | No | - | Optional expiration timestamp. When set and elapsed, \`isExpired\` flips true and status typically moves to EXPIRED. |
95
+ | - [isExpired](#isExpired ) | No | boolean or null | No | - | (Read-only) Derived — true when \`expiresAt\` is in the past. Maintained by server trigger. |
96
+ | - [createdAt](#createdAt ) | No | Combination | No | - | (Read-only) Server-generated creation timestamp. |
97
+ | - [updatedAt](#updatedAt ) | No | Combination | No | - | (Read-only) Server-generated update timestamp. |
98
+ | + [createdBy](#createdBy ) | No | string | No | - | (Immutable) FK → User/staff UID who created the app. |
99
+ | + [analyticsEnabled](#analyticsEnabled ) | No | boolean | No | - | Feature flag — when false, clients should not emit analytics events for this app. |
100
+ | - [lastAnalyticsSync](#lastAnalyticsSync ) | No | Combination | No | - | (Read-only) Last time the analytics rollup pipeline refreshed \`cachedMetrics\`. |
101
+ | - [cachedMetrics](#cachedMetrics ) | No | object or null | No | - | (Read-only, Denormalized) Cached metrics snapshot for quick dashboard rendering. |
100
102
 
101
103
  ## <a name="id"></a>1. Property `id`
102
104
 
@@ -144,13 +146,28 @@ Set at creation only. This field cannot be modified after the document is create
144
146
 
145
147
  ## <a name="status"></a>5. Property `status`
146
148
 
149
+ | | |
150
+ | ------------------------- | ---------------- |
151
+ | **Type** | `combining` |
152
+ | **Required** | No |
153
+ | **Additional properties** | Any type allowed |
154
+
155
+ **Description:** Lifecycle status (D41/D44). Optional pending backfill of pre-existing records (#26) — treat absent as ACTIVE. Clients filter by ACTIVE.
156
+
157
+ | Any of(Option) |
158
+ | ------------------------------ |
159
+ | [app-status](#status_anyOf_i0) |
160
+ | [item 1](#status_anyOf_i1) |
161
+
162
+ ### <a name="status_anyOf_i0"></a>5.1. Property `app-status`
163
+
147
164
  | | |
148
165
  | -------------- | ------------------------ |
149
166
  | **Type** | `enum (of string)` |
150
- | **Required** | Yes |
167
+ | **Required** | No |
151
168
  | **Defined in** | #/definitions/app-status |
152
169
 
153
- **Description:** Lifecycle status (D41/D44). Clients filter by ACTIVE.
170
+ **Description:** Lifecycle status for an App (formerly Site — renamed per decision #40 / D44). Drives whether the app is reachable and whether analytics/payments flow.
154
171
 
155
172
  Must be one of:
156
173
  * "ACTIVE"
@@ -158,12 +175,19 @@ Must be one of:
158
175
  * "EXPIRED"
159
176
  * "ARCHIVED"
160
177
 
178
+ ### <a name="status_anyOf_i1"></a>5.2. Property `item 1`
179
+
180
+ | | |
181
+ | ------------ | ------ |
182
+ | **Type** | `null` |
183
+ | **Required** | No |
184
+
161
185
  :::note
162
- ACTIVE = live and serving traffic. INACTIVE = intentionally disabled by operators. EXPIRED = past expiresAt (derived when isExpired is true; may also be stored explicitly). ARCHIVED = soft-deleted; retained for audit but not listed by default.
186
+ Real Firestore documents may be missing this field on pre-backfill records (#26). Treat absent as ACTIVE. A backfill script will populate status=ACTIVE on all existing documents; once confirmed, this field will be promoted to required.
163
187
  :::
164
188
 
165
189
  :::tip When to set
166
- Written by operators via dashboard or by server triggers (expiration). Clients filter by ACTIVE.
190
+ Written by operators via dashboard or by server triggers (expiration). Clients must not use server-side `where(status == ACTIVE)` until backfill is complete — filter client-side instead, treating absent as ACTIVE.
167
191
  :::
168
192
 
169
193
  :::info See also
@@ -546,7 +570,7 @@ Do not include in write requests. This field is set exclusively by the server (F
546
570
  **Description:** Timestamp of the most recent analytics event seen for this app.
547
571
 
548
572
  ----------------------------------------------------------------------------------------------------------------------------
549
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:50 +0000
573
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:28 +0000
550
574
 
551
575
  :::warning Server-set
552
576
  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.
@@ -270,7 +270,7 @@ Dot-notation paths for nested fields (e.g. "bookingDates.0.status"). Populated b
270
270
  | **Additional properties** | Any type allowed |
271
271
 
272
272
  ----------------------------------------------------------------------------------------------------------------------------
273
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 12:42:51 +0000
273
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:28 +0000
274
274
 
275
275
  :::warning Server-set
276
276
  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.
@@ -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-30 at 12:42:51 +0000
1742
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:57:28 +0000
1743
1743
 
1744
1744
  ## Related Decisions
1745
1745