@pam-ai/pam-ordo-contracts 3.35.0 → 3.37.0

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.
@@ -263,6 +263,26 @@ export interface paths {
263
263
  patch?: never;
264
264
  trace?: never;
265
265
  };
266
+ "/v1/inbox/ro-snooze-settings": {
267
+ parameters: {
268
+ query?: never;
269
+ header?: never;
270
+ path?: never;
271
+ cookie?: never;
272
+ };
273
+ /**
274
+ * Read the authenticated User's Repair Order auto-snooze preferences
275
+ * @description Returns whether Ordo snoozes the caller's owned work automatically when a Repair Order opens or closes at the selected rooftop. Values the User has never set report the product defaults: snooze on RO open, do not snooze on RO close. An auto-snooze has no scheduled return; the work comes back when the Customer writes, and a Repair Order close wakes it unless the close preference is on.
276
+ */
277
+ get: operations["getRoSnoozeSettings"];
278
+ put?: never;
279
+ post?: never;
280
+ delete?: never;
281
+ options?: never;
282
+ head?: never;
283
+ patch?: never;
284
+ trace?: never;
285
+ };
266
286
  "/v1/inbox/commands/create-customer": {
267
287
  parameters: {
268
288
  query?: never;
@@ -627,6 +647,26 @@ export interface paths {
627
647
  patch?: never;
628
648
  trace?: never;
629
649
  };
650
+ "/v1/inbox/commands/set-ro-snooze-preference": {
651
+ parameters: {
652
+ query?: never;
653
+ header?: never;
654
+ path?: never;
655
+ cookie?: never;
656
+ };
657
+ get?: never;
658
+ put?: never;
659
+ /**
660
+ * Set the authenticated User's rooftop-specific Repair Order auto-snooze preferences
661
+ * @description Replaces both preferences for the caller at the selected rooftop. Only work the User owns when the Repair Order transition arrives is affected, and only transitions accepted after the change. Reusing an operationId with a different payload returns a conflict.
662
+ */
663
+ post: operations["setRoSnoozePreference"];
664
+ delete?: never;
665
+ options?: never;
666
+ head?: never;
667
+ patch?: never;
668
+ trace?: never;
669
+ };
630
670
  "/v1/inbox/commands/register-desktop-push-subscription": {
631
671
  parameters: {
632
672
  query?: never;
@@ -1561,6 +1601,8 @@ export interface components {
1561
1601
  kind: string;
1562
1602
  /** @description Optional terminal outcome for a call or voicemail Interaction, carried from the source record. Older calls and sources without an authoritative outcome omit it. A reader must not infer answered from absence or from the Interaction kind alone. */
1563
1603
  callOutcome?: components["schemas"]["CallTerminalOutcomeV1"];
1604
+ /** @description Present only when the source marked this Interaction as sent automatically. Absent means a person wrote it or the source did not say. */
1605
+ automation?: components["schemas"]["InteractionAutomationV1"];
1564
1606
  channel?: string | null;
1565
1607
  /** @enum {string} */
1566
1608
  direction: "INBOUND" | "OUTBOUND" | "INTERNAL";
@@ -1952,8 +1994,19 @@ export interface components {
1952
1994
  recipientUserExternalId?: string;
1953
1995
  /** @description Optional terminal telephony outcome for kind call or voicemail. Producers must not infer it from a transient ringing state or from an absent recording. Missing means outcome was not authoritatively established, not that the call was answered. Existing voicemail producers may omit it during the additive rollout. */
1954
1996
  callOutcome?: components["schemas"]["CallTerminalOutcomeV1"];
1997
+ /** @description Set by the producer that generated the message automatically. Omit it for a message a person wrote, even one sent under an advisor's name. */
1998
+ automation?: components["schemas"]["InteractionAutomationV1"];
1955
1999
  dynamoLocator?: components["schemas"]["ProducerDynamoLocatorV1"];
1956
2000
  };
2001
+ /** @description Marks an Interaction a system sent automatically, so consumers never infer it from the body or the sender. `ro_status_text` is the Repair Order status text sent to the Customer under the advisor's name when an RO opens or is finished; Ordo auto-snoozes the owner's work on it when the owner asked for that. */
2002
+ InteractionAutomationV1: {
2003
+ /** @enum {string} */
2004
+ kind: "ro_status_text";
2005
+ /** @enum {string} */
2006
+ repairOrderTransition: "RO_OPENED" | "RO_CLOSED";
2007
+ /** @description The DMS appointment the text was about, when the producer knows it. */
2008
+ externalAppointmentId?: string;
2009
+ };
1957
2010
  ProducerRepairOrderTransitionV1: {
1958
2011
  /** @enum {string} */
1959
2012
  transition: "RO_OPENED" | "RO_CLOSED";
@@ -2259,6 +2312,14 @@ export interface components {
2259
2312
  /** @description Explicit User setting, or null to inherit the rooftop default. */
2260
2313
  override: boolean | null;
2261
2314
  };
2315
+ SetRoSnoozePreferenceCommand: {
2316
+ operationId: string;
2317
+ clientOrgId: string;
2318
+ /** @description Snooze owned work when a Repair Order opens on it. */
2319
+ autoSnoozeNewRo: boolean;
2320
+ /** @description Snooze owned open work when its Repair Order closes, and keep snoozed work snoozed instead of waking it. */
2321
+ autoSnoozeClosedRo: boolean;
2322
+ };
2262
2323
  WebPushSubscriptionKeys: {
2263
2324
  p256dh: string;
2264
2325
  auth: string;
@@ -2706,6 +2767,23 @@ export interface components {
2706
2767
  effectiveEnabled: boolean;
2707
2768
  };
2708
2769
  };
2770
+ RoSnoozeSettingsResponse: {
2771
+ data: {
2772
+ clientOrgId: string;
2773
+ autoSnoozeNewRo: boolean;
2774
+ autoSnoozeClosedRo: boolean;
2775
+ };
2776
+ };
2777
+ RoSnoozePreferenceResult: {
2778
+ data: {
2779
+ operationId: string;
2780
+ applied: boolean;
2781
+ replayed: boolean;
2782
+ clientOrgId: string;
2783
+ autoSnoozeNewRo: boolean;
2784
+ autoSnoozeClosedRo: boolean;
2785
+ };
2786
+ };
2709
2787
  DesktopPushSubscriptionResult: {
2710
2788
  data: {
2711
2789
  operationId: string;
@@ -2831,6 +2909,16 @@ export interface components {
2831
2909
  "application/json": components["schemas"]["DesktopNotificationPreferenceResult"];
2832
2910
  };
2833
2911
  };
2912
+ /** @description Applied or idempotently replayed Repair Order auto-snooze preferences. */
2913
+ RoSnoozePreferenceApplied: {
2914
+ headers: {
2915
+ "x-correlation-id": components["headers"]["CorrelationId"];
2916
+ [name: string]: unknown;
2917
+ };
2918
+ content: {
2919
+ "application/json": components["schemas"]["RoSnoozePreferenceResult"];
2920
+ };
2921
+ };
2834
2922
  /** @description Registered, refreshed, or idempotently replayed browser subscription. */
2835
2923
  DesktopPushSubscriptionRegistered: {
2836
2924
  headers: {
@@ -3058,6 +3146,11 @@ export interface components {
3058
3146
  "application/json": components["schemas"]["SetDesktopNotificationPreferenceCommand"];
3059
3147
  };
3060
3148
  };
3149
+ SetRoSnoozePreferenceCommand: {
3150
+ content: {
3151
+ "application/json": components["schemas"]["SetRoSnoozePreferenceCommand"];
3152
+ };
3153
+ };
3061
3154
  RegisterDesktopPushSubscriptionCommand: {
3062
3155
  content: {
3063
3156
  "application/json": components["schemas"]["RegisterDesktopPushSubscriptionCommand"];
@@ -3526,10 +3619,13 @@ export interface operations {
3526
3619
  * @description Narrow to Customers by the state of their car, using the same three values and the same meanings as the Conversation list: OPEN is a currently active repair order, CLOSED has had one and has none now, NONE never had one.
3527
3620
  * This is what makes an omitted query answerable. "Everyone with a car in the shop right now" is a question an advisor actually has, and it is bounded by the service drive rather than by the size of the rooftop; "everyone" is not, which is why browsing without either a query or a roState is refused.
3528
3621
  * An EMPTY ARRAY IS A 400, not an unfiltered browse. Presence is not a filter: `?roState=` names no state, so it would satisfy the at-least-one rule while asking for exactly the unbounded page that rule exists to refuse — and it is the shape a client reaches by serialising an empty selection rather than omitting the parameter, so it arrives by accident rather than by intent.
3622
+ * CLOSED AND NONE ARE MINE-ONLY BROWSES (since 3.36.0). They are accepted only without a query and with relationship=MINE, where the reader's own Conversations bound the answer: an advisor's book is a list somebody can open onto, and "every Customer at the rooftop who has no car in the shop" is not. The same states with EVERYONE or ALL, or alongside a query, remain a 400. A MINE browse considers at most the reader's 2,000 most recently assigned owned Conversations.
3529
3623
  */
3530
3624
  roState?: ("OPEN" | "CLOSED" | "NONE")[];
3531
3625
  /**
3532
- * @description RECENT_REPAIR_ORDER puts the most recently opened repair order first, which is the order a service drive works in — the car that just arrived is the call that has not been made yet. NAME is the stable alphabetical order a search result wants.
3626
+ * @description RECENT_REPAIR_ORDER puts the most recent repair order first, which is the order a service drive works in — the car that just arrived is the call that has not been made yet. NAME is the stable alphabetical order a search result wants.
3627
+ * Recency is the repair order's appointment date, then when PAM first recorded it. Not openedAt: most source systems never report one, and an order nobody can rank would sort as noise. On a MINE browse that spans several roState values, Customers with an OPEN order come first, then CLOSED by their latest order, then NONE; each group is newest first.
3628
+ * A BROWSE IS ONLY EVER RANKED BY RECENCY (since 3.36.0). Without a query there is no name the reader typed to put first, and the directory pages a browse in repair-order order, so sort=NAME without a query is a 400 rather than a request that is silently answered in another order.
3533
3629
  * Defaults to NAME when a query is given and RECENT_REPAIR_ORDER when one is not, because a browse has no relevance to fall back on.
3534
3630
  */
3535
3631
  sort?: "NAME" | "RECENT_REPAIR_ORDER";
@@ -3628,6 +3724,34 @@ export interface operations {
3628
3724
  503: components["responses"]["ServiceUnavailable"];
3629
3725
  };
3630
3726
  };
3727
+ getRoSnoozeSettings: {
3728
+ parameters: {
3729
+ query?: never;
3730
+ header: {
3731
+ /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
3732
+ "x-client-org-id": components["parameters"]["ClientOrgId"];
3733
+ };
3734
+ path?: never;
3735
+ cookie?: never;
3736
+ };
3737
+ requestBody?: never;
3738
+ responses: {
3739
+ /** @description Effective Repair Order auto-snooze preferences for the selected rooftop. */
3740
+ 200: {
3741
+ headers: {
3742
+ "x-correlation-id": components["headers"]["CorrelationId"];
3743
+ [name: string]: unknown;
3744
+ };
3745
+ content: {
3746
+ "application/json": components["schemas"]["RoSnoozeSettingsResponse"];
3747
+ };
3748
+ };
3749
+ 401: components["responses"]["Unauthorized"];
3750
+ 403: components["responses"]["Forbidden"];
3751
+ 500: components["responses"]["InternalError"];
3752
+ 503: components["responses"]["ServiceUnavailable"];
3753
+ };
3754
+ };
3631
3755
  createInboxCustomer: {
3632
3756
  parameters: {
3633
3757
  query?: never;
@@ -4080,6 +4204,27 @@ export interface operations {
4080
4204
  503: components["responses"]["ServiceUnavailable"];
4081
4205
  };
4082
4206
  };
4207
+ setRoSnoozePreference: {
4208
+ parameters: {
4209
+ query?: never;
4210
+ header: {
4211
+ /** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
4212
+ "x-client-org-id": components["parameters"]["ClientOrgId"];
4213
+ };
4214
+ path?: never;
4215
+ cookie?: never;
4216
+ };
4217
+ requestBody: components["requestBodies"]["SetRoSnoozePreferenceCommand"];
4218
+ responses: {
4219
+ 200: components["responses"]["RoSnoozePreferenceApplied"];
4220
+ 400: components["responses"]["BadRequest"];
4221
+ 401: components["responses"]["Unauthorized"];
4222
+ 403: components["responses"]["Forbidden"];
4223
+ 409: components["responses"]["Conflict"];
4224
+ 500: components["responses"]["InternalError"];
4225
+ 503: components["responses"]["ServiceUnavailable"];
4226
+ };
4227
+ };
4083
4228
  registerDesktopPushSubscription: {
4084
4229
  parameters: {
4085
4230
  query?: never;