@happyvertical/smrt-projects 0.39.4 → 0.39.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/AGENTS.md +36 -1
  2. package/SERVICE_TIME_MIGRATION.md +23 -0
  3. package/dist/collections/DevelopmentRequestHistories.d.ts +7 -0
  4. package/dist/collections/DevelopmentRequestHistories.d.ts.map +1 -0
  5. package/dist/collections/DevelopmentRequests.d.ts +20 -0
  6. package/dist/collections/DevelopmentRequests.d.ts.map +1 -0
  7. package/dist/collections/ProjectIntegrationAudits.d.ts +7 -0
  8. package/dist/collections/ProjectIntegrationAudits.d.ts.map +1 -0
  9. package/dist/collections/ProjectIntegrations.d.ts +28 -0
  10. package/dist/collections/ProjectIntegrations.d.ts.map +1 -0
  11. package/dist/index.d.ts +13 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1673 -33
  14. package/dist/index.js.map +1 -1
  15. package/dist/managed-client.d.ts +13 -0
  16. package/dist/managed-client.d.ts.map +1 -0
  17. package/dist/manifest.json +4790 -1109
  18. package/dist/models/DevelopmentRequest.d.ts +35 -0
  19. package/dist/models/DevelopmentRequest.d.ts.map +1 -0
  20. package/dist/models/DevelopmentRequestHistory.d.ts +22 -0
  21. package/dist/models/DevelopmentRequestHistory.d.ts.map +1 -0
  22. package/dist/models/ProjectIntegration.d.ts +24 -0
  23. package/dist/models/ProjectIntegration.d.ts.map +1 -0
  24. package/dist/models/ProjectIntegrationAudit.d.ts +16 -0
  25. package/dist/models/ProjectIntegrationAudit.d.ts.map +1 -0
  26. package/dist/models/delivery-control-plane.d.ts +83 -0
  27. package/dist/models/delivery-control-plane.d.ts.map +1 -0
  28. package/dist/models/service-evidence.d.ts +79 -0
  29. package/dist/models/service-evidence.d.ts.map +1 -0
  30. package/dist/services/assistance-request-service.d.ts +45 -0
  31. package/dist/services/assistance-request-service.d.ts.map +1 -0
  32. package/dist/services/delivery-service.d.ts +55 -0
  33. package/dist/services/delivery-service.d.ts.map +1 -0
  34. package/dist/services/development-request-service.d.ts +61 -0
  35. package/dist/services/development-request-service.d.ts.map +1 -0
  36. package/dist/services/index.d.ts +6 -0
  37. package/dist/services/index.d.ts.map +1 -0
  38. package/dist/services/service-evidence-service.d.ts +48 -0
  39. package/dist/services/service-evidence-service.d.ts.map +1 -0
  40. package/dist/services/subscription-commercial-resolver.d.ts +17 -0
  41. package/dist/services/subscription-commercial-resolver.d.ts.map +1 -0
  42. package/dist/smrt-knowledge.json +1823 -148
  43. package/dist/svelte/AssistanceLauncher.svelte +96 -0
  44. package/dist/svelte/AssistanceLauncher.svelte.d.ts +12 -0
  45. package/dist/svelte/AssistanceLauncher.svelte.d.ts.map +1 -0
  46. package/dist/svelte/DeliveryStatus.svelte +71 -0
  47. package/dist/svelte/DeliveryStatus.svelte.d.ts +8 -0
  48. package/dist/svelte/DeliveryStatus.svelte.d.ts.map +1 -0
  49. package/dist/svelte/DevelopmentBoard.svelte +103 -0
  50. package/dist/svelte/DevelopmentBoard.svelte.d.ts +10 -0
  51. package/dist/svelte/DevelopmentBoard.svelte.d.ts.map +1 -0
  52. package/dist/svelte/DevelopmentRequestDetail.svelte +92 -0
  53. package/dist/svelte/DevelopmentRequestDetail.svelte.d.ts +9 -0
  54. package/dist/svelte/DevelopmentRequestDetail.svelte.d.ts.map +1 -0
  55. package/dist/svelte/PreviewApprovalPanel.svelte +63 -0
  56. package/dist/svelte/PreviewApprovalPanel.svelte.d.ts +10 -0
  57. package/dist/svelte/PreviewApprovalPanel.svelte.d.ts.map +1 -0
  58. package/dist/svelte/ServiceEvidenceList.svelte +103 -0
  59. package/dist/svelte/ServiceEvidenceList.svelte.d.ts +8 -0
  60. package/dist/svelte/ServiceEvidenceList.svelte.d.ts.map +1 -0
  61. package/dist/svelte/components/DevelopmentRequestForm.svelte +70 -0
  62. package/dist/svelte/components/DevelopmentRequestForm.svelte.d.ts +19 -0
  63. package/dist/svelte/components/DevelopmentRequestForm.svelte.d.ts.map +1 -0
  64. package/dist/svelte/components/DevelopmentRequestList.svelte +218 -0
  65. package/dist/svelte/components/DevelopmentRequestList.svelte.d.ts +22 -0
  66. package/dist/svelte/components/DevelopmentRequestList.svelte.d.ts.map +1 -0
  67. package/dist/svelte/components/__tests__/DeliverySurfaces.test.js +98 -0
  68. package/dist/svelte/components/__tests__/DevelopmentRequest.test.js +52 -0
  69. package/dist/svelte/delivery-types.d.ts +36 -0
  70. package/dist/svelte/delivery-types.d.ts.map +1 -0
  71. package/dist/svelte/delivery-types.js +1 -0
  72. package/dist/svelte/i18n.d.ts +30 -0
  73. package/dist/svelte/i18n.d.ts.map +1 -1
  74. package/dist/svelte/i18n.js +30 -0
  75. package/dist/svelte/index.d.ts +18 -1
  76. package/dist/svelte/index.d.ts.map +1 -1
  77. package/dist/svelte/index.js +18 -1
  78. package/dist/types.d.ts +79 -0
  79. package/dist/types.d.ts.map +1 -1
  80. package/dist/ui.d.ts.map +1 -1
  81. package/dist/ui.js +106 -10
  82. package/dist/ui.js.map +1 -1
  83. package/package.json +11 -9
@@ -0,0 +1,35 @@
1
+ import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core';
2
+ import { DevelopmentRequestEvidence, DevelopmentRequestOrigin, DevelopmentRequestStatus, DevelopmentRequestType, DevelopmentRequestVisibility } from '../types';
3
+ export interface DevelopmentRequestOptions extends SmrtObjectOptions {
4
+ tenantId?: string;
5
+ projectId?: string;
6
+ integrationId?: string;
7
+ requesterId?: string;
8
+ participantId?: string;
9
+ type?: DevelopmentRequestType;
10
+ description?: string;
11
+ evidence?: DevelopmentRequestEvidence[] | string;
12
+ visibility?: DevelopmentRequestVisibility;
13
+ origin?: DevelopmentRequestOrigin;
14
+ discussion?: string;
15
+ status?: DevelopmentRequestStatus;
16
+ }
17
+ export declare class DevelopmentRequest extends SmrtObject {
18
+ tenantId: string;
19
+ projectId: string;
20
+ integrationId: string;
21
+ requesterId: string;
22
+ participantId: string;
23
+ type: DevelopmentRequestType;
24
+ description: string;
25
+ evidence: string;
26
+ visibility: DevelopmentRequestVisibility;
27
+ origin: DevelopmentRequestOrigin;
28
+ discussion: string;
29
+ status: DevelopmentRequestStatus;
30
+ constructor(options?: DevelopmentRequestOptions);
31
+ initialize(): Promise<this>;
32
+ getEvidence(): DevelopmentRequestEvidence[];
33
+ setEvidence(value: DevelopmentRequestEvidence[] | string): void;
34
+ }
35
+ //# sourceMappingURL=DevelopmentRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevelopmentRequest.d.ts","sourceRoot":"","sources":["../../src/models/DevelopmentRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,0BAA0B,EAAE,GAAG,MAAM,CAAC;IACjD,UAAU,CAAC,EAAE,4BAA4B,CAAC;IAC1C,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,wBAAwB,CAAC;CACnC;AAuCD,qBASa,kBAAmB,SAAQ,UAAU;IAEhD,QAAQ,EAAE,MAAM,CAAM;IAEtB,SAAS,EAAE,MAAM,CAAM;IAGvB,aAAa,EAAE,MAAM,CAAM;IAE3B,WAAW,EAAE,MAAM,CAAM;IAEzB,aAAa,EAAE,MAAM,CAAM;IAE3B,IAAI,EAAE,sBAAsB,CAAa;IAEzC,WAAW,EAAE,MAAM,CAAM;IAEzB,QAAQ,EAAE,MAAM,CAAQ;IAExB,UAAU,EAAE,4BAA4B,CAAe;IAEvD,MAAM,EAAE,wBAAwB,CAAiB;IAEjD,UAAU,EAAE,MAAM,CAAM;IAExB,MAAM,EAAE,wBAAwB,CAAe;gBAEnC,OAAO,GAAE,yBAA8B;IAoB7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjD,WAAW,IAAI,0BAA0B,EAAE;IAI3C,WAAW,CAAC,KAAK,EAAE,0BAA0B,EAAE,GAAG,MAAM,GAAG,IAAI;CAIhE"}
@@ -0,0 +1,22 @@
1
+ import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core';
2
+ import { DevelopmentRequestStatus } from '../types';
3
+ export interface DevelopmentRequestHistoryOptions extends SmrtObjectOptions {
4
+ tenantId?: string;
5
+ requestId?: string;
6
+ fromStatus?: string;
7
+ toStatus?: DevelopmentRequestStatus;
8
+ actorType?: 'integration' | 'participant' | 'system';
9
+ actorId?: string;
10
+ note?: string | null;
11
+ }
12
+ export declare class DevelopmentRequestHistory extends SmrtObject {
13
+ tenantId: string;
14
+ requestId: string;
15
+ fromStatus: string;
16
+ toStatus: DevelopmentRequestStatus;
17
+ actorType: 'integration' | 'participant' | 'system';
18
+ actorId: string;
19
+ note: string | null;
20
+ constructor(options?: DevelopmentRequestHistoryOptions);
21
+ }
22
+ //# sourceMappingURL=DevelopmentRequestHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevelopmentRequestHistory.d.ts","sourceRoot":"","sources":["../../src/models/DevelopmentRequestHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD,MAAM,WAAW,gCAAiC,SAAQ,iBAAiB;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,SAAS,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAC;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,qBAOa,yBAA0B,SAAQ,UAAU;IAEvD,QAAQ,EAAE,MAAM,CAAM;IAGtB,SAAS,EAAE,MAAM,CAAM;IAEvB,UAAU,EAAE,MAAM,CAAM;IAExB,QAAQ,EAAE,wBAAwB,CAAe;IAEjD,SAAS,EAAE,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAY;IAE/D,OAAO,EAAE,MAAM,CAAM;IAErB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEf,OAAO,GAAE,gCAAqC;CAU3D"}
@@ -0,0 +1,24 @@
1
+ import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core';
2
+ import { ProjectIntegrationCapability, ProjectIntegrationStatus } from '../types';
3
+ export interface ProjectIntegrationOptions extends SmrtObjectOptions {
4
+ tenantId?: string;
5
+ projectId?: string;
6
+ name?: string;
7
+ credentialHash?: string;
8
+ capabilities?: ProjectIntegrationCapability[];
9
+ status?: ProjectIntegrationStatus;
10
+ revokedAt?: Date | null;
11
+ }
12
+ export declare class ProjectIntegration extends SmrtObject {
13
+ tenantId: string;
14
+ projectId: string;
15
+ name: string;
16
+ credentialHash: string;
17
+ capabilities: ProjectIntegrationCapability[];
18
+ status: ProjectIntegrationStatus;
19
+ revokedAt: Date | null;
20
+ constructor(options?: ProjectIntegrationOptions);
21
+ hasCapability(capability: ProjectIntegrationCapability): boolean;
22
+ isActive(): boolean;
23
+ }
24
+ //# sourceMappingURL=ProjectIntegration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectIntegration.d.ts","sourceRoot":"","sources":["../../src/models/ProjectIntegration.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,4BAA4B,EAC5B,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,4BAA4B,EAAE,CAAC;IAC9C,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB;AAED,qBAQa,kBAAmB,SAAQ,UAAU;IAEhD,QAAQ,EAAE,MAAM,CAAM;IAEtB,SAAS,EAAE,MAAM,CAAM;IAEvB,IAAI,EAAE,MAAM,CAAM;IAGlB,cAAc,EAAE,MAAM,CAAM;IAE5B,YAAY,EAAE,4BAA4B,EAAE,CAAM;IAElD,MAAM,EAAE,wBAAwB,CAAY;IAE5C,SAAS,EAAE,IAAI,GAAG,IAAI,CAAQ;gBAElB,OAAO,GAAE,yBAA8B;IAanD,aAAa,CAAC,UAAU,EAAE,4BAA4B,GAAG,OAAO;IAIhE,QAAQ,IAAI,OAAO;CAGpB"}
@@ -0,0 +1,16 @@
1
+ import { SmrtObject, SmrtObjectOptions } from '@happyvertical/smrt-core';
2
+ import { ProjectIntegrationAuditAction } from '../types';
3
+ export interface ProjectIntegrationAuditOptions extends SmrtObjectOptions {
4
+ tenantId?: string;
5
+ integrationId?: string;
6
+ action?: ProjectIntegrationAuditAction;
7
+ note?: string | null;
8
+ }
9
+ export declare class ProjectIntegrationAudit extends SmrtObject {
10
+ tenantId: string;
11
+ integrationId: string;
12
+ action: ProjectIntegrationAuditAction;
13
+ note: string | null;
14
+ constructor(options?: ProjectIntegrationAuditOptions);
15
+ }
16
+ //# sourceMappingURL=ProjectIntegrationAudit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectIntegrationAudit.d.ts","sourceRoot":"","sources":["../../src/models/ProjectIntegrationAudit.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,8BAA+B,SAAQ,iBAAiB;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,6BAA6B,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,qBAOa,uBAAwB,SAAQ,UAAU;IAErD,QAAQ,EAAE,MAAM,CAAM;IAGtB,aAAa,EAAE,MAAM,CAAM;IAE3B,MAAM,EAAE,6BAA6B,CAAa;IAElD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEf,OAAO,GAAE,8BAAmC;CAQzD"}
@@ -0,0 +1,83 @@
1
+ import { SmrtCollection, SmrtObject } from '@happyvertical/smrt-core';
2
+ import { AssistanceClassification, DeliveryEventType } from '../types.js';
3
+ export declare function parseProjectJson<T>(value: string, fallback: T): T;
4
+ /** Provider-neutral connection from a Development Request to canonical work. */
5
+ export declare class DevelopmentRequestWorkLink extends SmrtObject {
6
+ tenantId: string;
7
+ requestId: string;
8
+ workItemType: string;
9
+ workItemId: string;
10
+ canonicalStatus: string;
11
+ providerRef: string;
12
+ metadata: string;
13
+ lastProjectedAt: Date | null;
14
+ }
15
+ /** Ordered, idempotent delivery update emitted by the control plane. */
16
+ export declare class ProjectDeliveryEvent extends SmrtObject {
17
+ tenantId: string;
18
+ integrationId: string;
19
+ requestId: string;
20
+ idempotencyKey: string;
21
+ sequence: number;
22
+ type: DeliveryEventType;
23
+ payload: string;
24
+ occurredAt: Date;
25
+ deliveredAt: Date | null;
26
+ deliveryAttempts: number;
27
+ lastDeliveryError: string;
28
+ }
29
+ /** Client decision state for one preview produced during delivery. */
30
+ export declare class PreviewApproval extends SmrtObject {
31
+ tenantId: string;
32
+ requestId: string;
33
+ previewId: string;
34
+ previewUrl: string;
35
+ status: 'pending' | 'approved' | 'rejected' | 'stale';
36
+ decidedByRef: string;
37
+ reason: string;
38
+ createdAt: Date;
39
+ decidedAt: Date | null;
40
+ staleAt: Date | null;
41
+ }
42
+ /** Lossless conversational intake before support/development classification. */
43
+ export declare class AssistanceRequest extends SmrtObject {
44
+ tenantId: string;
45
+ integrationId: string;
46
+ requesterId: string;
47
+ subject: string;
48
+ applicationContext: string;
49
+ conversation: string;
50
+ evidence: string;
51
+ classification: AssistanceClassification;
52
+ supportCaseId: string;
53
+ developmentRequestId: string;
54
+ deliveryHandoffLinkedAt: Date | null;
55
+ createdAt: Date;
56
+ }
57
+ /** Append-only explanation of Assistance Request routing decisions. */
58
+ export declare class AssistanceRequestEvent extends SmrtObject {
59
+ tenantId: string;
60
+ assistanceRequestId: string;
61
+ priorClassification: AssistanceClassification;
62
+ resultingClassification: AssistanceClassification;
63
+ actorRef: string;
64
+ reason: string;
65
+ resultingLinks: string;
66
+ occurredAt: Date;
67
+ }
68
+ export declare class DevelopmentRequestWorkLinkCollection extends SmrtCollection<DevelopmentRequestWorkLink> {
69
+ static readonly _itemClass: typeof DevelopmentRequestWorkLink;
70
+ }
71
+ export declare class ProjectDeliveryEventCollection extends SmrtCollection<ProjectDeliveryEvent> {
72
+ static readonly _itemClass: typeof ProjectDeliveryEvent;
73
+ }
74
+ export declare class PreviewApprovalCollection extends SmrtCollection<PreviewApproval> {
75
+ static readonly _itemClass: typeof PreviewApproval;
76
+ }
77
+ export declare class AssistanceRequestCollection extends SmrtCollection<AssistanceRequest> {
78
+ static readonly _itemClass: typeof AssistanceRequest;
79
+ }
80
+ export declare class AssistanceRequestEventCollection extends SmrtCollection<AssistanceRequestEvent> {
81
+ static readonly _itemClass: typeof AssistanceRequestEvent;
82
+ }
83
+ //# sourceMappingURL=delivery-control-plane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-control-plane.d.ts","sourceRoot":"","sources":["../../src/models/delivery-control-plane.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { SmrtCollection, SmrtObject } from '@happyvertical/smrt-core';
2
+ import { ServiceEvidence, ServiceParticipantKind, ServiceTimeEntrySource, ServiceTimeEntryStatus } from '../types.js';
3
+ /**
4
+ * Canonical Professional Service evidence shared by planning, development,
5
+ * and support. Commercial snapshots are deliberately separate models.
6
+ */
7
+ export declare class ServiceTimeEntry extends SmrtObject {
8
+ tenantId: string | null;
9
+ caseId: string | null;
10
+ workRefType: string | null;
11
+ workRefId: string | null;
12
+ specialistId: string | null;
13
+ participantKind: ServiceParticipantKind;
14
+ participantProfileId: string | null;
15
+ agentRef: string;
16
+ source: ServiceTimeEntrySource;
17
+ description: string;
18
+ startedAt: Date | null;
19
+ endedAt: Date | null;
20
+ durationSeconds: number;
21
+ evidence: string;
22
+ status: ServiceTimeEntryStatus;
23
+ submittedAt: Date | null;
24
+ submittedByProfileId: string | null;
25
+ approvedAt: Date | null;
26
+ approvedByProfileId: string | null;
27
+ approvalPath: string;
28
+ rejectedAt: Date | null;
29
+ rejectedByProfileId: string | null;
30
+ rejectionReason: string;
31
+ correctionOfId: string | null;
32
+ metadata: string;
33
+ getEvidence(): ServiceEvidence[];
34
+ setEvidence(value: ServiceEvidence[]): void;
35
+ getMetadata(): Record<string, unknown>;
36
+ setMetadata(value: Record<string, unknown>): void;
37
+ durationHours(): number;
38
+ initialize(): Promise<this>;
39
+ save(): Promise<this>;
40
+ private readPrior;
41
+ }
42
+ export declare class ServiceChargeSnapshot extends SmrtObject {
43
+ tenantId: string | null;
44
+ timeEntryId: string;
45
+ amount: number;
46
+ currency: string;
47
+ pricingVersion: string;
48
+ strategy: string;
49
+ rateSnapshot: string;
50
+ sourceChargeRef: string;
51
+ createdAt: Date;
52
+ initialize(): Promise<this>;
53
+ save(): Promise<this>;
54
+ }
55
+ export declare class ServiceCompensationSnapshot extends SmrtObject {
56
+ tenantId: string | null;
57
+ timeEntryId: string;
58
+ amount: number;
59
+ currency: string;
60
+ termsVersion: string;
61
+ rateSnapshot: string;
62
+ createdAt: Date;
63
+ initialize(): Promise<this>;
64
+ save(): Promise<this>;
65
+ }
66
+ export declare class ServiceTimeEntryCollection extends SmrtCollection<ServiceTimeEntry> {
67
+ static readonly _itemClass: typeof ServiceTimeEntry;
68
+ forWork(workRefType: string, workRefId: string): Promise<ServiceTimeEntry[]>;
69
+ forCase(caseId: string): Promise<ServiceTimeEntry[]>;
70
+ forSpecialist(specialistId: string): Promise<ServiceTimeEntry[]>;
71
+ pendingApproval(): Promise<ServiceTimeEntry[]>;
72
+ }
73
+ export declare class ServiceChargeSnapshotCollection extends SmrtCollection<ServiceChargeSnapshot> {
74
+ static readonly _itemClass: typeof ServiceChargeSnapshot;
75
+ }
76
+ export declare class ServiceCompensationSnapshotCollection extends SmrtCollection<ServiceCompensationSnapshot> {
77
+ static readonly _itemClass: typeof ServiceCompensationSnapshot;
78
+ }
79
+ //# sourceMappingURL=service-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-evidence.d.ts","sourceRoot":"","sources":["../../src/models/service-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { SmrtClassOptions } from '@happyvertical/smrt-core';
2
+ import { DevelopmentRequestCollection } from '../collections/DevelopmentRequests.js';
3
+ import { ProjectIntegrationCollection } from '../collections/ProjectIntegrations.js';
4
+ import { AssistanceRequest, AssistanceRequestCollection, AssistanceRequestEventCollection } from '../models/delivery-control-plane.js';
5
+ import { ProjectIntegration } from '../models/ProjectIntegration.js';
6
+ import { AssistanceClassification, DevelopmentRequestEvidence, ManagedAssistanceRequestInput } from '../types.js';
7
+ export interface AssistanceSupportPort {
8
+ openOrJoin(input: {
9
+ assistanceRequestId: string;
10
+ tenantId: string;
11
+ projectId: string;
12
+ requesterId: string;
13
+ subject: string;
14
+ conversation: Record<string, unknown>[];
15
+ evidence: DevelopmentRequestEvidence[];
16
+ applicationContext: Record<string, unknown>;
17
+ }): Promise<{
18
+ caseId: string;
19
+ }>;
20
+ /** Implementations must treat this handoff as idempotent. */
21
+ linkDelivery?(input: {
22
+ tenantId: string;
23
+ caseId: string;
24
+ developmentRequestId: string;
25
+ }): Promise<void>;
26
+ }
27
+ export declare class AssistanceRequestService {
28
+ private readonly integrations;
29
+ private readonly development;
30
+ private readonly requests;
31
+ private readonly events;
32
+ private readonly support?;
33
+ constructor(integrations: ProjectIntegrationCollection, development: DevelopmentRequestCollection, requests: AssistanceRequestCollection, events: AssistanceRequestEventCollection, support?: AssistanceSupportPort | undefined);
34
+ static create(options?: SmrtClassOptions, dependencies?: {
35
+ support?: AssistanceSupportPort;
36
+ }): Promise<AssistanceRequestService>;
37
+ createRequest(integration: ProjectIntegration, input: ManagedAssistanceRequestInput): Promise<AssistanceRequest>;
38
+ classify(integration: ProjectIntegration, request: AssistanceRequest, input: {
39
+ classification: Exclude<AssistanceClassification, 'unclassified'>;
40
+ actorRef: string;
41
+ reason: string;
42
+ developmentType?: string;
43
+ }): Promise<AssistanceRequest>;
44
+ }
45
+ //# sourceMappingURL=assistance-request-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistance-request-service.d.ts","sourceRoot":"","sources":["../../src/services/assistance-request-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EACL,KAAK,iBAAiB,EACtB,2BAA2B,EAC3B,gCAAgC,EACjC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,KAAK,EAAE;QAChB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACxC,QAAQ,EAAE,0BAA0B,EAAE,CAAC;QACvC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC7C,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,6DAA6D;IAC7D,YAAY,CAAC,CAAC,KAAK,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,oBAAoB,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAJR,YAAY,EAAE,4BAA4B,EAC1C,WAAW,EAAE,4BAA4B,EACzC,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,gCAAgC,EACxC,OAAO,CAAC,EAAE,qBAAqB,YAAA;WAGrC,MAAM,CACjB,OAAO,GAAE,gBAAqB,EAC9B,YAAY,GAAE;QAAE,OAAO,CAAC,EAAE,qBAAqB,CAAA;KAAO,GACrD,OAAO,CAAC,wBAAwB,CAAC;IAiB9B,aAAa,CACjB,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,iBAAiB,CAAC;IA2BvB,QAAQ,CACZ,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE;QACL,cAAc,EAAE,OAAO,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC;QAClE,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GACA,OAAO,CAAC,iBAAiB,CAAC;CA8G9B"}
@@ -0,0 +1,55 @@
1
+ import { SmrtClassOptions } from '@happyvertical/smrt-core';
2
+ import { DevelopmentRequestCollection } from '../collections/DevelopmentRequests.js';
3
+ import { ProjectIntegrationCollection } from '../collections/ProjectIntegrations.js';
4
+ import { PreviewApproval, PreviewApprovalCollection, ProjectDeliveryEvent, ProjectDeliveryEventCollection } from '../models/delivery-control-plane.js';
5
+ import { ProjectIntegration } from '../models/ProjectIntegration.js';
6
+ import { DeliveryEventType } from '../types.js';
7
+ import { DevelopmentWorkAdapter } from './development-request-service.js';
8
+ export interface DeliveryEventSender {
9
+ send(event: ProjectDeliveryEvent): Promise<void>;
10
+ }
11
+ export interface ApprovalPolicy {
12
+ canApprove(input: {
13
+ integration: ProjectIntegration;
14
+ requestId: string;
15
+ previewId: string;
16
+ }): Promise<boolean>;
17
+ }
18
+ export declare class ProjectDeliveryService {
19
+ private readonly integrations;
20
+ private readonly requests;
21
+ private readonly events;
22
+ private readonly approvals;
23
+ private readonly workAdapter?;
24
+ private readonly approvalPolicy?;
25
+ constructor(integrations: ProjectIntegrationCollection, requests: DevelopmentRequestCollection, events: ProjectDeliveryEventCollection, approvals: PreviewApprovalCollection, workAdapter?: DevelopmentWorkAdapter | undefined, approvalPolicy?: ApprovalPolicy | undefined);
26
+ static create(options?: SmrtClassOptions, dependencies?: {
27
+ workAdapter?: DevelopmentWorkAdapter;
28
+ approvalPolicy?: ApprovalPolicy;
29
+ }): Promise<ProjectDeliveryService>;
30
+ record(input: {
31
+ integration: ProjectIntegration;
32
+ requestId: string;
33
+ idempotencyKey: string;
34
+ sequence: number;
35
+ type: DeliveryEventType;
36
+ payload: Record<string, unknown>;
37
+ occurredAt?: Date;
38
+ }): Promise<ProjectDeliveryEvent>;
39
+ private applySideEffects;
40
+ listForIntegration(integration: ProjectIntegration, requestId: string): Promise<ProjectDeliveryEvent[]>;
41
+ deliverPending(sender: DeliveryEventSender, tenantId: string, integrationId?: string): Promise<void>;
42
+ replay(sender: DeliveryEventSender, integration: ProjectIntegration, afterSequence?: number): Promise<void>;
43
+ decidePreview(integration: ProjectIntegration, preview: PreviewApproval, input: {
44
+ approved: boolean;
45
+ actorRef: string;
46
+ reason: string;
47
+ }): Promise<PreviewApproval>;
48
+ markPreviewStale(preview: PreviewApproval): Promise<PreviewApproval>;
49
+ private requestForIntegration;
50
+ private isLatestTerminalEvent;
51
+ private upsertPreview;
52
+ }
53
+ export declare function requireIntegrationCapability(integration: ProjectIntegration, capability: string): void;
54
+ export declare function requireActiveIntegrationCapability(integrations: ProjectIntegrationCollection, integration: ProjectIntegration, capability: string): Promise<ProjectIntegration>;
55
+ //# sourceMappingURL=delivery-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-service.d.ts","sourceRoot":"","sources":["../../src/services/delivery-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAErF,OAAO,EACL,KAAK,eAAe,EACpB,yBAAyB,EACzB,KAAK,oBAAoB,EACzB,8BAA8B,EAE/B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,KAAK,EAAE;QAChB,WAAW,EAAE,kBAAkB,CAAC;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBALf,YAAY,EAAE,4BAA4B,EAC1C,QAAQ,EAAE,4BAA4B,EACtC,MAAM,EAAE,8BAA8B,EACtC,SAAS,EAAE,yBAAyB,EACpC,WAAW,CAAC,EAAE,sBAAsB,YAAA,EACpC,cAAc,CAAC,EAAE,cAAc,YAAA;WAGrC,MAAM,CACjB,OAAO,GAAE,gBAAqB,EAC9B,YAAY,GAAE;QACZ,WAAW,CAAC,EAAE,sBAAsB,CAAC;QACrC,cAAc,CAAC,EAAE,cAAc,CAAC;KAC5B,GACL,OAAO,CAAC,sBAAsB,CAAC;IAkB5B,MAAM,CAAC,KAAK,EAAE;QAClB,WAAW,EAAE,kBAAkB,CAAC;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,iBAAiB,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,UAAU,CAAC,EAAE,IAAI,CAAC;KACnB,GAAG,OAAO,CAAC,oBAAoB,CAAC;YA4CnB,gBAAgB;IAuCxB,kBAAkB,CACtB,WAAW,EAAE,kBAAkB,EAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAe5B,cAAc,CAClB,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IA4BV,MAAM,CACV,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,kBAAkB,EAC/B,aAAa,SAAK,GACjB,OAAO,CAAC,IAAI,CAAC;IAiBV,aAAa,CACjB,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAC7D,OAAO,CAAC,eAAe,CAAC;IAsCrB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;YAS5D,qBAAqB;YAkBrB,qBAAqB;YAmBrB,aAAa;CA2B5B;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,MAAM,GACjB,IAAI,CAKN;AAED,wBAAsB,kCAAkC,CACtD,YAAY,EAAE,4BAA4B,EAC1C,WAAW,EAAE,kBAAkB,EAC/B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAS7B"}
@@ -0,0 +1,61 @@
1
+ import { SmrtClassOptions } from '@happyvertical/smrt-core';
2
+ import { DevelopmentRequestCollection } from '../collections/DevelopmentRequests.js';
3
+ import { DevelopmentRequest } from '../models/DevelopmentRequest.js';
4
+ import { DevelopmentRequestWorkLink, DevelopmentRequestWorkLinkCollection } from '../models/delivery-control-plane.js';
5
+ import { DevelopmentTriageDecision } from '../types.js';
6
+ export interface DevelopmentWorkItem {
7
+ type: string;
8
+ id: string;
9
+ canonicalStatus: string;
10
+ providerRef?: string;
11
+ metadata?: Record<string, unknown>;
12
+ }
13
+ export interface DevelopmentWorkAdapter {
14
+ createWorkItem(input: {
15
+ request: DevelopmentRequest;
16
+ idempotencyKey: string;
17
+ }): Promise<DevelopmentWorkItem>;
18
+ getWorkItem(link: DevelopmentRequestWorkLink): Promise<DevelopmentWorkItem>;
19
+ requestApproval?(input: {
20
+ request: DevelopmentRequest;
21
+ previewId: string;
22
+ /** Stable across retries; adapters must deduplicate this operation. */
23
+ idempotencyKey: string;
24
+ approved: boolean;
25
+ reason: string;
26
+ }): Promise<void>;
27
+ }
28
+ export interface DevelopmentViewer {
29
+ tenantId: string;
30
+ projectId: string;
31
+ requesterId?: string;
32
+ roles?: Array<'workspace' | 'project_team' | 'internal'>;
33
+ }
34
+ export declare class DevelopmentRequestService {
35
+ private readonly requests;
36
+ private readonly links;
37
+ readonly workAdapter?: DevelopmentWorkAdapter | undefined;
38
+ constructor(requests: DevelopmentRequestCollection, links: DevelopmentRequestWorkLinkCollection, workAdapter?: DevelopmentWorkAdapter | undefined);
39
+ static create(options?: SmrtClassOptions, workAdapter?: DevelopmentWorkAdapter): Promise<DevelopmentRequestService>;
40
+ /** Visibility is evaluated after tenant and project scoping. */
41
+ visibleFor(viewer: DevelopmentViewer): Promise<DevelopmentRequest[]>;
42
+ linksFor(request: DevelopmentRequest): Promise<DevelopmentRequestWorkLink[]>;
43
+ triage(request: DevelopmentRequest, input: {
44
+ decision: DevelopmentTriageDecision;
45
+ reason: string;
46
+ actorRef: string;
47
+ mergeIntoRequestId?: string;
48
+ split?: Array<{
49
+ description: string;
50
+ type?: string;
51
+ }>;
52
+ }): Promise<{
53
+ request: DevelopmentRequest;
54
+ links: DevelopmentRequestWorkLink[];
55
+ splitRequests: DevelopmentRequest[];
56
+ }>;
57
+ syncWorkStatus(link: DevelopmentRequestWorkLink): Promise<DevelopmentRequest>;
58
+ private transition;
59
+ private linkWork;
60
+ }
61
+ //# sourceMappingURL=development-request-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-request-service.d.ts","sourceRoot":"","sources":["../../src/services/development-request-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EACL,KAAK,0BAA0B,EAC/B,oCAAoC,EACrC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,KAAK,EAAE;QACpB,OAAO,EAAE,kBAAkB,CAAC;QAC5B,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjC,WAAW,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5E,eAAe,CAAC,CAAC,KAAK,EAAE;QACtB,OAAO,EAAE,kBAAkB,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC;QAClB,uEAAuE;QACvE,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG,cAAc,GAAG,UAAU,CAAC,CAAC;CAC1D;AAED,qBAAa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,sBAAsB;gBAF5B,QAAQ,EAAE,4BAA4B,EACtC,KAAK,EAAE,oCAAoC,EACnD,WAAW,CAAC,EAAE,sBAAsB,YAAA;WAGlC,MAAM,CACjB,OAAO,GAAE,gBAAqB,EAC9B,WAAW,CAAC,EAAE,sBAAsB,GACnC,OAAO,CAAC,yBAAyB,CAAC;IAQrC,gEAAgE;IAC1D,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAwBpE,QAAQ,CACZ,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,0BAA0B,EAAE,CAAC;IASlC,MAAM,CACV,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE;QACL,QAAQ,EAAE,yBAAyB,CAAC;QACpC,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACvD,GACA,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,KAAK,EAAE,0BAA0B,EAAE,CAAC;QACpC,aAAa,EAAE,kBAAkB,EAAE,CAAC;KACrC,CAAC;IA8GI,cAAc,CAClB,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,kBAAkB,CAAC;YAgChB,UAAU;YAcV,QAAQ;CAgCvB"}
@@ -0,0 +1,6 @@
1
+ export * from './assistance-request-service.js';
2
+ export * from './delivery-service.js';
3
+ export * from './development-request-service.js';
4
+ export * from './service-evidence-service.js';
5
+ export * from './subscription-commercial-resolver.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { SmrtClassOptions } from '@happyvertical/smrt-core';
2
+ import { ServiceChargeSnapshotCollection, ServiceCompensationSnapshotCollection, ServiceTimeEntry, ServiceTimeEntryCollection } from '../models/service-evidence.js';
3
+ import { ServiceEvidence, ServiceParticipantKind, ServiceTimeEntrySource } from '../types.js';
4
+ export interface RecordServiceTimeInput {
5
+ tenantId?: string | null;
6
+ caseId?: string | null;
7
+ workRefType?: string | null;
8
+ workRefId?: string | null;
9
+ specialistId?: string | null;
10
+ participantKind: ServiceParticipantKind;
11
+ participantProfileId?: string | null;
12
+ agentRef?: string;
13
+ source: ServiceTimeEntrySource;
14
+ description: string;
15
+ startedAt?: Date | null;
16
+ endedAt?: Date | null;
17
+ durationSeconds?: number;
18
+ evidence?: ServiceEvidence[];
19
+ metadata?: Record<string, unknown>;
20
+ }
21
+ export interface CommercialSnapshot {
22
+ amount: number;
23
+ currency?: string;
24
+ version: string;
25
+ strategy?: string;
26
+ terms: Record<string, unknown>;
27
+ sourceRef?: string;
28
+ }
29
+ export interface ServiceCommercialResolver {
30
+ priceClient(entry: ServiceTimeEntry): Promise<CommercialSnapshot>;
31
+ compensateProvider(entry: ServiceTimeEntry): Promise<CommercialSnapshot>;
32
+ }
33
+ export declare class ServiceEvidenceService {
34
+ private readonly entries;
35
+ private readonly charges;
36
+ private readonly compensation;
37
+ private readonly commercial?;
38
+ constructor(entries: ServiceTimeEntryCollection, charges: ServiceChargeSnapshotCollection, compensation: ServiceCompensationSnapshotCollection, commercial?: ServiceCommercialResolver | undefined);
39
+ static create(options?: SmrtClassOptions, commercial?: ServiceCommercialResolver): Promise<ServiceEvidenceService>;
40
+ record(input: RecordServiceTimeInput): Promise<ServiceTimeEntry>;
41
+ submit(entry: ServiceTimeEntry, profileId?: string): Promise<ServiceTimeEntry>;
42
+ approve(entry: ServiceTimeEntry, options: {
43
+ actorProfileId?: string;
44
+ approvalPath: string;
45
+ }): Promise<ServiceTimeEntry>;
46
+ correct(entry: ServiceTimeEntry, input: RecordServiceTimeInput): Promise<ServiceTimeEntry>;
47
+ }
48
+ //# sourceMappingURL=service-evidence-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-evidence-service.d.ts","sourceRoot":"","sources":["../../src/services/service-evidence-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EACL,+BAA+B,EAC/B,qCAAqC,EACrC,KAAK,gBAAgB,EACrB,0BAA0B,EAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,sBAAsB,CAAC;IACxC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClE,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC1E;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAHX,OAAO,EAAE,0BAA0B,EACnC,OAAO,EAAE,+BAA+B,EACxC,YAAY,EAAE,qCAAqC,EACnD,UAAU,CAAC,EAAE,yBAAyB,YAAA;WAG5C,MAAM,CACjB,OAAO,GAAE,gBAAqB,EAC9B,UAAU,CAAC,EAAE,yBAAyB,GACrC,OAAO,CAAC,sBAAsB,CAAC;IAc5B,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4ChE,MAAM,CACV,KAAK,EAAE,gBAAgB,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC;IAStB,OAAO,CACX,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GACzD,OAAO,CAAC,gBAAgB,CAAC;IAkGtB,OAAO,CACX,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;CAkB7B"}
@@ -0,0 +1,17 @@
1
+ import { SmrtClassOptions } from '@happyvertical/smrt-core';
2
+ import { CommercialUsageService } from '@happyvertical/smrt-subscriptions';
3
+ import { ServiceTimeEntry } from '../models/service-evidence.js';
4
+ import { CommercialSnapshot, ServiceCommercialResolver } from './service-evidence-service.js';
5
+ export interface ProviderCompensationResolver {
6
+ compensate(entry: ServiceTimeEntry): Promise<CommercialSnapshot>;
7
+ }
8
+ /** Bridges shared Professional Service evidence to #1925's effective pricing. */
9
+ export declare class SubscriptionServiceCommercialResolver implements ServiceCommercialResolver {
10
+ private readonly usage;
11
+ private readonly provider;
12
+ constructor(usage: CommercialUsageService, provider: ProviderCompensationResolver);
13
+ static create(options: SmrtClassOptions, provider: ProviderCompensationResolver): Promise<SubscriptionServiceCommercialResolver>;
14
+ priceClient(entry: ServiceTimeEntry): Promise<CommercialSnapshot>;
15
+ compensateProvider(entry: ServiceTimeEntry): Promise<CommercialSnapshot>;
16
+ }
17
+ //# sourceMappingURL=subscription-commercial-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription-commercial-resolver.d.ts","sourceRoot":"","sources":["../../src/services/subscription-commercial-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EACV,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAClE;AAED,iFAAiF;AACjF,qBAAa,qCACX,YAAW,yBAAyB;IAGlC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,KAAK,EAAE,sBAAsB,EAC7B,QAAQ,EAAE,4BAA4B;WAG5C,MAAM,CACjB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,4BAA4B,GACrC,OAAO,CAAC,qCAAqC,CAAC;IAO3C,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA+CvE,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGzE"}