@baruk/core 0.4.2 → 0.5.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 (465) hide show
  1. package/.baruk-provenance.json +4 -4
  2. package/CHANGELOG.md +42 -0
  3. package/dist/audit/repository.d.ts +33 -1
  4. package/dist/audit/repository.d.ts.map +1 -1
  5. package/dist/audit/repository.js +41 -7
  6. package/dist/audit/repository.js.map +1 -1
  7. package/dist/auth/service.d.ts +21 -0
  8. package/dist/auth/service.d.ts.map +1 -1
  9. package/dist/auth/service.js +46 -1
  10. package/dist/auth/service.js.map +1 -1
  11. package/dist/billing/ar-repository.d.ts +41 -1
  12. package/dist/billing/ar-repository.d.ts.map +1 -1
  13. package/dist/billing/ar-repository.js +82 -6
  14. package/dist/billing/ar-repository.js.map +1 -1
  15. package/dist/billing/provider-account.d.ts +38 -0
  16. package/dist/billing/provider-account.d.ts.map +1 -1
  17. package/dist/billing/provider-account.js +58 -2
  18. package/dist/billing/provider-account.js.map +1 -1
  19. package/dist/billing/repository.d.ts +44 -0
  20. package/dist/billing/repository.d.ts.map +1 -1
  21. package/dist/billing/repository.js +49 -5
  22. package/dist/billing/repository.js.map +1 -1
  23. package/dist/cjs/audit/repository.js +41 -7
  24. package/dist/cjs/audit/repository.js.map +1 -1
  25. package/dist/cjs/auth/service.js +46 -1
  26. package/dist/cjs/auth/service.js.map +1 -1
  27. package/dist/cjs/billing/ar-repository.js +82 -6
  28. package/dist/cjs/billing/ar-repository.js.map +1 -1
  29. package/dist/cjs/billing/provider-account.js +60 -1
  30. package/dist/cjs/billing/provider-account.js.map +1 -1
  31. package/dist/cjs/billing/repository.js +51 -5
  32. package/dist/cjs/billing/repository.js.map +1 -1
  33. package/dist/cjs/clients/ibge.js +103 -0
  34. package/dist/cjs/clients/ibge.js.map +1 -0
  35. package/dist/cjs/clients/repository.js +186 -9
  36. package/dist/cjs/clients/repository.js.map +1 -1
  37. package/dist/cjs/collection/branding.js +190 -0
  38. package/dist/cjs/collection/branding.js.map +1 -1
  39. package/dist/cjs/collection/clearance-store.js +74 -0
  40. package/dist/cjs/collection/clearance-store.js.map +1 -0
  41. package/dist/cjs/collection/communication-runtime.js +65 -2
  42. package/dist/cjs/collection/communication-runtime.js.map +1 -1
  43. package/dist/cjs/collection/engine.js +20 -0
  44. package/dist/cjs/collection/engine.js.map +1 -1
  45. package/dist/cjs/collection/policy.js +29 -1
  46. package/dist/cjs/collection/policy.js.map +1 -1
  47. package/dist/cjs/communication/clearance.js +18 -0
  48. package/dist/cjs/communication/clearance.js.map +1 -0
  49. package/dist/cjs/communication/dry-run-scenario.js +5 -0
  50. package/dist/cjs/communication/dry-run-scenario.js.map +1 -1
  51. package/dist/cjs/communication/engine.js +12 -0
  52. package/dist/cjs/communication/engine.js.map +1 -1
  53. package/dist/cjs/communication/policy.js.map +1 -1
  54. package/dist/cjs/competence/business-days.js +155 -0
  55. package/dist/cjs/competence/business-days.js.map +1 -0
  56. package/dist/cjs/competence/catalog-validation.js +174 -0
  57. package/dist/cjs/competence/catalog-validation.js.map +1 -0
  58. package/dist/cjs/competence/obligation-preview.js +190 -0
  59. package/dist/cjs/competence/obligation-preview.js.map +1 -0
  60. package/dist/cjs/competence/repository.js +330 -17
  61. package/dist/cjs/competence/repository.js.map +1 -1
  62. package/dist/cjs/dashboard/pilot-panel.js +90 -0
  63. package/dist/cjs/dashboard/pilot-panel.js.map +1 -0
  64. package/dist/cjs/dashboard/repository.js +11 -1
  65. package/dist/cjs/dashboard/repository.js.map +1 -1
  66. package/dist/cjs/db/client.js +17 -11
  67. package/dist/cjs/db/client.js.map +1 -1
  68. package/dist/cjs/db/provision-e2e-identity.js +111 -0
  69. package/dist/cjs/db/provision-e2e-identity.js.map +1 -0
  70. package/dist/cjs/fiscal/applicability.js +164 -0
  71. package/dist/cjs/fiscal/applicability.js.map +1 -0
  72. package/dist/cjs/fiscal/conditions.js +198 -0
  73. package/dist/cjs/fiscal/conditions.js.map +1 -0
  74. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js +390 -0
  75. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  76. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js +108 -0
  77. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  78. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js +220 -0
  79. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  80. package/dist/cjs/fiscal/coverage/model.js +127 -0
  81. package/dist/cjs/fiscal/coverage/model.js.map +1 -0
  82. package/dist/cjs/fiscal/coverage/requests.js +99 -0
  83. package/dist/cjs/fiscal/coverage/requests.js.map +1 -0
  84. package/dist/cjs/fiscal/credentials/material.js +168 -0
  85. package/dist/cjs/fiscal/credentials/material.js.map +1 -0
  86. package/dist/cjs/fiscal/credentials/readiness.js +163 -0
  87. package/dist/cjs/fiscal/credentials/readiness.js.map +1 -0
  88. package/dist/cjs/fiscal/eligibility.js +199 -0
  89. package/dist/cjs/fiscal/eligibility.js.map +1 -0
  90. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js +128 -0
  91. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  92. package/dist/cjs/fiscal/ingestion/adn-transport.js +229 -0
  93. package/dist/cjs/fiscal/ingestion/adn-transport.js.map +1 -0
  94. package/dist/cjs/fiscal/ingestion/direction.js +36 -0
  95. package/dist/cjs/fiscal/ingestion/direction.js.map +1 -0
  96. package/dist/cjs/fiscal/ingestion/nfse-adn.js +228 -0
  97. package/dist/cjs/fiscal/ingestion/nfse-adn.js.map +1 -0
  98. package/dist/cjs/fiscal/ingestion/pipeline.js +704 -0
  99. package/dist/cjs/fiscal/ingestion/pipeline.js.map +1 -0
  100. package/dist/cjs/fiscal/ingestion/provider.js +51 -0
  101. package/dist/cjs/fiscal/ingestion/provider.js.map +1 -0
  102. package/dist/cjs/fiscal/ingestion/repository.js +132 -0
  103. package/dist/cjs/fiscal/ingestion/repository.js.map +1 -0
  104. package/dist/cjs/fiscal/ingestion/synthetic-provider.js +103 -0
  105. package/dist/cjs/fiscal/ingestion/synthetic-provider.js.map +1 -0
  106. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js +13 -0
  107. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  108. package/dist/cjs/fiscal/ingestion/synthetic-transport.js +61 -0
  109. package/dist/cjs/fiscal/ingestion/synthetic-transport.js.map +1 -0
  110. package/dist/cjs/fiscal/ingestion/xml-reader.js +121 -0
  111. package/dist/cjs/fiscal/ingestion/xml-reader.js.map +1 -0
  112. package/dist/cjs/fiscal/repository.js +470 -0
  113. package/dist/cjs/fiscal/repository.js.map +1 -0
  114. package/dist/cjs/fiscal/sync/circuit.js +124 -0
  115. package/dist/cjs/fiscal/sync/circuit.js.map +1 -0
  116. package/dist/cjs/fiscal/sync/intervention.js +140 -0
  117. package/dist/cjs/fiscal/sync/intervention.js.map +1 -0
  118. package/dist/cjs/fiscal/sync/lease.js +146 -0
  119. package/dist/cjs/fiscal/sync/lease.js.map +1 -0
  120. package/dist/cjs/fiscal/sync/observability.js +244 -0
  121. package/dist/cjs/fiscal/sync/observability.js.map +1 -0
  122. package/dist/cjs/fiscal/sync/orchestrator.js +490 -0
  123. package/dist/cjs/fiscal/sync/orchestrator.js.map +1 -0
  124. package/dist/cjs/fiscal/sync/policy.js +143 -0
  125. package/dist/cjs/fiscal/sync/policy.js.map +1 -0
  126. package/dist/cjs/fiscal/sync/reprocess.js +241 -0
  127. package/dist/cjs/fiscal/sync/reprocess.js.map +1 -0
  128. package/dist/cjs/fiscal/sync/retry.js +183 -0
  129. package/dist/cjs/fiscal/sync/retry.js.map +1 -0
  130. package/dist/cjs/fiscal/sync/secret-boundary.js +123 -0
  131. package/dist/cjs/fiscal/sync/secret-boundary.js.map +1 -0
  132. package/dist/cjs/fiscal/transport/https.js +309 -0
  133. package/dist/cjs/fiscal/transport/https.js.map +1 -0
  134. package/dist/cjs/fiscal/transport/synthetic-tls.js +328 -0
  135. package/dist/cjs/fiscal/transport/synthetic-tls.js.map +1 -0
  136. package/dist/cjs/fiscal/transport/types.js +93 -0
  137. package/dist/cjs/fiscal/transport/types.js.map +1 -0
  138. package/dist/cjs/import/br-documents.js +85 -0
  139. package/dist/cjs/import/br-documents.js.map +1 -0
  140. package/dist/cjs/import/clients-import.js +347 -40
  141. package/dist/cjs/import/clients-import.js.map +1 -1
  142. package/dist/cjs/index.js +316 -11
  143. package/dist/cjs/index.js.map +1 -1
  144. package/dist/cjs/legal/documents.js +100 -15
  145. package/dist/cjs/legal/documents.js.map +1 -1
  146. package/dist/cjs/legal/index.js +3 -1
  147. package/dist/cjs/legal/index.js.map +1 -1
  148. package/dist/cjs/legal/types.js.map +1 -1
  149. package/dist/cjs/onboarding/persistence.js +4 -4
  150. package/dist/cjs/onboarding/persistence.js.map +1 -1
  151. package/dist/cjs/pilot/go-live-checklist.js +212 -0
  152. package/dist/cjs/pilot/go-live-checklist.js.map +1 -0
  153. package/dist/cjs/pilot/milestone.js +79 -0
  154. package/dist/cjs/pilot/milestone.js.map +1 -0
  155. package/dist/cjs/platform/capabilities.js +144 -0
  156. package/dist/cjs/platform/capabilities.js.map +1 -0
  157. package/dist/cjs/platform/job-contract.js +411 -0
  158. package/dist/cjs/platform/job-contract.js.map +1 -0
  159. package/dist/cjs/rbac/catalog.js +34 -0
  160. package/dist/cjs/rbac/catalog.js.map +1 -1
  161. package/dist/cjs/subscription-billing/index.js +2 -1
  162. package/dist/cjs/subscription-billing/index.js.map +1 -1
  163. package/dist/cjs/subscription-billing/service.js +153 -77
  164. package/dist/cjs/subscription-billing/service.js.map +1 -1
  165. package/dist/cjs/tenancy/features.js +131 -0
  166. package/dist/cjs/tenancy/features.js.map +1 -0
  167. package/dist/cjs/tenancy/settings.js +224 -0
  168. package/dist/cjs/tenancy/settings.js.map +1 -0
  169. package/dist/cjs/users/repository.js +24 -1
  170. package/dist/cjs/users/repository.js.map +1 -1
  171. package/dist/clients/ibge.d.ts +17 -0
  172. package/dist/clients/ibge.d.ts.map +1 -0
  173. package/dist/clients/ibge.js +98 -0
  174. package/dist/clients/ibge.js.map +1 -0
  175. package/dist/clients/repository.d.ts +154 -0
  176. package/dist/clients/repository.d.ts.map +1 -1
  177. package/dist/clients/repository.js +182 -9
  178. package/dist/clients/repository.js.map +1 -1
  179. package/dist/collection/branding.d.ts +65 -0
  180. package/dist/collection/branding.d.ts.map +1 -1
  181. package/dist/collection/branding.js +186 -0
  182. package/dist/collection/branding.js.map +1 -1
  183. package/dist/collection/clearance-store.d.ts +39 -0
  184. package/dist/collection/clearance-store.d.ts.map +1 -0
  185. package/dist/collection/clearance-store.js +69 -0
  186. package/dist/collection/clearance-store.js.map +1 -0
  187. package/dist/collection/communication-runtime.d.ts +37 -0
  188. package/dist/collection/communication-runtime.d.ts.map +1 -1
  189. package/dist/collection/communication-runtime.js +63 -1
  190. package/dist/collection/communication-runtime.js.map +1 -1
  191. package/dist/collection/engine.d.ts +23 -0
  192. package/dist/collection/engine.d.ts.map +1 -1
  193. package/dist/collection/engine.js +20 -0
  194. package/dist/collection/engine.js.map +1 -1
  195. package/dist/collection/policy.d.ts +25 -0
  196. package/dist/collection/policy.d.ts.map +1 -1
  197. package/dist/collection/policy.js +27 -0
  198. package/dist/collection/policy.js.map +1 -1
  199. package/dist/communication/clearance.d.ts +53 -0
  200. package/dist/communication/clearance.d.ts.map +1 -0
  201. package/dist/communication/clearance.js +15 -0
  202. package/dist/communication/clearance.js.map +1 -0
  203. package/dist/communication/dry-run-scenario.d.ts.map +1 -1
  204. package/dist/communication/dry-run-scenario.js +5 -0
  205. package/dist/communication/dry-run-scenario.js.map +1 -1
  206. package/dist/communication/engine.d.ts +10 -0
  207. package/dist/communication/engine.d.ts.map +1 -1
  208. package/dist/communication/engine.js +12 -0
  209. package/dist/communication/engine.js.map +1 -1
  210. package/dist/communication/policy.d.ts +16 -0
  211. package/dist/communication/policy.d.ts.map +1 -1
  212. package/dist/communication/policy.js.map +1 -1
  213. package/dist/competence/business-days.d.ts +51 -0
  214. package/dist/competence/business-days.d.ts.map +1 -0
  215. package/dist/competence/business-days.js +145 -0
  216. package/dist/competence/business-days.js.map +1 -0
  217. package/dist/competence/catalog-validation.d.ts +86 -0
  218. package/dist/competence/catalog-validation.d.ts.map +1 -0
  219. package/dist/competence/catalog-validation.js +168 -0
  220. package/dist/competence/catalog-validation.js.map +1 -0
  221. package/dist/competence/obligation-preview.d.ts +103 -0
  222. package/dist/competence/obligation-preview.d.ts.map +1 -0
  223. package/dist/competence/obligation-preview.js +184 -0
  224. package/dist/competence/obligation-preview.js.map +1 -0
  225. package/dist/competence/repository.d.ts +139 -1
  226. package/dist/competence/repository.d.ts.map +1 -1
  227. package/dist/competence/repository.js +325 -17
  228. package/dist/competence/repository.js.map +1 -1
  229. package/dist/dashboard/pilot-panel.d.ts +100 -0
  230. package/dist/dashboard/pilot-panel.d.ts.map +1 -0
  231. package/dist/dashboard/pilot-panel.js +87 -0
  232. package/dist/dashboard/pilot-panel.js.map +1 -0
  233. package/dist/dashboard/repository.d.ts.map +1 -1
  234. package/dist/dashboard/repository.js +11 -1
  235. package/dist/dashboard/repository.js.map +1 -1
  236. package/dist/db/client.d.ts +45 -0
  237. package/dist/db/client.d.ts.map +1 -1
  238. package/dist/db/client.js +16 -11
  239. package/dist/db/client.js.map +1 -1
  240. package/dist/db/migrate.d.ts +36 -1
  241. package/dist/db/migrate.d.ts.map +1 -1
  242. package/dist/db/migrate.js +199 -32
  243. package/dist/db/migrate.js.map +1 -1
  244. package/dist/db/provision-e2e-identity.d.ts +2 -0
  245. package/dist/db/provision-e2e-identity.d.ts.map +1 -0
  246. package/dist/db/provision-e2e-identity.js +109 -0
  247. package/dist/db/provision-e2e-identity.js.map +1 -0
  248. package/dist/fiscal/applicability.d.ts +73 -0
  249. package/dist/fiscal/applicability.d.ts.map +1 -0
  250. package/dist/fiscal/applicability.js +160 -0
  251. package/dist/fiscal/applicability.js.map +1 -0
  252. package/dist/fiscal/conditions.d.ts +99 -0
  253. package/dist/fiscal/conditions.d.ts.map +1 -0
  254. package/dist/fiscal/conditions.js +190 -0
  255. package/dist/fiscal/conditions.js.map +1 -0
  256. package/dist/fiscal/contracts/nfse-adn-contract.d.ts +315 -0
  257. package/dist/fiscal/contracts/nfse-adn-contract.d.ts.map +1 -0
  258. package/dist/fiscal/contracts/nfse-adn-contract.js +386 -0
  259. package/dist/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  260. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts +13 -0
  261. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts.map +1 -0
  262. package/dist/fiscal/contracts/nfse-adn-endpoint.js +103 -0
  263. package/dist/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  264. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts +77 -0
  265. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts.map +1 -0
  266. package/dist/fiscal/contracts/nfse-adn-envelope.js +215 -0
  267. package/dist/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  268. package/dist/fiscal/coverage/model.d.ts +86 -0
  269. package/dist/fiscal/coverage/model.d.ts.map +1 -0
  270. package/dist/fiscal/coverage/model.js +120 -0
  271. package/dist/fiscal/coverage/model.js.map +1 -0
  272. package/dist/fiscal/coverage/requests.d.ts +70 -0
  273. package/dist/fiscal/coverage/requests.d.ts.map +1 -0
  274. package/dist/fiscal/coverage/requests.js +95 -0
  275. package/dist/fiscal/coverage/requests.js.map +1 -0
  276. package/dist/fiscal/credentials/material.d.ts +81 -0
  277. package/dist/fiscal/credentials/material.d.ts.map +1 -0
  278. package/dist/fiscal/credentials/material.js +164 -0
  279. package/dist/fiscal/credentials/material.js.map +1 -0
  280. package/dist/fiscal/credentials/readiness.d.ts +92 -0
  281. package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
  282. package/dist/fiscal/credentials/readiness.js +159 -0
  283. package/dist/fiscal/credentials/readiness.js.map +1 -0
  284. package/dist/fiscal/eligibility.d.ts +106 -0
  285. package/dist/fiscal/eligibility.d.ts.map +1 -0
  286. package/dist/fiscal/eligibility.js +194 -0
  287. package/dist/fiscal/eligibility.js.map +1 -0
  288. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts +57 -0
  289. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts.map +1 -0
  290. package/dist/fiscal/ingestion/__fixtures__/nfse.js +121 -0
  291. package/dist/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  292. package/dist/fiscal/ingestion/adn-transport.d.ts +123 -0
  293. package/dist/fiscal/ingestion/adn-transport.d.ts.map +1 -0
  294. package/dist/fiscal/ingestion/adn-transport.js +220 -0
  295. package/dist/fiscal/ingestion/adn-transport.js.map +1 -0
  296. package/dist/fiscal/ingestion/direction.d.ts +60 -0
  297. package/dist/fiscal/ingestion/direction.d.ts.map +1 -0
  298. package/dist/fiscal/ingestion/direction.js +32 -0
  299. package/dist/fiscal/ingestion/direction.js.map +1 -0
  300. package/dist/fiscal/ingestion/nfse-adn.d.ts +91 -0
  301. package/dist/fiscal/ingestion/nfse-adn.d.ts.map +1 -0
  302. package/dist/fiscal/ingestion/nfse-adn.js +222 -0
  303. package/dist/fiscal/ingestion/nfse-adn.js.map +1 -0
  304. package/dist/fiscal/ingestion/pipeline.d.ts +168 -0
  305. package/dist/fiscal/ingestion/pipeline.d.ts.map +1 -0
  306. package/dist/fiscal/ingestion/pipeline.js +699 -0
  307. package/dist/fiscal/ingestion/pipeline.js.map +1 -0
  308. package/dist/fiscal/ingestion/provider.d.ts +206 -0
  309. package/dist/fiscal/ingestion/provider.d.ts.map +1 -0
  310. package/dist/fiscal/ingestion/provider.js +47 -0
  311. package/dist/fiscal/ingestion/provider.js.map +1 -0
  312. package/dist/fiscal/ingestion/repository.d.ts +82 -0
  313. package/dist/fiscal/ingestion/repository.d.ts.map +1 -0
  314. package/dist/fiscal/ingestion/repository.js +127 -0
  315. package/dist/fiscal/ingestion/repository.js.map +1 -0
  316. package/dist/fiscal/ingestion/synthetic-provider.d.ts +92 -0
  317. package/dist/fiscal/ingestion/synthetic-provider.d.ts.map +1 -0
  318. package/dist/fiscal/ingestion/synthetic-provider.js +99 -0
  319. package/dist/fiscal/ingestion/synthetic-provider.js.map +1 -0
  320. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts +19 -0
  321. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts.map +1 -0
  322. package/dist/fiscal/ingestion/synthetic-transport-types.js +9 -0
  323. package/dist/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  324. package/dist/fiscal/ingestion/synthetic-transport.d.ts +55 -0
  325. package/dist/fiscal/ingestion/synthetic-transport.d.ts.map +1 -0
  326. package/dist/fiscal/ingestion/synthetic-transport.js +57 -0
  327. package/dist/fiscal/ingestion/synthetic-transport.js.map +1 -0
  328. package/dist/fiscal/ingestion/xml-reader.d.ts +55 -0
  329. package/dist/fiscal/ingestion/xml-reader.d.ts.map +1 -0
  330. package/dist/fiscal/ingestion/xml-reader.js +112 -0
  331. package/dist/fiscal/ingestion/xml-reader.js.map +1 -0
  332. package/dist/fiscal/repository.d.ts +220 -0
  333. package/dist/fiscal/repository.d.ts.map +1 -0
  334. package/dist/fiscal/repository.js +449 -0
  335. package/dist/fiscal/repository.js.map +1 -0
  336. package/dist/fiscal/sync/circuit.d.ts +86 -0
  337. package/dist/fiscal/sync/circuit.d.ts.map +1 -0
  338. package/dist/fiscal/sync/circuit.js +118 -0
  339. package/dist/fiscal/sync/circuit.js.map +1 -0
  340. package/dist/fiscal/sync/intervention.d.ts +81 -0
  341. package/dist/fiscal/sync/intervention.d.ts.map +1 -0
  342. package/dist/fiscal/sync/intervention.js +135 -0
  343. package/dist/fiscal/sync/intervention.js.map +1 -0
  344. package/dist/fiscal/sync/lease.d.ts +118 -0
  345. package/dist/fiscal/sync/lease.d.ts.map +1 -0
  346. package/dist/fiscal/sync/lease.js +139 -0
  347. package/dist/fiscal/sync/lease.js.map +1 -0
  348. package/dist/fiscal/sync/observability.d.ts +148 -0
  349. package/dist/fiscal/sync/observability.d.ts.map +1 -0
  350. package/dist/fiscal/sync/observability.js +239 -0
  351. package/dist/fiscal/sync/observability.js.map +1 -0
  352. package/dist/fiscal/sync/orchestrator.d.ts +132 -0
  353. package/dist/fiscal/sync/orchestrator.d.ts.map +1 -0
  354. package/dist/fiscal/sync/orchestrator.js +487 -0
  355. package/dist/fiscal/sync/orchestrator.js.map +1 -0
  356. package/dist/fiscal/sync/policy.d.ts +87 -0
  357. package/dist/fiscal/sync/policy.d.ts.map +1 -0
  358. package/dist/fiscal/sync/policy.js +136 -0
  359. package/dist/fiscal/sync/policy.js.map +1 -0
  360. package/dist/fiscal/sync/reprocess.d.ts +76 -0
  361. package/dist/fiscal/sync/reprocess.d.ts.map +1 -0
  362. package/dist/fiscal/sync/reprocess.js +237 -0
  363. package/dist/fiscal/sync/reprocess.js.map +1 -0
  364. package/dist/fiscal/sync/retry.d.ts +82 -0
  365. package/dist/fiscal/sync/retry.d.ts.map +1 -0
  366. package/dist/fiscal/sync/retry.js +176 -0
  367. package/dist/fiscal/sync/retry.js.map +1 -0
  368. package/dist/fiscal/sync/secret-boundary.d.ts +169 -0
  369. package/dist/fiscal/sync/secret-boundary.d.ts.map +1 -0
  370. package/dist/fiscal/sync/secret-boundary.js +116 -0
  371. package/dist/fiscal/sync/secret-boundary.js.map +1 -0
  372. package/dist/fiscal/transport/https.d.ts +86 -0
  373. package/dist/fiscal/transport/https.d.ts.map +1 -0
  374. package/dist/fiscal/transport/https.js +303 -0
  375. package/dist/fiscal/transport/https.js.map +1 -0
  376. package/dist/fiscal/transport/synthetic-tls.d.ts +80 -0
  377. package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
  378. package/dist/fiscal/transport/synthetic-tls.js +323 -0
  379. package/dist/fiscal/transport/synthetic-tls.js.map +1 -0
  380. package/dist/fiscal/transport/types.d.ts +134 -0
  381. package/dist/fiscal/transport/types.d.ts.map +1 -0
  382. package/dist/fiscal/transport/types.js +88 -0
  383. package/dist/fiscal/transport/types.js.map +1 -0
  384. package/dist/import/br-documents.d.ts +26 -0
  385. package/dist/import/br-documents.d.ts.map +1 -0
  386. package/dist/import/br-documents.js +78 -0
  387. package/dist/import/br-documents.js.map +1 -0
  388. package/dist/import/clients-import.d.ts +122 -4
  389. package/dist/import/clients-import.d.ts.map +1 -1
  390. package/dist/import/clients-import.js +341 -41
  391. package/dist/import/clients-import.js.map +1 -1
  392. package/dist/index.d.ts +115 -11
  393. package/dist/index.d.ts.map +1 -1
  394. package/dist/index.js +100 -7
  395. package/dist/index.js.map +1 -1
  396. package/dist/legal/documents.d.ts +12 -1
  397. package/dist/legal/documents.d.ts.map +1 -1
  398. package/dist/legal/documents.js +98 -14
  399. package/dist/legal/documents.js.map +1 -1
  400. package/dist/legal/index.d.ts +1 -1
  401. package/dist/legal/index.d.ts.map +1 -1
  402. package/dist/legal/index.js +1 -1
  403. package/dist/legal/index.js.map +1 -1
  404. package/dist/legal/types.d.ts +37 -2
  405. package/dist/legal/types.d.ts.map +1 -1
  406. package/dist/legal/types.js.map +1 -1
  407. package/dist/onboarding/persistence.d.ts +10 -1
  408. package/dist/onboarding/persistence.d.ts.map +1 -1
  409. package/dist/onboarding/persistence.js +4 -4
  410. package/dist/onboarding/persistence.js.map +1 -1
  411. package/dist/pilot/go-live-checklist.d.ts +41 -0
  412. package/dist/pilot/go-live-checklist.d.ts.map +1 -0
  413. package/dist/pilot/go-live-checklist.js +209 -0
  414. package/dist/pilot/go-live-checklist.js.map +1 -0
  415. package/dist/pilot/milestone.d.ts +56 -0
  416. package/dist/pilot/milestone.d.ts.map +1 -0
  417. package/dist/pilot/milestone.js +74 -0
  418. package/dist/pilot/milestone.js.map +1 -0
  419. package/dist/platform/capabilities.d.ts +88 -0
  420. package/dist/platform/capabilities.d.ts.map +1 -0
  421. package/dist/platform/capabilities.js +140 -0
  422. package/dist/platform/capabilities.js.map +1 -0
  423. package/dist/platform/job-contract.d.ts +232 -0
  424. package/dist/platform/job-contract.d.ts.map +1 -0
  425. package/dist/platform/job-contract.js +403 -0
  426. package/dist/platform/job-contract.js.map +1 -0
  427. package/dist/rbac/catalog.d.ts.map +1 -1
  428. package/dist/rbac/catalog.js +34 -0
  429. package/dist/rbac/catalog.js.map +1 -1
  430. package/dist/subscription-billing/index.d.ts +6 -5
  431. package/dist/subscription-billing/index.d.ts.map +1 -1
  432. package/dist/subscription-billing/index.js +3 -3
  433. package/dist/subscription-billing/index.js.map +1 -1
  434. package/dist/subscription-billing/service.d.ts +21 -0
  435. package/dist/subscription-billing/service.d.ts.map +1 -1
  436. package/dist/subscription-billing/service.js +90 -15
  437. package/dist/subscription-billing/service.js.map +1 -1
  438. package/dist/tenancy/features.d.ts +69 -0
  439. package/dist/tenancy/features.d.ts.map +1 -0
  440. package/dist/tenancy/features.js +123 -0
  441. package/dist/tenancy/features.js.map +1 -0
  442. package/dist/tenancy/settings.d.ts +63 -0
  443. package/dist/tenancy/settings.d.ts.map +1 -0
  444. package/dist/tenancy/settings.js +218 -0
  445. package/dist/tenancy/settings.js.map +1 -0
  446. package/dist/users/repository.d.ts +16 -1
  447. package/dist/users/repository.d.ts.map +1 -1
  448. package/dist/users/repository.js +24 -1
  449. package/dist/users/repository.js.map +1 -1
  450. package/package.json +9 -2
  451. package/src/db/migrations/0045_role_write_scope.sql +122 -0
  452. package/src/db/migrations/0046_pilot_activation_model.sql +184 -0
  453. package/src/db/migrations/0047_recipient_clearance.sql +89 -0
  454. package/src/db/migrations/0048_item_type_note.sql +16 -0
  455. package/src/db/migrations/0049_national_fiscal_engine.sql +279 -0
  456. package/src/db/migrations/0050_fiscal_vocabulary_readonly.sql +29 -0
  457. package/src/db/migrations/0051_seed_rules_from_catalog.sql +72 -0
  458. package/src/db/migrations/0052_fiscal_rule_delete_scope.sql +57 -0
  459. package/src/db/migrations/0053_rule_validity_lower_bound.sql +44 -0
  460. package/src/db/migrations/0054_tenant_profile_and_rule_source.sql +89 -0
  461. package/src/db/migrations/0055_job_capability_contract.sql +300 -0
  462. package/src/db/migrations/0056_fiscal_document_ingestion.sql +337 -0
  463. package/src/db/migrations/0057_fiscal_pending_event_inbox.sql +228 -0
  464. package/src/db/migrations/0058_fiscal_operational_engine.sql +516 -0
  465. package/src/db/migrations/0059_fiscal_contract_version.sql +59 -0
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Calendário de dias úteis brasileiro.
3
+ *
4
+ * Fica no Core, e não numa vertical, pela mesma razão que `client.document_number`
5
+ * fica: CPF/CNPJ e feriado nacional são do PAÍS, não do segmento. Um produto
6
+ * odontológico ou industrial que opere no Brasil precisa igualmente saber que
7
+ * 12 de outubro não é dia útil. O que é do segmento — quais obrigações existem e
8
+ * quando vencem — mora em `@baruk/contabil`.
9
+ *
10
+ * Escopo deliberado: feriados NACIONAIS. Feriado estadual e municipal deslocam
11
+ * prazos reais (o ISS de São Paulo não vence no aniversário da cidade), mas
12
+ * dependem do município de cada cliente e não têm fonte única. Tratá-los aqui
13
+ * daria a impressão de cobertura que o dado não sustenta — o escritório ajusta a
14
+ * data na instância quando isso acontecer.
15
+ */
16
+ /** Domingo = 0 … sábado = 6. */
17
+ function weekday(iso) {
18
+ return new Date(`${iso}T12:00:00Z`).getUTCDay();
19
+ }
20
+ function toIso(y, m, d) {
21
+ return `${y}-${String(m).padStart(2, '0')}-${String(d).padStart(2, '0')}`;
22
+ }
23
+ function addDays(iso, delta) {
24
+ const d = new Date(`${iso}T12:00:00Z`);
25
+ d.setUTCDate(d.getUTCDate() + delta);
26
+ return d.toISOString().slice(0, 10);
27
+ }
28
+ /** Último dia do mês (trata ano bissexto). */
29
+ export function lastDayOfMonth(year, month) {
30
+ return new Date(Date.UTC(year, month, 0)).getUTCDate();
31
+ }
32
+ /**
33
+ * Domingo de Páscoa pelo algoritmo de Meeus/Jones/Butcher (calendário gregoriano).
34
+ * Carnaval, Sexta-Feira Santa e Corpus Christi derivam dele.
35
+ */
36
+ export function easterSunday(year) {
37
+ const a = year % 19;
38
+ const b = Math.floor(year / 100);
39
+ const c = year % 100;
40
+ const d = Math.floor(b / 4);
41
+ const e = b % 4;
42
+ const f = Math.floor((b + 8) / 25);
43
+ const g = Math.floor((b - f + 1) / 3);
44
+ const h = (19 * a + b - d - g + 15) % 30;
45
+ const i = Math.floor(c / 4);
46
+ const k = c % 4;
47
+ const l = (32 + 2 * e + 2 * i - h - k) % 7;
48
+ const m = Math.floor((a + 11 * h + 22 * l) / 451);
49
+ const month = Math.floor((h + l - 7 * m + 114) / 31);
50
+ const day = ((h + l - 7 * m + 114) % 31) + 1;
51
+ return toIso(year, month, day);
52
+ }
53
+ /**
54
+ * Feriados nacionais de um ano, em ISO.
55
+ *
56
+ * Inclui Carnaval (segunda e terça) e Corpus Christi, que não são feriados civis
57
+ * nacionais mas são feriados BANCÁRIOS — e prazo de recolhimento se mede em dia
58
+ * bancário, não em dia civil. Quarta-feira de Cinzas é meio expediente e conta
59
+ * como dia útil.
60
+ *
61
+ * 20 de novembro (Consciência Negra) entrou como feriado nacional pela Lei
62
+ * 14.759/2023, valendo a partir de 2024.
63
+ */
64
+ export function nationalHolidays(year) {
65
+ const easter = easterSunday(year);
66
+ const fixed = [
67
+ toIso(year, 1, 1), // Confraternização Universal
68
+ toIso(year, 4, 21), // Tiradentes
69
+ toIso(year, 5, 1), // Dia do Trabalho
70
+ toIso(year, 9, 7), // Independência
71
+ toIso(year, 10, 12), // Nossa Senhora Aparecida
72
+ toIso(year, 11, 2), // Finados
73
+ toIso(year, 11, 15), // Proclamação da República
74
+ toIso(year, 12, 25), // Natal
75
+ ];
76
+ if (year >= 2024)
77
+ fixed.push(toIso(year, 11, 20)); // Consciência Negra
78
+ const movable = [
79
+ addDays(easter, -48), // Carnaval (segunda)
80
+ addDays(easter, -47), // Carnaval (terça)
81
+ addDays(easter, -2), // Sexta-Feira Santa
82
+ addDays(easter, 60), // Corpus Christi
83
+ ];
84
+ return [...fixed, ...movable].sort();
85
+ }
86
+ const holidayCache = new Map();
87
+ function holidaySet(year) {
88
+ let s = holidayCache.get(year);
89
+ if (!s) {
90
+ s = new Set(nationalHolidays(year));
91
+ holidayCache.set(year, s);
92
+ }
93
+ return s;
94
+ }
95
+ /** Dia útil = não é sábado, domingo nem feriado nacional/bancário. */
96
+ export function isBusinessDay(iso) {
97
+ const wd = weekday(iso);
98
+ if (wd === 0 || wd === 6)
99
+ return false;
100
+ return !holidaySet(Number(iso.slice(0, 4))).has(iso);
101
+ }
102
+ /**
103
+ * Move a data para um dia útil.
104
+ *
105
+ * `previous` é o padrão do vencimento fiscal brasileiro: quando o prazo cai em
106
+ * dia sem expediente bancário, ANTECIPA-SE. Postergar seria o erro caro — o
107
+ * contribuinte pagaria com multa por confiar no sistema.
108
+ */
109
+ export function adjustToBusinessDay(iso, direction = 'previous') {
110
+ if (direction === 'none')
111
+ return iso;
112
+ const step = direction === 'previous' ? -1 : 1;
113
+ let cur = iso;
114
+ // 15 passos cobrem o maior bloco possível (fim de semana + emendas).
115
+ for (let i = 0; i < 15; i++) {
116
+ if (isBusinessDay(cur))
117
+ return cur;
118
+ cur = addDays(cur, step);
119
+ }
120
+ return cur;
121
+ }
122
+ /** Último dia útil do mês. */
123
+ export function lastBusinessDayOfMonth(year, month) {
124
+ return adjustToBusinessDay(toIso(year, month, lastDayOfMonth(year, month)), 'previous');
125
+ }
126
+ /** N-ésimo dia útil do mês (1 = primeiro). Devolve `null` se o mês não tiver tantos. */
127
+ export function nthBusinessDayOfMonth(year, month, n) {
128
+ const last = lastDayOfMonth(year, month);
129
+ let count = 0;
130
+ for (let d = 1; d <= last; d++) {
131
+ const iso = toIso(year, month, d);
132
+ if (isBusinessDay(iso)) {
133
+ count += 1;
134
+ if (count === n)
135
+ return iso;
136
+ }
137
+ }
138
+ return null;
139
+ }
140
+ /** Soma meses a um par (ano, mês) 1-based, normalizando a virada de ano. */
141
+ export function shiftMonth(year, month, months) {
142
+ const zero = year * 12 + (month - 1) + months;
143
+ return [Math.floor(zero / 12), (zero % 12) + 1];
144
+ }
145
+ //# sourceMappingURL=business-days.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-days.js","sourceRoot":"","sources":["../../src/competence/business-days.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { Tx } from '../db/client.js';
2
+ /**
3
+ * Conferência humana do catálogo fiscal — por escritório.
4
+ *
5
+ * ## O problema que isto resolve
6
+ *
7
+ * O catálogo foi semeado tecnicamente e nunca foi confrontado com os serviços
8
+ * que o escritório de fato presta. Um catálogo semeado que ninguém conferiu é
9
+ * pior que catálogo nenhum: o escritório passa a confiar numa lista, e descobre
10
+ * o erro no dia do vencimento.
11
+ *
12
+ * O estado padrão é `pending_validation`, e esse é o ponto inteiro. Enquanto
13
+ * ninguém conferiu, o produto tem de DIZER que ninguém conferiu, em vez de
14
+ * deixar o seed passar por verdade operacional.
15
+ *
16
+ * ## Por que tabela própria, e não coluna em `recurring_item_type`
17
+ *
18
+ * As linhas de sistema do catálogo (`tenant_id IS NULL`) são COMPARTILHADAS
19
+ * entre todos os escritórios. Uma coluna `validation_status` nelas faria um
20
+ * escritório carimbar a validação do outro — exatamente a classe de vazamento
21
+ * que a Fase 4 fechou em `role`. O estado de conferência é por tenant, então
22
+ * mora numa tabela por tenant.
23
+ *
24
+ * ## `depends_on_locality`
25
+ *
26
+ * Três itens do catálogo são de esfera estadual ou municipal, e o prazo deles
27
+ * varia por UF e por município. Este campo não é um prazo: é a **ausência**
28
+ * de prazo, declarada. Inventar uma data seria pior que não ter nenhuma,
29
+ * porque o alerta dispararia no dia errado e alguém confiaria nele.
30
+ */
31
+ export type CatalogValidationStatus =
32
+ /** Conferido por uma pessoa contra os serviços prestados. */
33
+ 'validated'
34
+ /** Padrão: veio do seed e ninguém olhou ainda. */
35
+ | 'pending_validation'
36
+ /** O escritório não atende esta obrigação — não deve aparecer na geração. */
37
+ | 'not_applicable'
38
+ /** Desligada deliberadamente, com motivo. */
39
+ | 'disabled';
40
+ export interface CatalogValidationRecord {
41
+ itemTypeId: string;
42
+ status: CatalogValidationStatus;
43
+ dependsOnLocality: boolean;
44
+ note: string | null;
45
+ validatedBy: string | null;
46
+ validatedAt: string | null;
47
+ }
48
+ export declare function listCatalogValidations(tx: Tx): Promise<CatalogValidationRecord[]>;
49
+ /**
50
+ * Grava a decisão do escritório sobre um item.
51
+ *
52
+ * `validated_at` só é preenchido quando o status é `validated` — o CHECK da
53
+ * tabela recusa a combinação inversa, então a data não pode mentir sobre ter
54
+ * havido conferência.
55
+ */
56
+ export declare function setCatalogValidation(tx: Tx, input: {
57
+ itemTypeId: string;
58
+ status: CatalogValidationStatus;
59
+ note?: string | null;
60
+ dependsOnLocality?: boolean;
61
+ actorId?: string | null;
62
+ }): Promise<CatalogValidationRecord>;
63
+ /**
64
+ * Semeia o estado inicial da conferência para o escritório.
65
+ *
66
+ * Idempotente e conservador: só cria as linhas que faltam, e **nunca** rebaixa
67
+ * um item já conferido. Rodar de novo depois de uma conferência não a apaga.
68
+ *
69
+ * Itens de esfera estadual ou municipal nascem marcados como dependentes de
70
+ * localidade, porque é isso que eles são.
71
+ */
72
+ export declare function seedCatalogValidation(tx: Tx): Promise<{
73
+ created: number;
74
+ }>;
75
+ export interface CatalogValidationSummary {
76
+ total: number;
77
+ validated: number;
78
+ pending: number;
79
+ notApplicable: number;
80
+ disabled: number;
81
+ dependsOnLocality: number;
82
+ /** O gate que o go-live consulta: nada pendente e ao menos um item conferido. */
83
+ humanValidationComplete: boolean;
84
+ }
85
+ export declare function catalogValidationSummary(tx: Tx): Promise<CatalogValidationSummary>;
86
+ //# sourceMappingURL=catalog-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-validation.d.ts","sourceRoot":"","sources":["../../src/competence/catalog-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAG1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,MAAM,uBAAuB;AACjC,6DAA6D;AAC3D,WAAW;AACb,kDAAkD;GAChD,oBAAoB;AACtB,6EAA6E;GAC3E,gBAAgB;AAClB,6CAA6C;GAC3C,UAAU,CAAC;AAEf,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,uBAAuB,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAoBD,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAMvF;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IACL,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,uBAAuB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GACA,OAAO,CAAC,uBAAuB,CAAC,CAsBlC;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAoBhF;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAED,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA+BxF"}
@@ -0,0 +1,168 @@
1
+ import { uuidv7 } from '@baruk/shared';
2
+ const map = (r) => ({
3
+ itemTypeId: r.item_type_id,
4
+ status: r.status,
5
+ dependsOnLocality: r.depends_on_locality,
6
+ note: r.note,
7
+ validatedBy: r.validated_by,
8
+ validatedAt: r.validated_at?.toISOString() ?? null,
9
+ });
10
+ export async function listCatalogValidations(tx) {
11
+ const rows = await tx `
12
+ SELECT item_type_id, status, depends_on_locality, note, validated_by, validated_at
13
+ FROM recurring_item_type_validation
14
+ `;
15
+ return rows.map(map);
16
+ }
17
+ /**
18
+ * Grava a decisão do escritório sobre um item.
19
+ *
20
+ * `validated_at` só é preenchido quando o status é `validated` — o CHECK da
21
+ * tabela recusa a combinação inversa, então a data não pode mentir sobre ter
22
+ * havido conferência.
23
+ */
24
+ export async function setCatalogValidation(tx, input) {
25
+ const validado = input.status === 'validated';
26
+ const rows = await tx `
27
+ INSERT INTO recurring_item_type_validation
28
+ (id, tenant_id, item_type_id, status, depends_on_locality, note, validated_by, validated_at)
29
+ VALUES (
30
+ ${uuidv7()}, current_setting('app.current_tenant')::uuid, ${input.itemTypeId},
31
+ ${input.status}, ${input.dependsOnLocality ?? false}, ${input.note ?? null},
32
+ ${validado ? (input.actorId ?? null) : null},
33
+ ${validado ? new Date() : null}
34
+ )
35
+ ON CONFLICT (tenant_id, item_type_id) DO UPDATE SET
36
+ status = EXCLUDED.status,
37
+ depends_on_locality = EXCLUDED.depends_on_locality,
38
+ note = EXCLUDED.note,
39
+ validated_by = EXCLUDED.validated_by,
40
+ validated_at = EXCLUDED.validated_at,
41
+ updated_at = now()
42
+ RETURNING item_type_id, status, depends_on_locality, note, validated_by, validated_at
43
+ `;
44
+ if (validado)
45
+ await adotarRegras(tx, input.itemTypeId, input.actorId ?? null);
46
+ return map(rows[0]);
47
+ }
48
+ /**
49
+ * Semeia o estado inicial da conferência para o escritório.
50
+ *
51
+ * Idempotente e conservador: só cria as linhas que faltam, e **nunca** rebaixa
52
+ * um item já conferido. Rodar de novo depois de uma conferência não a apaga.
53
+ *
54
+ * Itens de esfera estadual ou municipal nascem marcados como dependentes de
55
+ * localidade, porque é isso que eles são.
56
+ */
57
+ export async function seedCatalogValidation(tx) {
58
+ const rows = await tx `
59
+ WITH visiveis AS (
60
+ SELECT DISTINCT ON (key) id, sphere
61
+ FROM recurring_item_type
62
+ WHERE deleted_at IS NULL AND active = true
63
+ ORDER BY key, tenant_id NULLS LAST
64
+ ),
65
+ inseridos AS (
66
+ INSERT INTO recurring_item_type_validation
67
+ (id, tenant_id, item_type_id, status, depends_on_locality)
68
+ SELECT gen_random_uuid(), current_setting('app.current_tenant')::uuid, v.id,
69
+ 'pending_validation', (v.sphere IN ('estadual', 'municipal'))
70
+ FROM visiveis v
71
+ ON CONFLICT (tenant_id, item_type_id) DO NOTHING
72
+ RETURNING 1
73
+ )
74
+ SELECT count(*)::int AS n FROM inseridos
75
+ `;
76
+ return { created: rows[0]?.n ?? 0 };
77
+ }
78
+ export async function catalogValidationSummary(tx) {
79
+ const [r] = await tx `
80
+ SELECT count(*)::int AS total,
81
+ count(*) FILTER (WHERE status = 'validated')::int AS validated,
82
+ count(*) FILTER (WHERE status = 'pending_validation')::int AS pending,
83
+ count(*) FILTER (WHERE status = 'not_applicable')::int AS not_applicable,
84
+ count(*) FILTER (WHERE status = 'disabled')::int AS disabled,
85
+ count(*) FILTER (WHERE depends_on_locality)::int AS locality
86
+ FROM recurring_item_type_validation
87
+ `;
88
+ const total = r?.total ?? 0;
89
+ const validated = r?.validated ?? 0;
90
+ const pending = r?.pending ?? 0;
91
+ return {
92
+ total,
93
+ validated,
94
+ pending,
95
+ notApplicable: r?.not_applicable ?? 0,
96
+ disabled: r?.disabled ?? 0,
97
+ dependsOnLocality: r?.locality ?? 0,
98
+ humanValidationComplete: total > 0 && pending === 0 && validated > 0,
99
+ };
100
+ }
101
+ /**
102
+ * Conferir o item faz o escritório ADOTAR a regra.
103
+ *
104
+ * ## O impasse que isto resolve
105
+ *
106
+ * Uma regra do catálogo nacional nasce `pending_validation`, e um escritório
107
+ * não pode validá-la: a correção nacional dela é outra autoridade, e a policy
108
+ * recusa a escrita de qualquer forma. Sem mais nada, o catálogo travava —
109
+ * nenhum escritório conseguiria usar item nenhum, para sempre.
110
+ *
111
+ * A saída não é afrouxar a regra nacional. É reconhecer o que o operador de
112
+ * fato faz quando marca "conferida": ele está dizendo **"este prazo é o que eu
113
+ * pratico"**, e assumindo isso. Então o ato cria uma regra DO ESCRITÓRIO, cópia
114
+ * da nacional, validada por ele.
115
+ *
116
+ * O que se ganha:
117
+ *
118
+ * - a regra nacional continua pendente, e continua sendo a nacional;
119
+ * - o escritório opera sob a própria responsabilidade, com autor e data;
120
+ * - quando a regra nacional for validada e mudar, dá para comparar as duas —
121
+ * a adoção fica visível em vez de virar edição silenciosa do catálogo.
122
+ *
123
+ * Regra do próprio escritório que ainda estava pendente é simplesmente
124
+ * validada: ali não há nada a adotar, é dele desde o início.
125
+ */
126
+ async function adotarRegras(tx, itemTypeId, actorId) {
127
+ // 1 · As que já são do escritório: conferir é o mesmo ato.
128
+ await tx `
129
+ UPDATE fiscal_rule
130
+ SET status = 'validated', validated_by = ${actorId}, validated_at = now(), updated_at = now()
131
+ WHERE item_type_id = ${itemTypeId}
132
+ AND tenant_id IS NOT NULL
133
+ AND deleted_at IS NULL
134
+ AND status = 'pending_validation'
135
+ AND due_rule IS NOT NULL
136
+ `;
137
+ // 2 · As nacionais pendentes viram adoção — uma por jurisdição, e só onde o
138
+ // escritório ainda não tem regra própria vigente.
139
+ await tx `
140
+ INSERT INTO fiscal_rule (
141
+ id, tenant_id, item_type_id, jurisdiction_scope, jurisdiction_uf, jurisdiction_city_ibge,
142
+ version, valid_from, status, conditions, due_rule, source_reference, note,
143
+ validated_by, validated_at
144
+ )
145
+ SELECT gen_random_uuid(), current_setting('app.current_tenant')::uuid, g.item_type_id,
146
+ g.jurisdiction_scope, g.jurisdiction_uf, g.jurisdiction_city_ibge,
147
+ 1, g.valid_from, 'validated', g.conditions, g.due_rule, g.source_reference,
148
+ 'Adotada pelo escritório ao conferir o catálogo. A regra nacional segue pendente.',
149
+ ${actorId}, now()
150
+ FROM fiscal_rule g
151
+ WHERE g.item_type_id = ${itemTypeId}
152
+ AND g.tenant_id IS NULL
153
+ AND g.deleted_at IS NULL
154
+ AND g.status = 'pending_validation'
155
+ AND g.due_rule IS NOT NULL
156
+ AND NOT EXISTS (
157
+ SELECT 1 FROM fiscal_rule p
158
+ WHERE p.item_type_id = g.item_type_id
159
+ AND p.tenant_id = current_setting('app.current_tenant')::uuid
160
+ AND p.jurisdiction_scope = g.jurisdiction_scope
161
+ AND coalesce(p.jurisdiction_uf, '-') = coalesce(g.jurisdiction_uf, '-')
162
+ AND coalesce(p.jurisdiction_city_ibge, '-') = coalesce(g.jurisdiction_city_ibge, '-')
163
+ AND p.valid_until IS NULL
164
+ AND p.deleted_at IS NULL
165
+ )
166
+ `;
167
+ }
168
+ //# sourceMappingURL=catalog-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-validation.js","sourceRoot":"","sources":["../../src/competence/catalog-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import type { Tx } from '../db/client.js';
2
+ import { type ApplicabilityOutcome } from '../fiscal/applicability.js';
3
+ /**
4
+ * Prévia das obrigações antes de gerar.
5
+ *
6
+ * ## Por que um passo a mais
7
+ *
8
+ * `generateInstancesForCompetence` escreve direto. Isso é aceitável quando o
9
+ * catálogo é o de sempre e o operador conhece a carteira; deixa de ser quando o
10
+ * catálogo veio de um seed que ninguém conferiu e a carteira acabou de ser
11
+ * importada. Nesse cenário, gerar é criar prazo legal para trezentos clientes
12
+ * com base numa lista que nunca foi lida.
13
+ *
14
+ * A prévia devolve, por item, o que seria criado, o que já existe e **o que foi
15
+ * descartado, com o motivo**. O motivo é a parte que importa: uma obrigação que
16
+ * some da lista sem explicação é indistinguível de um defeito.
17
+ *
18
+ * ## O que faz um item ser descartado
19
+ *
20
+ * - `regime` — o item não se aplica ao regime do cliente;
21
+ * - `nao_conferido` — o catálogo ainda está `pending_validation` para este item;
22
+ * - `nao_aplicavel` / `desativado` — o escritório disse que não atende;
23
+ * - `sem_localidade` — o item depende de UF ou município e o cliente não tem
24
+ * nenhum dos dois cadastrados. Este é o caso em que gerar seria pior que não
25
+ * gerar: sem localidade não há como saber o prazo, e uma data inventada
26
+ * dispararia o alerta no dia errado;
27
+ * - `sem_vencimento` — a regra de vencimento não é interpretável.
28
+ */
29
+ export type ObligationSkipReason = 'regime' | 'nao_conferido' | 'nao_aplicavel' | 'desativado' | 'sem_localidade' | 'sem_vencimento'
30
+ /**
31
+ * O motor nacional recusou, e o desfecho dele diz por quê.
32
+ *
33
+ * Distinto dos anteriores, que são checagens locais do escritório: este vem
34
+ * da avaliação de jurisdição, vigência e condições declarativas, e carrega o
35
+ * motivo em texto — a prévia repassa a explicação em vez de traduzi-la para
36
+ * um rótulo genérico que perderia o que o operador precisa fazer.
37
+ */
38
+ | 'motor_nacional';
39
+ export interface PreviewItem {
40
+ itemTypeId: string;
41
+ /** Desfecho do motor nacional, quando ele foi consultado. */
42
+ applicability?: ApplicabilityOutcome;
43
+ /** Explicação do motor, para a tela. */
44
+ applicabilityReason?: string;
45
+ /** Atributos do perfil que faltaram — o que o escritório precisa preencher. */
46
+ missingAttributes?: string[];
47
+ /** Versão exata da regra usada; entra na instância gerada. */
48
+ fiscalRuleId?: string;
49
+ fiscalRuleVersion?: number;
50
+ key: string;
51
+ label: string;
52
+ nature: 'obligation' | 'task';
53
+ sphere: string | null;
54
+ dueDate: string | null;
55
+ /** `existing` = já foi gerada antes; gerar de novo não a duplica. */
56
+ outcome: 'create' | 'existing' | 'skip';
57
+ skipReason?: ObligationSkipReason;
58
+ }
59
+ export interface ObligationPreview {
60
+ competenceId: string;
61
+ competenceLabel: string;
62
+ clientId: string;
63
+ regime: string | null;
64
+ locality: {
65
+ municipality: string | null;
66
+ stateUf: string | null;
67
+ };
68
+ items: PreviewItem[];
69
+ counts: {
70
+ create: number;
71
+ existing: number;
72
+ skip: number;
73
+ };
74
+ /** Falso quando algo do catálogo ainda não foi conferido por uma pessoa. */
75
+ catalogFullyValidated: boolean;
76
+ }
77
+ export declare function previewInstancesForCompetence(tx: Tx, input: {
78
+ competenceId: string;
79
+ regime?: string | null;
80
+ }): Promise<ObligationPreview>;
81
+ export declare class PreviewMismatch extends Error {
82
+ constructor(message: string);
83
+ }
84
+ /**
85
+ * Gera exatamente o que a prévia mostrou.
86
+ *
87
+ * `approvedItemTypeIds` é a lista que o operador aprovou na tela. A geração
88
+ * recusa qualquer id que não esteja marcado como `create` na prévia recalculada
89
+ * — se o mundo mudou entre a conferência e a aprovação, o certo é falhar e
90
+ * pedir nova conferência, não gerar algo que ninguém viu.
91
+ *
92
+ * A idempotência continua vindo do índice único `(tenant, cliente, competência,
93
+ * tipo)` com `ON CONFLICT DO NOTHING`: aprovar duas vezes cria uma vez.
94
+ */
95
+ export declare function generateFromPreview(tx: Tx, input: {
96
+ competenceId: string;
97
+ regime?: string | null;
98
+ approvedItemTypeIds: string[];
99
+ }): Promise<{
100
+ created: number;
101
+ alreadyExisted: number;
102
+ }>;
103
+ //# sourceMappingURL=obligation-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obligation-preview.d.ts","sourceRoot":"","sources":["../../src/competence/obligation-preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAG5F;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,eAAe,GACf,eAAe,GACf,YAAY,GACZ,gBAAgB,GAChB,gBAAgB;AAClB;;;;;;;GAOG;GACD,gBAAgB,CAAC;AAErB,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,wCAAwC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,qEAAqE;IACrE,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACxC,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAClE,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,4EAA4E;IAC5E,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACtD,OAAO,CAAC,iBAAiB,CAAC,CA0I5B;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,mBAAmB,EAAE,MAAM,EAAE,CAAA;CAAE,GACrF,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CA6CtD"}