@contractspec/example.service-business-os 1.44.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 (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -0
  3. package/dist/client/client.operations.d.ts +65 -0
  4. package/dist/client/client.operations.d.ts.map +1 -0
  5. package/dist/client/client.operations.js +53 -0
  6. package/dist/client/client.operations.js.map +1 -0
  7. package/dist/client/client.schema.d.ts +68 -0
  8. package/dist/client/client.schema.d.ts.map +1 -0
  9. package/dist/client/client.schema.js +77 -0
  10. package/dist/client/client.schema.js.map +1 -0
  11. package/dist/client/index.d.ts +3 -0
  12. package/dist/client/index.js +4 -0
  13. package/dist/docs/index.d.ts +1 -0
  14. package/dist/docs/index.js +1 -0
  15. package/dist/docs/service-business-os.docblock.d.ts +1 -0
  16. package/dist/docs/service-business-os.docblock.js +109 -0
  17. package/dist/docs/service-business-os.docblock.js.map +1 -0
  18. package/dist/entities/index.d.ts +168 -0
  19. package/dist/entities/index.d.ts.map +1 -0
  20. package/dist/entities/index.js +289 -0
  21. package/dist/entities/index.js.map +1 -0
  22. package/dist/events.d.ts +337 -0
  23. package/dist/events.d.ts.map +1 -0
  24. package/dist/events.js +230 -0
  25. package/dist/events.js.map +1 -0
  26. package/dist/example.d.ts +37 -0
  27. package/dist/example.d.ts.map +1 -0
  28. package/dist/example.js +46 -0
  29. package/dist/example.js.map +1 -0
  30. package/dist/handlers/index.d.ts +17 -0
  31. package/dist/handlers/index.d.ts.map +1 -0
  32. package/dist/handlers/index.js +6 -0
  33. package/dist/handlers/index.js.map +1 -0
  34. package/dist/index.d.ts +18 -0
  35. package/dist/index.js +19 -0
  36. package/dist/invoice/index.d.ts +3 -0
  37. package/dist/invoice/index.js +4 -0
  38. package/dist/invoice/invoice.operations.d.ts +65 -0
  39. package/dist/invoice/invoice.operations.d.ts.map +1 -0
  40. package/dist/invoice/invoice.operations.js +57 -0
  41. package/dist/invoice/invoice.operations.js.map +1 -0
  42. package/dist/invoice/invoice.schema.d.ts +68 -0
  43. package/dist/invoice/invoice.schema.d.ts.map +1 -0
  44. package/dist/invoice/invoice.schema.js +77 -0
  45. package/dist/invoice/invoice.schema.js.map +1 -0
  46. package/dist/job/index.d.ts +3 -0
  47. package/dist/job/index.js +4 -0
  48. package/dist/job/job.operations.d.ts +238 -0
  49. package/dist/job/job.operations.d.ts.map +1 -0
  50. package/dist/job/job.operations.js +175 -0
  51. package/dist/job/job.operations.js.map +1 -0
  52. package/dist/job/job.schema.d.ts +85 -0
  53. package/dist/job/job.schema.d.ts.map +1 -0
  54. package/dist/job/job.schema.js +98 -0
  55. package/dist/job/job.schema.js.map +1 -0
  56. package/dist/operations/index.d.ts +16 -0
  57. package/dist/operations/index.js +17 -0
  58. package/dist/payment/index.d.ts +3 -0
  59. package/dist/payment/index.js +4 -0
  60. package/dist/payment/payment.operations.d.ts +61 -0
  61. package/dist/payment/payment.operations.d.ts.map +1 -0
  62. package/dist/payment/payment.operations.js +53 -0
  63. package/dist/payment/payment.operations.js.map +1 -0
  64. package/dist/payment/payment.schema.d.ts +64 -0
  65. package/dist/payment/payment.schema.d.ts.map +1 -0
  66. package/dist/payment/payment.schema.js +73 -0
  67. package/dist/payment/payment.schema.js.map +1 -0
  68. package/dist/presentations/index.d.ts +9 -0
  69. package/dist/presentations/index.d.ts.map +1 -0
  70. package/dist/presentations/index.js +18 -0
  71. package/dist/presentations/index.js.map +1 -0
  72. package/dist/presentations.d.ts +13 -0
  73. package/dist/presentations.d.ts.map +1 -0
  74. package/dist/presentations.js +179 -0
  75. package/dist/presentations.js.map +1 -0
  76. package/dist/quote/index.d.ts +3 -0
  77. package/dist/quote/index.js +4 -0
  78. package/dist/quote/quote.operations.d.ts +135 -0
  79. package/dist/quote/quote.operations.d.ts.map +1 -0
  80. package/dist/quote/quote.operations.js +99 -0
  81. package/dist/quote/quote.operations.js.map +1 -0
  82. package/dist/quote/quote.schema.d.ts +101 -0
  83. package/dist/quote/quote.schema.d.ts.map +1 -0
  84. package/dist/quote/quote.schema.js +114 -0
  85. package/dist/quote/quote.schema.js.map +1 -0
  86. package/dist/service.feature.d.ts +7 -0
  87. package/dist/service.feature.d.ts.map +1 -0
  88. package/dist/service.feature.js +164 -0
  89. package/dist/service.feature.js.map +1 -0
  90. package/package.json +108 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Chaman Ventures, SASU
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,16 @@
1
+ # @contractspec/example.service-business-os
2
+
3
+ Website: https://contractspec.io/
4
+
5
+
6
+ Service Business OS reference example (clients → quotes → jobs → invoices → payments).
7
+
8
+ Highlights:
9
+
10
+ - Multi-tenant clients with role-based access via `@contractspec/lib.identity-rbac`
11
+ - Quote lifecycle (draft → sent → accepted/rejected)
12
+ - Jobs scheduling and completion with reminders via `@contractspec/lib.jobs`
13
+ - Invoicing and payments with audit trail + notifications
14
+ - Attachments for proposals and receipts via `@contractspec/lib.files`
15
+
16
+ Use this as a spec-first starting point for field services, agencies, or professional services teams.
@@ -0,0 +1,65 @@
1
+ import * as _contractspec_lib_schema279 from "@contractspec/lib.schema";
2
+ import * as _contractspec_lib_contracts11 from "@contractspec/lib.contracts";
3
+
4
+ //#region src/client/client.operations.d.ts
5
+ /**
6
+ * Create a new client.
7
+ */
8
+ declare const CreateClientContract: _contractspec_lib_contracts11.OperationSpec<_contractspec_lib_schema279.SchemaModel<{
9
+ name: {
10
+ type: _contractspec_lib_schema279.FieldType<string, string>;
11
+ isOptional: false;
12
+ };
13
+ contactEmail: {
14
+ type: _contractspec_lib_schema279.FieldType<string, string>;
15
+ isOptional: true;
16
+ };
17
+ phone: {
18
+ type: _contractspec_lib_schema279.FieldType<string, string>;
19
+ isOptional: true;
20
+ };
21
+ orgId: {
22
+ type: _contractspec_lib_schema279.FieldType<string, string>;
23
+ isOptional: false;
24
+ };
25
+ ownerId: {
26
+ type: _contractspec_lib_schema279.FieldType<string, string>;
27
+ isOptional: false;
28
+ };
29
+ metadata: {
30
+ type: _contractspec_lib_schema279.FieldType<unknown, unknown>;
31
+ isOptional: true;
32
+ };
33
+ }>, _contractspec_lib_schema279.SchemaModel<{
34
+ id: {
35
+ type: _contractspec_lib_schema279.FieldType<string, string>;
36
+ isOptional: false;
37
+ };
38
+ name: {
39
+ type: _contractspec_lib_schema279.FieldType<string, string>;
40
+ isOptional: false;
41
+ };
42
+ contactEmail: {
43
+ type: _contractspec_lib_schema279.FieldType<string, string>;
44
+ isOptional: true;
45
+ };
46
+ phone: {
47
+ type: _contractspec_lib_schema279.FieldType<string, string>;
48
+ isOptional: true;
49
+ };
50
+ orgId: {
51
+ type: _contractspec_lib_schema279.FieldType<string, string>;
52
+ isOptional: false;
53
+ };
54
+ ownerId: {
55
+ type: _contractspec_lib_schema279.FieldType<string, string>;
56
+ isOptional: false;
57
+ };
58
+ createdAt: {
59
+ type: _contractspec_lib_schema279.FieldType<Date, string>;
60
+ isOptional: false;
61
+ };
62
+ }>, undefined>;
63
+ //#endregion
64
+ export { CreateClientContract };
65
+ //# sourceMappingURL=client.operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.operations.d.ts","names":[],"sources":["../../src/client/client.operations.ts"],"sourcesContent":[],"mappings":";;;;;;;cAQa,oDAAoB,0CAAA;EAApB,IAAA,EAAA;IAqCX,IAAA,EAAA,2BAAA,CAAA,SAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;;;EArC+B,KAAA,EAAA;;;;;;;;;+CAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;;;;;;UAAA,2BAAA,CAAA"}
@@ -0,0 +1,53 @@
1
+ import { ClientModel, CreateClientInputModel } from "./client.schema.js";
2
+ import { defineCommand } from "@contractspec/lib.contracts";
3
+
4
+ //#region src/client/client.operations.ts
5
+ const OWNERS = ["@examples.service-business-os"];
6
+ /**
7
+ * Create a new client.
8
+ */
9
+ const CreateClientContract = defineCommand({
10
+ meta: {
11
+ key: "service.client.create",
12
+ version: 1,
13
+ stability: "stable",
14
+ owners: [...OWNERS],
15
+ tags: [
16
+ "service-business-os",
17
+ "client",
18
+ "create"
19
+ ],
20
+ description: "Create a new client.",
21
+ goal: "Onboard clients.",
22
+ context: "CRM."
23
+ },
24
+ io: {
25
+ input: CreateClientInputModel,
26
+ output: ClientModel
27
+ },
28
+ policy: { auth: "user" },
29
+ acceptance: {
30
+ scenarios: [{
31
+ key: "create-client-happy-path",
32
+ given: ["User is authenticated"],
33
+ when: ["User creates a new client"],
34
+ then: ["Client is created"]
35
+ }],
36
+ examples: [{
37
+ key: "create-basic",
38
+ input: {
39
+ name: "Acme Corp",
40
+ email: "contact@acme.com",
41
+ phone: "555-0123"
42
+ },
43
+ output: {
44
+ id: "client-123",
45
+ name: "Acme Corp"
46
+ }
47
+ }]
48
+ }
49
+ });
50
+
51
+ //#endregion
52
+ export { CreateClientContract };
53
+ //# sourceMappingURL=client.operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.operations.js","names":[],"sources":["../../src/client/client.operations.ts"],"sourcesContent":["import { defineCommand } from '@contractspec/lib.contracts';\nimport { ClientModel, CreateClientInputModel } from './client.schema';\n\nconst OWNERS = ['@examples.service-business-os'] as const;\n\n/**\n * Create a new client.\n */\nexport const CreateClientContract = defineCommand({\n meta: {\n key: 'service.client.create',\n version: 1,\n stability: 'stable',\n owners: [...OWNERS],\n tags: ['service-business-os', 'client', 'create'],\n description: 'Create a new client.',\n goal: 'Onboard clients.',\n context: 'CRM.',\n },\n io: {\n input: CreateClientInputModel,\n output: ClientModel,\n },\n policy: { auth: 'user' },\n acceptance: {\n scenarios: [\n {\n key: 'create-client-happy-path',\n given: ['User is authenticated'],\n when: ['User creates a new client'],\n then: ['Client is created'],\n },\n ],\n examples: [\n {\n key: 'create-basic',\n input: {\n name: 'Acme Corp',\n email: 'contact@acme.com',\n phone: '555-0123',\n },\n output: { id: 'client-123', name: 'Acme Corp' },\n },\n ],\n },\n});\n"],"mappings":";;;;AAGA,MAAM,SAAS,CAAC,gCAAgC;;;;AAKhD,MAAa,uBAAuB,cAAc;CAChD,MAAM;EACJ,KAAK;EACL,SAAS;EACT,WAAW;EACX,QAAQ,CAAC,GAAG,OAAO;EACnB,MAAM;GAAC;GAAuB;GAAU;GAAS;EACjD,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD,IAAI;EACF,OAAO;EACP,QAAQ;EACT;CACD,QAAQ,EAAE,MAAM,QAAQ;CACxB,YAAY;EACV,WAAW,CACT;GACE,KAAK;GACL,OAAO,CAAC,wBAAwB;GAChC,MAAM,CAAC,4BAA4B;GACnC,MAAM,CAAC,oBAAoB;GAC5B,CACF;EACD,UAAU,CACR;GACE,KAAK;GACL,OAAO;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACR;GACD,QAAQ;IAAE,IAAI;IAAc,MAAM;IAAa;GAChD,CACF;EACF;CACF,CAAC"}
@@ -0,0 +1,68 @@
1
+ import * as _contractspec_lib_schema110 from "@contractspec/lib.schema";
2
+
3
+ //#region src/client/client.schema.d.ts
4
+ /**
5
+ * Client profile.
6
+ */
7
+ declare const ClientModel: _contractspec_lib_schema110.SchemaModel<{
8
+ id: {
9
+ type: _contractspec_lib_schema110.FieldType<string, string>;
10
+ isOptional: false;
11
+ };
12
+ name: {
13
+ type: _contractspec_lib_schema110.FieldType<string, string>;
14
+ isOptional: false;
15
+ };
16
+ contactEmail: {
17
+ type: _contractspec_lib_schema110.FieldType<string, string>;
18
+ isOptional: true;
19
+ };
20
+ phone: {
21
+ type: _contractspec_lib_schema110.FieldType<string, string>;
22
+ isOptional: true;
23
+ };
24
+ orgId: {
25
+ type: _contractspec_lib_schema110.FieldType<string, string>;
26
+ isOptional: false;
27
+ };
28
+ ownerId: {
29
+ type: _contractspec_lib_schema110.FieldType<string, string>;
30
+ isOptional: false;
31
+ };
32
+ createdAt: {
33
+ type: _contractspec_lib_schema110.FieldType<Date, string>;
34
+ isOptional: false;
35
+ };
36
+ }>;
37
+ /**
38
+ * Input for creating a client.
39
+ */
40
+ declare const CreateClientInputModel: _contractspec_lib_schema110.SchemaModel<{
41
+ name: {
42
+ type: _contractspec_lib_schema110.FieldType<string, string>;
43
+ isOptional: false;
44
+ };
45
+ contactEmail: {
46
+ type: _contractspec_lib_schema110.FieldType<string, string>;
47
+ isOptional: true;
48
+ };
49
+ phone: {
50
+ type: _contractspec_lib_schema110.FieldType<string, string>;
51
+ isOptional: true;
52
+ };
53
+ orgId: {
54
+ type: _contractspec_lib_schema110.FieldType<string, string>;
55
+ isOptional: false;
56
+ };
57
+ ownerId: {
58
+ type: _contractspec_lib_schema110.FieldType<string, string>;
59
+ isOptional: false;
60
+ };
61
+ metadata: {
62
+ type: _contractspec_lib_schema110.FieldType<unknown, unknown>;
63
+ isOptional: true;
64
+ };
65
+ }>;
66
+ //#endregion
67
+ export { ClientModel, CreateClientInputModel };
68
+ //# sourceMappingURL=client.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.schema.d.ts","names":[],"sources":["../../src/client/client.schema.ts"],"sourcesContent":[],"mappings":";;;;;;AAKa,cAAA,WAYX,8BAZsB,WAYtB,CAAA;EAAA,EAAA,EAAA;UAAA,2BAAA,CAAA;;;;;;;;IAZsB,IAAA,uCAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IAiBX,UAAA,EAAA,IAAA;EAWX,CAAA;;;;;;+CAXiC,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAAA;;;;;;;;;;;;;;cAAtB,oDAAsB;;UAWjC,2BAAA,CAAA"}
@@ -0,0 +1,77 @@
1
+ import { ScalarTypeEnum, defineSchemaModel } from "@contractspec/lib.schema";
2
+
3
+ //#region src/client/client.schema.ts
4
+ /**
5
+ * Client profile.
6
+ */
7
+ const ClientModel = defineSchemaModel({
8
+ name: "Client",
9
+ description: "Client profile",
10
+ fields: {
11
+ id: {
12
+ type: ScalarTypeEnum.String_unsecure(),
13
+ isOptional: false
14
+ },
15
+ name: {
16
+ type: ScalarTypeEnum.String_unsecure(),
17
+ isOptional: false
18
+ },
19
+ contactEmail: {
20
+ type: ScalarTypeEnum.String_unsecure(),
21
+ isOptional: true
22
+ },
23
+ phone: {
24
+ type: ScalarTypeEnum.String_unsecure(),
25
+ isOptional: true
26
+ },
27
+ orgId: {
28
+ type: ScalarTypeEnum.String_unsecure(),
29
+ isOptional: false
30
+ },
31
+ ownerId: {
32
+ type: ScalarTypeEnum.String_unsecure(),
33
+ isOptional: false
34
+ },
35
+ createdAt: {
36
+ type: ScalarTypeEnum.DateTime(),
37
+ isOptional: false
38
+ }
39
+ }
40
+ });
41
+ /**
42
+ * Input for creating a client.
43
+ */
44
+ const CreateClientInputModel = defineSchemaModel({
45
+ name: "CreateClientInput",
46
+ description: "Input for creating a client",
47
+ fields: {
48
+ name: {
49
+ type: ScalarTypeEnum.String_unsecure(),
50
+ isOptional: false
51
+ },
52
+ contactEmail: {
53
+ type: ScalarTypeEnum.String_unsecure(),
54
+ isOptional: true
55
+ },
56
+ phone: {
57
+ type: ScalarTypeEnum.String_unsecure(),
58
+ isOptional: true
59
+ },
60
+ orgId: {
61
+ type: ScalarTypeEnum.String_unsecure(),
62
+ isOptional: false
63
+ },
64
+ ownerId: {
65
+ type: ScalarTypeEnum.String_unsecure(),
66
+ isOptional: false
67
+ },
68
+ metadata: {
69
+ type: ScalarTypeEnum.JSON(),
70
+ isOptional: true
71
+ }
72
+ }
73
+ });
74
+
75
+ //#endregion
76
+ export { ClientModel, CreateClientInputModel };
77
+ //# sourceMappingURL=client.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.schema.js","names":[],"sources":["../../src/client/client.schema.ts"],"sourcesContent":["import { defineSchemaModel, ScalarTypeEnum } from '@contractspec/lib.schema';\n\n/**\n * Client profile.\n */\nexport const ClientModel = defineSchemaModel({\n name: 'Client',\n description: 'Client profile',\n fields: {\n id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n contactEmail: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n phone: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n orgId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n ownerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },\n },\n});\n\n/**\n * Input for creating a client.\n */\nexport const CreateClientInputModel = defineSchemaModel({\n name: 'CreateClientInput',\n description: 'Input for creating a client',\n fields: {\n name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n contactEmail: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n phone: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },\n orgId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n ownerId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n metadata: { type: ScalarTypeEnum.JSON(), isOptional: true },\n },\n});\n"],"mappings":";;;;;;AAKA,MAAa,cAAc,kBAAkB;CAC3C,MAAM;CACN,aAAa;CACb,QAAQ;EACN,IAAI;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACjE,MAAM;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACnE,cAAc;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAM;EAC1E,OAAO;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAM;EACnE,OAAO;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACpE,SAAS;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACtE,WAAW;GAAE,MAAM,eAAe,UAAU;GAAE,YAAY;GAAO;EAClE;CACF,CAAC;;;;AAKF,MAAa,yBAAyB,kBAAkB;CACtD,MAAM;CACN,aAAa;CACb,QAAQ;EACN,MAAM;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACnE,cAAc;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAM;EAC1E,OAAO;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAM;EACnE,OAAO;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACpE,SAAS;GAAE,MAAM,eAAe,iBAAiB;GAAE,YAAY;GAAO;EACtE,UAAU;GAAE,MAAM,eAAe,MAAM;GAAE,YAAY;GAAM;EAC5D;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { CreateClientContract } from "./client.operations.js";
2
+ import { ClientModel, CreateClientInputModel } from "./client.schema.js";
3
+ export { ClientModel, CreateClientContract, CreateClientInputModel };
@@ -0,0 +1,4 @@
1
+ import { ClientModel, CreateClientInputModel } from "./client.schema.js";
2
+ import { CreateClientContract } from "./client.operations.js";
3
+
4
+ export { ClientModel, CreateClientContract, CreateClientInputModel };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1 @@
1
+ import "./service-business-os.docblock.js";
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,109 @@
1
+ import { registerDocBlocks } from "@contractspec/lib.contracts/docs";
2
+
3
+ //#region src/docs/service-business-os.docblock.ts
4
+ registerDocBlocks([
5
+ {
6
+ id: "docs.examples.service-business-os",
7
+ title: "Service Business OS",
8
+ summary: "Field/service business flow from client intake to quote, job scheduling, invoicing, and payments with notifications and audit trail.",
9
+ kind: "reference",
10
+ visibility: "public",
11
+ route: "/docs/examples/service-business-os",
12
+ tags: [
13
+ "services",
14
+ "quotes",
15
+ "jobs",
16
+ "invoices",
17
+ "payments"
18
+ ],
19
+ body: `## Flows
20
+
21
+ 1) **Client intake** → create client, capture contact + owner.
22
+ 2) **Quote** → draft, send, accept/reject (events + notifications).
23
+ 3) **Job** → schedule, assign technician, complete with notes and attachments.
24
+ 4) **Invoice** → issue after completion, track status.
25
+ 5) **Payment** → record payment and emit analytics/audit.
26
+
27
+ ## Modules reused
28
+ - Identity/RBAC for org + roles
29
+ - Files for attachments (proposals, receipts)
30
+ - Notifications for quote sent/accepted, job reminders, overdue invoices
31
+ - Jobs for reminder/schedule tasks
32
+ - Audit trail for all lifecycle changes
33
+
34
+ ## Presentations
35
+ - Dashboard, client list, quote list/detail, job board, invoice list, payment list (React + Markdown targets).
36
+ `
37
+ },
38
+ {
39
+ id: "docs.examples.service-business-os.goal",
40
+ title: "Service Business OS — Goal",
41
+ summary: "Why this field-service OS exists and outcomes it targets.",
42
+ kind: "goal",
43
+ visibility: "public",
44
+ route: "/docs/examples/service-business-os/goal",
45
+ tags: ["services", "goal"],
46
+ body: `## Why it matters
47
+ - Provides a regenerable, end-to-end service lifecycle (client → quote → job → invoice → payment).
48
+ - Keeps pricing, scheduling, invoicing, and payments consistent across surfaces.
49
+
50
+ ## Business/Product goal
51
+ - Deliver auditable quotes/jobs/invoices with notifications and reminders.
52
+ - Support attachments and PII-safe flows; stage new payment rules via feature flags.
53
+
54
+ ## Success criteria
55
+ - Spec changes regenerate UI/API/events cleanly across lifecycle steps.
56
+ - Audit/Notifications/Jobs remain wired for every mutation.`
57
+ },
58
+ {
59
+ id: "docs.examples.service-business-os.usage",
60
+ title: "Service Business OS — Usage",
61
+ summary: "How to operate, extend, and regenerate the service OS safely.",
62
+ kind: "usage",
63
+ visibility: "public",
64
+ route: "/docs/examples/service-business-os/usage",
65
+ tags: ["services", "usage"],
66
+ body: `## Setup
67
+ 1) Seed (if provided) or create client → quote → job → invoice → payment via UI.
68
+ 2) Configure Files for attachments and Notifications for quote/job/invoice events.
69
+
70
+ ## Extend & regenerate
71
+ 1) Adjust schemas: quote line items, job statuses, invoice terms, payment methods.
72
+ 2) Regenerate to sync UI/API/events; mark PII paths in policy.
73
+ 3) Use Feature Flags to trial new payment rules or reminder cadences.
74
+
75
+ ## Guardrails
76
+ - Emit events for quote accepted/rejected, job scheduled/completed, invoice overdue, payment recorded.
77
+ - Keep pricing/tax rules explicit in spec; avoid implicit handler math.
78
+ - Use Audit Trail for lifecycle mutations; schedule reminders via Jobs.`
79
+ },
80
+ {
81
+ id: "docs.examples.service-business-os.constraints",
82
+ title: "Service Business OS — Constraints & Safety",
83
+ summary: "Internal guardrails for quotes/jobs/invoices/payments and regeneration safety.",
84
+ kind: "reference",
85
+ visibility: "internal",
86
+ route: "/docs/examples/service-business-os/constraints",
87
+ tags: [
88
+ "services",
89
+ "constraints",
90
+ "internal"
91
+ ],
92
+ body: `## Constraints
93
+ - Commission/tax/payment rules must be explicit in spec; no hidden handler math.
94
+ - Events to emit: quote.sent/accepted/rejected, job.scheduled/completed, invoice.issued/overdue, payment.recorded.
95
+ - Regeneration must not alter payment semantics without reviewed spec changes.
96
+
97
+ ## PII & Attachments
98
+ - Mark PII paths (client contact, address); redact in markdown/JSON.
99
+ - Files (quotes, receipts) should use presigned URLs with scoped access.
100
+
101
+ ## Verification
102
+ - Add fixtures for quote/job/invoice state transitions.
103
+ - Ensure Notifications/Audit/Jobs wiring persists after regeneration.
104
+ - Use Feature Flags to trial new payment rules/reminder cadences; default safe/off.`
105
+ }
106
+ ]);
107
+
108
+ //#endregion
109
+ //# sourceMappingURL=service-business-os.docblock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-business-os.docblock.js","names":[],"sources":["../../src/docs/service-business-os.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@contractspec/lib.contracts/docs';\nimport { registerDocBlocks } from '@contractspec/lib.contracts/docs';\n\nconst serviceBusinessDocBlocks: DocBlock[] = [\n {\n id: 'docs.examples.service-business-os',\n title: 'Service Business OS',\n summary:\n 'Field/service business flow from client intake to quote, job scheduling, invoicing, and payments with notifications and audit trail.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/examples/service-business-os',\n tags: ['services', 'quotes', 'jobs', 'invoices', 'payments'],\n body: `## Flows\n\n1) **Client intake** → create client, capture contact + owner.\n2) **Quote** → draft, send, accept/reject (events + notifications).\n3) **Job** → schedule, assign technician, complete with notes and attachments.\n4) **Invoice** → issue after completion, track status.\n5) **Payment** → record payment and emit analytics/audit.\n\n## Modules reused\n- Identity/RBAC for org + roles\n- Files for attachments (proposals, receipts)\n- Notifications for quote sent/accepted, job reminders, overdue invoices\n- Jobs for reminder/schedule tasks\n- Audit trail for all lifecycle changes\n\n## Presentations\n- Dashboard, client list, quote list/detail, job board, invoice list, payment list (React + Markdown targets).\n`,\n },\n {\n id: 'docs.examples.service-business-os.goal',\n title: 'Service Business OS — Goal',\n summary: 'Why this field-service OS exists and outcomes it targets.',\n kind: 'goal',\n visibility: 'public',\n route: '/docs/examples/service-business-os/goal',\n tags: ['services', 'goal'],\n body: `## Why it matters\n- Provides a regenerable, end-to-end service lifecycle (client → quote → job → invoice → payment).\n- Keeps pricing, scheduling, invoicing, and payments consistent across surfaces.\n\n## Business/Product goal\n- Deliver auditable quotes/jobs/invoices with notifications and reminders.\n- Support attachments and PII-safe flows; stage new payment rules via feature flags.\n\n## Success criteria\n- Spec changes regenerate UI/API/events cleanly across lifecycle steps.\n- Audit/Notifications/Jobs remain wired for every mutation.`,\n },\n {\n id: 'docs.examples.service-business-os.usage',\n title: 'Service Business OS — Usage',\n summary: 'How to operate, extend, and regenerate the service OS safely.',\n kind: 'usage',\n visibility: 'public',\n route: '/docs/examples/service-business-os/usage',\n tags: ['services', 'usage'],\n body: `## Setup\n1) Seed (if provided) or create client → quote → job → invoice → payment via UI.\n2) Configure Files for attachments and Notifications for quote/job/invoice events.\n\n## Extend & regenerate\n1) Adjust schemas: quote line items, job statuses, invoice terms, payment methods.\n2) Regenerate to sync UI/API/events; mark PII paths in policy.\n3) Use Feature Flags to trial new payment rules or reminder cadences.\n\n## Guardrails\n- Emit events for quote accepted/rejected, job scheduled/completed, invoice overdue, payment recorded.\n- Keep pricing/tax rules explicit in spec; avoid implicit handler math.\n- Use Audit Trail for lifecycle mutations; schedule reminders via Jobs.`,\n },\n {\n id: 'docs.examples.service-business-os.constraints',\n title: 'Service Business OS — Constraints & Safety',\n summary:\n 'Internal guardrails for quotes/jobs/invoices/payments and regeneration safety.',\n kind: 'reference',\n visibility: 'internal',\n route: '/docs/examples/service-business-os/constraints',\n tags: ['services', 'constraints', 'internal'],\n body: `## Constraints\n- Commission/tax/payment rules must be explicit in spec; no hidden handler math.\n- Events to emit: quote.sent/accepted/rejected, job.scheduled/completed, invoice.issued/overdue, payment.recorded.\n- Regeneration must not alter payment semantics without reviewed spec changes.\n\n## PII & Attachments\n- Mark PII paths (client contact, address); redact in markdown/JSON.\n- Files (quotes, receipts) should use presigned URLs with scoped access.\n\n## Verification\n- Add fixtures for quote/job/invoice state transitions.\n- Ensure Notifications/Audit/Jobs wiring persists after regeneration.\n- Use Feature Flags to trial new payment rules/reminder cadences; default safe/off.`,\n },\n];\n\nregisterDocBlocks(serviceBusinessDocBlocks);\n"],"mappings":";;;AAmGA,kBAhG6C;CAC3C;EACE,IAAI;EACJ,OAAO;EACP,SACE;EACF,MAAM;EACN,YAAY;EACZ,OAAO;EACP,MAAM;GAAC;GAAY;GAAU;GAAQ;GAAY;GAAW;EAC5D,MAAM;;;;;;;;;;;;;;;;;;EAkBP;CACD;EACE,IAAI;EACJ,OAAO;EACP,SAAS;EACT,MAAM;EACN,YAAY;EACZ,OAAO;EACP,MAAM,CAAC,YAAY,OAAO;EAC1B,MAAM;;;;;;;;;;;EAWP;CACD;EACE,IAAI;EACJ,OAAO;EACP,SAAS;EACT,MAAM;EACN,YAAY;EACZ,OAAO;EACP,MAAM,CAAC,YAAY,QAAQ;EAC3B,MAAM;;;;;;;;;;;;;EAaP;CACD;EACE,IAAI;EACJ,OAAO;EACP,SACE;EACF,MAAM;EACN,YAAY;EACZ,OAAO;EACP,MAAM;GAAC;GAAY;GAAe;GAAW;EAC7C,MAAM;;;;;;;;;;;;;EAaP;CACF,CAE0C"}
@@ -0,0 +1,168 @@
1
+ import * as _contractspec_lib_schema125 from "@contractspec/lib.schema";
2
+ import { ModuleSchemaContribution } from "@contractspec/lib.schema";
3
+
4
+ //#region src/entities/index.d.ts
5
+ declare const QuoteStatusEnum: _contractspec_lib_schema125.EntityEnumDef;
6
+ declare const JobStatusEnum: _contractspec_lib_schema125.EntityEnumDef;
7
+ declare const InvoiceStatusEnum: _contractspec_lib_schema125.EntityEnumDef;
8
+ declare const PaymentMethodEnum: _contractspec_lib_schema125.EntityEnumDef;
9
+ declare const ClientEntity: _contractspec_lib_schema125.EntitySpec<{
10
+ id: _contractspec_lib_schema125.EntityScalarField;
11
+ name: _contractspec_lib_schema125.EntityScalarField;
12
+ contactEmail: _contractspec_lib_schema125.EntityScalarField;
13
+ phone: _contractspec_lib_schema125.EntityScalarField;
14
+ address: _contractspec_lib_schema125.EntityScalarField;
15
+ industry: _contractspec_lib_schema125.EntityScalarField;
16
+ orgId: _contractspec_lib_schema125.EntityScalarField;
17
+ ownerId: _contractspec_lib_schema125.EntityScalarField;
18
+ metadata: _contractspec_lib_schema125.EntityScalarField;
19
+ createdAt: _contractspec_lib_schema125.EntityScalarField;
20
+ updatedAt: _contractspec_lib_schema125.EntityScalarField;
21
+ quotes: _contractspec_lib_schema125.EntityRelationField;
22
+ jobs: _contractspec_lib_schema125.EntityRelationField;
23
+ }>;
24
+ declare const QuoteEntity: _contractspec_lib_schema125.EntitySpec<{
25
+ id: _contractspec_lib_schema125.EntityScalarField;
26
+ clientId: _contractspec_lib_schema125.EntityScalarField;
27
+ title: _contractspec_lib_schema125.EntityScalarField;
28
+ description: _contractspec_lib_schema125.EntityScalarField;
29
+ amount: _contractspec_lib_schema125.EntityScalarField;
30
+ currency: _contractspec_lib_schema125.EntityScalarField;
31
+ status: _contractspec_lib_schema125.EntityEnumField;
32
+ validUntil: _contractspec_lib_schema125.EntityScalarField;
33
+ terms: _contractspec_lib_schema125.EntityScalarField;
34
+ orgId: _contractspec_lib_schema125.EntityScalarField;
35
+ ownerId: _contractspec_lib_schema125.EntityScalarField;
36
+ createdAt: _contractspec_lib_schema125.EntityScalarField;
37
+ updatedAt: _contractspec_lib_schema125.EntityScalarField;
38
+ client: _contractspec_lib_schema125.EntityRelationField;
39
+ jobs: _contractspec_lib_schema125.EntityRelationField;
40
+ }>;
41
+ declare const JobEntity: _contractspec_lib_schema125.EntitySpec<{
42
+ id: _contractspec_lib_schema125.EntityScalarField;
43
+ quoteId: _contractspec_lib_schema125.EntityScalarField;
44
+ clientId: _contractspec_lib_schema125.EntityScalarField;
45
+ title: _contractspec_lib_schema125.EntityScalarField;
46
+ status: _contractspec_lib_schema125.EntityEnumField;
47
+ scheduledAt: _contractspec_lib_schema125.EntityScalarField;
48
+ completedAt: _contractspec_lib_schema125.EntityScalarField;
49
+ assignedTo: _contractspec_lib_schema125.EntityScalarField;
50
+ location: _contractspec_lib_schema125.EntityScalarField;
51
+ notes: _contractspec_lib_schema125.EntityScalarField;
52
+ orgId: _contractspec_lib_schema125.EntityScalarField;
53
+ createdAt: _contractspec_lib_schema125.EntityScalarField;
54
+ updatedAt: _contractspec_lib_schema125.EntityScalarField;
55
+ quote: _contractspec_lib_schema125.EntityRelationField;
56
+ client: _contractspec_lib_schema125.EntityRelationField;
57
+ invoices: _contractspec_lib_schema125.EntityRelationField;
58
+ }>;
59
+ declare const InvoiceEntity: _contractspec_lib_schema125.EntitySpec<{
60
+ id: _contractspec_lib_schema125.EntityScalarField;
61
+ jobId: _contractspec_lib_schema125.EntityScalarField;
62
+ invoiceNumber: _contractspec_lib_schema125.EntityScalarField;
63
+ amount: _contractspec_lib_schema125.EntityScalarField;
64
+ currency: _contractspec_lib_schema125.EntityScalarField;
65
+ status: _contractspec_lib_schema125.EntityEnumField;
66
+ dueDate: _contractspec_lib_schema125.EntityScalarField;
67
+ issuedAt: _contractspec_lib_schema125.EntityScalarField;
68
+ paidAt: _contractspec_lib_schema125.EntityScalarField;
69
+ orgId: _contractspec_lib_schema125.EntityScalarField;
70
+ notes: _contractspec_lib_schema125.EntityScalarField;
71
+ metadata: _contractspec_lib_schema125.EntityScalarField;
72
+ createdAt: _contractspec_lib_schema125.EntityScalarField;
73
+ updatedAt: _contractspec_lib_schema125.EntityScalarField;
74
+ job: _contractspec_lib_schema125.EntityRelationField;
75
+ payments: _contractspec_lib_schema125.EntityRelationField;
76
+ }>;
77
+ declare const PaymentEntity: _contractspec_lib_schema125.EntitySpec<{
78
+ id: _contractspec_lib_schema125.EntityScalarField;
79
+ invoiceId: _contractspec_lib_schema125.EntityScalarField;
80
+ amount: _contractspec_lib_schema125.EntityScalarField;
81
+ currency: _contractspec_lib_schema125.EntityScalarField;
82
+ method: _contractspec_lib_schema125.EntityEnumField;
83
+ reference: _contractspec_lib_schema125.EntityScalarField;
84
+ receivedAt: _contractspec_lib_schema125.EntityScalarField;
85
+ orgId: _contractspec_lib_schema125.EntityScalarField;
86
+ createdAt: _contractspec_lib_schema125.EntityScalarField;
87
+ invoice: _contractspec_lib_schema125.EntityRelationField;
88
+ }>;
89
+ declare const serviceBusinessEntities: (_contractspec_lib_schema125.EntitySpec<{
90
+ id: _contractspec_lib_schema125.EntityScalarField;
91
+ name: _contractspec_lib_schema125.EntityScalarField;
92
+ contactEmail: _contractspec_lib_schema125.EntityScalarField;
93
+ phone: _contractspec_lib_schema125.EntityScalarField;
94
+ address: _contractspec_lib_schema125.EntityScalarField;
95
+ industry: _contractspec_lib_schema125.EntityScalarField;
96
+ orgId: _contractspec_lib_schema125.EntityScalarField;
97
+ ownerId: _contractspec_lib_schema125.EntityScalarField;
98
+ metadata: _contractspec_lib_schema125.EntityScalarField;
99
+ createdAt: _contractspec_lib_schema125.EntityScalarField;
100
+ updatedAt: _contractspec_lib_schema125.EntityScalarField;
101
+ quotes: _contractspec_lib_schema125.EntityRelationField;
102
+ jobs: _contractspec_lib_schema125.EntityRelationField;
103
+ }> | _contractspec_lib_schema125.EntitySpec<{
104
+ id: _contractspec_lib_schema125.EntityScalarField;
105
+ clientId: _contractspec_lib_schema125.EntityScalarField;
106
+ title: _contractspec_lib_schema125.EntityScalarField;
107
+ description: _contractspec_lib_schema125.EntityScalarField;
108
+ amount: _contractspec_lib_schema125.EntityScalarField;
109
+ currency: _contractspec_lib_schema125.EntityScalarField;
110
+ status: _contractspec_lib_schema125.EntityEnumField;
111
+ validUntil: _contractspec_lib_schema125.EntityScalarField;
112
+ terms: _contractspec_lib_schema125.EntityScalarField;
113
+ orgId: _contractspec_lib_schema125.EntityScalarField;
114
+ ownerId: _contractspec_lib_schema125.EntityScalarField;
115
+ createdAt: _contractspec_lib_schema125.EntityScalarField;
116
+ updatedAt: _contractspec_lib_schema125.EntityScalarField;
117
+ client: _contractspec_lib_schema125.EntityRelationField;
118
+ jobs: _contractspec_lib_schema125.EntityRelationField;
119
+ }> | _contractspec_lib_schema125.EntitySpec<{
120
+ id: _contractspec_lib_schema125.EntityScalarField;
121
+ quoteId: _contractspec_lib_schema125.EntityScalarField;
122
+ clientId: _contractspec_lib_schema125.EntityScalarField;
123
+ title: _contractspec_lib_schema125.EntityScalarField;
124
+ status: _contractspec_lib_schema125.EntityEnumField;
125
+ scheduledAt: _contractspec_lib_schema125.EntityScalarField;
126
+ completedAt: _contractspec_lib_schema125.EntityScalarField;
127
+ assignedTo: _contractspec_lib_schema125.EntityScalarField;
128
+ location: _contractspec_lib_schema125.EntityScalarField;
129
+ notes: _contractspec_lib_schema125.EntityScalarField;
130
+ orgId: _contractspec_lib_schema125.EntityScalarField;
131
+ createdAt: _contractspec_lib_schema125.EntityScalarField;
132
+ updatedAt: _contractspec_lib_schema125.EntityScalarField;
133
+ quote: _contractspec_lib_schema125.EntityRelationField;
134
+ client: _contractspec_lib_schema125.EntityRelationField;
135
+ invoices: _contractspec_lib_schema125.EntityRelationField;
136
+ }> | _contractspec_lib_schema125.EntitySpec<{
137
+ id: _contractspec_lib_schema125.EntityScalarField;
138
+ jobId: _contractspec_lib_schema125.EntityScalarField;
139
+ invoiceNumber: _contractspec_lib_schema125.EntityScalarField;
140
+ amount: _contractspec_lib_schema125.EntityScalarField;
141
+ currency: _contractspec_lib_schema125.EntityScalarField;
142
+ status: _contractspec_lib_schema125.EntityEnumField;
143
+ dueDate: _contractspec_lib_schema125.EntityScalarField;
144
+ issuedAt: _contractspec_lib_schema125.EntityScalarField;
145
+ paidAt: _contractspec_lib_schema125.EntityScalarField;
146
+ orgId: _contractspec_lib_schema125.EntityScalarField;
147
+ notes: _contractspec_lib_schema125.EntityScalarField;
148
+ metadata: _contractspec_lib_schema125.EntityScalarField;
149
+ createdAt: _contractspec_lib_schema125.EntityScalarField;
150
+ updatedAt: _contractspec_lib_schema125.EntityScalarField;
151
+ job: _contractspec_lib_schema125.EntityRelationField;
152
+ payments: _contractspec_lib_schema125.EntityRelationField;
153
+ }> | _contractspec_lib_schema125.EntitySpec<{
154
+ id: _contractspec_lib_schema125.EntityScalarField;
155
+ invoiceId: _contractspec_lib_schema125.EntityScalarField;
156
+ amount: _contractspec_lib_schema125.EntityScalarField;
157
+ currency: _contractspec_lib_schema125.EntityScalarField;
158
+ method: _contractspec_lib_schema125.EntityEnumField;
159
+ reference: _contractspec_lib_schema125.EntityScalarField;
160
+ receivedAt: _contractspec_lib_schema125.EntityScalarField;
161
+ orgId: _contractspec_lib_schema125.EntityScalarField;
162
+ createdAt: _contractspec_lib_schema125.EntityScalarField;
163
+ invoice: _contractspec_lib_schema125.EntityRelationField;
164
+ }>)[];
165
+ declare const serviceBusinessSchemaContribution: ModuleSchemaContribution;
166
+ //#endregion
167
+ export { ClientEntity, InvoiceEntity, InvoiceStatusEnum, JobEntity, JobStatusEnum, PaymentEntity, PaymentMethodEnum, QuoteEntity, QuoteStatusEnum, serviceBusinessEntities, serviceBusinessSchemaContribution };
168
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/entities/index.ts"],"sourcesContent":[],"mappings":";;;;cAUa,iBAKX,2BAAA,CAL0B;cAOf,eAKX,2BAAA,CALwB;cAOb,mBAKX,2BAAA,CAL4B;AAdjB,cAqBA,iBAhBX,EAqBA,2BAAA,CAL4B,aAhB5B;AAEW,cAqBA,YAhBX,8BAgBuB,UAhBvB,CAAA;EAEW,EAAA,EA4CX,2BAAA,CAAA,iBAvCA;EAEW,IAAA,+CAKX;EAEW,YAAA,+CA8BX;EAAA,KAAA,+CAAA;;;;;;;;;;;cAEW,yCAAW;MA0CtB,2BAAA,CAAA;yDA1EuB;EAAA,KAAA,+CAAA;EAgCZ,WAAA,+CA0CX;EAAA,MAAA,+CAAA;;;;;;;;;;;;cAEW,uCAAS;MA8CpB,2BAAA,CAAA;;yDA1FsB;EAAA,KAAA,+CAAA;EA4CX,MAAA,6CA8CX;EAAA,WAAA,+CAAA;;;;;;;;;;;;cAEW,2CAAa;MAsCxB,2BAAA,CAAA;;;uDAtFoB;EAAA,QAAA,+CAAA;EAgDT,MAAA,6CAsCX;EAAA,OAAA,+CAAA;;;;;;;;;;;cAEW,2CAAa;MA4BxB,2BAAA,CAAA;;;;qDApEwB;EAAA,SAAA,+CAAA;EAwCb,UAAA,+CA4BX;EAAA,KAAA,+CAAA;;;;cAEW,sDAAuB;MAMnC,2BAAA,CAAA;;;;;yDApCyB;EAAA,KAAA,+CAAA;EA8Bb,OAAA,+CAMZ;EAAA,QAAA,+CAAA;;;;;;MANmC,2BAAA,CAAA;;;;;;;2DAAA;EAAA,KAAA,+CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAQvB,mCAAmC"}