@ingenx-io/valets-schema-mcp-server 0.1.3 → 0.1.4

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 (43) hide show
  1. package/data/docs/collections/firestore-paths.md +21 -2
  2. package/data/docs/enums/attention-status.md +24 -0
  3. package/data/docs/enums/booking-status.md +2 -2
  4. package/data/docs/enums/customer-payment-status.md +2 -2
  5. package/data/docs/enums/customer-payment-target-type.md +2 -2
  6. package/data/docs/enums/delivery-type.md +2 -2
  7. package/data/docs/enums/event-status.md +2 -2
  8. package/data/docs/enums/fulfillment-status.md +2 -2
  9. package/data/docs/enums/loyalty-transaction-type.md +2 -2
  10. package/data/docs/enums/order-status.md +2 -2
  11. package/data/docs/enums/payment-method.md +2 -2
  12. package/data/docs/enums/payment-proof-status.md +2 -2
  13. package/data/docs/enums/payment-status.md +2 -2
  14. package/data/docs/enums/pending-issue.md +31 -0
  15. package/data/docs/enums/return-status.md +2 -2
  16. package/data/docs/enums/session-status.md +2 -2
  17. package/data/docs/enums/ticket-status.md +2 -2
  18. package/data/docs/index.md +8 -2
  19. package/data/docs/models/allowed-user.md +188 -0
  20. package/data/docs/models/analytics-event.md +533 -0
  21. package/data/docs/models/booking-version.md +2 -2
  22. package/data/docs/models/booking.md +2 -2
  23. package/data/docs/models/customer-payment-allocation.md +2 -2
  24. package/data/docs/models/customer-payment.md +2 -2
  25. package/data/docs/models/customer.md +2 -2
  26. package/data/docs/models/event.md +2 -2
  27. package/data/docs/models/loyalty-config.md +2 -2
  28. package/data/docs/models/loyalty-reward.md +2 -2
  29. package/data/docs/models/loyalty-status.md +2 -2
  30. package/data/docs/models/loyalty-transaction.md +2 -2
  31. package/data/docs/models/magic-link-request.md +285 -0
  32. package/data/docs/models/metrics-current.md +2 -2
  33. package/data/docs/models/metrics-daily.md +2 -2
  34. package/data/docs/models/metrics-monthly.md +2 -2
  35. package/data/docs/models/order-item.md +2 -2
  36. package/data/docs/models/order.md +2 -2
  37. package/data/docs/models/sale.md +2 -2
  38. package/data/docs/models/site-payment.md +200 -0
  39. package/data/docs/models/ticket.md +2 -2
  40. package/data/static/llms.txt +164 -1
  41. package/data/static/openapi.yaml +451 -0
  42. package/data/static/schemas.json +511 -44
  43. package/package.json +1 -1
@@ -1,8 +1,300 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "description": "@valets/schema \u2014 consolidated schema bundle",
4
- "generated": "2026-04-06T19:27:48.749605+00:00",
4
+ "generated": "2026-04-18T21:21:09.696794+00:00",
5
5
  "schemas": {
6
+ "allowed-user": {
7
+ "type": "object",
8
+ "properties": {
9
+ "id": {
10
+ "readOnly": true,
11
+ "description": "(Read-only) Firestore document ID = contact identifier (email or E.164 phone), URL-escaped.",
12
+ "type": [
13
+ "string",
14
+ "null"
15
+ ]
16
+ },
17
+ "companyId": {
18
+ "type": "string",
19
+ "x-immutable": true,
20
+ "description": "(Immutable) FK \u2192 Company document ID."
21
+ },
22
+ "siteId": {
23
+ "type": "string",
24
+ "x-immutable": true,
25
+ "description": "(Immutable) FK \u2192 Site document ID (D40 sub-tenant scope)."
26
+ },
27
+ "contact": {
28
+ "type": "string",
29
+ "description": "Email or E.164 phone number. Canonical identifier for this user within the site."
30
+ },
31
+ "tier": {
32
+ "type": "string",
33
+ "description": "Access tier. Free string per site (ING-304 open question \u2014 tier values are site-specific today)."
34
+ },
35
+ "amount": {
36
+ "type": "number",
37
+ "description": "Amount paid. Generalized from amount_xof per D40 decision."
38
+ },
39
+ "currency": {
40
+ "default": "XOF",
41
+ "description": "Currency code (ISO 4217). Defaults to XOF for legacy SR-Single parity.",
42
+ "type": "string"
43
+ },
44
+ "transactionId": {
45
+ "type": "string",
46
+ "description": "Payment provider transaction ID (e.g. Wave)."
47
+ },
48
+ "paidAt": {
49
+ "$ref": "#/definitions/firestore-timestamp",
50
+ "description": "RFC3339Nano UTC when payment was completed."
51
+ }
52
+ },
53
+ "required": [
54
+ "companyId",
55
+ "siteId",
56
+ "contact",
57
+ "tier",
58
+ "amount",
59
+ "currency",
60
+ "transactionId",
61
+ "paidAt"
62
+ ],
63
+ "additionalProperties": false,
64
+ "description": "AllowedUser model (D40 / ING-304). Collection: companies/{companyId}/sites/{siteId}/allowed_users/{contactId}. Authoritative paid-access allowlist. Upsert semantics \u2014 tier upgrades overwrite. Source of truth for access checks and referral code resolution.",
65
+ "example": {
66
+ "id": null,
67
+ "companyId": "comp_xyz789",
68
+ "siteId": "sit_ref123",
69
+ "contact": "contact",
70
+ "tier": "Gold",
71
+ "amount": 45000,
72
+ "currency": "XOF",
73
+ "transactionId": "tra_ref123",
74
+ "paidAt": "pai_ref123"
75
+ }
76
+ },
77
+ "analytics-event": {
78
+ "type": "object",
79
+ "properties": {
80
+ "id": {
81
+ "readOnly": true,
82
+ "description": "(Read-only) Firestore document ID. Equal to eventId.",
83
+ "type": [
84
+ "string",
85
+ "null"
86
+ ]
87
+ },
88
+ "companyId": {
89
+ "type": "string",
90
+ "x-immutable": true,
91
+ "description": "(Immutable) FK \u2192 Company document ID."
92
+ },
93
+ "siteId": {
94
+ "type": "string",
95
+ "x-immutable": true,
96
+ "description": "(Immutable) FK \u2192 Site document ID (D40 sub-tenant scope)."
97
+ },
98
+ "eventId": {
99
+ "type": "string",
100
+ "x-immutable": true,
101
+ "description": "(Immutable) Client-generated UUID. Matches document ID."
102
+ },
103
+ "eventName": {
104
+ "type": "string",
105
+ "description": "Event name. Free string; canonical vocabulary is encouraged (see CANONICAL_ANALYTICS_EVENT_NAMES)."
106
+ },
107
+ "timestamp": {
108
+ "type": "string",
109
+ "description": "Client-side ISO 8601 \u2014 \"when it happened on device\". Can diverge from serverTimestamp for queued offline events."
110
+ },
111
+ "serverTimestamp": {
112
+ "$ref": "#/definitions/firestore-timestamp",
113
+ "description": "(Read-only) Firestore serverTimestamp() \u2014 authoritative for ordering.",
114
+ "readOnly": true
115
+ },
116
+ "sessionId": {
117
+ "type": "string",
118
+ "description": "30-minute rolling session identifier."
119
+ },
120
+ "userId": {
121
+ "anyOf": [
122
+ {
123
+ "type": "string"
124
+ },
125
+ {
126
+ "type": "null"
127
+ }
128
+ ],
129
+ "description": "Stable user ID if identified; explicitly null (not omitted) for anonymous sessions \u2014 simplifies querying."
130
+ },
131
+ "properties": {
132
+ "type": "object",
133
+ "propertyNames": {
134
+ "type": "string"
135
+ },
136
+ "additionalProperties": {},
137
+ "description": "Free-form event-specific payload. Contract is at the event-name level. PII posture: follow-up issue pending."
138
+ },
139
+ "context": {
140
+ "type": "object",
141
+ "properties": {
142
+ "url": {
143
+ "description": "Full URL at event time.",
144
+ "type": "string"
145
+ },
146
+ "origin": {
147
+ "description": "Protocol + host.",
148
+ "type": "string"
149
+ },
150
+ "hostname": {
151
+ "description": "Hostname only \u2014 useful for deployment identification.",
152
+ "type": "string"
153
+ },
154
+ "page": {
155
+ "description": "Current route/pathname.",
156
+ "type": "string"
157
+ },
158
+ "title": {
159
+ "description": "Page title.",
160
+ "type": "string"
161
+ },
162
+ "referrer": {
163
+ "description": "Referrer URL.",
164
+ "type": "string"
165
+ },
166
+ "deviceType": {
167
+ "type": "string",
168
+ "enum": [
169
+ "mobile",
170
+ "tablet",
171
+ "desktop"
172
+ ]
173
+ },
174
+ "platform": {
175
+ "description": "OS/platform string.",
176
+ "type": "string"
177
+ },
178
+ "screenWidth": {
179
+ "description": "Viewport width (flattened from screen.width).",
180
+ "type": "integer",
181
+ "minimum": -9007199254740991,
182
+ "maximum": 9007199254740991
183
+ },
184
+ "screenHeight": {
185
+ "description": "Viewport height (flattened from screen.height).",
186
+ "type": "integer",
187
+ "minimum": -9007199254740991,
188
+ "maximum": 9007199254740991
189
+ },
190
+ "appVersion": {
191
+ "description": "Consuming app version.",
192
+ "type": "string"
193
+ },
194
+ "online": {
195
+ "description": "Connectivity state at event time.",
196
+ "type": "boolean"
197
+ },
198
+ "locale": {
199
+ "description": "User locale.",
200
+ "type": "string"
201
+ },
202
+ "timezone": {
203
+ "description": "IANA timezone.",
204
+ "type": "string"
205
+ },
206
+ "utm": {
207
+ "description": "UTM parameters; null when not a campaign-landed session.",
208
+ "anyOf": [
209
+ {
210
+ "type": "object",
211
+ "properties": {
212
+ "source": {
213
+ "type": "string"
214
+ },
215
+ "medium": {
216
+ "type": "string"
217
+ },
218
+ "campaign": {
219
+ "type": "string"
220
+ },
221
+ "term": {
222
+ "type": "string"
223
+ },
224
+ "content": {
225
+ "type": "string"
226
+ }
227
+ },
228
+ "additionalProperties": false
229
+ },
230
+ {
231
+ "type": "null"
232
+ }
233
+ ]
234
+ }
235
+ },
236
+ "additionalProperties": false,
237
+ "description": "Environment context at event time (nested per D40)."
238
+ },
239
+ "userTraits": {
240
+ "description": "Optional \u2014 included only when includeUserTraits: true on the write. PII posture: follow-up issue pending.",
241
+ "type": [
242
+ "object",
243
+ "null"
244
+ ],
245
+ "propertyNames": {
246
+ "type": "string"
247
+ },
248
+ "additionalProperties": {}
249
+ }
250
+ },
251
+ "required": [
252
+ "companyId",
253
+ "siteId",
254
+ "eventId",
255
+ "eventName",
256
+ "timestamp",
257
+ "serverTimestamp",
258
+ "sessionId",
259
+ "userId",
260
+ "properties",
261
+ "context"
262
+ ],
263
+ "additionalProperties": false,
264
+ "description": "AnalyticsEvent model (D40 / ING-304). Collection: companies/{companyId}/sites/{siteId}/analytics_events/{eventId}. Append-only, immutable product/behavior event stream. Event names are free strings; canonical vocabulary in CANONICAL_ANALYTICS_EVENT_NAMES.",
265
+ "example": {
266
+ "id": null,
267
+ "companyId": "comp_xyz789",
268
+ "siteId": "sit_ref123",
269
+ "eventId": "eve_ref123",
270
+ "eventName": "eventName",
271
+ "timestamp": "timestamp",
272
+ "serverTimestamp": "serverTimestamp",
273
+ "sessionId": "ses_ref123",
274
+ "userId": "use_ref123",
275
+ "properties": {},
276
+ "context": {},
277
+ "userTraits": null
278
+ }
279
+ },
280
+ "attention-status": {
281
+ "type": "string",
282
+ "enum": [
283
+ "ACTIVE",
284
+ "STALE",
285
+ "ON_HOLD",
286
+ "ESCALATED"
287
+ ],
288
+ "description": "Operational attention status for Order and Booking (D39). Controls home-page queue assignment. Server-owned \u2014 set via triggers or callable fn only.",
289
+ "x-note": "ACTIVE = normal urgent queue (default). STALE = idle past threshold, moved to review queue \u2014 excluded from pendingOrdersCount. ON_HOLD = intentionally paused by manager via callable fn. ESCALATED = ignored past second threshold.",
290
+ "x-see": {
291
+ "decisions": [
292
+ "D39"
293
+ ]
294
+ },
295
+ "x-when": "Set by server automation or callable fn. Mobile and Dashboard read this field; never write it directly. ON_HOLD is the only human-initiated transition \u2014 goes through a dedicated callable function.",
296
+ "x-status": "proposed"
297
+ },
6
298
  "booking": {
7
299
  "type": "object",
8
300
  "properties": {
@@ -1961,6 +2253,122 @@
1961
2253
  ],
1962
2254
  "description": "Loyalty point transaction type (D07). SCREAMING_SNAKE past tense."
1963
2255
  },
2256
+ "magic-link-request": {
2257
+ "type": "object",
2258
+ "properties": {
2259
+ "id": {
2260
+ "readOnly": true,
2261
+ "description": "(Read-only) Firestore document ID. 16-byte random hex.",
2262
+ "type": [
2263
+ "string",
2264
+ "null"
2265
+ ]
2266
+ },
2267
+ "companyId": {
2268
+ "type": "string",
2269
+ "x-immutable": true,
2270
+ "description": "(Immutable) FK \u2192 Company document ID."
2271
+ },
2272
+ "siteId": {
2273
+ "type": "string",
2274
+ "x-immutable": true,
2275
+ "description": "(Immutable) FK \u2192 Site document ID (D40 sub-tenant scope)."
2276
+ },
2277
+ "email": {
2278
+ "type": "string",
2279
+ "description": "Populated if identifier is email; empty string if phone. Mutually exclusive with phone per document."
2280
+ },
2281
+ "phone": {
2282
+ "type": "string",
2283
+ "description": "Populated if identifier is E.164 format (starts with +); empty string if email."
2284
+ },
2285
+ "ip": {
2286
+ "type": "string",
2287
+ "description": "Client IP from X-Forwarded-For or RemoteAddr."
2288
+ },
2289
+ "allowed": {
2290
+ "type": "boolean",
2291
+ "description": "Whether the user passed the access control check."
2292
+ },
2293
+ "link": {
2294
+ "type": "string",
2295
+ "description": "Magic-link URL \u2014 non-empty only when DEV_MODE=true; empty in production (audit integrity)."
2296
+ },
2297
+ "tier": {
2298
+ "type": "string",
2299
+ "description": "Access tier selected by the user. Free string per site (ING-304 open question \u2014 tier values are site-specific today)."
2300
+ },
2301
+ "authStatusReason": {
2302
+ "type": "string",
2303
+ "description": "Outcome reason code: whitelist | allowed_users | payment_redirect | payment_complete | not_allowed | redirected_to_payment."
2304
+ },
2305
+ "referredBy": {
2306
+ "type": "string",
2307
+ "description": "Contact identifier of the referrer, resolved from submitted referral_code; empty if none."
2308
+ },
2309
+ "requestedAt": {
2310
+ "$ref": "#/definitions/firestore-timestamp",
2311
+ "description": "RFC3339Nano UTC at request time."
2312
+ },
2313
+ "verifyReason": {
2314
+ "description": "Verify outcome reason: mirrors authStatusReason on success, or link_expired | link_invalid | not_allowed.",
2315
+ "type": [
2316
+ "string",
2317
+ "null"
2318
+ ]
2319
+ },
2320
+ "verified": {
2321
+ "description": "Whether the verify attempt succeeded.",
2322
+ "type": [
2323
+ "boolean",
2324
+ "null"
2325
+ ]
2326
+ },
2327
+ "verifiedAt": {
2328
+ "anyOf": [
2329
+ {
2330
+ "$ref": "#/definitions/firestore-timestamp"
2331
+ },
2332
+ {
2333
+ "type": "null"
2334
+ }
2335
+ ],
2336
+ "description": "RFC3339Nano UTC at verify time."
2337
+ }
2338
+ },
2339
+ "required": [
2340
+ "companyId",
2341
+ "siteId",
2342
+ "email",
2343
+ "phone",
2344
+ "ip",
2345
+ "allowed",
2346
+ "link",
2347
+ "tier",
2348
+ "authStatusReason",
2349
+ "referredBy",
2350
+ "requestedAt"
2351
+ ],
2352
+ "additionalProperties": false,
2353
+ "description": "MagicLinkRequest model (D40 / ING-304). Collection: companies/{companyId}/sites/{siteId}/magic_link_requests/{requestId}. Authentication audit log \u2014 every request is logged regardless of outcome. Two-stage write: Log() then LogVerify().",
2354
+ "example": {
2355
+ "id": null,
2356
+ "companyId": "comp_xyz789",
2357
+ "siteId": "sit_ref123",
2358
+ "email": "amadou@example.com",
2359
+ "phone": "+225 07 00 11 22",
2360
+ "ip": "ip",
2361
+ "allowed": true,
2362
+ "link": "link",
2363
+ "tier": "Gold",
2364
+ "authStatusReason": "Customer request",
2365
+ "referredBy": "referredBy",
2366
+ "requestedAt": "requestedAt",
2367
+ "verifyReason": null,
2368
+ "verified": null,
2369
+ "verifiedAt": "verifiedAt"
2370
+ }
2371
+ },
1964
2372
  "metrics-current": {
1965
2373
  "type": "object",
1966
2374
  "properties": {
@@ -3550,6 +3958,31 @@
3550
3958
  ],
3551
3959
  "description": "Payment lifecycle status (D01 amended). Used by Order, Sale/Purchase, Booking."
3552
3960
  },
3961
+ "pending-issue": {
3962
+ "type": "string",
3963
+ "enum": [
3964
+ "PAYMENT_PROOF_PENDING",
3965
+ "PAYMENT_PROOF_REJECTED",
3966
+ "AMOUNT_DISCREPANCY",
3967
+ "RETURN_UNRESOLVED",
3968
+ "OVERDUE_DELIVERY",
3969
+ "SESSION_OVERDUE",
3970
+ "PAYMENT_INCOMPLETE",
3971
+ "CANCELLATION_REQUESTED",
3972
+ "UNREFUNDED_CANCELLATION",
3973
+ "UPCOMING_UNPAID",
3974
+ "NO_SHOW_UNRESOLVED"
3975
+ ],
3976
+ "description": "Specific detected conditions on an Order or Booking requiring human action (D39). Stored as an array \u2014 multiple issues can be active simultaneously. Server-owned.",
3977
+ "x-note": "Shared: PAYMENT_PROOF_PENDING (proof uploaded, awaiting review), PAYMENT_PROOF_REJECTED (proof rejected, needs resubmission), AMOUNT_DISCREPANCY (amountPaid does not reconcile with amount/paymentStatus). Order-only: RETURN_UNRESOLVED (return/exchange stuck), OVERDUE_DELIVERY (estimatedDeliveryDate past, not yet delivered). Booking-only: SESSION_OVERDUE (session date passed, status not updated), PAYMENT_INCOMPLETE (sessions completed but payment not recorded), CANCELLATION_REQUESTED (cancellation not actioned), UNREFUNDED_CANCELLATION (cancelled with amountPaid > 0 and no refund), UPCOMING_UNPAID (session within 48h, payment not recorded), NO_SHOW_UNRESOLVED (no-show without follow-up).",
3978
+ "x-see": {
3979
+ "decisions": [
3980
+ "D39"
3981
+ ]
3982
+ },
3983
+ "x-when": "Set and cleared by server automation or triggers. Never affects pendingOrdersCount or pendingBookingsCount \u2014 orthogonal to urgency. Multiple values can be active at once (stored as PendingIssue[] on Order/Booking).",
3984
+ "x-status": "proposed"
3985
+ },
3553
3986
  "return-status": {
3554
3987
  "type": "string",
3555
3988
  "enum": [
@@ -3688,6 +4121,83 @@
3688
4121
  ],
3689
4122
  "description": "Per-date/per-slot booking session status (D19). Dashboard is sole writer; Mobile is read-only."
3690
4123
  },
4124
+ "site-payment": {
4125
+ "type": "object",
4126
+ "properties": {
4127
+ "id": {
4128
+ "readOnly": true,
4129
+ "description": "(Read-only) Firestore document ID, auto-generated.",
4130
+ "type": [
4131
+ "string",
4132
+ "null"
4133
+ ]
4134
+ },
4135
+ "companyId": {
4136
+ "type": "string",
4137
+ "x-immutable": true,
4138
+ "description": "(Immutable) FK \u2192 Company document ID."
4139
+ },
4140
+ "siteId": {
4141
+ "type": "string",
4142
+ "x-immutable": true,
4143
+ "description": "(Immutable) FK \u2192 Site document ID (D40 sub-tenant scope)."
4144
+ },
4145
+ "contact": {
4146
+ "type": "string",
4147
+ "description": "Email or E.164 phone number. Matches AllowedUser.contact."
4148
+ },
4149
+ "sessionId": {
4150
+ "type": "string",
4151
+ "description": "Payment provider checkout session ID (e.g. Wave). Usable for dedup across dual writes."
4152
+ },
4153
+ "transactionId": {
4154
+ "type": "string",
4155
+ "description": "Payment provider transaction ID."
4156
+ },
4157
+ "tier": {
4158
+ "type": "string",
4159
+ "description": "Access tier. Free string per site (ING-304 open question)."
4160
+ },
4161
+ "amount": {
4162
+ "type": "number",
4163
+ "description": "Amount paid. Generalized from amount_xof per D40 decision."
4164
+ },
4165
+ "currency": {
4166
+ "default": "XOF",
4167
+ "description": "Currency code (ISO 4217). Defaults to XOF for legacy SR-Single parity.",
4168
+ "type": "string"
4169
+ },
4170
+ "paidAt": {
4171
+ "$ref": "#/definitions/firestore-timestamp",
4172
+ "description": "RFC3339Nano UTC when payment was completed."
4173
+ }
4174
+ },
4175
+ "required": [
4176
+ "companyId",
4177
+ "siteId",
4178
+ "contact",
4179
+ "sessionId",
4180
+ "transactionId",
4181
+ "tier",
4182
+ "amount",
4183
+ "currency",
4184
+ "paidAt"
4185
+ ],
4186
+ "additionalProperties": false,
4187
+ "description": "SitePayment model (D40 / ING-304). Collection: companies/{companyId}/sites/{siteId}/payments/{paymentId}. Immutable append-only transaction ledger. Distinct from AllowedUser (access state) and CustomerPayment (D22 \u2014 customer-level billing).",
4188
+ "example": {
4189
+ "id": null,
4190
+ "companyId": "comp_xyz789",
4191
+ "siteId": "sit_ref123",
4192
+ "contact": "contact",
4193
+ "sessionId": "ses_ref123",
4194
+ "transactionId": "tra_ref123",
4195
+ "tier": "Gold",
4196
+ "amount": 45000,
4197
+ "currency": "XOF",
4198
+ "paidAt": "pai_ref123"
4199
+ }
4200
+ },
3691
4201
  "ticket": {
3692
4202
  "type": "object",
3693
4203
  "properties": {
@@ -3846,24 +4356,6 @@
3846
4356
  ],
3847
4357
  "description": "Event ticket status (D32). VALID = active and unused."
3848
4358
  },
3849
- "attention-status": {
3850
- "type": "string",
3851
- "enum": [
3852
- "ACTIVE",
3853
- "STALE",
3854
- "ON_HOLD",
3855
- "ESCALATED"
3856
- ],
3857
- "description": "Operational attention status for Order and Booking (D39). Controls home-page queue assignment. Server-owned \u2014 set via triggers or callable fn only.",
3858
- "x-note": "ACTIVE = normal urgent queue (default). STALE = idle past threshold, moved to review queue \u2014 excluded from pendingOrdersCount. ON_HOLD = intentionally paused by manager via callable fn. ESCALATED = ignored past second threshold.",
3859
- "x-see": {
3860
- "decisions": [
3861
- "D39"
3862
- ]
3863
- },
3864
- "x-when": "Set by server automation or callable fn. Mobile and Dashboard read this field; never write it directly. ON_HOLD is the only human-initiated transition \u2014 goes through a dedicated callable function.",
3865
- "x-status": "proposed"
3866
- },
3867
4359
  "payment-summary": {
3868
4360
  "type": "object",
3869
4361
  "properties": {
@@ -4025,31 +4517,6 @@
4025
4517
  "additionalProperties": false,
4026
4518
  "description": "Aggregated payment totals by method for a given period. Collection: companies/{companyId}/paymentSummaries/{period}. Server-owned \u2014 all fields are set by Cloud Function triggers on Order.payments[] and CustomerPayment writes. Clients must never write to this collection.",
4027
4519
  "x-status": "proposed"
4028
- },
4029
- "pending-issue": {
4030
- "type": "string",
4031
- "enum": [
4032
- "PAYMENT_PROOF_PENDING",
4033
- "PAYMENT_PROOF_REJECTED",
4034
- "AMOUNT_DISCREPANCY",
4035
- "RETURN_UNRESOLVED",
4036
- "OVERDUE_DELIVERY",
4037
- "SESSION_OVERDUE",
4038
- "PAYMENT_INCOMPLETE",
4039
- "CANCELLATION_REQUESTED",
4040
- "UNREFUNDED_CANCELLATION",
4041
- "UPCOMING_UNPAID",
4042
- "NO_SHOW_UNRESOLVED"
4043
- ],
4044
- "description": "Specific detected conditions on an Order or Booking requiring human action (D39). Stored as an array \u2014 multiple issues can be active simultaneously. Server-owned.",
4045
- "x-note": "Shared: PAYMENT_PROOF_PENDING (proof uploaded, awaiting review), PAYMENT_PROOF_REJECTED (proof rejected, needs resubmission), AMOUNT_DISCREPANCY (amountPaid does not reconcile with amount/paymentStatus). Order-only: RETURN_UNRESOLVED (return/exchange stuck), OVERDUE_DELIVERY (estimatedDeliveryDate past, not yet delivered). Booking-only: SESSION_OVERDUE (session date passed, status not updated), PAYMENT_INCOMPLETE (sessions completed but payment not recorded), CANCELLATION_REQUESTED (cancellation not actioned), UNREFUNDED_CANCELLATION (cancelled with amountPaid > 0 and no refund), UPCOMING_UNPAID (session within 48h, payment not recorded), NO_SHOW_UNRESOLVED (no-show without follow-up).",
4046
- "x-see": {
4047
- "decisions": [
4048
- "D39"
4049
- ]
4050
- },
4051
- "x-when": "Set and cleared by server automation or triggers. Never affects pendingOrdersCount or pendingBookingsCount \u2014 orthogonal to urgency. Multiple values can be active at once (stored as PendingIssue[] on Order/Booking).",
4052
- "x-status": "proposed"
4053
4520
  }
4054
4521
  }
4055
4522
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ingenx-io/valets-schema-mcp-server",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "MCP server exposing @valets/schema documentation to AI agents",
5
5
  "type": "module",
6
6
  "main": "index.js",