business-as-code 0.2.1 → 2.0.1

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 (190) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/CHANGELOG.md +9 -0
  3. package/IMPLEMENTATION.md +226 -0
  4. package/README.md +1133 -193
  5. package/dist/business.d.ts +62 -0
  6. package/dist/business.d.ts.map +1 -0
  7. package/dist/business.js +109 -0
  8. package/dist/business.js.map +1 -0
  9. package/dist/dollar.d.ts +60 -0
  10. package/dist/dollar.d.ts.map +1 -0
  11. package/dist/dollar.js +107 -0
  12. package/dist/dollar.js.map +1 -0
  13. package/dist/entities/assets.d.ts +21 -0
  14. package/dist/entities/assets.d.ts.map +1 -0
  15. package/dist/entities/assets.js +323 -0
  16. package/dist/entities/assets.js.map +1 -0
  17. package/dist/entities/business.d.ts +36 -0
  18. package/dist/entities/business.d.ts.map +1 -0
  19. package/dist/entities/business.js +370 -0
  20. package/dist/entities/business.js.map +1 -0
  21. package/dist/entities/communication.d.ts +21 -0
  22. package/dist/entities/communication.d.ts.map +1 -0
  23. package/dist/entities/communication.js +255 -0
  24. package/dist/entities/communication.js.map +1 -0
  25. package/dist/entities/customers.d.ts +58 -0
  26. package/dist/entities/customers.d.ts.map +1 -0
  27. package/dist/entities/customers.js +989 -0
  28. package/dist/entities/customers.js.map +1 -0
  29. package/dist/entities/financials.d.ts +59 -0
  30. package/dist/entities/financials.d.ts.map +1 -0
  31. package/dist/entities/financials.js +932 -0
  32. package/dist/entities/financials.js.map +1 -0
  33. package/dist/entities/goals.d.ts +58 -0
  34. package/dist/entities/goals.d.ts.map +1 -0
  35. package/dist/entities/goals.js +800 -0
  36. package/dist/entities/goals.js.map +1 -0
  37. package/dist/entities/index.d.ts +299 -0
  38. package/dist/entities/index.d.ts.map +1 -0
  39. package/dist/entities/index.js +198 -0
  40. package/dist/entities/index.js.map +1 -0
  41. package/dist/entities/legal.d.ts +21 -0
  42. package/dist/entities/legal.d.ts.map +1 -0
  43. package/dist/entities/legal.js +301 -0
  44. package/dist/entities/legal.js.map +1 -0
  45. package/dist/entities/market.d.ts +21 -0
  46. package/dist/entities/market.d.ts.map +1 -0
  47. package/dist/entities/market.js +301 -0
  48. package/dist/entities/market.js.map +1 -0
  49. package/dist/entities/marketing.d.ts +67 -0
  50. package/dist/entities/marketing.d.ts.map +1 -0
  51. package/dist/entities/marketing.js +1157 -0
  52. package/dist/entities/marketing.js.map +1 -0
  53. package/dist/entities/offerings.d.ts +51 -0
  54. package/dist/entities/offerings.d.ts.map +1 -0
  55. package/dist/entities/offerings.js +727 -0
  56. package/dist/entities/offerings.js.map +1 -0
  57. package/dist/entities/operations.d.ts +58 -0
  58. package/dist/entities/operations.d.ts.map +1 -0
  59. package/dist/entities/operations.js +787 -0
  60. package/dist/entities/operations.js.map +1 -0
  61. package/dist/entities/organization.d.ts +57 -0
  62. package/dist/entities/organization.d.ts.map +1 -0
  63. package/dist/entities/organization.js +807 -0
  64. package/dist/entities/organization.js.map +1 -0
  65. package/dist/entities/partnerships.d.ts +21 -0
  66. package/dist/entities/partnerships.d.ts.map +1 -0
  67. package/dist/entities/partnerships.js +300 -0
  68. package/dist/entities/partnerships.js.map +1 -0
  69. package/dist/entities/planning.d.ts +87 -0
  70. package/dist/entities/planning.d.ts.map +1 -0
  71. package/dist/entities/planning.js +271 -0
  72. package/dist/entities/planning.js.map +1 -0
  73. package/dist/entities/projects.d.ts +25 -0
  74. package/dist/entities/projects.d.ts.map +1 -0
  75. package/dist/entities/projects.js +349 -0
  76. package/dist/entities/projects.js.map +1 -0
  77. package/dist/entities/risk.d.ts +21 -0
  78. package/dist/entities/risk.d.ts.map +1 -0
  79. package/dist/entities/risk.js +293 -0
  80. package/dist/entities/risk.js.map +1 -0
  81. package/dist/entities/sales.d.ts +72 -0
  82. package/dist/entities/sales.d.ts.map +1 -0
  83. package/dist/entities/sales.js +1248 -0
  84. package/dist/entities/sales.js.map +1 -0
  85. package/dist/financials.d.ts +130 -0
  86. package/dist/financials.d.ts.map +1 -0
  87. package/dist/financials.js +297 -0
  88. package/dist/financials.js.map +1 -0
  89. package/dist/goals.d.ts +87 -0
  90. package/dist/goals.d.ts.map +1 -0
  91. package/dist/goals.js +215 -0
  92. package/dist/goals.js.map +1 -0
  93. package/dist/index.d.ts +97 -4
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +131 -1079
  96. package/dist/index.js.map +1 -1
  97. package/dist/kpis.d.ts +118 -0
  98. package/dist/kpis.d.ts.map +1 -0
  99. package/dist/kpis.js +232 -0
  100. package/dist/kpis.js.map +1 -0
  101. package/dist/metrics.d.ts +448 -0
  102. package/dist/metrics.d.ts.map +1 -0
  103. package/dist/metrics.js +325 -0
  104. package/dist/metrics.js.map +1 -0
  105. package/dist/okrs.d.ts +123 -0
  106. package/dist/okrs.d.ts.map +1 -0
  107. package/dist/okrs.js +269 -0
  108. package/dist/okrs.js.map +1 -0
  109. package/dist/organization.d.ts +585 -0
  110. package/dist/organization.d.ts.map +1 -0
  111. package/dist/organization.js +173 -0
  112. package/dist/organization.js.map +1 -0
  113. package/dist/process.d.ts +112 -0
  114. package/dist/process.d.ts.map +1 -0
  115. package/dist/process.js +241 -0
  116. package/dist/process.js.map +1 -0
  117. package/dist/product.d.ts +85 -0
  118. package/dist/product.d.ts.map +1 -0
  119. package/dist/product.js +145 -0
  120. package/dist/product.js.map +1 -0
  121. package/dist/queries.d.ts +304 -0
  122. package/dist/queries.d.ts.map +1 -0
  123. package/dist/queries.js +415 -0
  124. package/dist/queries.js.map +1 -0
  125. package/dist/roles.d.ts +340 -0
  126. package/dist/roles.d.ts.map +1 -0
  127. package/dist/roles.js +255 -0
  128. package/dist/roles.js.map +1 -0
  129. package/dist/service.d.ts +61 -0
  130. package/dist/service.d.ts.map +1 -0
  131. package/dist/service.js +140 -0
  132. package/dist/service.js.map +1 -0
  133. package/dist/types.d.ts +459 -0
  134. package/dist/types.d.ts.map +1 -0
  135. package/dist/types.js +5 -0
  136. package/dist/types.js.map +1 -0
  137. package/dist/vision.d.ts +38 -0
  138. package/dist/vision.d.ts.map +1 -0
  139. package/dist/vision.js +68 -0
  140. package/dist/vision.js.map +1 -0
  141. package/dist/workflow.d.ts +115 -0
  142. package/dist/workflow.d.ts.map +1 -0
  143. package/dist/workflow.js +247 -0
  144. package/dist/workflow.js.map +1 -0
  145. package/examples/basic-usage.ts +307 -0
  146. package/package.json +19 -60
  147. package/src/business.ts +121 -0
  148. package/src/dollar.ts +132 -0
  149. package/src/entities/assets.ts +332 -0
  150. package/src/entities/business.ts +406 -0
  151. package/src/entities/communication.ts +264 -0
  152. package/src/entities/customers.ts +1072 -0
  153. package/src/entities/financials.ts +1011 -0
  154. package/src/entities/goals.ts +871 -0
  155. package/src/entities/index.ts +383 -0
  156. package/src/entities/legal.ts +310 -0
  157. package/src/entities/market.ts +310 -0
  158. package/src/entities/marketing.ts +1249 -0
  159. package/src/entities/offerings.ts +789 -0
  160. package/src/entities/operations.ts +861 -0
  161. package/src/entities/organization.ts +876 -0
  162. package/src/entities/partnerships.ts +309 -0
  163. package/src/entities/planning.ts +307 -0
  164. package/src/entities/projects.ts +360 -0
  165. package/src/entities/risk.ts +302 -0
  166. package/src/entities/sales.ts +1352 -0
  167. package/src/financials.ts +352 -0
  168. package/src/goals.ts +250 -0
  169. package/src/index.test.ts +336 -0
  170. package/src/index.ts +530 -0
  171. package/src/kpis.ts +275 -0
  172. package/src/metrics.ts +825 -0
  173. package/src/okrs.ts +325 -0
  174. package/src/organization.ts +909 -0
  175. package/src/process.ts +272 -0
  176. package/src/product.ts +178 -0
  177. package/src/queries.ts +767 -0
  178. package/src/roles.ts +686 -0
  179. package/src/service.ts +164 -0
  180. package/src/types.ts +493 -0
  181. package/src/vision.ts +88 -0
  182. package/src/workflow.ts +280 -0
  183. package/tsconfig.json +9 -0
  184. package/dist/loaders/index.d.ts +0 -174
  185. package/dist/loaders/index.js +0 -366
  186. package/dist/loaders/index.js.map +0 -1
  187. package/dist/schema/index.d.ts +0 -146
  188. package/dist/schema/index.js +0 -716
  189. package/dist/schema/index.js.map +0 -1
  190. package/dist/types-CJ9eGS_C.d.ts +0 -86
@@ -0,0 +1,310 @@
1
+ import type { Noun } from 'ai-database'
2
+
3
+ /**
4
+ * Legal Entities
5
+ * Agreement, Contract, License, IntellectualProperty, Compliance, Policy, Trademark
6
+ */
7
+
8
+ export const Agreement: Noun = {
9
+ singular: 'agreement',
10
+ plural: 'agreements',
11
+ description: 'A legal agreement or contract between parties',
12
+ properties: {
13
+ name: { type: 'string', description: 'Agreement name or title' },
14
+ type: { type: 'string', description: 'Type of agreement', examples: ['NDA', 'MSA', 'SOW', 'SLA', 'DPA', 'employment', 'partnership', 'licensing', 'distribution', 'consulting', 'subscription'] },
15
+ status: { type: 'string', description: 'Agreement status', examples: ['draft', 'review', 'negotiation', 'pending-signature', 'active', 'expired', 'terminated', 'renewed'] },
16
+ description: { type: 'string', description: 'Agreement description' },
17
+ parties: { type: 'string[]', description: 'Parties to the agreement' },
18
+ counterparty: { type: 'string', description: 'Primary counterparty' },
19
+ effectiveDate: { type: 'date', description: 'Agreement effective date' },
20
+ expirationDate: { type: 'date', description: 'Agreement expiration date' },
21
+ terminationDate: { type: 'date', description: 'Actual termination date', optional: true },
22
+ term: { type: 'string', description: 'Agreement term length', examples: ['1-year', '2-year', '3-year', 'perpetual', 'month-to-month'] },
23
+ autoRenew: { type: 'boolean', description: 'Auto-renewal enabled' },
24
+ renewalTerms: { type: 'string', description: 'Renewal terms' },
25
+ noticePeriod: { type: 'number', description: 'Notice period in days' },
26
+ value: { type: 'number', description: 'Total agreement value' },
27
+ currency: { type: 'string', description: 'Currency' },
28
+ paymentTerms: { type: 'string', description: 'Payment terms' },
29
+ governingLaw: { type: 'string', description: 'Governing law jurisdiction' },
30
+ disputeResolution: { type: 'string', description: 'Dispute resolution method', examples: ['litigation', 'arbitration', 'mediation'] },
31
+ confidentiality: { type: 'boolean', description: 'Contains confidentiality provisions' },
32
+ nonCompete: { type: 'boolean', description: 'Contains non-compete clause' },
33
+ exclusivity: { type: 'boolean', description: 'Contains exclusivity provisions' },
34
+ indemnification: { type: 'boolean', description: 'Contains indemnification clause' },
35
+ liabilityLimit: { type: 'number', description: 'Liability limitation amount', optional: true },
36
+ version: { type: 'string', description: 'Document version' },
37
+ documentUrl: { type: 'string', description: 'Document storage URL' },
38
+ signedCopyUrl: { type: 'string', description: 'Signed copy URL', optional: true },
39
+ signatories: { type: 'string[]', description: 'Signatories' },
40
+ signedDate: { type: 'date', description: 'Date signed', optional: true },
41
+ internalOwner: { type: 'string', description: 'Internal contract owner' },
42
+ legalReviewer: { type: 'string', description: 'Legal reviewer' },
43
+ approver: { type: 'string', description: 'Approval authority' },
44
+ approvalDate: { type: 'date', description: 'Approval date', optional: true },
45
+ amendments: { type: 'number', description: 'Number of amendments' },
46
+ lastAmendmentDate: { type: 'date', description: 'Last amendment date', optional: true },
47
+ tags: { type: 'string[]', description: 'Agreement tags' },
48
+ notes: { type: 'string', description: 'Internal notes', optional: true },
49
+ metadata: { type: 'object', description: 'Additional metadata', optional: true },
50
+ },
51
+ relationships: {
52
+ customer: { type: 'customer', description: 'Related customer', backref: 'agreements' },
53
+ partner: { type: 'partner', description: 'Related partner', backref: 'agreements' },
54
+ vendor: { type: 'vendor', description: 'Related vendor', backref: 'agreements' },
55
+ parentAgreement: { type: 'agreement', description: 'Parent master agreement', backref: 'childAgreements' },
56
+ amendments: { type: 'agreement[]', description: 'Amendment documents', backref: 'parentAgreement' },
57
+ relatedDeals: { type: 'deal[]', description: 'Related deals', backref: 'agreement' },
58
+ },
59
+ actions: ['create', 'update', 'draft', 'review', 'negotiate', 'approve', 'reject', 'sign', 'execute', 'amend', 'renew', 'terminate', 'expire', 'archive'],
60
+ events: ['created', 'updated', 'drafted', 'reviewed', 'negotiated', 'approved', 'rejected', 'signed', 'executed', 'amended', 'renewed', 'terminated', 'expired', 'archived'],
61
+ }
62
+
63
+ export const License: Noun = {
64
+ singular: 'license',
65
+ plural: 'licenses',
66
+ description: 'A license granted for software, content, or intellectual property',
67
+ properties: {
68
+ name: { type: 'string', description: 'License name' },
69
+ type: { type: 'string', description: 'Type of license', examples: ['software', 'content', 'patent', 'trademark', 'copyright', 'API', 'SDK', 'data'] },
70
+ model: { type: 'string', description: 'License model', examples: ['perpetual', 'subscription', 'usage-based', 'seat-based', 'site', 'enterprise', 'OEM'] },
71
+ status: { type: 'string', description: 'License status', examples: ['draft', 'active', 'suspended', 'expired', 'revoked', 'transferred'] },
72
+ licenseKey: { type: 'string', description: 'License key or identifier' },
73
+ version: { type: 'string', description: 'Licensed version' },
74
+ product: { type: 'string', description: 'Licensed product' },
75
+ edition: { type: 'string', description: 'Product edition', examples: ['free', 'starter', 'professional', 'enterprise', 'ultimate'] },
76
+ seats: { type: 'number', description: 'Number of seats/users' },
77
+ maxSeats: { type: 'number', description: 'Maximum allowed seats' },
78
+ usedSeats: { type: 'number', description: 'Currently used seats' },
79
+ instances: { type: 'number', description: 'Allowed instances' },
80
+ environments: { type: 'string[]', description: 'Allowed environments', examples: ['production', 'staging', 'development', 'test'] },
81
+ features: { type: 'string[]', description: 'Licensed features' },
82
+ restrictions: { type: 'string[]', description: 'License restrictions' },
83
+ territory: { type: 'string', description: 'Geographic territory' },
84
+ exclusivity: { type: 'boolean', description: 'Exclusive license' },
85
+ transferable: { type: 'boolean', description: 'License is transferable' },
86
+ sublicensable: { type: 'boolean', description: 'Can grant sublicenses' },
87
+ issueDate: { type: 'date', description: 'License issue date' },
88
+ activationDate: { type: 'date', description: 'License activation date' },
89
+ expirationDate: { type: 'date', description: 'License expiration date' },
90
+ maintenanceExpiry: { type: 'date', description: 'Maintenance expiration', optional: true },
91
+ supportLevel: { type: 'string', description: 'Support level', examples: ['community', 'basic', 'standard', 'premium', 'enterprise'] },
92
+ fee: { type: 'number', description: 'License fee' },
93
+ currency: { type: 'string', description: 'Currency' },
94
+ billingCycle: { type: 'string', description: 'Billing cycle', examples: ['one-time', 'monthly', 'quarterly', 'annual'] },
95
+ autoRenew: { type: 'boolean', description: 'Auto-renewal enabled' },
96
+ licensor: { type: 'string', description: 'Licensor name' },
97
+ licensee: { type: 'string', description: 'Licensee name' },
98
+ assignedTo: { type: 'string', description: 'Assigned user/team' },
99
+ notes: { type: 'string', description: 'Internal notes', optional: true },
100
+ tags: { type: 'string[]', description: 'License tags' },
101
+ metadata: { type: 'object', description: 'Additional metadata', optional: true },
102
+ },
103
+ relationships: {
104
+ agreement: { type: 'agreement', description: 'License agreement', backref: 'licenses' },
105
+ customer: { type: 'customer', description: 'Licensed customer', backref: 'licenses' },
106
+ subscription: { type: 'subscription', description: 'Related subscription', backref: 'license' },
107
+ product: { type: 'product', description: 'Licensed product', backref: 'licenses' },
108
+ ip: { type: 'intellectualProperty', description: 'Related IP', backref: 'licenses' },
109
+ },
110
+ actions: ['create', 'update', 'issue', 'activate', 'suspend', 'renew', 'upgrade', 'downgrade', 'transfer', 'revoke', 'expire'],
111
+ events: ['created', 'updated', 'issued', 'activated', 'suspended', 'renewed', 'upgraded', 'downgraded', 'transferred', 'revoked', 'expired'],
112
+ }
113
+
114
+ export const IntellectualProperty: Noun = {
115
+ singular: 'intellectualProperty',
116
+ plural: 'intellectualProperties',
117
+ description: 'Intellectual property assets owned or licensed by the organization',
118
+ properties: {
119
+ name: { type: 'string', description: 'IP name or title' },
120
+ type: { type: 'string', description: 'Type of IP', examples: ['patent', 'trademark', 'copyright', 'trade-secret', 'design', 'domain', 'software'] },
121
+ status: { type: 'string', description: 'IP status', examples: ['idea', 'pending', 'filed', 'published', 'registered', 'granted', 'expired', 'abandoned', 'opposed'] },
122
+ description: { type: 'string', description: 'IP description' },
123
+ registrationNumber: { type: 'string', description: 'Registration or application number' },
124
+ serialNumber: { type: 'string', description: 'Serial number' },
125
+ filingDate: { type: 'date', description: 'Filing date' },
126
+ registrationDate: { type: 'date', description: 'Registration date' },
127
+ expirationDate: { type: 'date', description: 'Expiration date' },
128
+ priorityDate: { type: 'date', description: 'Priority date', optional: true },
129
+ publicationDate: { type: 'date', description: 'Publication date', optional: true },
130
+ jurisdiction: { type: 'string', description: 'Primary jurisdiction' },
131
+ jurisdictions: { type: 'string[]', description: 'All jurisdictions filed' },
132
+ classes: { type: 'string[]', description: 'Classification classes' },
133
+ claims: { type: 'string[]', description: 'Patent claims', optional: true },
134
+ inventors: { type: 'string[]', description: 'Inventors or creators' },
135
+ owner: { type: 'string', description: 'IP owner' },
136
+ assignee: { type: 'string', description: 'Current assignee' },
137
+ attorney: { type: 'string', description: 'Attorney or agent' },
138
+ lawFirm: { type: 'string', description: 'Law firm' },
139
+ docketNumber: { type: 'string', description: 'Internal docket number' },
140
+ cost: { type: 'number', description: 'Total cost to date' },
141
+ maintenanceFees: { type: 'number', description: 'Annual maintenance fees' },
142
+ nextMaintenanceDate: { type: 'date', description: 'Next maintenance due', optional: true },
143
+ value: { type: 'number', description: 'Estimated value' },
144
+ licensed: { type: 'boolean', description: 'Is licensed to others' },
145
+ licensedFrom: { type: 'string', description: 'Licensed from', optional: true },
146
+ relatedProducts: { type: 'string[]', description: 'Related products' },
147
+ documentUrl: { type: 'string', description: 'Document storage URL' },
148
+ notes: { type: 'string', description: 'Internal notes', optional: true },
149
+ tags: { type: 'string[]', description: 'IP tags' },
150
+ metadata: { type: 'object', description: 'Additional metadata', optional: true },
151
+ },
152
+ relationships: {
153
+ licenses: { type: 'license[]', description: 'Outbound licenses', backref: 'ip' },
154
+ inboundLicenses: { type: 'license[]', description: 'Inbound licenses', backref: 'licensedIP' },
155
+ products: { type: 'product[]', description: 'Related products', backref: 'ip' },
156
+ agreements: { type: 'agreement[]', description: 'Related agreements', backref: 'ip' },
157
+ relatedIP: { type: 'intellectualProperty[]', description: 'Related IP assets', backref: 'relatedIP' },
158
+ },
159
+ actions: ['create', 'update', 'file', 'register', 'publish', 'grant', 'maintain', 'renew', 'license', 'assign', 'abandon', 'enforce'],
160
+ events: ['created', 'updated', 'filed', 'registered', 'published', 'granted', 'maintained', 'renewed', 'licensed', 'assigned', 'abandoned', 'enforced'],
161
+ }
162
+
163
+ export const Compliance: Noun = {
164
+ singular: 'compliance',
165
+ plural: 'compliances',
166
+ description: 'A compliance requirement, certification, or regulatory obligation',
167
+ properties: {
168
+ name: { type: 'string', description: 'Compliance name' },
169
+ type: { type: 'string', description: 'Type of compliance', examples: ['regulation', 'certification', 'standard', 'policy', 'audit', 'attestation'] },
170
+ framework: { type: 'string', description: 'Compliance framework', examples: ['SOC2', 'ISO27001', 'GDPR', 'HIPAA', 'PCI-DSS', 'SOX', 'CCPA', 'FedRAMP', 'NIST'] },
171
+ status: { type: 'string', description: 'Compliance status', examples: ['not-started', 'in-progress', 'compliant', 'non-compliant', 'remediation', 'expired', 'exempt'] },
172
+ scope: { type: 'string', description: 'Compliance scope' },
173
+ description: { type: 'string', description: 'Compliance description' },
174
+ requirements: { type: 'string[]', description: 'List of requirements' },
175
+ controls: { type: 'string[]', description: 'Control mappings' },
176
+ jurisdiction: { type: 'string', description: 'Applicable jurisdiction' },
177
+ regulatoryBody: { type: 'string', description: 'Regulatory body' },
178
+ certificationBody: { type: 'string', description: 'Certification body' },
179
+ auditor: { type: 'string', description: 'External auditor' },
180
+ internalOwner: { type: 'string', description: 'Internal compliance owner' },
181
+ effectiveDate: { type: 'date', description: 'Effective date' },
182
+ certificationDate: { type: 'date', description: 'Certification date' },
183
+ expirationDate: { type: 'date', description: 'Expiration date' },
184
+ nextAuditDate: { type: 'date', description: 'Next audit date' },
185
+ lastAuditDate: { type: 'date', description: 'Last audit date' },
186
+ auditFrequency: { type: 'string', description: 'Audit frequency', examples: ['annual', 'semi-annual', 'quarterly', 'continuous'] },
187
+ findings: { type: 'number', description: 'Number of findings' },
188
+ criticalFindings: { type: 'number', description: 'Critical findings count' },
189
+ remediationDeadline: { type: 'date', description: 'Remediation deadline', optional: true },
190
+ complianceScore: { type: 'number', description: 'Compliance score/percentage' },
191
+ cost: { type: 'number', description: 'Total compliance cost' },
192
+ certificationCost: { type: 'number', description: 'Certification cost' },
193
+ documentUrl: { type: 'string', description: 'Certificate or report URL' },
194
+ evidenceUrl: { type: 'string', description: 'Evidence repository URL' },
195
+ publiclyDisclosed: { type: 'boolean', description: 'Publicly disclosed' },
196
+ notes: { type: 'string', description: 'Internal notes', optional: true },
197
+ tags: { type: 'string[]', description: 'Compliance tags' },
198
+ metadata: { type: 'object', description: 'Additional metadata', optional: true },
199
+ },
200
+ relationships: {
201
+ policies: { type: 'policy[]', description: 'Related policies', backref: 'compliance' },
202
+ risks: { type: 'risk[]', description: 'Related risks', backref: 'compliance' },
203
+ incidents: { type: 'incident[]', description: 'Related incidents', backref: 'compliance' },
204
+ agreements: { type: 'agreement[]', description: 'Related agreements', backref: 'compliance' },
205
+ tasks: { type: 'task[]', description: 'Compliance tasks', backref: 'compliance' },
206
+ },
207
+ actions: ['create', 'update', 'assess', 'audit', 'certify', 'remediate', 'renew', 'expire', 'exempt', 'report'],
208
+ events: ['created', 'updated', 'assessed', 'audited', 'certified', 'remediated', 'renewed', 'expired', 'exempted', 'reported'],
209
+ }
210
+
211
+ export const LegalPolicy: Noun = {
212
+ singular: 'legalPolicy',
213
+ plural: 'legalPolicies',
214
+ description: 'A legal or corporate policy document',
215
+ properties: {
216
+ name: { type: 'string', description: 'Policy name' },
217
+ type: { type: 'string', description: 'Type of policy', examples: ['privacy', 'security', 'HR', 'ethics', 'acceptable-use', 'data-retention', 'BYOD', 'travel', 'expense', 'procurement'] },
218
+ status: { type: 'string', description: 'Policy status', examples: ['draft', 'review', 'approved', 'published', 'deprecated', 'archived'] },
219
+ version: { type: 'string', description: 'Policy version' },
220
+ description: { type: 'string', description: 'Policy description' },
221
+ purpose: { type: 'string', description: 'Policy purpose' },
222
+ scope: { type: 'string', description: 'Policy scope' },
223
+ applicableTo: { type: 'string[]', description: 'Applicable to', examples: ['all-employees', 'contractors', 'vendors', 'customers', 'executives'] },
224
+ effectiveDate: { type: 'date', description: 'Effective date' },
225
+ reviewDate: { type: 'date', description: 'Next review date' },
226
+ lastReviewDate: { type: 'date', description: 'Last review date' },
227
+ expirationDate: { type: 'date', description: 'Expiration date', optional: true },
228
+ reviewCycle: { type: 'string', description: 'Review cycle', examples: ['annual', 'semi-annual', 'quarterly', 'as-needed'] },
229
+ owner: { type: 'string', description: 'Policy owner' },
230
+ author: { type: 'string', description: 'Policy author' },
231
+ approver: { type: 'string', description: 'Policy approver' },
232
+ legalReviewer: { type: 'string', description: 'Legal reviewer' },
233
+ department: { type: 'string', description: 'Owning department' },
234
+ category: { type: 'string', description: 'Policy category' },
235
+ relatedRegulations: { type: 'string[]', description: 'Related regulations' },
236
+ exceptions: { type: 'string', description: 'Exception process' },
237
+ enforcement: { type: 'string', description: 'Enforcement mechanism' },
238
+ penalties: { type: 'string', description: 'Violation penalties' },
239
+ trainingRequired: { type: 'boolean', description: 'Training required' },
240
+ acknowledgmentRequired: { type: 'boolean', description: 'Acknowledgment required' },
241
+ acknowledgmentCount: { type: 'number', description: 'Number of acknowledgments' },
242
+ documentUrl: { type: 'string', description: 'Policy document URL' },
243
+ publicUrl: { type: 'string', description: 'Public policy URL', optional: true },
244
+ notes: { type: 'string', description: 'Internal notes', optional: true },
245
+ tags: { type: 'string[]', description: 'Policy tags' },
246
+ metadata: { type: 'object', description: 'Additional metadata', optional: true },
247
+ },
248
+ relationships: {
249
+ compliance: { type: 'compliance[]', description: 'Related compliance', backref: 'policies' },
250
+ parentPolicy: { type: 'legalPolicy', description: 'Parent policy', backref: 'childPolicies' },
251
+ childPolicies: { type: 'legalPolicy[]', description: 'Child policies', backref: 'parentPolicy' },
252
+ relatedPolicies: { type: 'legalPolicy[]', description: 'Related policies', backref: 'relatedPolicies' },
253
+ department: { type: 'department', description: 'Owning department', backref: 'policies' },
254
+ },
255
+ actions: ['create', 'update', 'draft', 'review', 'approve', 'publish', 'deprecate', 'archive', 'acknowledge', 'enforce'],
256
+ events: ['created', 'updated', 'drafted', 'reviewed', 'approved', 'published', 'deprecated', 'archived', 'acknowledged', 'enforced'],
257
+ }
258
+
259
+ export const Trademark: Noun = {
260
+ singular: 'trademark',
261
+ plural: 'trademarks',
262
+ description: 'A trademark or service mark',
263
+ properties: {
264
+ name: { type: 'string', description: 'Trademark name' },
265
+ mark: { type: 'string', description: 'The trademark text or symbol' },
266
+ type: { type: 'string', description: 'Type of mark', examples: ['word', 'design', 'combined', 'sound', 'color', 'motion', '3D'] },
267
+ status: { type: 'string', description: 'Trademark status', examples: ['concept', 'search', 'filed', 'published', 'opposed', 'registered', 'renewed', 'expired', 'abandoned', 'cancelled'] },
268
+ registrationNumber: { type: 'string', description: 'Registration number' },
269
+ applicationNumber: { type: 'string', description: 'Application number' },
270
+ filingDate: { type: 'date', description: 'Filing date' },
271
+ registrationDate: { type: 'date', description: 'Registration date' },
272
+ expirationDate: { type: 'date', description: 'Expiration date' },
273
+ firstUseDate: { type: 'date', description: 'First use date' },
274
+ firstUseCommerceDate: { type: 'date', description: 'First use in commerce date' },
275
+ jurisdiction: { type: 'string', description: 'Primary jurisdiction' },
276
+ jurisdictions: { type: 'string[]', description: 'All registered jurisdictions' },
277
+ classes: { type: 'string[]', description: 'Nice classification classes' },
278
+ goodsServices: { type: 'string', description: 'Goods and services description' },
279
+ owner: { type: 'string', description: 'Trademark owner' },
280
+ attorney: { type: 'string', description: 'Trademark attorney' },
281
+ imageUrl: { type: 'string', description: 'Mark image URL' },
282
+ usageGuidelines: { type: 'string', description: 'Usage guidelines URL' },
283
+ monitoringEnabled: { type: 'boolean', description: 'Monitoring enabled' },
284
+ nextRenewalDate: { type: 'date', description: 'Next renewal date' },
285
+ maintenanceDue: { type: 'date', description: 'Maintenance filing due' },
286
+ cost: { type: 'number', description: 'Total cost' },
287
+ notes: { type: 'string', description: 'Internal notes', optional: true },
288
+ tags: { type: 'string[]', description: 'Trademark tags' },
289
+ metadata: { type: 'object', description: 'Additional metadata', optional: true },
290
+ },
291
+ relationships: {
292
+ ip: { type: 'intellectualProperty', description: 'Related IP record', backref: 'trademarks' },
293
+ licenses: { type: 'license[]', description: 'Trademark licenses', backref: 'trademark' },
294
+ products: { type: 'product[]', description: 'Associated products', backref: 'trademarks' },
295
+ },
296
+ actions: ['create', 'update', 'search', 'file', 'register', 'renew', 'maintain', 'license', 'abandon', 'cancel', 'enforce', 'monitor'],
297
+ events: ['created', 'updated', 'searched', 'filed', 'registered', 'renewed', 'maintained', 'licensed', 'abandoned', 'cancelled', 'enforced', 'monitored'],
298
+ }
299
+
300
+ // Export all legal entities
301
+ export const LegalEntities = {
302
+ Agreement,
303
+ License,
304
+ IntellectualProperty,
305
+ Compliance,
306
+ LegalPolicy,
307
+ Trademark,
308
+ }
309
+
310
+ export default LegalEntities