@happyvertical/smrt-projects 0.51.39 → 0.53.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.
Files changed (56) hide show
  1. package/AGENTS.md +20 -9
  2. package/README.md +13 -1
  3. package/SERVICE_TIME_MIGRATION.md +45 -3
  4. package/dist/index.js +154 -588
  5. package/dist/index.js.map +1 -1
  6. package/dist/manifest.json +3 -1484
  7. package/dist/models/Repository.d.ts +9 -0
  8. package/dist/models/Repository.d.ts.map +1 -1
  9. package/dist/models/service-evidence.d.ts +13 -92
  10. package/dist/models/service-evidence.d.ts.map +1 -1
  11. package/dist/playground.js +2 -2
  12. package/dist/playground.js.map +1 -1
  13. package/dist/services/service-evidence-service.d.ts +6 -55
  14. package/dist/services/service-evidence-service.d.ts.map +1 -1
  15. package/dist/services/subscription-commercial-resolver.d.ts +1 -1
  16. package/dist/services/subscription-commercial-resolver.d.ts.map +1 -1
  17. package/dist/smrt-knowledge.json +11 -1069
  18. package/dist/svelte/components/ApprovalActions.svelte +1 -1
  19. package/dist/svelte/components/ApprovalActions.svelte.d.ts +1 -1
  20. package/dist/svelte/components/ApprovalActions.svelte.d.ts.map +1 -1
  21. package/dist/svelte/components/__tests__/TimesheetsReexports.test.js +18 -0
  22. package/dist/svelte/i18n.d.ts +0 -9
  23. package/dist/svelte/i18n.d.ts.map +1 -1
  24. package/dist/svelte/i18n.js +0 -9
  25. package/dist/svelte/index.d.ts +2 -8
  26. package/dist/svelte/index.d.ts.map +1 -1
  27. package/dist/svelte/index.js +3 -4
  28. package/dist/svelte/playground.d.ts +7 -2
  29. package/dist/svelte/playground.d.ts.map +1 -1
  30. package/dist/svelte/playground.js +7 -2
  31. package/dist/svelte/utils.d.ts +4 -48
  32. package/dist/svelte/utils.d.ts.map +1 -1
  33. package/dist/svelte/utils.js +4 -56
  34. package/dist/svelte/utils.test.js +1 -1
  35. package/dist/types.d.ts +1 -10
  36. package/dist/types.d.ts.map +1 -1
  37. package/package.json +19 -19
  38. package/dist/svelte/components/DurationDisplay.svelte +0 -81
  39. package/dist/svelte/components/DurationDisplay.svelte.d.ts +0 -20
  40. package/dist/svelte/components/DurationDisplay.svelte.d.ts.map +0 -1
  41. package/dist/svelte/components/TimeEntryCard.svelte +0 -304
  42. package/dist/svelte/components/TimeEntryCard.svelte.d.ts +0 -25
  43. package/dist/svelte/components/TimeEntryCard.svelte.d.ts.map +0 -1
  44. package/dist/svelte/components/TimeEntryList.svelte +0 -360
  45. package/dist/svelte/components/TimeEntryList.svelte.d.ts +0 -24
  46. package/dist/svelte/components/TimeEntryList.svelte.d.ts.map +0 -1
  47. package/dist/svelte/components/TimeSummary.svelte +0 -176
  48. package/dist/svelte/components/TimeSummary.svelte.d.ts +0 -30
  49. package/dist/svelte/components/TimeSummary.svelte.d.ts.map +0 -1
  50. package/dist/svelte/components/__tests__/DurationDisplay.test.js +0 -57
  51. package/dist/svelte/components/__tests__/TimeEntryCard.test.js +0 -45
  52. package/dist/svelte/components/__tests__/TimeEntryList.test.js +0 -50
  53. package/dist/svelte/components/__tests__/TimeSummary.test.js +0 -39
  54. package/dist/svelte/components/utils.d.ts +0 -51
  55. package/dist/svelte/components/utils.d.ts.map +0 -1
  56. package/dist/svelte/components/utils.js +0 -58
@@ -107,6 +107,15 @@ export declare class Repository extends SmrtObject {
107
107
  * @returns Array of PullRequest objects (SMRT models)
108
108
  */
109
109
  getPullRequests(filters?: SearchFilters): Promise<PullRequest[]>;
110
+ /**
111
+ * Options for an issue or pull request created from this repository: the
112
+ * database connection and tenant context, without any of this repository's
113
+ * own columns (identity, timestamps, data). A repository loaded from the database holds its row's
114
+ * `id`/`slug` in `this.options`; spread into a new issue they would give
115
+ * every issue the repository's primary key and slug, so each save would
116
+ * overwrite the previous issue.
117
+ */
118
+ private childOptions;
110
119
  /**
111
120
  * Create a new issue in this repository
112
121
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../../src/models/Repository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,sBAAsB,EAEtB,aAAa,EACb,WAAW,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,qBAQa,UAAW,SAAQ,UAAU;IACxC;;OAEG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAM;IAEnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAM;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAM;IAEtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAM;IAEzB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAU;IAE/B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAS;IAE3B;;OAEG;IACH,YAAY,EAAE,sBAAsB,CAAY;IAEhD;;OAEG;IACH,OAAO,EAAE,MAAM,CAAM;IAErB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAkB;IAExC;;OAEG;IACH,YAAY,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEjC;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,CAAc;gBAElB,OAAO,GAAE,iBAAsB;IAkB3C;;;;;;;;;OASG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IA8BvC;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;;;;OAKG;IACG,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpD;;;;;OAKG;IACG,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAM1D;;;;;OAKG;IACG,eAAe,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAQtE;;;;;OAKG;IACG,WAAW,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IAiCzD;;;;;OAKG;IACG,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IAqClE;;;;;OAKG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/D;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAW1C;;;;;;;OAOG;WACU,aAAa,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CAO9B"}
1
+ {"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../../src/models/Repository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAGvB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,sBAAsB,EAEtB,aAAa,EACb,WAAW,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,qBAQa,UAAW,SAAQ,UAAU;IACxC;;OAEG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAM;IAEnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAM;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAM;IAEtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAM;IAEzB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAU;IAE/B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAS;IAE3B;;OAEG;IACH,YAAY,EAAE,sBAAsB,CAAY;IAEhD;;OAEG;IACH,OAAO,EAAE,MAAM,CAAM;IAErB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAkB;IAExC;;OAEG;IACH,YAAY,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEjC;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,CAAc;gBAElB,OAAO,GAAE,iBAAsB;IAkB3C;;;;;;;;;OASG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IA8BvC;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;;;;OAKG;IACG,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpD;;;;;OAKG;IACG,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAM1D;;;;;OAKG;IACG,eAAe,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAQtE;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IA6BpB;;;;;OAKG;IACG,WAAW,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IAiCzD;;;;;OAKG;IACG,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IAqClE;;;;;OAKG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/D;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAW1C;;;;;;;OAOG;WACU,aAAa,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CAO9B"}
@@ -1,95 +1,16 @@
1
- import { SmrtCollection, SmrtObject } from '@happyvertical/smrt-core';
2
- import type { ServiceEvidence, ServiceParticipantKind, ServiceTimeEntrySource, ServiceTimeEntryStatus } from '../types.js';
3
1
  /**
4
- * Canonical Professional Service evidence shared by planning, development,
5
- * and support. Commercial snapshots are deliberately separate models.
2
+ * Professional Service evidence (time entries and their commercial
3
+ * snapshots) is owned by `@happyvertical/smrt-timesheets` (#3288; it was
4
+ * canonical here per #1955). The same classes are re-exported under their
5
+ * existing names so `@happyvertical/smrt-projects` imports keep working, and
6
+ * they still map to the existing `service_time_entries`,
7
+ * `service_charge_snapshots`, and `service_compensation_snapshots` tables, so
8
+ * stored rows load with no schema change.
9
+ *
10
+ * These are re-exports, not subclasses: classes on one table must form a
11
+ * single inheritance chain, and smrt-support's subtype (which adds `caseId` /
12
+ * `specialistId`) is the one link a chain of same-named classes can carry.
13
+ * See `packages/timesheets/AGENTS.md`.
6
14
  */
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
- /**
46
- * Client charge in **integer minor units** of {@link currency} — `$19.99` is
47
- * `1999`. The `= 0` initializer is load-bearing: SMRT maps an integer literal
48
- * to INTEGER and a decimal literal to DECIMAL (#2401).
49
- *
50
- * Copied verbatim from the upstream `ClientCharge.amount`, so the two carry
51
- * the same unit by construction; a split would land cents in a major-units
52
- * column with no error anywhere.
53
- */
54
- amount: number;
55
- currency: string;
56
- pricingVersion: string;
57
- strategy: string;
58
- rateSnapshot: string;
59
- sourceChargeRef: string;
60
- createdAt: Date;
61
- initialize(): Promise<this>;
62
- save(): Promise<this>;
63
- }
64
- export declare class ServiceCompensationSnapshot extends SmrtObject {
65
- tenantId: string | null;
66
- timeEntryId: string;
67
- /**
68
- * Provider earning in **integer minor units** of {@link currency} (#2401).
69
- *
70
- * Converts with {@link ServiceChargeSnapshot.amount}: the delivery margin is
71
- * `charge - compensation`, so a mixed pair would make that subtraction
72
- * meaningless.
73
- */
74
- amount: number;
75
- currency: string;
76
- termsVersion: string;
77
- rateSnapshot: string;
78
- createdAt: Date;
79
- initialize(): Promise<this>;
80
- save(): Promise<this>;
81
- }
82
- export declare class ServiceTimeEntryCollection extends SmrtCollection<ServiceTimeEntry> {
83
- static readonly _itemClass: typeof ServiceTimeEntry;
84
- forWork(workRefType: string, workRefId: string): Promise<ServiceTimeEntry[]>;
85
- forCase(caseId: string): Promise<ServiceTimeEntry[]>;
86
- forSpecialist(specialistId: string): Promise<ServiceTimeEntry[]>;
87
- pendingApproval(): Promise<ServiceTimeEntry[]>;
88
- }
89
- export declare class ServiceChargeSnapshotCollection extends SmrtCollection<ServiceChargeSnapshot> {
90
- static readonly _itemClass: typeof ServiceChargeSnapshot;
91
- }
92
- export declare class ServiceCompensationSnapshotCollection extends SmrtCollection<ServiceCompensationSnapshot> {
93
- static readonly _itemClass: typeof ServiceCompensationSnapshot;
94
- }
15
+ export { ServiceChargeSnapshot, ServiceChargeSnapshotCollection, ServiceCompensationSnapshot, ServiceCompensationSnapshotCollection, ServiceTimeEntry, ServiceTimeEntryCollection, } from '@happyvertical/smrt-timesheets';
95
16
  //# sourceMappingURL=service-evidence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-evidence.d.ts","sourceRoot":"","sources":["../../src/models/service-evidence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-evidence.d.ts","sourceRoot":"","sources":["../../src/models/service-evidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,2BAA2B,EAC3B,qCAAqC,EACrC,gBAAgB,EAChB,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC"}
@@ -38,8 +38,8 @@ var totalHours = sampleTimeEntries.reduce((sum, entry) => sum + entry.hours, 0);
38
38
  var totalAmount = sampleTimeEntries.reduce((sum, entry) => sum + (entry.amount ?? 0), 0);
39
39
  var pendingEntries = sampleTimeEntries.filter((entry) => entry.status === "submitted");
40
40
  var loadApprovalActions = () => import("./svelte/components/ApprovalActions.svelte");
41
- var loadTimeEntryList = () => import("./svelte/components/TimeEntryList.svelte");
42
- var loadTimeSummary = () => import("./svelte/components/TimeSummary.svelte");
41
+ var loadTimeEntryList = () => import("@happyvertical/smrt-timesheets/svelte").then((module) => ({ default: module.TimeEntryList }));
42
+ var loadTimeSummary = () => import("@happyvertical/smrt-timesheets/svelte").then((module) => ({ default: module.TimeSummary }));
43
43
  var loadDevelopmentBoard = () => import("./svelte/DevelopmentBoard.svelte");
44
44
  var loadProjectBoard = () => import("./svelte/ProjectBoard.svelte");
45
45
  var playground_default = {
@@ -1 +1 @@
1
- {"version":3,"file":"playground.js","names":[],"sources":["../src/svelte/playground.ts"],"sourcesContent":["import { PROJECTS_MODULE_META } from '../ui.js';\n\nconst noop = () => {};\n\n// Money is integer minor units (#2401): 6.5 h x 12000 (=$120.00/h) = 78000.\nconst sampleTimeEntries = [\n {\n id: 'time-entry-1',\n date: '2026-03-18T16:00:00.000Z',\n hours: 6.5,\n description: 'Editorial governance review and fact-linking pass',\n status: 'submitted',\n amount: 78000,\n workerName: 'Taylor Rowan',\n hourlyRate: 12000,\n mileage: 18,\n },\n {\n id: 'time-entry-2',\n date: '2026-03-19T16:00:00.000Z',\n hours: 4.25,\n description: 'Content workflow instrumentation and approval QA',\n status: 'approved',\n amount: 51000,\n workerName: 'Jordan Lee',\n hourlyRate: 12000,\n },\n {\n id: 'time-entry-3',\n date: '2026-03-20T16:00:00.000Z',\n hours: 2,\n description: 'Follow-up revisions for contributor feedback',\n status: 'draft',\n amount: 24000,\n workerName: 'Casey Tran',\n hourlyRate: 12000,\n },\n];\n\nconst totalHours = sampleTimeEntries.reduce(\n (sum, entry) => sum + entry.hours,\n 0,\n);\nconst totalAmount = sampleTimeEntries.reduce(\n (sum, entry) => sum + (entry.amount ?? 0),\n 0,\n);\nconst pendingEntries = sampleTimeEntries.filter(\n (entry) => entry.status === 'submitted',\n);\n\nconst loadApprovalActions = () => import('./components/ApprovalActions.svelte');\nconst loadTimeEntryList = () => import('./components/TimeEntryList.svelte');\nconst loadTimeSummary = () => import('./components/TimeSummary.svelte');\nconst loadDevelopmentBoard = () => import('./DevelopmentBoard.svelte');\nconst loadProjectBoard = () => import('./ProjectBoard.svelte');\n\nexport default {\n packageName: '@happyvertical/smrt-projects',\n displayName: PROJECTS_MODULE_META.displayName,\n description: PROJECTS_MODULE_META.description,\n moduleMeta: PROJECTS_MODULE_META,\n entries: [\n {\n id: 'project-board',\n title: 'Project Board',\n description: 'Controlled provider project board with canonical statuses.',\n loadComponent: loadProjectBoard,\n order: 0,\n props: {\n projectId: 'project-demo',\n statuses: [\n { id: 'todo', name: 'Todo', order: 0 },\n { id: 'done', name: 'Done', order: 1 },\n ],\n items: [\n {\n id: 'item-demo',\n contentId: 'content-demo',\n title: 'Publish project board',\n status: 'Todo',\n fields: {},\n type: 'Issue',\n },\n ],\n },\n modes: { mock: { label: 'Mock' } },\n },\n {\n id: 'development-board',\n title: 'Development Board',\n description: 'Read-only delivery-status projection.',\n loadComponent: loadDevelopmentBoard,\n order: 1,\n props: {\n requests: [\n {\n id: 'request-demo',\n description: 'Publish project board',\n type: 'feature',\n status: 'planned',\n requesterLabel: 'Project owner',\n },\n ],\n },\n modes: { mock: { label: 'Mock' } },\n },\n {\n id: 'time-entry-list',\n title: 'Time Entry List',\n description:\n 'Selectable list view for recent time entries with billing context.',\n loadComponent: loadTimeEntryList,\n order: 2,\n props: {\n entries: sampleTimeEntries,\n selectable: true,\n selectedIds: ['time-entry-1'],\n currency: 'CAD',\n onselectionchange: noop,\n baseHref: '/projects/time-entries',\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'time-summary',\n title: 'Time Summary',\n description: 'Hours and value summary cards for a project review period.',\n loadComponent: loadTimeSummary,\n order: 3,\n props: {\n totalHours,\n totalAmount,\n pendingHours: pendingEntries.reduce(\n (sum, entry) => sum + entry.hours,\n 0,\n ),\n pendingAmount: pendingEntries.reduce(\n (sum, entry) => sum + (entry.amount ?? 0),\n 0,\n ),\n approvedHours: sampleTimeEntries\n .filter((entry) => entry.status === 'approved')\n .reduce((sum, entry) => sum + entry.hours, 0),\n approvedAmount: sampleTimeEntries\n .filter((entry) => entry.status === 'approved')\n .reduce((sum, entry) => sum + (entry.amount ?? 0), 0),\n entryCount: sampleTimeEntries.length,\n currency: 'CAD',\n showApproved: true,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'approval-actions',\n title: 'Approval Actions',\n description:\n 'Status-sensitive action row for approving or returning submitted work.',\n loadComponent: loadApprovalActions,\n order: 4,\n props: {\n status: 'submitted',\n onapprove: noop,\n onreject: noop,\n onedit: noop,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n ],\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"playground.js","names":[],"sources":["../src/svelte/playground.ts"],"sourcesContent":["import type {\n TimeEntryList,\n TimeSummary,\n} from '@happyvertical/smrt-timesheets/svelte';\nimport { PROJECTS_MODULE_META } from '../ui.js';\n\nconst noop = () => {};\n\n// Money is integer minor units (#2401): 6.5 h x 12000 (=$120.00/h) = 78000.\nconst sampleTimeEntries = [\n {\n id: 'time-entry-1',\n date: '2026-03-18T16:00:00.000Z',\n hours: 6.5,\n description: 'Editorial governance review and fact-linking pass',\n status: 'submitted',\n amount: 78000,\n workerName: 'Taylor Rowan',\n hourlyRate: 12000,\n mileage: 18,\n },\n {\n id: 'time-entry-2',\n date: '2026-03-19T16:00:00.000Z',\n hours: 4.25,\n description: 'Content workflow instrumentation and approval QA',\n status: 'approved',\n amount: 51000,\n workerName: 'Jordan Lee',\n hourlyRate: 12000,\n },\n {\n id: 'time-entry-3',\n date: '2026-03-20T16:00:00.000Z',\n hours: 2,\n description: 'Follow-up revisions for contributor feedback',\n status: 'draft',\n amount: 24000,\n workerName: 'Casey Tran',\n hourlyRate: 12000,\n },\n];\n\nconst totalHours = sampleTimeEntries.reduce(\n (sum, entry) => sum + entry.hours,\n 0,\n);\nconst totalAmount = sampleTimeEntries.reduce(\n (sum, entry) => sum + (entry.amount ?? 0),\n 0,\n);\nconst pendingEntries = sampleTimeEntries.filter(\n (entry) => entry.status === 'submitted',\n);\n\nconst loadApprovalActions = () => import('./components/ApprovalActions.svelte');\n// The time-entry components live in smrt-timesheets (#3288).\nconst loadTimeEntryList = (): Promise<{ default: typeof TimeEntryList }> =>\n import('@happyvertical/smrt-timesheets/svelte').then((module) => ({\n default: module.TimeEntryList,\n }));\nconst loadTimeSummary = (): Promise<{ default: typeof TimeSummary }> =>\n import('@happyvertical/smrt-timesheets/svelte').then((module) => ({\n default: module.TimeSummary,\n }));\nconst loadDevelopmentBoard = () => import('./DevelopmentBoard.svelte');\nconst loadProjectBoard = () => import('./ProjectBoard.svelte');\n\nexport default {\n packageName: '@happyvertical/smrt-projects',\n displayName: PROJECTS_MODULE_META.displayName,\n description: PROJECTS_MODULE_META.description,\n moduleMeta: PROJECTS_MODULE_META,\n entries: [\n {\n id: 'project-board',\n title: 'Project Board',\n description: 'Controlled provider project board with canonical statuses.',\n loadComponent: loadProjectBoard,\n order: 0,\n props: {\n projectId: 'project-demo',\n statuses: [\n { id: 'todo', name: 'Todo', order: 0 },\n { id: 'done', name: 'Done', order: 1 },\n ],\n items: [\n {\n id: 'item-demo',\n contentId: 'content-demo',\n title: 'Publish project board',\n status: 'Todo',\n fields: {},\n type: 'Issue',\n },\n ],\n },\n modes: { mock: { label: 'Mock' } },\n },\n {\n id: 'development-board',\n title: 'Development Board',\n description: 'Read-only delivery-status projection.',\n loadComponent: loadDevelopmentBoard,\n order: 1,\n props: {\n requests: [\n {\n id: 'request-demo',\n description: 'Publish project board',\n type: 'feature',\n status: 'planned',\n requesterLabel: 'Project owner',\n },\n ],\n },\n modes: { mock: { label: 'Mock' } },\n },\n {\n id: 'time-entry-list',\n title: 'Time Entry List',\n description:\n 'Selectable list view for recent time entries with billing context.',\n loadComponent: loadTimeEntryList,\n order: 2,\n props: {\n entries: sampleTimeEntries,\n selectable: true,\n selectedIds: ['time-entry-1'],\n currency: 'CAD',\n onselectionchange: noop,\n baseHref: '/projects/time-entries',\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'time-summary',\n title: 'Time Summary',\n description: 'Hours and value summary cards for a project review period.',\n loadComponent: loadTimeSummary,\n order: 3,\n props: {\n totalHours,\n totalAmount,\n pendingHours: pendingEntries.reduce(\n (sum, entry) => sum + entry.hours,\n 0,\n ),\n pendingAmount: pendingEntries.reduce(\n (sum, entry) => sum + (entry.amount ?? 0),\n 0,\n ),\n approvedHours: sampleTimeEntries\n .filter((entry) => entry.status === 'approved')\n .reduce((sum, entry) => sum + entry.hours, 0),\n approvedAmount: sampleTimeEntries\n .filter((entry) => entry.status === 'approved')\n .reduce((sum, entry) => sum + (entry.amount ?? 0), 0),\n entryCount: sampleTimeEntries.length,\n currency: 'CAD',\n showApproved: true,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'approval-actions',\n title: 'Approval Actions',\n description:\n 'Status-sensitive action row for approving or returning submitted work.',\n loadComponent: loadApprovalActions,\n order: 4,\n props: {\n status: 'submitted',\n onapprove: noop,\n onreject: noop,\n onedit: noop,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n ],\n};\n"],"mappings":"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"}
@@ -1,56 +1,7 @@
1
- import type { SmrtClassOptions } from '@happyvertical/smrt-core';
2
- import { ServiceChargeSnapshotCollection, ServiceCompensationSnapshotCollection, type ServiceTimeEntry, ServiceTimeEntryCollection } from '../models/service-evidence.js';
3
- import type { 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
- /**
23
- * Integer minor units of `currency` — `$19.99` is `1999` (#2401).
24
- *
25
- * Written straight into `ServiceChargeSnapshot.amount` /
26
- * `ServiceCompensationSnapshot.amount`, which are INTEGER columns, so a
27
- * resolver that returns major units corrupts the snapshot silently on SQLite
28
- * and fails with `22P02` on PostgreSQL.
29
- */
30
- amount: number;
31
- currency?: string;
32
- version: string;
33
- strategy?: string;
34
- terms: Record<string, unknown>;
35
- sourceRef?: string;
36
- }
37
- export interface ServiceCommercialResolver {
38
- priceClient(entry: ServiceTimeEntry): Promise<CommercialSnapshot>;
39
- compensateProvider(entry: ServiceTimeEntry): Promise<CommercialSnapshot>;
40
- }
41
- export declare class ServiceEvidenceService {
42
- private readonly entries;
43
- private readonly charges;
44
- private readonly compensation;
45
- private readonly commercial?;
46
- constructor(entries: ServiceTimeEntryCollection, charges: ServiceChargeSnapshotCollection, compensation: ServiceCompensationSnapshotCollection, commercial?: ServiceCommercialResolver | undefined);
47
- static create(options?: SmrtClassOptions, commercial?: ServiceCommercialResolver): Promise<ServiceEvidenceService>;
48
- record(input: RecordServiceTimeInput): Promise<ServiceTimeEntry>;
49
- submit(entry: ServiceTimeEntry, profileId?: string): Promise<ServiceTimeEntry>;
50
- approve(entry: ServiceTimeEntry, options: {
51
- actorProfileId?: string;
52
- approvalPath: string;
53
- }): Promise<ServiceTimeEntry>;
54
- correct(entry: ServiceTimeEntry, input: RecordServiceTimeInput): Promise<ServiceTimeEntry>;
55
- }
1
+ /**
2
+ * The Professional Service evidence lifecycle (record, submit, approve,
3
+ * correct) is owned by `@happyvertical/smrt-timesheets` (#3288) and
4
+ * re-exported here unchanged.
5
+ */
6
+ export { type CommercialSnapshot, type RecordServiceTimeInput, type ServiceCommercialResolver, ServiceEvidenceService, } from '@happyvertical/smrt-timesheets';
56
7
  //# sourceMappingURL=service-evidence-service.d.ts.map
@@ -1 +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;;;;;;;OAOG;IACH,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;IA6GtB,OAAO,CACX,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;CAkB7B"}
1
+ {"version":3,"file":"service-evidence-service.d.ts","sourceRoot":"","sources":["../../src/services/service-evidence-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,sBAAsB,GACvB,MAAM,gCAAgC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { CommercialUsageService, type CommercialUsageServiceOptions } from '@happyvertical/smrt-subscriptions';
2
- import type { ServiceTimeEntry } from '../models/service-evidence.js';
2
+ import type { ServiceTimeEntry } from '@happyvertical/smrt-timesheets';
3
3
  import type { CommercialSnapshot, ServiceCommercialResolver } from './service-evidence-service.js';
4
4
  export interface ProviderCompensationResolver {
5
5
  compensate(entry: ServiceTimeEntry): Promise<CommercialSnapshot>;
@@ -1 +1 @@
1
- {"version":3,"file":"subscription-commercial-resolver.d.ts","sourceRoot":"","sources":["../../src/services/subscription-commercial-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,6BAA6B,EACnC,MAAM,mCAAmC,CAAC;AAC3C,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,6BAA6B,EACtC,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"}
1
+ {"version":3,"file":"subscription-commercial-resolver.d.ts","sourceRoot":"","sources":["../../src/services/subscription-commercial-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,6BAA6B,EACnC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,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;AAmBD,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,6BAA6B,EACtC,QAAQ,EAAE,4BAA4B,GACrC,OAAO,CAAC,qCAAqC,CAAC;IAO3C,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAgDvE,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGzE"}