@ingenx-io/valets-schema-mcp-server 0.1.4 → 0.1.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 (54) hide show
  1. package/data/docs/collections/firestore-paths.md +42 -8
  2. package/data/docs/enums/attention-status.md +1 -1
  3. package/data/docs/enums/booking-status.md +1 -1
  4. package/data/docs/enums/customer-payment-status.md +1 -1
  5. package/data/docs/enums/customer-payment-target-type.md +1 -1
  6. package/data/docs/enums/delivery-type.md +1 -1
  7. package/data/docs/enums/deployment-link-type.md +26 -0
  8. package/data/docs/enums/event-status.md +2 -2
  9. package/data/docs/enums/fulfillment-status.md +2 -2
  10. package/data/docs/enums/loyalty-transaction-type.md +2 -2
  11. package/data/docs/enums/order-status.md +2 -2
  12. package/data/docs/enums/payment-method.md +2 -2
  13. package/data/docs/enums/payment-proof-status.md +2 -2
  14. package/data/docs/enums/payment-status.md +2 -2
  15. package/data/docs/enums/pending-issue.md +2 -2
  16. package/data/docs/enums/return-status.md +2 -2
  17. package/data/docs/enums/session-status.md +2 -2
  18. package/data/docs/enums/site-status.md +24 -0
  19. package/data/docs/enums/stocktake-frequency.md +24 -0
  20. package/data/docs/enums/stocktake-item-status.md +24 -0
  21. package/data/docs/enums/stocktake-status.md +24 -0
  22. package/data/docs/enums/ticket-status.md +2 -2
  23. package/data/docs/index.md +14 -3
  24. package/data/docs/models/allowed-user.md +1 -1
  25. package/data/docs/models/analytics-backfill.md +398 -0
  26. package/data/docs/models/analytics-daily.md +351 -0
  27. package/data/docs/models/analytics-event.md +2 -2
  28. package/data/docs/models/analytics-hourly.md +372 -0
  29. package/data/docs/models/booking-version.md +2 -2
  30. package/data/docs/models/booking.md +2 -2
  31. package/data/docs/models/customer-payment-allocation.md +2 -2
  32. package/data/docs/models/customer-payment.md +2 -2
  33. package/data/docs/models/customer.md +2 -2
  34. package/data/docs/models/event.md +2 -2
  35. package/data/docs/models/loyalty-config.md +2 -2
  36. package/data/docs/models/loyalty-reward.md +2 -2
  37. package/data/docs/models/loyalty-status.md +2 -2
  38. package/data/docs/models/loyalty-transaction.md +2 -2
  39. package/data/docs/models/magic-link-request.md +2 -2
  40. package/data/docs/models/metrics-current.md +2 -2
  41. package/data/docs/models/metrics-daily.md +2 -2
  42. package/data/docs/models/metrics-monthly.md +2 -2
  43. package/data/docs/models/order-item.md +2 -2
  44. package/data/docs/models/order.md +248 -220
  45. package/data/docs/models/sale.md +2 -2
  46. package/data/docs/models/site-payment.md +2 -2
  47. package/data/docs/models/site.md +561 -0
  48. package/data/docs/models/stocktake-item.md +500 -0
  49. package/data/docs/models/stocktake.md +649 -0
  50. package/data/docs/models/ticket.md +2 -2
  51. package/data/static/llms.txt +309 -2
  52. package/data/static/openapi.yaml +972 -0
  53. package/data/static/schemas.json +1249 -77
  54. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: "Sale"
3
3
  sidebar_label: "Sale"
4
- sidebar_position: 19
4
+ sidebar_position: 22
5
5
  ---
6
6
 
7
7
  # Sale
@@ -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-04-18 at 21:21:09 +0000
527
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-05 at 12:09:28 +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: 20
4
+ sidebar_position: 24
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** | ≤ 9007199254740991 |
198
198
 
199
199
  ----------------------------------------------------------------------------------------------------------------------------
200
- Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-04-18 at 21:21:09 +0000
200
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-05 at 12:09:28 +0000
@@ -0,0 +1,561 @@
1
+ ---
2
+ title: "Site"
3
+ sidebar_label: "Site"
4
+ sidebar_position: 23
5
+ ---
6
+
7
+ # Site
8
+
9
+ <details>
10
+ <summary>Example JSON</summary>
11
+
12
+ ```json
13
+ {
14
+ "id": null,
15
+ "companyId": "comp_xyz789",
16
+ "name": "Amadou Diallo",
17
+ "description": null,
18
+ "status": "status",
19
+ "deploymentLinks": [
20
+ {
21
+ "label": "label",
22
+ "url": "https://storage.example.com/url.jpg",
23
+ "type": "phone"
24
+ }
25
+ ],
26
+ "expiresAt": "expiresAt",
27
+ "isExpired": null,
28
+ "createdAt": "createdAt",
29
+ "updatedAt": "updatedAt",
30
+ "createdBy": "staff_k0f1",
31
+ "analyticsEnabled": true,
32
+ "lastAnalyticsSync": "lastAnalyticsSync",
33
+ "cachedMetrics": null
34
+ }
35
+ ```
36
+
37
+ </details>
38
+
39
+
40
+ - [1. Property `id`](#id)
41
+ - [2. Property `companyId`](#companyId)
42
+ - [3. Property `name`](#name)
43
+ - [4. Property `description`](#description)
44
+ - [5. Property `status`](#status)
45
+ - [6. Property `deploymentLinks`](#deploymentLinks)
46
+ - [6.1. deploymentLinks items](#deploymentLinks_items)
47
+ - [6.1.1. Property `label`](#deploymentLinks_items_label)
48
+ - [6.1.2. Property `url`](#deploymentLinks_items_url)
49
+ - [6.1.3. Property `type`](#deploymentLinks_items_type)
50
+ - [6.1.4. Property `isPrimary`](#deploymentLinks_items_isPrimary)
51
+ - [7. Property `expiresAt`](#expiresAt)
52
+ - [7.1. Property `firestore-timestamp`](#expiresAt_anyOf_i0)
53
+ - [7.1.1. Property `_seconds`](#expiresAt_anyOf_i0__seconds)
54
+ - [7.1.2. Property `_nanoseconds`](#expiresAt_anyOf_i0__nanoseconds)
55
+ - [7.2. Property `item 1`](#expiresAt_anyOf_i1)
56
+ - [8. Property `isExpired`](#isExpired)
57
+ - [9. Property `createdAt`](#createdAt)
58
+ - [9.1. Property `firestore-timestamp`](#createdAt_anyOf_i0)
59
+ - [9.2. Property `item 1`](#createdAt_anyOf_i1)
60
+ - [10. Property `updatedAt`](#updatedAt)
61
+ - [10.1. Property `firestore-timestamp`](#updatedAt_anyOf_i0)
62
+ - [10.2. Property `item 1`](#updatedAt_anyOf_i1)
63
+ - [11. Property `createdBy`](#createdBy)
64
+ - [12. Property `analyticsEnabled`](#analyticsEnabled)
65
+ - [13. Property `lastAnalyticsSync`](#lastAnalyticsSync)
66
+ - [13.1. Property `firestore-timestamp`](#lastAnalyticsSync_anyOf_i0)
67
+ - [13.2. Property `item 1`](#lastAnalyticsSync_anyOf_i1)
68
+ - [14. Property `cachedMetrics`](#cachedMetrics)
69
+ - [14.1. Property `totalEvents`](#cachedMetrics_totalEvents)
70
+ - [14.2. Property `totalPageViews`](#cachedMetrics_totalPageViews)
71
+ - [14.3. Property `totalSessions`](#cachedMetrics_totalSessions)
72
+ - [14.4. Property `totalOrders`](#cachedMetrics_totalOrders)
73
+ - [14.5. Property `lastEventAt`](#cachedMetrics_lastEventAt)
74
+
75
+ | | |
76
+ | ------------------------- | ------------------ |
77
+ | **Type** | `object` |
78
+ | **Required** | No |
79
+ | **Additional properties** | Not allowed |
80
+ | **Defined in** | #/definitions/site |
81
+
82
+ **Description:** Site model (D41 / ING-304). Collection: companies/\{companyId\}/sites/\{siteId\}. 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
+
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 site sub-collections. |
88
+ | + [name](#name ) | No | string | No | - | Human-readable site 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/site-status | Lifecycle status (D41). 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 site. |
97
+ | + [analyticsEnabled](#analyticsEnabled ) | No | boolean | No | - | Feature flag — when false, clients should not emit analytics events for this site. |
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. |
100
+
101
+ ## <a name="id"></a>1. Property `id`
102
+
103
+ | | |
104
+ | ------------ | ---------------- |
105
+ | **Type** | `string or null` |
106
+ | **Required** | No |
107
+
108
+ **Description:** (Read-only) Firestore document ID, auto-generated.
109
+
110
+ :::warning Server-set
111
+ 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.
112
+ :::
113
+
114
+ ## <a name="companyId"></a>2. Property `companyId`
115
+
116
+ | | |
117
+ | ------------ | -------- |
118
+ | **Type** | `string` |
119
+ | **Required** | Yes |
120
+
121
+ **Description:** (Immutable) FK → Company document ID. Scopes all site sub-collections.
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="name"></a>3. Property `name`
128
+
129
+ | | |
130
+ | ------------ | -------- |
131
+ | **Type** | `string` |
132
+ | **Required** | Yes |
133
+
134
+ **Description:** Human-readable site name shown in dashboards.
135
+
136
+ ## <a name="description"></a>4. Property `description`
137
+
138
+ | | |
139
+ | ------------ | ---------------- |
140
+ | **Type** | `string or null` |
141
+ | **Required** | No |
142
+
143
+ **Description:** Optional freeform description.
144
+
145
+ ## <a name="status"></a>5. Property `status`
146
+
147
+ | | |
148
+ | -------------- | ------------------------- |
149
+ | **Type** | `enum (of string)` |
150
+ | **Required** | Yes |
151
+ | **Defined in** | #/definitions/site-status |
152
+
153
+ **Description:** Lifecycle status (D41). Clients filter by ACTIVE.
154
+
155
+ Must be one of:
156
+ * "ACTIVE"
157
+ * "INACTIVE"
158
+ * "EXPIRED"
159
+ * "ARCHIVED"
160
+
161
+ :::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.
163
+ :::
164
+
165
+ :::tip When to set
166
+ Written by operators via dashboard or by server triggers (expiration). Clients filter by ACTIVE.
167
+ :::
168
+
169
+ :::info See also
170
+ **Decisions:** `D41`
171
+ :::
172
+
173
+ ## <a name="deploymentLinks"></a>6. Property `deploymentLinks`
174
+
175
+ | | |
176
+ | ------------ | ----------------- |
177
+ | **Type** | `array of object` |
178
+ | **Required** | Yes |
179
+
180
+ **Description:** Ordered list of deployment URLs (web, mobile, PWA, store links).
181
+
182
+ | | Array restrictions |
183
+ | -------------------- | ------------------ |
184
+ | **Min items** | N/A |
185
+ | **Max items** | N/A |
186
+ | **Items unicity** | False |
187
+ | **Additional items** | False |
188
+ | **Tuple validation** | See below |
189
+
190
+ | Each item of this array must be | Description |
191
+ | ----------------------------------------------- | --------------------------------------------------------------- |
192
+ | [deploymentLinks items](#deploymentLinks_items) | Deployment link entry embedded on Site.deploymentLinks[] (D41). |
193
+
194
+ ### <a name="deploymentLinks_items"></a>6.1. deploymentLinks items
195
+
196
+ | | |
197
+ | ------------------------- | ----------- |
198
+ | **Type** | `object` |
199
+ | **Required** | No |
200
+ | **Additional properties** | Not allowed |
201
+
202
+ **Description:** Deployment link entry embedded on Site.deploymentLinks[] (D41).
203
+
204
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
205
+ | ------------------------------------------------ | ------- | ---------------- | ---------- | ------------------------------------- | ------------------------------------------------------------------------ |
206
+ | + [label](#deploymentLinks_items_label ) | No | string | No | - | Human-readable label shown in dashboards (e.g. "Production", "Staging"). |
207
+ | + [url](#deploymentLinks_items_url ) | No | string | No | - | Absolute URL or store link. |
208
+ | + [type](#deploymentLinks_items_type ) | No | enum (of string) | No | In #/definitions/deployment-link-type | Link category — drives icon/handler selection. |
209
+ | - [isPrimary](#deploymentLinks_items_isPrimary ) | No | boolean | No | - | If true, this link is used as the canonical deployment URL for the Site. |
210
+
211
+ #### <a name="deploymentLinks_items_label"></a>6.1.1. Property `label`
212
+
213
+ | | |
214
+ | ------------ | -------- |
215
+ | **Type** | `string` |
216
+ | **Required** | Yes |
217
+
218
+ **Description:** Human-readable label shown in dashboards (e.g. "Production", "Staging").
219
+
220
+ #### <a name="deploymentLinks_items_url"></a>6.1.2. Property `url`
221
+
222
+ | | |
223
+ | ------------ | -------- |
224
+ | **Type** | `string` |
225
+ | **Required** | Yes |
226
+
227
+ **Description:** Absolute URL or store link.
228
+
229
+ #### <a name="deploymentLinks_items_type"></a>6.1.3. Property `type`
230
+
231
+ | | |
232
+ | -------------- | ---------------------------------- |
233
+ | **Type** | `enum (of string)` |
234
+ | **Required** | Yes |
235
+ | **Defined in** | #/definitions/deployment-link-type |
236
+
237
+ **Description:** Link category — drives icon/handler selection.
238
+
239
+ Must be one of:
240
+ * "web"
241
+ * "mobile"
242
+ * "pwa"
243
+ * "app-store"
244
+ * "play-store"
245
+ * "other"
246
+
247
+ #### <a name="deploymentLinks_items_isPrimary"></a>6.1.4. Property `isPrimary`
248
+
249
+ | | |
250
+ | ------------ | --------- |
251
+ | **Type** | `boolean` |
252
+ | **Required** | No |
253
+
254
+ **Description:** If true, this link is used as the canonical deployment URL for the Site.
255
+
256
+ ## <a name="expiresAt"></a>7. Property `expiresAt`
257
+
258
+ | | |
259
+ | ------------------------- | ---------------- |
260
+ | **Type** | `combining` |
261
+ | **Required** | No |
262
+ | **Additional properties** | Any type allowed |
263
+
264
+ **Description:** Optional expiration timestamp. When set and elapsed, `isExpired` flips true and status typically moves to EXPIRED.
265
+
266
+ | Any of(Option) |
267
+ | ------------------------------------------ |
268
+ | [firestore-timestamp](#expiresAt_anyOf_i0) |
269
+ | [item 1](#expiresAt_anyOf_i1) |
270
+
271
+ ### <a name="expiresAt_anyOf_i0"></a>7.1. Property `firestore-timestamp`
272
+
273
+ | | |
274
+ | ------------------------- | --------------------------------- |
275
+ | **Type** | `object` |
276
+ | **Required** | No |
277
+ | **Additional properties** | Not allowed |
278
+ | **Defined in** | #/definitions/firestore-timestamp |
279
+
280
+ **Description:** Firestore Timestamp serialized representation
281
+
282
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
283
+ | --------------------------------------------------- | ------- | ------- | ---------- | ---------- | ----------------- |
284
+ | + [_seconds](#expiresAt_anyOf_i0__seconds ) | No | integer | No | - | - |
285
+ | + [_nanoseconds](#expiresAt_anyOf_i0__nanoseconds ) | No | integer | No | - | - |
286
+
287
+ #### <a name="expiresAt_anyOf_i0__seconds"></a>7.1.1. Property `_seconds`
288
+
289
+ | | |
290
+ | ------------ | --------- |
291
+ | **Type** | `integer` |
292
+ | **Required** | Yes |
293
+
294
+ | Restrictions | |
295
+ | ------------ | ---------------------- |
296
+ | **Minimum** | &ge; -9007199254740991 |
297
+ | **Maximum** | &le; 9007199254740991 |
298
+
299
+ #### <a name="expiresAt_anyOf_i0__nanoseconds"></a>7.1.2. Property `_nanoseconds`
300
+
301
+ | | |
302
+ | ------------ | --------- |
303
+ | **Type** | `integer` |
304
+ | **Required** | Yes |
305
+
306
+ | Restrictions | |
307
+ | ------------ | ---------------------- |
308
+ | **Minimum** | &ge; -9007199254740991 |
309
+ | **Maximum** | &le; 9007199254740991 |
310
+
311
+ ### <a name="expiresAt_anyOf_i1"></a>7.2. Property `item 1`
312
+
313
+ | | |
314
+ | ------------ | ------ |
315
+ | **Type** | `null` |
316
+ | **Required** | No |
317
+
318
+ ## <a name="isExpired"></a>8. Property `isExpired`
319
+
320
+ | | |
321
+ | ------------ | ----------------- |
322
+ | **Type** | `boolean or null` |
323
+ | **Required** | No |
324
+
325
+ **Description:** (Read-only) Derived — true when `expiresAt` is in the past. Maintained by server trigger.
326
+
327
+ :::warning Server-set
328
+ 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.
329
+ :::
330
+
331
+ ## <a name="createdAt"></a>9. Property `createdAt`
332
+
333
+ | | |
334
+ | ------------------------- | ---------------- |
335
+ | **Type** | `combining` |
336
+ | **Required** | No |
337
+ | **Additional properties** | Any type allowed |
338
+
339
+ **Description:** (Read-only) Server-generated creation timestamp.
340
+
341
+ | Any of(Option) |
342
+ | ------------------------------------------ |
343
+ | [firestore-timestamp](#createdAt_anyOf_i0) |
344
+ | [item 1](#createdAt_anyOf_i1) |
345
+
346
+ ### <a name="createdAt_anyOf_i0"></a>9.1. Property `firestore-timestamp`
347
+
348
+ | | |
349
+ | ------------------------- | ----------------------------------------- |
350
+ | **Type** | `object` |
351
+ | **Required** | No |
352
+ | **Additional properties** | Not allowed |
353
+ | **Same definition as** | [expiresAt_anyOf_i0](#expiresAt_anyOf_i0) |
354
+
355
+ **Description:** Firestore Timestamp serialized representation
356
+
357
+ ### <a name="createdAt_anyOf_i1"></a>9.2. Property `item 1`
358
+
359
+ | | |
360
+ | ------------ | ------ |
361
+ | **Type** | `null` |
362
+ | **Required** | No |
363
+
364
+ :::warning Server-set
365
+ 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.
366
+ :::
367
+
368
+ ## <a name="updatedAt"></a>10. Property `updatedAt`
369
+
370
+ | | |
371
+ | ------------------------- | ---------------- |
372
+ | **Type** | `combining` |
373
+ | **Required** | No |
374
+ | **Additional properties** | Any type allowed |
375
+
376
+ **Description:** (Read-only) Server-generated update timestamp.
377
+
378
+ | Any of(Option) |
379
+ | ------------------------------------------ |
380
+ | [firestore-timestamp](#updatedAt_anyOf_i0) |
381
+ | [item 1](#updatedAt_anyOf_i1) |
382
+
383
+ ### <a name="updatedAt_anyOf_i0"></a>10.1. Property `firestore-timestamp`
384
+
385
+ | | |
386
+ | ------------------------- | ----------------------------------------- |
387
+ | **Type** | `object` |
388
+ | **Required** | No |
389
+ | **Additional properties** | Not allowed |
390
+ | **Same definition as** | [expiresAt_anyOf_i0](#expiresAt_anyOf_i0) |
391
+
392
+ **Description:** Firestore Timestamp serialized representation
393
+
394
+ ### <a name="updatedAt_anyOf_i1"></a>10.2. Property `item 1`
395
+
396
+ | | |
397
+ | ------------ | ------ |
398
+ | **Type** | `null` |
399
+ | **Required** | No |
400
+
401
+ :::warning Server-set
402
+ 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.
403
+ :::
404
+
405
+ ## <a name="createdBy"></a>11. Property `createdBy`
406
+
407
+ | | |
408
+ | ------------ | -------- |
409
+ | **Type** | `string` |
410
+ | **Required** | Yes |
411
+
412
+ **Description:** (Immutable) FK → User/staff UID who created the site.
413
+
414
+ :::info Immutable
415
+ 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.
416
+ :::
417
+
418
+ ## <a name="analyticsEnabled"></a>12. Property `analyticsEnabled`
419
+
420
+ | | |
421
+ | ------------ | --------- |
422
+ | **Type** | `boolean` |
423
+ | **Required** | Yes |
424
+
425
+ **Description:** Feature flag — when false, clients should not emit analytics events for this site.
426
+
427
+ ## <a name="lastAnalyticsSync"></a>13. Property `lastAnalyticsSync`
428
+
429
+ | | |
430
+ | ------------------------- | ---------------- |
431
+ | **Type** | `combining` |
432
+ | **Required** | No |
433
+ | **Additional properties** | Any type allowed |
434
+
435
+ **Description:** (Read-only) Last time the analytics rollup pipeline refreshed `cachedMetrics`.
436
+
437
+ | Any of(Option) |
438
+ | -------------------------------------------------- |
439
+ | [firestore-timestamp](#lastAnalyticsSync_anyOf_i0) |
440
+ | [item 1](#lastAnalyticsSync_anyOf_i1) |
441
+
442
+ ### <a name="lastAnalyticsSync_anyOf_i0"></a>13.1. Property `firestore-timestamp`
443
+
444
+ | | |
445
+ | ------------------------- | ----------------------------------------- |
446
+ | **Type** | `object` |
447
+ | **Required** | No |
448
+ | **Additional properties** | Not allowed |
449
+ | **Same definition as** | [expiresAt_anyOf_i0](#expiresAt_anyOf_i0) |
450
+
451
+ **Description:** Firestore Timestamp serialized representation
452
+
453
+ ### <a name="lastAnalyticsSync_anyOf_i1"></a>13.2. Property `item 1`
454
+
455
+ | | |
456
+ | ------------ | ------ |
457
+ | **Type** | `null` |
458
+ | **Required** | No |
459
+
460
+ :::warning Server-set
461
+ 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.
462
+ :::
463
+
464
+ ## <a name="cachedMetrics"></a>14. Property `cachedMetrics`
465
+
466
+ | | |
467
+ | ------------ | ---------------- |
468
+ | **Type** | `object or null` |
469
+ | **Required** | No |
470
+
471
+ **Description:** (Read-only, Denormalized) Cached metrics snapshot for quick dashboard rendering.
472
+
473
+ | Property | Pattern | Type | Deprecated | Definition | Title/Description |
474
+ | -------------------------------------------------- | ------- | ------- | ---------- | -------------------------------------------------- | ------------------------------------------------------------------------- |
475
+ | + [totalEvents](#cachedMetrics_totalEvents ) | No | integer | No | - | All-time event count cached on the Site. |
476
+ | + [totalPageViews](#cachedMetrics_totalPageViews ) | No | integer | No | - | All-time \`page_view\` + \`screen_view\` count. |
477
+ | + [totalSessions](#cachedMetrics_totalSessions ) | No | integer | No | - | All-time distinct session count. |
478
+ | + [totalOrders](#cachedMetrics_totalOrders ) | No | integer | No | - | All-time order count attributed to this site (via \`Order.siteId\`, D43). |
479
+ | - [lastEventAt](#cachedMetrics_lastEventAt ) | No | object | No | Same as [expiresAt_anyOf_i0](#expiresAt_anyOf_i0 ) | Timestamp of the most recent analytics event seen for this site. |
480
+
481
+ ### <a name="cachedMetrics_totalEvents"></a>14.1. Property `totalEvents`
482
+
483
+ | | |
484
+ | ------------ | --------- |
485
+ | **Type** | `integer` |
486
+ | **Required** | Yes |
487
+
488
+ **Description:** All-time event count cached on the Site.
489
+
490
+ | Restrictions | |
491
+ | ------------ | ---------------------- |
492
+ | **Minimum** | &ge; -9007199254740991 |
493
+ | **Maximum** | &le; 9007199254740991 |
494
+
495
+ ### <a name="cachedMetrics_totalPageViews"></a>14.2. Property `totalPageViews`
496
+
497
+ | | |
498
+ | ------------ | --------- |
499
+ | **Type** | `integer` |
500
+ | **Required** | Yes |
501
+
502
+ **Description:** All-time `page_view` + `screen_view` count.
503
+
504
+ | Restrictions | |
505
+ | ------------ | ---------------------- |
506
+ | **Minimum** | &ge; -9007199254740991 |
507
+ | **Maximum** | &le; 9007199254740991 |
508
+
509
+ ### <a name="cachedMetrics_totalSessions"></a>14.3. Property `totalSessions`
510
+
511
+ | | |
512
+ | ------------ | --------- |
513
+ | **Type** | `integer` |
514
+ | **Required** | Yes |
515
+
516
+ **Description:** All-time distinct session count.
517
+
518
+ | Restrictions | |
519
+ | ------------ | ---------------------- |
520
+ | **Minimum** | &ge; -9007199254740991 |
521
+ | **Maximum** | &le; 9007199254740991 |
522
+
523
+ ### <a name="cachedMetrics_totalOrders"></a>14.4. Property `totalOrders`
524
+
525
+ | | |
526
+ | ------------ | --------- |
527
+ | **Type** | `integer` |
528
+ | **Required** | Yes |
529
+
530
+ **Description:** All-time order count attributed to this site (via `Order.siteId`, D43).
531
+
532
+ | Restrictions | |
533
+ | ------------ | ---------------------- |
534
+ | **Minimum** | &ge; -9007199254740991 |
535
+ | **Maximum** | &le; 9007199254740991 |
536
+
537
+ ### <a name="cachedMetrics_lastEventAt"></a>14.5. Property `lastEventAt`
538
+
539
+ | | |
540
+ | ------------------------- | ----------------------------------------- |
541
+ | **Type** | `object` |
542
+ | **Required** | No |
543
+ | **Additional properties** | Not allowed |
544
+ | **Same definition as** | [expiresAt_anyOf_i0](#expiresAt_anyOf_i0) |
545
+
546
+ **Description:** Timestamp of the most recent analytics event seen for this site.
547
+
548
+ ----------------------------------------------------------------------------------------------------------------------------
549
+ Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-05-05 at 12:09:28 +0000
550
+
551
+ :::warning Server-set
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.
553
+ :::
554
+
555
+ :::note
556
+ Updated by the rollup pipeline (D42). Readers should treat this as a hint; authoritative counts live in analytics_daily/analytics_hourly.
557
+ :::
558
+
559
+ :::info See also
560
+ **Decisions:** `D41` · `D42`
561
+ :::