@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
@@ -0,0 +1,191 @@
1
+ ---
2
+ title: "PaymentWebhookEndpoint"
3
+ sidebar_label: "PaymentWebhookEndpoint"
4
+ sidebar_position: 28
5
+ ---
6
+
7
+ # PaymentWebhookEndpoint
8
+
9
+ <details>
10
+ <summary>Example JSON</summary>
11
+
12
+ ```json
13
+ {
14
+ "token": "token",
15
+ "company": "company",
16
+ "provider": "wave",
17
+ "secret": "secret",
18
+ "active": true,
19
+ "createdAt": "createdAt"
20
+ }
21
+ ```
22
+
23
+ </details>
24
+
25
+
26
+ - [1. Property `token`](#token)
27
+ - [2. Property `company`](#company)
28
+ - [3. Property `provider`](#provider)
29
+ - [4. Property `secret`](#secret)
30
+ - [5. Property `active`](#active)
31
+ - [6. Property `createdAt`](#createdAt)
32
+ - [6.1. Property `firestore-timestamp`](#createdAt_anyOf_i0)
33
+ - [6.1.1. Property `_seconds`](#createdAt_anyOf_i0__seconds)
34
+ - [6.1.2. Property `_nanoseconds`](#createdAt_anyOf_i0__nanoseconds)
35
+ - [6.2. Property `item 1`](#createdAt_anyOf_i1)
36
+
37
+ | | |
38
+ | ------------------------- | -------------------------------------- |
39
+ | **Type** | `object` |
40
+ | **Required** | No |
41
+ | **Additional properties** | Not allowed |
42
+ | **Defined in** | #/definitions/payment-webhook-endpoint |
43
+
44
+ **Description:** PaymentWebhookEndpoint (GH#41). Collection: payment_webhook_endpoints/\{token\}. Top-level, not tenant-scoped. Provisioned by superadmin; used by the backend to verify inbound payment webhooks from Wave and Jeko. The delivery log collection (raw webhook payloads + verification outcomes) is tracked in GH#41 — shape TBD.
45
+
46
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
47
+ | -------------------------- | ------- | ---------------- | ---------- | ---------- | ------------------------------------------------------------------------------------------------------------ |
48
+ | + [token](#token ) | No | string | No | - | (Immutable) base64url-encoded 24-byte random token. Also the Firestore document ID and the URL path segment. |
49
+ | + [company](#company ) | No | string | No | - | (Immutable) Company slug (e.g. gerko_studios). Identifies the tenant that owns this endpoint. |
50
+ | + [provider](#provider ) | No | enum (of string) | No | - | (Immutable) Payment provider whose webhooks this endpoint accepts. |
51
+ | + [secret](#secret ) | No | string | No | - | Webhook signing secret for HMAC verification. Backend-only — never returned to dashboard or mobile clients. |
52
+ | + [active](#active ) | No | boolean | No | - | Whether this endpoint is currently active. Inactive endpoints reject incoming webhooks. |
53
+ | - [createdAt](#createdAt ) | No | Combination | No | - | (Read-only) When this endpoint was provisioned. |
54
+
55
+ ## <a name="token"></a>1. Property `token`
56
+
57
+ | | |
58
+ | ------------ | -------- |
59
+ | **Type** | `string` |
60
+ | **Required** | Yes |
61
+
62
+ **Description:** (Immutable) base64url-encoded 24-byte random token. Also the Firestore document ID and the URL path segment.
63
+
64
+ :::info Immutable
65
+ 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.
66
+ :::
67
+
68
+ ## <a name="company"></a>2. Property `company`
69
+
70
+ | | |
71
+ | ------------ | -------- |
72
+ | **Type** | `string` |
73
+ | **Required** | Yes |
74
+
75
+ **Description:** (Immutable) Company slug (e.g. gerko_studios). Identifies the tenant that owns this endpoint.
76
+
77
+ :::info Immutable
78
+ 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.
79
+ :::
80
+
81
+ ## <a name="provider"></a>3. Property `provider`
82
+
83
+ | | |
84
+ | ------------ | ------------------ |
85
+ | **Type** | `enum (of string)` |
86
+ | **Required** | Yes |
87
+
88
+ **Description:** (Immutable) Payment provider whose webhooks this endpoint accepts.
89
+
90
+ Must be one of:
91
+ * "wave"
92
+ * "jeko"
93
+
94
+ :::info Immutable
95
+ 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.
96
+ :::
97
+
98
+ ## <a name="secret"></a>4. Property `secret`
99
+
100
+ | | |
101
+ | ------------ | -------- |
102
+ | **Type** | `string` |
103
+ | **Required** | Yes |
104
+
105
+ **Description:** Webhook signing secret for HMAC verification. Backend-only — never returned to dashboard or mobile clients.
106
+
107
+ :::warning Server-set
108
+ 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.
109
+ :::
110
+
111
+ :::note
112
+ Provider-specific webhook signing secret. Used to verify HMAC-SHA256 signatures on inbound payloads. Never expose to clients.
113
+ :::
114
+
115
+ ## <a name="active"></a>5. Property `active`
116
+
117
+ | | |
118
+ | ------------ | --------- |
119
+ | **Type** | `boolean` |
120
+ | **Required** | Yes |
121
+
122
+ **Description:** Whether this endpoint is currently active. Inactive endpoints reject incoming webhooks.
123
+
124
+ ## <a name="createdAt"></a>6. Property `createdAt`
125
+
126
+ | | |
127
+ | ------------------------- | ---------------- |
128
+ | **Type** | `combining` |
129
+ | **Required** | No |
130
+ | **Additional properties** | Any type allowed |
131
+
132
+ **Description:** (Read-only) When this endpoint was provisioned.
133
+
134
+ | Any of(Option) |
135
+ | ------------------------------------------ |
136
+ | [firestore-timestamp](#createdAt_anyOf_i0) |
137
+ | [item 1](#createdAt_anyOf_i1) |
138
+
139
+ ### <a name="createdAt_anyOf_i0"></a>6.1. Property `firestore-timestamp`
140
+
141
+ | | |
142
+ | ------------------------- | --------------------------------- |
143
+ | **Type** | `object` |
144
+ | **Required** | No |
145
+ | **Additional properties** | Not allowed |
146
+ | **Defined in** | #/definitions/firestore-timestamp |
147
+
148
+ **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
149
+
150
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
151
+ | --------------------------------------------------- | ------- | ------- | ---------- | ---------- | ----------------- |
152
+ | + [_seconds](#createdAt_anyOf_i0__seconds ) | No | integer | No | - | - |
153
+ | + [_nanoseconds](#createdAt_anyOf_i0__nanoseconds ) | No | integer | No | - | - |
154
+
155
+ #### <a name="createdAt_anyOf_i0__seconds"></a>6.1.1. Property `_seconds`
156
+
157
+ | | |
158
+ | ------------ | --------- |
159
+ | **Type** | `integer` |
160
+ | **Required** | Yes |
161
+
162
+ | Restrictions | |
163
+ | ------------ | ---------------------- |
164
+ | **Minimum** | &ge; -9007199254740991 |
165
+ | **Maximum** | &le; 9007199254740991 |
166
+
167
+ #### <a name="createdAt_anyOf_i0__nanoseconds"></a>6.1.2. Property `_nanoseconds`
168
+
169
+ | | |
170
+ | ------------ | --------- |
171
+ | **Type** | `integer` |
172
+ | **Required** | Yes |
173
+
174
+ | Restrictions | |
175
+ | ------------ | ---------------------- |
176
+ | **Minimum** | &ge; -9007199254740991 |
177
+ | **Maximum** | &le; 9007199254740991 |
178
+
179
+ ### <a name="createdAt_anyOf_i1"></a>6.2. Property `item 1`
180
+
181
+ | | |
182
+ | ------------ | ------ |
183
+ | **Type** | `null` |
184
+ | **Required** | No |
185
+
186
+ ----------------------------------------------------------------------------------------------------------------------------
187
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:38:45 +0000
188
+
189
+ :::warning Server-set
190
+ 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.
191
+ :::
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Sale"
3
3
  sidebar_label: "Sale"
4
- sidebar_position: 23
4
+ sidebar_position: 29
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 13:38:45 +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: 31
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 13:38:45 +0000
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Site"
3
3
  sidebar_label: "Site"
4
- sidebar_position: 24
4
+ sidebar_position: 30
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 13:38:45 +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: 33
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 13:38:45 +0000
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Stocktake"
3
3
  sidebar_label: "Stocktake"
4
- sidebar_position: 26
4
+ sidebar_position: 32
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 13:38:45 +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: 34
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 13:38:45 +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.
@@ -0,0 +1,249 @@
1
+ ---
2
+ title: "User"
3
+ sidebar_label: "User"
4
+ sidebar_position: 35
5
+ ---
6
+
7
+ # User
8
+
9
+ <details>
10
+ <summary>Example JSON</summary>
11
+
12
+ ```json
13
+ {
14
+ "id": null,
15
+ "displayName": null,
16
+ "email": null,
17
+ "phoneE164": null,
18
+ "companyId": null,
19
+ "role": null,
20
+ "isActive": null,
21
+ "createdAt": "createdAt",
22
+ "updatedAt": "updatedAt"
23
+ }
24
+ ```
25
+
26
+ </details>
27
+
28
+
29
+ - [1. Property `id`](#id)
30
+ - [2. Property `displayName`](#displayName)
31
+ - [3. Property `email`](#email)
32
+ - [4. Property `phoneE164`](#phoneE164)
33
+ - [5. Property `companyId`](#companyId)
34
+ - [6. Property `role`](#role)
35
+ - [7. Property `isActive`](#isActive)
36
+ - [8. Property `createdAt`](#createdAt)
37
+ - [8.1. Property `firestore-timestamp`](#createdAt_anyOf_i0)
38
+ - [8.1.1. Property `_seconds`](#createdAt_anyOf_i0__seconds)
39
+ - [8.1.2. Property `_nanoseconds`](#createdAt_anyOf_i0__nanoseconds)
40
+ - [8.2. Property `item 1`](#createdAt_anyOf_i1)
41
+ - [9. Property `updatedAt`](#updatedAt)
42
+ - [9.1. Property `firestore-timestamp`](#updatedAt_anyOf_i0)
43
+ - [9.2. Property `item 1`](#updatedAt_anyOf_i1)
44
+
45
+ | | |
46
+ | ------------------------- | ------------------ |
47
+ | **Type** | `object` |
48
+ | **Required** | No |
49
+ | **Additional properties** | Not allowed |
50
+ | **Defined in** | #/definitions/user |
51
+
52
+ **Description:** User / staff account. Collection: users/\{uid\}. Document ID is always the Firebase Auth UID (decision #27). phoneE164 is the canonical E.164 phone field for OTP lookup. Legacy phone-keyed documents must be migrated to uid-keyed docs with phoneE164 set.
53
+
54
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
55
+ | ------------------------------ | ------- | --------------- | ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------ |
56
+ | - [id](#id ) | No | string or null | No | - | (Read-only) Firebase Auth UID. Matches the Firestore document ID. |
57
+ | - [displayName](#displayName ) | No | string or null | No | - | User display name from Firebase Auth or manually set. |
58
+ | - [email](#email ) | No | string or null | No | - | Email address. Present for email/Google auth users. |
59
+ | - [phoneE164](#phoneE164 ) | No | string or null | No | - | E.164-normalized phone number (e.g. +2250777471485). Canonical phone identity field; used for WhatsApp OTP lookup via indexed query. |
60
+ | - [companyId](#companyId ) | No | string or null | No | - | (Immutable) FK → Company document ID. Present for staff accounts scoped to a company. |
61
+ | - [role](#role ) | No | string or null | No | - | Staff role within the company (e.g. admin, manager, staff). Application-defined. |
62
+ | - [isActive](#isActive ) | No | boolean or null | No | - | Whether this user account is active. Inactive accounts are denied access. |
63
+ | - [createdAt](#createdAt ) | No | Combination | No | - | (Read-only) When the user document was created. |
64
+ | - [updatedAt](#updatedAt ) | No | Combination | No | - | (Read-only) When the user document was last updated. |
65
+
66
+ ## <a name="id"></a>1. Property `id`
67
+
68
+ | | |
69
+ | ------------ | ---------------- |
70
+ | **Type** | `string or null` |
71
+ | **Required** | No |
72
+
73
+ **Description:** (Read-only) Firebase Auth UID. Matches the Firestore document ID.
74
+
75
+ :::warning Server-set
76
+ 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.
77
+ :::
78
+
79
+ ## <a name="displayName"></a>2. Property `displayName`
80
+
81
+ | | |
82
+ | ------------ | ---------------- |
83
+ | **Type** | `string or null` |
84
+ | **Required** | No |
85
+
86
+ **Description:** User display name from Firebase Auth or manually set.
87
+
88
+ ## <a name="email"></a>3. Property `email`
89
+
90
+ | | |
91
+ | ------------ | ---------------- |
92
+ | **Type** | `string or null` |
93
+ | **Required** | No |
94
+
95
+ **Description:** Email address. Present for email/Google auth users.
96
+
97
+ ## <a name="phoneE164"></a>4. Property `phoneE164`
98
+
99
+ | | |
100
+ | ------------ | ---------------- |
101
+ | **Type** | `string or null` |
102
+ | **Required** | No |
103
+
104
+ **Description:** E.164-normalized phone number (e.g. +2250777471485). Canonical phone identity field; used for WhatsApp OTP lookup via indexed query.
105
+
106
+ :::note
107
+ E.164 format with leading + (e.g. +2250777471485). Canonical phone identity field (decision #27). Distinct from wa_id (Meta conversation key). Server must normalize at write time: 8-digit CI local → prepend +225.
108
+ :::
109
+
110
+ :::tip When to set
111
+ Set when the user authenticated via phone (WhatsApp OTP) or when a staff member's phone is known. Required for WhatsApp OTP lookup — add a Firestore composite index on phoneE164.
112
+ :::
113
+
114
+ ## <a name="companyId"></a>5. Property `companyId`
115
+
116
+ | | |
117
+ | ------------ | ---------------- |
118
+ | **Type** | `string or null` |
119
+ | **Required** | No |
120
+
121
+ **Description:** (Immutable) FK → Company document ID. Present for staff accounts scoped to a company.
122
+
123
+ :::info Immutable
124
+ 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.
125
+ :::
126
+
127
+ ## <a name="role"></a>6. Property `role`
128
+
129
+ | | |
130
+ | ------------ | ---------------- |
131
+ | **Type** | `string or null` |
132
+ | **Required** | No |
133
+
134
+ **Description:** Staff role within the company (e.g. admin, manager, staff). Application-defined.
135
+
136
+ ## <a name="isActive"></a>7. Property `isActive`
137
+
138
+ | | |
139
+ | ------------ | ----------------- |
140
+ | **Type** | `boolean or null` |
141
+ | **Required** | No |
142
+
143
+ **Description:** Whether this user account is active. Inactive accounts are denied access.
144
+
145
+ ## <a name="createdAt"></a>8. Property `createdAt`
146
+
147
+ | | |
148
+ | ------------------------- | ---------------- |
149
+ | **Type** | `combining` |
150
+ | **Required** | No |
151
+ | **Additional properties** | Any type allowed |
152
+
153
+ **Description:** (Read-only) When the user document was created.
154
+
155
+ | Any of(Option) |
156
+ | ------------------------------------------ |
157
+ | [firestore-timestamp](#createdAt_anyOf_i0) |
158
+ | [item 1](#createdAt_anyOf_i1) |
159
+
160
+ ### <a name="createdAt_anyOf_i0"></a>8.1. Property `firestore-timestamp`
161
+
162
+ | | |
163
+ | ------------------------- | --------------------------------- |
164
+ | **Type** | `object` |
165
+ | **Required** | No |
166
+ | **Additional properties** | Not allowed |
167
+ | **Defined in** | #/definitions/firestore-timestamp |
168
+
169
+ **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
170
+
171
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
172
+ | --------------------------------------------------- | ------- | ------- | ---------- | ---------- | ----------------- |
173
+ | + [_seconds](#createdAt_anyOf_i0__seconds ) | No | integer | No | - | - |
174
+ | + [_nanoseconds](#createdAt_anyOf_i0__nanoseconds ) | No | integer | No | - | - |
175
+
176
+ #### <a name="createdAt_anyOf_i0__seconds"></a>8.1.1. Property `_seconds`
177
+
178
+ | | |
179
+ | ------------ | --------- |
180
+ | **Type** | `integer` |
181
+ | **Required** | Yes |
182
+
183
+ | Restrictions | |
184
+ | ------------ | ---------------------- |
185
+ | **Minimum** | &ge; -9007199254740991 |
186
+ | **Maximum** | &le; 9007199254740991 |
187
+
188
+ #### <a name="createdAt_anyOf_i0__nanoseconds"></a>8.1.2. Property `_nanoseconds`
189
+
190
+ | | |
191
+ | ------------ | --------- |
192
+ | **Type** | `integer` |
193
+ | **Required** | Yes |
194
+
195
+ | Restrictions | |
196
+ | ------------ | ---------------------- |
197
+ | **Minimum** | &ge; -9007199254740991 |
198
+ | **Maximum** | &le; 9007199254740991 |
199
+
200
+ ### <a name="createdAt_anyOf_i1"></a>8.2. Property `item 1`
201
+
202
+ | | |
203
+ | ------------ | ------ |
204
+ | **Type** | `null` |
205
+ | **Required** | No |
206
+
207
+ :::warning Server-set
208
+ 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.
209
+ :::
210
+
211
+ ## <a name="updatedAt"></a>9. Property `updatedAt`
212
+
213
+ | | |
214
+ | ------------------------- | ---------------- |
215
+ | **Type** | `combining` |
216
+ | **Required** | No |
217
+ | **Additional properties** | Any type allowed |
218
+
219
+ **Description:** (Read-only) When the user document was last updated.
220
+
221
+ | Any of(Option) |
222
+ | ------------------------------------------ |
223
+ | [firestore-timestamp](#updatedAt_anyOf_i0) |
224
+ | [item 1](#updatedAt_anyOf_i1) |
225
+
226
+ ### <a name="updatedAt_anyOf_i0"></a>9.1. Property `firestore-timestamp`
227
+
228
+ | | |
229
+ | ------------------------- | ----------------------------------------- |
230
+ | **Type** | `object` |
231
+ | **Required** | No |
232
+ | **Additional properties** | Not allowed |
233
+ | **Same definition as** | [createdAt_anyOf_i0](#createdAt_anyOf_i0) |
234
+
235
+ **Description:** Firestore Timestamp — Admin SDK form: \{ _seconds, _nanoseconds \}. See types/firestore.ts for REST API v1 and client SDK serialization notes (#10).
236
+
237
+ ### <a name="updatedAt_anyOf_i1"></a>9.2. Property `item 1`
238
+
239
+ | | |
240
+ | ------------ | ------ |
241
+ | **Type** | `null` |
242
+ | **Required** | No |
243
+
244
+ ----------------------------------------------------------------------------------------------------------------------------
245
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-30 at 13:38:45 +0000
246
+
247
+ :::warning Server-set
248
+ 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.
249
+ :::