@baruk/core 0.4.2 → 0.6.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 (576) 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 +117 -0
  34. package/dist/cjs/clients/ibge.js.map +1 -0
  35. package/dist/cjs/clients/registry/http.js +157 -0
  36. package/dist/cjs/clients/registry/http.js.map +1 -0
  37. package/dist/cjs/clients/registry/ibge-municipios.js +28 -0
  38. package/dist/cjs/clients/registry/ibge-municipios.js.map +1 -0
  39. package/dist/cjs/clients/registry/ibge.js +63 -0
  40. package/dist/cjs/clients/registry/ibge.js.map +1 -0
  41. package/dist/cjs/clients/registry/lookup.js +191 -0
  42. package/dist/cjs/clients/registry/lookup.js.map +1 -0
  43. package/dist/cjs/clients/registry/provider.js +34 -0
  44. package/dist/cjs/clients/registry/provider.js.map +1 -0
  45. package/dist/cjs/clients/registry/resolve.js +47 -0
  46. package/dist/cjs/clients/registry/resolve.js.map +1 -0
  47. package/dist/cjs/clients/registry/serpro.js +149 -0
  48. package/dist/cjs/clients/registry/serpro.js.map +1 -0
  49. package/dist/cjs/clients/registry/service.js +230 -0
  50. package/dist/cjs/clients/registry/service.js.map +1 -0
  51. package/dist/cjs/clients/registry/synthetic.js +165 -0
  52. package/dist/cjs/clients/registry/synthetic.js.map +1 -0
  53. package/dist/cjs/clients/repository.js +190 -9
  54. package/dist/cjs/clients/repository.js.map +1 -1
  55. package/dist/cjs/collection/branding.js +190 -0
  56. package/dist/cjs/collection/branding.js.map +1 -1
  57. package/dist/cjs/collection/clearance-store.js +74 -0
  58. package/dist/cjs/collection/clearance-store.js.map +1 -0
  59. package/dist/cjs/collection/communication-runtime.js +65 -2
  60. package/dist/cjs/collection/communication-runtime.js.map +1 -1
  61. package/dist/cjs/collection/engine.js +20 -0
  62. package/dist/cjs/collection/engine.js.map +1 -1
  63. package/dist/cjs/collection/policy.js +29 -1
  64. package/dist/cjs/collection/policy.js.map +1 -1
  65. package/dist/cjs/communication/clearance.js +18 -0
  66. package/dist/cjs/communication/clearance.js.map +1 -0
  67. package/dist/cjs/communication/dry-run-scenario.js +5 -0
  68. package/dist/cjs/communication/dry-run-scenario.js.map +1 -1
  69. package/dist/cjs/communication/engine.js +12 -0
  70. package/dist/cjs/communication/engine.js.map +1 -1
  71. package/dist/cjs/communication/policy.js.map +1 -1
  72. package/dist/cjs/competence/business-days.js +155 -0
  73. package/dist/cjs/competence/business-days.js.map +1 -0
  74. package/dist/cjs/competence/catalog-validation.js +174 -0
  75. package/dist/cjs/competence/catalog-validation.js.map +1 -0
  76. package/dist/cjs/competence/obligation-preview.js +190 -0
  77. package/dist/cjs/competence/obligation-preview.js.map +1 -0
  78. package/dist/cjs/competence/repository.js +330 -17
  79. package/dist/cjs/competence/repository.js.map +1 -1
  80. package/dist/cjs/dashboard/pilot-panel.js +90 -0
  81. package/dist/cjs/dashboard/pilot-panel.js.map +1 -0
  82. package/dist/cjs/dashboard/repository.js +11 -1
  83. package/dist/cjs/dashboard/repository.js.map +1 -1
  84. package/dist/cjs/db/client.js +17 -11
  85. package/dist/cjs/db/client.js.map +1 -1
  86. package/dist/cjs/db/provision-e2e-identity.js +116 -0
  87. package/dist/cjs/db/provision-e2e-identity.js.map +1 -0
  88. package/dist/cjs/fiscal/applicability.js +164 -0
  89. package/dist/cjs/fiscal/applicability.js.map +1 -0
  90. package/dist/cjs/fiscal/collection/authorization.js +186 -0
  91. package/dist/cjs/fiscal/collection/authorization.js.map +1 -0
  92. package/dist/cjs/fiscal/collection/competence.js +97 -0
  93. package/dist/cjs/fiscal/collection/competence.js.map +1 -0
  94. package/dist/cjs/fiscal/collection/first-contact.js +204 -0
  95. package/dist/cjs/fiscal/collection/first-contact.js.map +1 -0
  96. package/dist/cjs/fiscal/collection/plan.js +122 -0
  97. package/dist/cjs/fiscal/collection/plan.js.map +1 -0
  98. package/dist/cjs/fiscal/conditions.js +198 -0
  99. package/dist/cjs/fiscal/conditions.js.map +1 -0
  100. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js +390 -0
  101. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  102. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js +108 -0
  103. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  104. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js +220 -0
  105. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  106. package/dist/cjs/fiscal/coverage/model.js +137 -0
  107. package/dist/cjs/fiscal/coverage/model.js.map +1 -0
  108. package/dist/cjs/fiscal/coverage/requests.js +99 -0
  109. package/dist/cjs/fiscal/coverage/requests.js.map +1 -0
  110. package/dist/cjs/fiscal/credentials/inspect.js +182 -0
  111. package/dist/cjs/fiscal/credentials/inspect.js.map +1 -0
  112. package/dist/cjs/fiscal/credentials/material.js +168 -0
  113. package/dist/cjs/fiscal/credentials/material.js.map +1 -0
  114. package/dist/cjs/fiscal/credentials/onboarding.js +266 -0
  115. package/dist/cjs/fiscal/credentials/onboarding.js.map +1 -0
  116. package/dist/cjs/fiscal/credentials/readiness.js +190 -0
  117. package/dist/cjs/fiscal/credentials/readiness.js.map +1 -0
  118. package/dist/cjs/fiscal/eligibility.js +199 -0
  119. package/dist/cjs/fiscal/eligibility.js.map +1 -0
  120. package/dist/cjs/fiscal/enrollment.js +134 -0
  121. package/dist/cjs/fiscal/enrollment.js.map +1 -0
  122. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js +128 -0
  123. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  124. package/dist/cjs/fiscal/ingestion/adn-transport.js +229 -0
  125. package/dist/cjs/fiscal/ingestion/adn-transport.js.map +1 -0
  126. package/dist/cjs/fiscal/ingestion/direction.js +36 -0
  127. package/dist/cjs/fiscal/ingestion/direction.js.map +1 -0
  128. package/dist/cjs/fiscal/ingestion/nfse-adn.js +228 -0
  129. package/dist/cjs/fiscal/ingestion/nfse-adn.js.map +1 -0
  130. package/dist/cjs/fiscal/ingestion/pipeline.js +704 -0
  131. package/dist/cjs/fiscal/ingestion/pipeline.js.map +1 -0
  132. package/dist/cjs/fiscal/ingestion/provider.js +51 -0
  133. package/dist/cjs/fiscal/ingestion/provider.js.map +1 -0
  134. package/dist/cjs/fiscal/ingestion/repository.js +132 -0
  135. package/dist/cjs/fiscal/ingestion/repository.js.map +1 -0
  136. package/dist/cjs/fiscal/ingestion/synthetic-provider.js +103 -0
  137. package/dist/cjs/fiscal/ingestion/synthetic-provider.js.map +1 -0
  138. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js +13 -0
  139. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  140. package/dist/cjs/fiscal/ingestion/synthetic-transport.js +61 -0
  141. package/dist/cjs/fiscal/ingestion/synthetic-transport.js.map +1 -0
  142. package/dist/cjs/fiscal/ingestion/xml-reader.js +121 -0
  143. package/dist/cjs/fiscal/ingestion/xml-reader.js.map +1 -0
  144. package/dist/cjs/fiscal/repository.js +470 -0
  145. package/dist/cjs/fiscal/repository.js.map +1 -0
  146. package/dist/cjs/fiscal/sync/circuit.js +124 -0
  147. package/dist/cjs/fiscal/sync/circuit.js.map +1 -0
  148. package/dist/cjs/fiscal/sync/intervention.js +140 -0
  149. package/dist/cjs/fiscal/sync/intervention.js.map +1 -0
  150. package/dist/cjs/fiscal/sync/lease.js +146 -0
  151. package/dist/cjs/fiscal/sync/lease.js.map +1 -0
  152. package/dist/cjs/fiscal/sync/observability.js +244 -0
  153. package/dist/cjs/fiscal/sync/observability.js.map +1 -0
  154. package/dist/cjs/fiscal/sync/orchestrator.js +490 -0
  155. package/dist/cjs/fiscal/sync/orchestrator.js.map +1 -0
  156. package/dist/cjs/fiscal/sync/policy.js +143 -0
  157. package/dist/cjs/fiscal/sync/policy.js.map +1 -0
  158. package/dist/cjs/fiscal/sync/reprocess.js +241 -0
  159. package/dist/cjs/fiscal/sync/reprocess.js.map +1 -0
  160. package/dist/cjs/fiscal/sync/retry.js +183 -0
  161. package/dist/cjs/fiscal/sync/retry.js.map +1 -0
  162. package/dist/cjs/fiscal/sync/secret-boundary.js +123 -0
  163. package/dist/cjs/fiscal/sync/secret-boundary.js.map +1 -0
  164. package/dist/cjs/fiscal/transport/https.js +309 -0
  165. package/dist/cjs/fiscal/transport/https.js.map +1 -0
  166. package/dist/cjs/fiscal/transport/synthetic-tls.js +380 -0
  167. package/dist/cjs/fiscal/transport/synthetic-tls.js.map +1 -0
  168. package/dist/cjs/fiscal/transport/types.js +93 -0
  169. package/dist/cjs/fiscal/transport/types.js.map +1 -0
  170. package/dist/cjs/import/br-documents.js +85 -0
  171. package/dist/cjs/import/br-documents.js.map +1 -0
  172. package/dist/cjs/import/clients-import.js +347 -40
  173. package/dist/cjs/import/clients-import.js.map +1 -1
  174. package/dist/cjs/index.js +461 -73
  175. package/dist/cjs/index.js.map +1 -1
  176. package/dist/cjs/legal/documents.js +164 -19
  177. package/dist/cjs/legal/documents.js.map +1 -1
  178. package/dist/cjs/legal/index.js +3 -1
  179. package/dist/cjs/legal/index.js.map +1 -1
  180. package/dist/cjs/legal/types.js.map +1 -1
  181. package/dist/cjs/onboarding/persistence.js +4 -4
  182. package/dist/cjs/onboarding/persistence.js.map +1 -1
  183. package/dist/cjs/pilot/go-live-checklist.js +212 -0
  184. package/dist/cjs/pilot/go-live-checklist.js.map +1 -0
  185. package/dist/cjs/pilot/milestone.js +79 -0
  186. package/dist/cjs/pilot/milestone.js.map +1 -0
  187. package/dist/cjs/platform/capabilities.js +173 -0
  188. package/dist/cjs/platform/capabilities.js.map +1 -0
  189. package/dist/cjs/platform/job-contract.js +411 -0
  190. package/dist/cjs/platform/job-contract.js.map +1 -0
  191. package/dist/cjs/rbac/catalog.js +110 -0
  192. package/dist/cjs/rbac/catalog.js.map +1 -1
  193. package/dist/cjs/subscription-billing/index.js +9 -1
  194. package/dist/cjs/subscription-billing/index.js.map +1 -1
  195. package/dist/cjs/subscription-billing/platform-exemption.js +121 -0
  196. package/dist/cjs/subscription-billing/platform-exemption.js.map +1 -0
  197. package/dist/cjs/subscription-billing/service.js +246 -78
  198. package/dist/cjs/subscription-billing/service.js.map +1 -1
  199. package/dist/cjs/tenancy/features.js +131 -0
  200. package/dist/cjs/tenancy/features.js.map +1 -0
  201. package/dist/cjs/tenancy/settings.js +224 -0
  202. package/dist/cjs/tenancy/settings.js.map +1 -0
  203. package/dist/cjs/users/repository.js +24 -1
  204. package/dist/cjs/users/repository.js.map +1 -1
  205. package/dist/cjs/vault/repository.js +92 -5
  206. package/dist/cjs/vault/repository.js.map +1 -1
  207. package/dist/clients/ibge.d.ts +17 -0
  208. package/dist/clients/ibge.d.ts.map +1 -0
  209. package/dist/clients/ibge.js +112 -0
  210. package/dist/clients/ibge.js.map +1 -0
  211. package/dist/clients/registry/http.d.ts +61 -0
  212. package/dist/clients/registry/http.d.ts.map +1 -0
  213. package/dist/clients/registry/http.js +151 -0
  214. package/dist/clients/registry/http.js.map +1 -0
  215. package/dist/clients/registry/ibge-municipios.d.ts +25 -0
  216. package/dist/clients/registry/ibge-municipios.d.ts.map +1 -0
  217. package/dist/clients/registry/ibge-municipios.js +25 -0
  218. package/dist/clients/registry/ibge-municipios.js.map +1 -0
  219. package/dist/clients/registry/ibge.d.ts +62 -0
  220. package/dist/clients/registry/ibge.d.ts.map +1 -0
  221. package/dist/clients/registry/ibge.js +57 -0
  222. package/dist/clients/registry/ibge.js.map +1 -0
  223. package/dist/clients/registry/lookup.d.ts +94 -0
  224. package/dist/clients/registry/lookup.d.ts.map +1 -0
  225. package/dist/clients/registry/lookup.js +184 -0
  226. package/dist/clients/registry/lookup.js.map +1 -0
  227. package/dist/clients/registry/provider.d.ts +124 -0
  228. package/dist/clients/registry/provider.d.ts.map +1 -0
  229. package/dist/clients/registry/provider.js +39 -0
  230. package/dist/clients/registry/provider.js.map +1 -0
  231. package/dist/clients/registry/resolve.d.ts +36 -0
  232. package/dist/clients/registry/resolve.d.ts.map +1 -0
  233. package/dist/clients/registry/resolve.js +44 -0
  234. package/dist/clients/registry/resolve.js.map +1 -0
  235. package/dist/clients/registry/serpro.d.ts +57 -0
  236. package/dist/clients/registry/serpro.d.ts.map +1 -0
  237. package/dist/clients/registry/serpro.js +143 -0
  238. package/dist/clients/registry/serpro.js.map +1 -0
  239. package/dist/clients/registry/service.d.ts +59 -0
  240. package/dist/clients/registry/service.d.ts.map +1 -0
  241. package/dist/clients/registry/service.js +225 -0
  242. package/dist/clients/registry/service.js.map +1 -0
  243. package/dist/clients/registry/synthetic.d.ts +30 -0
  244. package/dist/clients/registry/synthetic.d.ts.map +1 -0
  245. package/dist/clients/registry/synthetic.js +161 -0
  246. package/dist/clients/registry/synthetic.js.map +1 -0
  247. package/dist/clients/repository.d.ts +158 -0
  248. package/dist/clients/repository.d.ts.map +1 -1
  249. package/dist/clients/repository.js +186 -9
  250. package/dist/clients/repository.js.map +1 -1
  251. package/dist/collection/branding.d.ts +65 -0
  252. package/dist/collection/branding.d.ts.map +1 -1
  253. package/dist/collection/branding.js +186 -0
  254. package/dist/collection/branding.js.map +1 -1
  255. package/dist/collection/clearance-store.d.ts +39 -0
  256. package/dist/collection/clearance-store.d.ts.map +1 -0
  257. package/dist/collection/clearance-store.js +69 -0
  258. package/dist/collection/clearance-store.js.map +1 -0
  259. package/dist/collection/communication-runtime.d.ts +37 -0
  260. package/dist/collection/communication-runtime.d.ts.map +1 -1
  261. package/dist/collection/communication-runtime.js +63 -1
  262. package/dist/collection/communication-runtime.js.map +1 -1
  263. package/dist/collection/engine.d.ts +23 -0
  264. package/dist/collection/engine.d.ts.map +1 -1
  265. package/dist/collection/engine.js +20 -0
  266. package/dist/collection/engine.js.map +1 -1
  267. package/dist/collection/policy.d.ts +25 -0
  268. package/dist/collection/policy.d.ts.map +1 -1
  269. package/dist/collection/policy.js +27 -0
  270. package/dist/collection/policy.js.map +1 -1
  271. package/dist/communication/clearance.d.ts +53 -0
  272. package/dist/communication/clearance.d.ts.map +1 -0
  273. package/dist/communication/clearance.js +15 -0
  274. package/dist/communication/clearance.js.map +1 -0
  275. package/dist/communication/dry-run-scenario.d.ts.map +1 -1
  276. package/dist/communication/dry-run-scenario.js +5 -0
  277. package/dist/communication/dry-run-scenario.js.map +1 -1
  278. package/dist/communication/engine.d.ts +10 -0
  279. package/dist/communication/engine.d.ts.map +1 -1
  280. package/dist/communication/engine.js +12 -0
  281. package/dist/communication/engine.js.map +1 -1
  282. package/dist/communication/policy.d.ts +16 -0
  283. package/dist/communication/policy.d.ts.map +1 -1
  284. package/dist/communication/policy.js.map +1 -1
  285. package/dist/competence/business-days.d.ts +51 -0
  286. package/dist/competence/business-days.d.ts.map +1 -0
  287. package/dist/competence/business-days.js +145 -0
  288. package/dist/competence/business-days.js.map +1 -0
  289. package/dist/competence/catalog-validation.d.ts +86 -0
  290. package/dist/competence/catalog-validation.d.ts.map +1 -0
  291. package/dist/competence/catalog-validation.js +168 -0
  292. package/dist/competence/catalog-validation.js.map +1 -0
  293. package/dist/competence/obligation-preview.d.ts +103 -0
  294. package/dist/competence/obligation-preview.d.ts.map +1 -0
  295. package/dist/competence/obligation-preview.js +184 -0
  296. package/dist/competence/obligation-preview.js.map +1 -0
  297. package/dist/competence/repository.d.ts +139 -1
  298. package/dist/competence/repository.d.ts.map +1 -1
  299. package/dist/competence/repository.js +325 -17
  300. package/dist/competence/repository.js.map +1 -1
  301. package/dist/dashboard/pilot-panel.d.ts +100 -0
  302. package/dist/dashboard/pilot-panel.d.ts.map +1 -0
  303. package/dist/dashboard/pilot-panel.js +87 -0
  304. package/dist/dashboard/pilot-panel.js.map +1 -0
  305. package/dist/dashboard/repository.d.ts.map +1 -1
  306. package/dist/dashboard/repository.js +11 -1
  307. package/dist/dashboard/repository.js.map +1 -1
  308. package/dist/db/client.d.ts +45 -0
  309. package/dist/db/client.d.ts.map +1 -1
  310. package/dist/db/client.js +16 -11
  311. package/dist/db/client.js.map +1 -1
  312. package/dist/db/migrate.d.ts +36 -1
  313. package/dist/db/migrate.d.ts.map +1 -1
  314. package/dist/db/migrate.js +199 -32
  315. package/dist/db/migrate.js.map +1 -1
  316. package/dist/db/provision-e2e-identity.d.ts +2 -0
  317. package/dist/db/provision-e2e-identity.d.ts.map +1 -0
  318. package/dist/db/provision-e2e-identity.js +114 -0
  319. package/dist/db/provision-e2e-identity.js.map +1 -0
  320. package/dist/fiscal/applicability.d.ts +73 -0
  321. package/dist/fiscal/applicability.d.ts.map +1 -0
  322. package/dist/fiscal/applicability.js +160 -0
  323. package/dist/fiscal/applicability.js.map +1 -0
  324. package/dist/fiscal/collection/authorization.d.ts +152 -0
  325. package/dist/fiscal/collection/authorization.d.ts.map +1 -0
  326. package/dist/fiscal/collection/authorization.js +178 -0
  327. package/dist/fiscal/collection/authorization.js.map +1 -0
  328. package/dist/fiscal/collection/competence.d.ts +66 -0
  329. package/dist/fiscal/collection/competence.d.ts.map +1 -0
  330. package/dist/fiscal/collection/competence.js +90 -0
  331. package/dist/fiscal/collection/competence.js.map +1 -0
  332. package/dist/fiscal/collection/first-contact.d.ts +103 -0
  333. package/dist/fiscal/collection/first-contact.d.ts.map +1 -0
  334. package/dist/fiscal/collection/first-contact.js +201 -0
  335. package/dist/fiscal/collection/first-contact.js.map +1 -0
  336. package/dist/fiscal/collection/plan.d.ts +74 -0
  337. package/dist/fiscal/collection/plan.d.ts.map +1 -0
  338. package/dist/fiscal/collection/plan.js +119 -0
  339. package/dist/fiscal/collection/plan.js.map +1 -0
  340. package/dist/fiscal/conditions.d.ts +99 -0
  341. package/dist/fiscal/conditions.d.ts.map +1 -0
  342. package/dist/fiscal/conditions.js +190 -0
  343. package/dist/fiscal/conditions.js.map +1 -0
  344. package/dist/fiscal/contracts/nfse-adn-contract.d.ts +315 -0
  345. package/dist/fiscal/contracts/nfse-adn-contract.d.ts.map +1 -0
  346. package/dist/fiscal/contracts/nfse-adn-contract.js +386 -0
  347. package/dist/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  348. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts +13 -0
  349. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts.map +1 -0
  350. package/dist/fiscal/contracts/nfse-adn-endpoint.js +103 -0
  351. package/dist/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  352. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts +77 -0
  353. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts.map +1 -0
  354. package/dist/fiscal/contracts/nfse-adn-envelope.js +215 -0
  355. package/dist/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  356. package/dist/fiscal/coverage/model.d.ts +114 -0
  357. package/dist/fiscal/coverage/model.d.ts.map +1 -0
  358. package/dist/fiscal/coverage/model.js +130 -0
  359. package/dist/fiscal/coverage/model.js.map +1 -0
  360. package/dist/fiscal/coverage/requests.d.ts +70 -0
  361. package/dist/fiscal/coverage/requests.d.ts.map +1 -0
  362. package/dist/fiscal/coverage/requests.js +95 -0
  363. package/dist/fiscal/coverage/requests.js.map +1 -0
  364. package/dist/fiscal/credentials/inspect.d.ts +114 -0
  365. package/dist/fiscal/credentials/inspect.d.ts.map +1 -0
  366. package/dist/fiscal/credentials/inspect.js +178 -0
  367. package/dist/fiscal/credentials/inspect.js.map +1 -0
  368. package/dist/fiscal/credentials/material.d.ts +81 -0
  369. package/dist/fiscal/credentials/material.d.ts.map +1 -0
  370. package/dist/fiscal/credentials/material.js +164 -0
  371. package/dist/fiscal/credentials/material.js.map +1 -0
  372. package/dist/fiscal/credentials/onboarding.d.ts +119 -0
  373. package/dist/fiscal/credentials/onboarding.d.ts.map +1 -0
  374. package/dist/fiscal/credentials/onboarding.js +259 -0
  375. package/dist/fiscal/credentials/onboarding.js.map +1 -0
  376. package/dist/fiscal/credentials/readiness.d.ts +119 -0
  377. package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
  378. package/dist/fiscal/credentials/readiness.js +186 -0
  379. package/dist/fiscal/credentials/readiness.js.map +1 -0
  380. package/dist/fiscal/eligibility.d.ts +106 -0
  381. package/dist/fiscal/eligibility.d.ts.map +1 -0
  382. package/dist/fiscal/eligibility.js +194 -0
  383. package/dist/fiscal/eligibility.js.map +1 -0
  384. package/dist/fiscal/enrollment.d.ts +91 -0
  385. package/dist/fiscal/enrollment.d.ts.map +1 -0
  386. package/dist/fiscal/enrollment.js +126 -0
  387. package/dist/fiscal/enrollment.js.map +1 -0
  388. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts +57 -0
  389. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts.map +1 -0
  390. package/dist/fiscal/ingestion/__fixtures__/nfse.js +121 -0
  391. package/dist/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  392. package/dist/fiscal/ingestion/adn-transport.d.ts +123 -0
  393. package/dist/fiscal/ingestion/adn-transport.d.ts.map +1 -0
  394. package/dist/fiscal/ingestion/adn-transport.js +220 -0
  395. package/dist/fiscal/ingestion/adn-transport.js.map +1 -0
  396. package/dist/fiscal/ingestion/direction.d.ts +60 -0
  397. package/dist/fiscal/ingestion/direction.d.ts.map +1 -0
  398. package/dist/fiscal/ingestion/direction.js +32 -0
  399. package/dist/fiscal/ingestion/direction.js.map +1 -0
  400. package/dist/fiscal/ingestion/nfse-adn.d.ts +91 -0
  401. package/dist/fiscal/ingestion/nfse-adn.d.ts.map +1 -0
  402. package/dist/fiscal/ingestion/nfse-adn.js +222 -0
  403. package/dist/fiscal/ingestion/nfse-adn.js.map +1 -0
  404. package/dist/fiscal/ingestion/pipeline.d.ts +168 -0
  405. package/dist/fiscal/ingestion/pipeline.d.ts.map +1 -0
  406. package/dist/fiscal/ingestion/pipeline.js +699 -0
  407. package/dist/fiscal/ingestion/pipeline.js.map +1 -0
  408. package/dist/fiscal/ingestion/provider.d.ts +206 -0
  409. package/dist/fiscal/ingestion/provider.d.ts.map +1 -0
  410. package/dist/fiscal/ingestion/provider.js +47 -0
  411. package/dist/fiscal/ingestion/provider.js.map +1 -0
  412. package/dist/fiscal/ingestion/repository.d.ts +82 -0
  413. package/dist/fiscal/ingestion/repository.d.ts.map +1 -0
  414. package/dist/fiscal/ingestion/repository.js +127 -0
  415. package/dist/fiscal/ingestion/repository.js.map +1 -0
  416. package/dist/fiscal/ingestion/synthetic-provider.d.ts +92 -0
  417. package/dist/fiscal/ingestion/synthetic-provider.d.ts.map +1 -0
  418. package/dist/fiscal/ingestion/synthetic-provider.js +99 -0
  419. package/dist/fiscal/ingestion/synthetic-provider.js.map +1 -0
  420. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts +19 -0
  421. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts.map +1 -0
  422. package/dist/fiscal/ingestion/synthetic-transport-types.js +9 -0
  423. package/dist/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  424. package/dist/fiscal/ingestion/synthetic-transport.d.ts +55 -0
  425. package/dist/fiscal/ingestion/synthetic-transport.d.ts.map +1 -0
  426. package/dist/fiscal/ingestion/synthetic-transport.js +57 -0
  427. package/dist/fiscal/ingestion/synthetic-transport.js.map +1 -0
  428. package/dist/fiscal/ingestion/xml-reader.d.ts +55 -0
  429. package/dist/fiscal/ingestion/xml-reader.d.ts.map +1 -0
  430. package/dist/fiscal/ingestion/xml-reader.js +112 -0
  431. package/dist/fiscal/ingestion/xml-reader.js.map +1 -0
  432. package/dist/fiscal/repository.d.ts +220 -0
  433. package/dist/fiscal/repository.d.ts.map +1 -0
  434. package/dist/fiscal/repository.js +449 -0
  435. package/dist/fiscal/repository.js.map +1 -0
  436. package/dist/fiscal/sync/circuit.d.ts +86 -0
  437. package/dist/fiscal/sync/circuit.d.ts.map +1 -0
  438. package/dist/fiscal/sync/circuit.js +118 -0
  439. package/dist/fiscal/sync/circuit.js.map +1 -0
  440. package/dist/fiscal/sync/intervention.d.ts +81 -0
  441. package/dist/fiscal/sync/intervention.d.ts.map +1 -0
  442. package/dist/fiscal/sync/intervention.js +135 -0
  443. package/dist/fiscal/sync/intervention.js.map +1 -0
  444. package/dist/fiscal/sync/lease.d.ts +118 -0
  445. package/dist/fiscal/sync/lease.d.ts.map +1 -0
  446. package/dist/fiscal/sync/lease.js +139 -0
  447. package/dist/fiscal/sync/lease.js.map +1 -0
  448. package/dist/fiscal/sync/observability.d.ts +148 -0
  449. package/dist/fiscal/sync/observability.d.ts.map +1 -0
  450. package/dist/fiscal/sync/observability.js +239 -0
  451. package/dist/fiscal/sync/observability.js.map +1 -0
  452. package/dist/fiscal/sync/orchestrator.d.ts +132 -0
  453. package/dist/fiscal/sync/orchestrator.d.ts.map +1 -0
  454. package/dist/fiscal/sync/orchestrator.js +487 -0
  455. package/dist/fiscal/sync/orchestrator.js.map +1 -0
  456. package/dist/fiscal/sync/policy.d.ts +87 -0
  457. package/dist/fiscal/sync/policy.d.ts.map +1 -0
  458. package/dist/fiscal/sync/policy.js +136 -0
  459. package/dist/fiscal/sync/policy.js.map +1 -0
  460. package/dist/fiscal/sync/reprocess.d.ts +76 -0
  461. package/dist/fiscal/sync/reprocess.d.ts.map +1 -0
  462. package/dist/fiscal/sync/reprocess.js +237 -0
  463. package/dist/fiscal/sync/reprocess.js.map +1 -0
  464. package/dist/fiscal/sync/retry.d.ts +82 -0
  465. package/dist/fiscal/sync/retry.d.ts.map +1 -0
  466. package/dist/fiscal/sync/retry.js +176 -0
  467. package/dist/fiscal/sync/retry.js.map +1 -0
  468. package/dist/fiscal/sync/secret-boundary.d.ts +169 -0
  469. package/dist/fiscal/sync/secret-boundary.d.ts.map +1 -0
  470. package/dist/fiscal/sync/secret-boundary.js +116 -0
  471. package/dist/fiscal/sync/secret-boundary.js.map +1 -0
  472. package/dist/fiscal/transport/https.d.ts +86 -0
  473. package/dist/fiscal/transport/https.d.ts.map +1 -0
  474. package/dist/fiscal/transport/https.js +303 -0
  475. package/dist/fiscal/transport/https.js.map +1 -0
  476. package/dist/fiscal/transport/synthetic-tls.d.ts +99 -0
  477. package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
  478. package/dist/fiscal/transport/synthetic-tls.js +374 -0
  479. package/dist/fiscal/transport/synthetic-tls.js.map +1 -0
  480. package/dist/fiscal/transport/types.d.ts +134 -0
  481. package/dist/fiscal/transport/types.d.ts.map +1 -0
  482. package/dist/fiscal/transport/types.js +88 -0
  483. package/dist/fiscal/transport/types.js.map +1 -0
  484. package/dist/import/br-documents.d.ts +26 -0
  485. package/dist/import/br-documents.d.ts.map +1 -0
  486. package/dist/import/br-documents.js +78 -0
  487. package/dist/import/br-documents.js.map +1 -0
  488. package/dist/import/clients-import.d.ts +122 -4
  489. package/dist/import/clients-import.d.ts.map +1 -1
  490. package/dist/import/clients-import.js +341 -41
  491. package/dist/import/clients-import.js.map +1 -1
  492. package/dist/index.d.ts +145 -13
  493. package/dist/index.d.ts.map +1 -1
  494. package/dist/index.js +120 -7
  495. package/dist/index.js.map +1 -1
  496. package/dist/legal/documents.d.ts +12 -1
  497. package/dist/legal/documents.d.ts.map +1 -1
  498. package/dist/legal/documents.js +162 -18
  499. package/dist/legal/documents.js.map +1 -1
  500. package/dist/legal/index.d.ts +2 -2
  501. package/dist/legal/index.d.ts.map +1 -1
  502. package/dist/legal/index.js +1 -1
  503. package/dist/legal/index.js.map +1 -1
  504. package/dist/legal/types.d.ts +114 -2
  505. package/dist/legal/types.d.ts.map +1 -1
  506. package/dist/legal/types.js.map +1 -1
  507. package/dist/onboarding/persistence.d.ts +10 -1
  508. package/dist/onboarding/persistence.d.ts.map +1 -1
  509. package/dist/onboarding/persistence.js +4 -4
  510. package/dist/onboarding/persistence.js.map +1 -1
  511. package/dist/pilot/go-live-checklist.d.ts +41 -0
  512. package/dist/pilot/go-live-checklist.d.ts.map +1 -0
  513. package/dist/pilot/go-live-checklist.js +209 -0
  514. package/dist/pilot/go-live-checklist.js.map +1 -0
  515. package/dist/pilot/milestone.d.ts +56 -0
  516. package/dist/pilot/milestone.d.ts.map +1 -0
  517. package/dist/pilot/milestone.js +74 -0
  518. package/dist/pilot/milestone.js.map +1 -0
  519. package/dist/platform/capabilities.d.ts +88 -0
  520. package/dist/platform/capabilities.d.ts.map +1 -0
  521. package/dist/platform/capabilities.js +169 -0
  522. package/dist/platform/capabilities.js.map +1 -0
  523. package/dist/platform/job-contract.d.ts +232 -0
  524. package/dist/platform/job-contract.d.ts.map +1 -0
  525. package/dist/platform/job-contract.js +403 -0
  526. package/dist/platform/job-contract.js.map +1 -0
  527. package/dist/rbac/catalog.d.ts.map +1 -1
  528. package/dist/rbac/catalog.js +110 -0
  529. package/dist/rbac/catalog.js.map +1 -1
  530. package/dist/subscription-billing/index.d.ts +8 -5
  531. package/dist/subscription-billing/index.d.ts.map +1 -1
  532. package/dist/subscription-billing/index.js +4 -3
  533. package/dist/subscription-billing/index.js.map +1 -1
  534. package/dist/subscription-billing/platform-exemption.d.ts +89 -0
  535. package/dist/subscription-billing/platform-exemption.d.ts.map +1 -0
  536. package/dist/subscription-billing/platform-exemption.js +113 -0
  537. package/dist/subscription-billing/platform-exemption.js.map +1 -0
  538. package/dist/subscription-billing/service.d.ts +74 -0
  539. package/dist/subscription-billing/service.d.ts.map +1 -1
  540. package/dist/subscription-billing/service.js +182 -16
  541. package/dist/subscription-billing/service.js.map +1 -1
  542. package/dist/tenancy/features.d.ts +69 -0
  543. package/dist/tenancy/features.d.ts.map +1 -0
  544. package/dist/tenancy/features.js +123 -0
  545. package/dist/tenancy/features.js.map +1 -0
  546. package/dist/tenancy/settings.d.ts +63 -0
  547. package/dist/tenancy/settings.d.ts.map +1 -0
  548. package/dist/tenancy/settings.js +218 -0
  549. package/dist/tenancy/settings.js.map +1 -0
  550. package/dist/users/repository.d.ts +16 -1
  551. package/dist/users/repository.d.ts.map +1 -1
  552. package/dist/users/repository.js +24 -1
  553. package/dist/users/repository.js.map +1 -1
  554. package/dist/vault/repository.d.ts +69 -1
  555. package/dist/vault/repository.d.ts.map +1 -1
  556. package/dist/vault/repository.js +88 -5
  557. package/dist/vault/repository.js.map +1 -1
  558. package/package.json +10 -2
  559. package/src/db/migrations/0045_role_write_scope.sql +122 -0
  560. package/src/db/migrations/0046_pilot_activation_model.sql +184 -0
  561. package/src/db/migrations/0047_recipient_clearance.sql +89 -0
  562. package/src/db/migrations/0048_item_type_note.sql +16 -0
  563. package/src/db/migrations/0049_national_fiscal_engine.sql +279 -0
  564. package/src/db/migrations/0050_fiscal_vocabulary_readonly.sql +29 -0
  565. package/src/db/migrations/0051_seed_rules_from_catalog.sql +72 -0
  566. package/src/db/migrations/0052_fiscal_rule_delete_scope.sql +57 -0
  567. package/src/db/migrations/0053_rule_validity_lower_bound.sql +44 -0
  568. package/src/db/migrations/0054_tenant_profile_and_rule_source.sql +89 -0
  569. package/src/db/migrations/0055_job_capability_contract.sql +300 -0
  570. package/src/db/migrations/0056_fiscal_document_ingestion.sql +337 -0
  571. package/src/db/migrations/0057_fiscal_pending_event_inbox.sql +228 -0
  572. package/src/db/migrations/0058_fiscal_operational_engine.sql +516 -0
  573. package/src/db/migrations/0059_fiscal_contract_version.sql +59 -0
  574. package/src/db/migrations/0060_fiscal_credential_vault_and_run_authorization.sql +321 -0
  575. package/src/db/migrations/0061_client_official_registry_provenance.sql +193 -0
  576. package/src/db/migrations/0062_first_contact_and_capability_truth.sql +119 -0
@@ -1,4 +1,5 @@
1
1
  import { ConflictError, NotFoundError, ValidationError, uuidv7 } from '@baruk/shared';
2
+ import { adjustToBusinessDay, lastBusinessDayOfMonth, nthBusinessDayOfMonth, shiftMonth, } from './business-days.js';
2
3
  /**
3
4
  * Competência e itens recorrentes (ADR 0008).
4
5
  *
@@ -151,6 +152,8 @@ function mapItemType(row) {
151
152
  appliesToRegime: Array.isArray(row.applies_to_regime) ? row.applies_to_regime : [],
152
153
  requiresDocument: row.requires_document,
153
154
  active: row.active,
155
+ note: row.note ?? null,
156
+ category: row.category ?? null,
154
157
  };
155
158
  }
156
159
  /**
@@ -162,7 +165,7 @@ export async function listRecurringItemTypes(tx, filter = {}) {
162
165
  const rows = await tx `
163
166
  SELECT DISTINCT ON (key)
164
167
  id, tenant_id, key, label, nature, sphere, periodicity,
165
- due_rule, applies_to_regime, requires_document, active
168
+ due_rule, applies_to_regime, requires_document, active, note, category
166
169
  FROM recurring_item_type
167
170
  WHERE deleted_at IS NULL
168
171
  AND (${filter.nature ?? null}::text IS NULL OR nature = ${filter.nature ?? null})
@@ -185,7 +188,52 @@ export async function createRecurringItemType(tx, input) {
185
188
  RETURNING id, tenant_id, key, label, nature, sphere, periodicity,
186
189
  due_rule, applies_to_regime, requires_document, active
187
190
  `;
188
- return mapItemType(rows[0]);
191
+ const tipo = mapItemType(rows[0]);
192
+ // Todo tipo de item nasce com uma REGRA, e a invariante é deliberada.
193
+ //
194
+ // Desde o motor nacional, gerar exige regra vigente: sem ela o motor devolve
195
+ // `RULE_NOT_CONFIGURED` e não gera — que é o comportamento seguro para quem
196
+ // não sabe o prazo daquela jurisdição. Um tipo criado sem regra, porém, não
197
+ // seria "seguro": seria invisível. O escritório cadastraria a obrigação,
198
+ // conferiria o catálogo, e ela nunca apareceria na prévia, sem explicação
199
+ // proporcional ao esforço.
200
+ //
201
+ // A regra companheira é federal, `pending_validation`, e carrega o mesmo
202
+ // vencimento que o operador acabou de declarar. Ela não afirma nada que ele
203
+ // já não tenha afirmado — só o coloca onde o motor enxerga.
204
+ await tx `
205
+ INSERT INTO fiscal_rule (
206
+ id, tenant_id, item_type_id, jurisdiction_scope, version, valid_from,
207
+ status, conditions, due_rule, note
208
+ ) VALUES (
209
+ ${uuidv7()}, current_setting('app.current_tenant')::uuid, ${tipo.id},
210
+ -- Limite inferior, e não hoje: o escritório processa a competência do mês
211
+ -- passado neste mês, e uma regra que só vale a partir de hoje deixaria
212
+ -- essa competência sem obrigação nenhuma. Ver 0053.
213
+ 'federal', 1, DATE '2000-01-01', 'pending_validation', '{"op":"always"}'::jsonb,
214
+ ${input.dueRule ? tx.json(input.dueRule) : null},
215
+ 'Regra criada junto com o tipo de item. Ajuste jurisdição e condições antes de conferir.'
216
+ )
217
+ `;
218
+ return tipo;
219
+ }
220
+ /**
221
+ * Vencimento como data pura `YYYY-MM-DD`.
222
+ *
223
+ * `due_date` é `date` no Postgres — sem hora e sem fuso. O driver o materializa
224
+ * como `Date` à meia-noite UTC, e devolvê-lo assim faz a API responder
225
+ * `2026-08-20T00:00:00.000Z`. Um cliente em UTC-3 renderiza isso como **19/08**:
226
+ * o vencimento aparece um dia antes do que é, e o alerta dispara no dia errado.
227
+ *
228
+ * `completed_at` (timestamptz) continua indo como instante ISO — ali a hora tem
229
+ * significado. Aqui não tem.
230
+ */
231
+ function toDateOnly(value) {
232
+ if (value == null)
233
+ return null;
234
+ if (typeof value === 'string')
235
+ return value.slice(0, 10);
236
+ return value.toISOString().slice(0, 10);
189
237
  }
190
238
  function mapInstance(row) {
191
239
  return {
@@ -195,7 +243,7 @@ function mapInstance(row) {
195
243
  itemTypeId: row.item_type_id,
196
244
  label: row.label,
197
245
  nature: row.nature,
198
- dueDate: row.due_date,
246
+ dueDate: toDateOnly(row.due_date),
199
247
  status: row.status,
200
248
  responsibleUserId: row.responsible_user_id,
201
249
  completedAt: row.completed_at ? row.completed_at.toISOString() : null,
@@ -240,30 +288,100 @@ export async function generateInstancesForCompetence(tx, input) {
240
288
  /**
241
289
  * Aplica a regra de vencimento sobre a competência.
242
290
  *
243
- * Hoje entende `{kind:'day_of_next_month', day:N}` e `{kind:'day_of_month', day:N}`.
244
291
  * Regra desconhecida devolve `null` em vez de chutar uma data — um vencimento
245
292
  * inventado é pior que vencimento ausente, porque o alerta dispararia no dia
246
293
  * errado e o usuário confiaria nele.
294
+ *
295
+ * ## Formas aceitas
296
+ *
297
+ * | `kind` | Campos | Significado |
298
+ * |---------------------------|-------------------|------------------------------------------------------|
299
+ * | `day_of_month` | `day` 1–28 | Dia N da própria competência |
300
+ * | `day_of_next_month` | `day` 1–28 | Dia N do mês seguinte |
301
+ * | `day_after_months` | `day` 1–28, `months` | Dia N, M meses depois (generaliza os dois acima) |
302
+ * | `last_business_day_after` | `months` | Último dia útil do mês M meses depois |
303
+ * | `nth_business_day_after` | `nth`, `months` | N-ésimo dia útil do mês M meses depois |
304
+ * | `fixed_annual` | `month`, `day` | Data fixa do ano SEGUINTE ao da competência |
305
+ * | `last_business_day_annual`| `month` | Último dia útil de um mês do ano seguinte |
306
+ *
307
+ * `adjust` move o resultado para um dia útil: `'previous'` (antecipa — é o padrão
308
+ * do recolhimento fiscal brasileiro), `'next'`, ou `'none'`.
309
+ *
310
+ * **`adjust` ausente significa `'none'`, deliberadamente.** As duas formas
311
+ * originais (`day_of_month`, `day_of_next_month`) foram criadas sem noção de dia
312
+ * útil e há regras gravadas em produção que dependem do resultado exato. Ligar o
313
+ * ajuste por padrão mudaria silenciosamente o vencimento de instâncias que já
314
+ * existem. Quem quer o comportamento fiscal pede por ele — e o catálogo de
315
+ * `@baruk/contabil` pede.
247
316
  */
248
317
  export function computeDueDate(competenceLabel, rule) {
249
318
  const kind = typeof rule['kind'] === 'string' ? rule['kind'] : null;
250
- const day = typeof rule['day'] === 'number' ? rule['day'] : null;
251
- if (!kind || day == null || day < 1 || day > 28)
319
+ if (!kind)
252
320
  return null;
321
+ const num = (k) => typeof rule[k] === 'number' ? rule[k] : null;
322
+ const rawAdjust = rule['adjust'];
323
+ const adjust = rawAdjust === 'previous' || rawAdjust === 'next' ? rawAdjust : 'none';
253
324
  const [yearStr, monthStr] = competenceLabel.split('-');
254
- let year = Number(yearStr);
255
- let month = Number(monthStr);
256
- if (kind === 'day_of_next_month') {
257
- month += 1;
258
- if (month > 12) {
259
- month = 1;
260
- year += 1;
261
- }
262
- }
263
- else if (kind !== 'day_of_month') {
325
+ const year = Number(yearStr);
326
+ const month = Number(monthStr);
327
+ if (!Number.isInteger(year) || !Number.isInteger(month) || month < 1 || month > 12)
264
328
  return null;
329
+ const dayOf = (y, m, d) => `${y}-${String(m).padStart(2, '0')}-${String(d).padStart(2, '0')}`;
330
+ let iso = null;
331
+ switch (kind) {
332
+ case 'day_of_month':
333
+ case 'day_of_next_month':
334
+ case 'day_after_months': {
335
+ const day = num('day');
336
+ // O teto de 28 evita a data que não existe (30 de fevereiro) sem precisar
337
+ // de calendário. Quem precisa do fim do mês usa `last_business_day_*`.
338
+ if (day == null || day < 1 || day > 28)
339
+ return null;
340
+ const months = kind === 'day_of_next_month' ? 1 : kind === 'day_of_month' ? 0 : (num('months') ?? 0);
341
+ if (!Number.isInteger(months) || months < 0 || months > 24)
342
+ return null;
343
+ const [y, m] = shiftMonth(year, month, months);
344
+ iso = dayOf(y, m, day);
345
+ break;
346
+ }
347
+ case 'last_business_day_after': {
348
+ const months = num('months');
349
+ if (months == null || !Number.isInteger(months) || months < 0 || months > 24)
350
+ return null;
351
+ const [y, m] = shiftMonth(year, month, months);
352
+ // Já cai em dia útil por construção; `adjust` fica inócuo aqui.
353
+ return lastBusinessDayOfMonth(y, m);
354
+ }
355
+ case 'nth_business_day_after': {
356
+ const nth = num('nth');
357
+ const months = num('months');
358
+ if (nth == null || nth < 1 || nth > 23)
359
+ return null;
360
+ if (months == null || !Number.isInteger(months) || months < 0 || months > 24)
361
+ return null;
362
+ const [y, m] = shiftMonth(year, month, months);
363
+ return nthBusinessDayOfMonth(y, m, nth);
364
+ }
365
+ case 'fixed_annual': {
366
+ const m = num('month');
367
+ const day = num('day');
368
+ if (m == null || m < 1 || m > 12)
369
+ return null;
370
+ if (day == null || day < 1 || day > 28)
371
+ return null;
372
+ iso = dayOf(year + 1, m, day);
373
+ break;
374
+ }
375
+ case 'last_business_day_annual': {
376
+ const m = num('month');
377
+ if (m == null || m < 1 || m > 12)
378
+ return null;
379
+ return lastBusinessDayOfMonth(year + 1, m);
380
+ }
381
+ default:
382
+ return null;
265
383
  }
266
- return `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
384
+ return adjustToBusinessDay(iso, adjust);
267
385
  }
268
386
  export async function listInstances(tx, filter = {}) {
269
387
  const rows = await tx `
@@ -278,6 +396,196 @@ export async function listInstances(tx, filter = {}) {
278
396
  `;
279
397
  return rows.map(mapInstance);
280
398
  }
399
+ /**
400
+ * Abre a competência do mês para a carteira inteira e gera os itens.
401
+ *
402
+ * É a ação que abre o mês de um escritório. Sem ela, "abrir competência" é uma
403
+ * operação por cliente — o que funciona na demonstração com três clientes e é
404
+ * impraticável com trezentos: ninguém vai clicar trezentas vezes todo dia 1º.
405
+ *
406
+ * Idempotente nas duas camadas: `openCompetence` faz `ON CONFLICT DO NOTHING`, e
407
+ * a geração é protegida pelo índice único `(tenant, client, competence, tipo)`.
408
+ * Rodar duas vezes no mesmo mês não duplica nada.
409
+ *
410
+ * O regime de cada cliente é resolvido por `resolveRegime` — injetado, porque
411
+ * quem sabe ler regime tributário é a vertical, e o Core não a conhece.
412
+ *
413
+ * Falha de um cliente não aborta o lote. Abortar deixaria o escritório com o mês
414
+ * meio aberto e sem saber onde parou; aqui ele vê o que passou e o que não.
415
+ */
416
+ export async function bulkOpenCompetence(tx, input) {
417
+ assertCompetenceLabel(input.label);
418
+ const targets = input.clientIds && input.clientIds.length > 0
419
+ ? input.clientIds
420
+ : (await tx `
421
+ SELECT id FROM client
422
+ WHERE deleted_at IS NULL AND status = 'active'
423
+ ORDER BY display_name
424
+ `).map((r) => r.id);
425
+ const result = {
426
+ clientsProcessed: 0,
427
+ competencesOpened: 0,
428
+ competencesExisting: 0,
429
+ itemsCreated: 0,
430
+ itemsSkipped: 0,
431
+ failures: [],
432
+ };
433
+ for (const clientId of targets) {
434
+ try {
435
+ const opened = await openCompetence(tx, { clientId, label: input.label });
436
+ if (opened.created)
437
+ result.competencesOpened += 1;
438
+ else
439
+ result.competencesExisting += 1;
440
+ const regime = input.resolveRegime ? await input.resolveRegime(clientId) : null;
441
+ const generated = await generateInstancesForCompetence(tx, {
442
+ competenceId: opened.competence.id,
443
+ regime,
444
+ });
445
+ result.itemsCreated += generated.created.length;
446
+ result.itemsSkipped += generated.skipped;
447
+ result.clientsProcessed += 1;
448
+ }
449
+ catch (err) {
450
+ result.failures.push({
451
+ clientId,
452
+ reason: err instanceof Error ? err.message : String(err),
453
+ });
454
+ }
455
+ }
456
+ return result;
457
+ }
458
+ export async function listOfficeObligations(tx, filter = {}) {
459
+ const limit = Math.min(Math.max(filter.limit ?? 100, 1), 500);
460
+ const offset = Math.max(filter.offset ?? 0, 0);
461
+ const where = tx `
462
+ WHERE i.deleted_at IS NULL
463
+ AND c.deleted_at IS NULL
464
+ AND (${filter.dueFrom ?? null}::date IS NULL OR i.due_date >= ${filter.dueFrom ?? null})
465
+ AND (${filter.dueTo ?? null}::date IS NULL OR i.due_date <= ${filter.dueTo ?? null})
466
+ AND (${filter.status ?? null}::text IS NULL OR i.status = ${filter.status ?? null})
467
+ AND (${filter.nature ?? null}::text IS NULL OR i.nature = ${filter.nature ?? null})
468
+ AND (${filter.clientId ?? null}::uuid IS NULL OR i.client_id = ${filter.clientId ?? null})
469
+ AND (${filter.responsibleUserId ?? null}::uuid IS NULL
470
+ OR i.responsible_user_id = ${filter.responsibleUserId ?? null})
471
+ AND (${filter.openOnly ?? false}::boolean = false OR i.status <> 'done')
472
+ `;
473
+ const rows = await tx `
474
+ SELECT i.id, i.client_id, i.competence_id, i.item_type_id, i.label, i.nature,
475
+ i.due_date, i.status, i.responsible_user_id, i.completed_at,
476
+ c.display_name AS client_name,
477
+ comp.label AS competence_label,
478
+ t.sphere, t.category, t.requires_document,
479
+ u.full_name AS responsible_name
480
+ FROM recurring_instance i
481
+ JOIN client c ON c.id = i.client_id
482
+ JOIN competence comp ON comp.id = i.competence_id
483
+ LEFT JOIN recurring_item_type t ON t.id = i.item_type_id
484
+ LEFT JOIN "user" u ON u.id = i.responsible_user_id
485
+ ${where}
486
+ ORDER BY i.due_date NULLS LAST, c.display_name, i.label
487
+ LIMIT ${limit} OFFSET ${offset}
488
+ `;
489
+ const [count] = await tx `
490
+ SELECT count(*)::int AS n
491
+ FROM recurring_instance i
492
+ JOIN client c ON c.id = i.client_id
493
+ ${where}
494
+ `;
495
+ return {
496
+ items: rows.map((r) => ({
497
+ ...mapInstance(r),
498
+ clientName: r.client_name,
499
+ competenceLabel: r.competence_label,
500
+ sphere: r.sphere,
501
+ category: r.category,
502
+ requiresDocument: r.requires_document ?? false,
503
+ responsibleName: r.responsible_name,
504
+ })),
505
+ total: count?.n ?? 0,
506
+ };
507
+ }
508
+ /**
509
+ * Define o responsável por um item.
510
+ *
511
+ * Existe porque não existia: a rota de compliance legada gravava
512
+ * `responsibleUserId = auth.userId` sem aceitar o campo, então a obrigação era
513
+ * sempre de quem a criou. Um escritório distribui trabalho; sem isto, "de quem é
514
+ * esta DAS?" não tem resposta no produto.
515
+ *
516
+ * `null` desatribui — deixar sem dono é um estado legítimo, e sem essa
517
+ * distinção um campo esvaziado na tela seria indistinguível de "não mexi nele".
518
+ */
519
+ export async function assignInstance(tx, input) {
520
+ const rows = await tx `
521
+ UPDATE recurring_instance
522
+ SET responsible_user_id = ${input.responsibleUserId},
523
+ version = version + 1, updated_at = now()
524
+ WHERE id = ${input.id} AND deleted_at IS NULL
525
+ RETURNING id, client_id, competence_id, item_type_id, label, nature,
526
+ due_date, status, responsible_user_id, completed_at
527
+ `;
528
+ if (!rows[0])
529
+ throw new NotFoundError('Item não encontrado');
530
+ return mapInstance(rows[0]);
531
+ }
532
+ /**
533
+ * Reabre um item concluído.
534
+ *
535
+ * Marcar como entregue é a ação mais fácil de errar na tela — uma linha ao lado
536
+ * da outra, um clique. Sem reabrir, o erro vira permanente e o operador aprende
537
+ * a não confiar no botão.
538
+ */
539
+ export async function reopenInstance(tx, id) {
540
+ const rows = await tx `
541
+ UPDATE recurring_instance
542
+ SET status = 'pending', completed_at = NULL, completed_by = NULL,
543
+ version = version + 1, updated_at = now()
544
+ WHERE id = ${id} AND deleted_at IS NULL AND status = 'done'
545
+ RETURNING id, client_id, competence_id, item_type_id, label, nature,
546
+ due_date, status, responsible_user_id, completed_at
547
+ `;
548
+ if (!rows[0])
549
+ throw new NotFoundError('Item não encontrado ou não está concluído');
550
+ return mapInstance(rows[0]);
551
+ }
552
+ /**
553
+ * Fecha a obrigação quando TODOS os documentos que ela pedia foram validados.
554
+ *
555
+ * Este é o elo que faltava no ciclo. `document_request.recurring_instance_id`
556
+ * existe no schema desde a 0026 e nunca era preenchido, então validar um
557
+ * documento não dizia nada à obrigação que o pediu: o operador entregava a
558
+ * DAS, validava a nota fiscal, e ainda precisava lembrar de marcar a obrigação
559
+ * à mão — numa lista onde esquecer é o resultado provável.
560
+ *
561
+ * **Todos**, não "algum". Uma obrigação pode pedir três documentos; concluir no
562
+ * primeiro validado marcaria como entregue algo que ainda falta. Pedido
563
+ * `canceled` não conta como pendência — foi retirado de propósito.
564
+ *
565
+ * Devolve a instância quando concluiu, `null` quando ainda há pendência. `null`
566
+ * é resposta normal, não erro.
567
+ */
568
+ export async function completeInstanceIfDocumentsSettled(tx, input) {
569
+ const [pend] = await tx `
570
+ SELECT count(*) FILTER (WHERE status NOT IN ('validated', 'canceled'))::int AS pendentes,
571
+ count(*)::int AS total
572
+ FROM document_request
573
+ WHERE recurring_instance_id = ${input.instanceId} AND deleted_at IS NULL
574
+ `;
575
+ // Sem pedido nenhum, não há o que inferir: a obrigação não é "de documento".
576
+ if (!pend || pend.total === 0 || pend.pendentes > 0)
577
+ return null;
578
+ const rows = await tx `
579
+ UPDATE recurring_instance
580
+ SET status = 'done', completed_at = now(), completed_by = ${input.completedBy},
581
+ version = version + 1, updated_at = now()
582
+ WHERE id = ${input.instanceId} AND deleted_at IS NULL AND status <> 'done'
583
+ RETURNING id, client_id, competence_id, item_type_id, label, nature,
584
+ due_date, status, responsible_user_id, completed_at
585
+ `;
586
+ // Já estava concluída: não é erro, e não há nada a anunciar.
587
+ return rows[0] ? mapInstance(rows[0]) : null;
588
+ }
281
589
  export async function completeInstance(tx, input) {
282
590
  const rows = await tx `
283
591
  UPDATE recurring_instance
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/competence/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/competence/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import type { Tx } from '../db/client.js';
2
+ import { type DataProvenance } from '../pilot/milestone.js';
3
+ /**
4
+ * O painel do piloto — as perguntas que o responsável faz todo dia.
5
+ *
6
+ * ## O critério de inclusão
7
+ *
8
+ * Cada número aqui existe porque alguém precisa decidir algo com ele hoje de
9
+ * manhã. Um painel decorativo não é neutro: ele ocupa a tela onde deveria estar
10
+ * o que importa, e ensina a não olhar.
11
+ *
12
+ * Tudo é derivado de dado real do sistema, na consulta. Nada é gravado como
13
+ * contador — um contador é um segundo lugar para a verdade morar, e ele fica
14
+ * errado exatamente quando ninguém está olhando.
15
+ *
16
+ * ## O que este arquivo NÃO responde
17
+ *
18
+ * "Quantos clientes estão sem regime tributário?" e "quais certificados
19
+ * digitais vencem?" são perguntas de contabilidade, e as tabelas que as
20
+ * respondem (`accounting_regime`, `digital_certificate`) pertencem à vertical.
21
+ * O Core não as consulta — nem por import, nem por SQL. O teste de fronteira
22
+ * só enxerga imports, mas uma consulta SQL a tabela de vertical seria a mesma
23
+ * violação, e quebraria de verdade num tenant que não tem o produto contábil.
24
+ * Essas duas seções vêm de `@baruk/contabil` e são compostas na borda, como
25
+ * `getCoreStats` já fazia.
26
+ *
27
+ * ## As duas colunas que costumam faltar
28
+ *
29
+ * `clientesSemCanalAutomatico` e `obrigacoesSemResponsavel` existem porque são
30
+ * ausências, e ausência não aparece em lista: um cliente sem e-mail nunca vira
31
+ * linha na fila de cobrança, e uma obrigação sem responsável nunca vira tarefa
32
+ * de ninguém. Sem um número que as conte, elas somem — que é exatamente o que
33
+ * aconteceu na carteira de QA da Fase 3.
34
+ */
35
+ export interface PilotPanel {
36
+ /**
37
+ * De que lado da fronteira estão os números deste painel.
38
+ *
39
+ * Enquanto o piloto real não é declarado, **tudo** é pré-produtivo — QA,
40
+ * demonstração, App Review. Um painel que anuncia "2 clientes ativos" sem
41
+ * dizer isso convida a ler indicador de teste como indicador de operação, e
42
+ * o erro é irreversível: depois de misturados, ninguém separa.
43
+ */
44
+ provenance: DataProvenance;
45
+ clientes: {
46
+ ativos: number;
47
+ emOnboarding: number;
48
+ semCanalAutomatico: number;
49
+ semResponsavel: number;
50
+ /**
51
+ * Têm e-mail e ninguém liberou ainda.
52
+ *
53
+ * É a terceira ausência que não aparece em fila nenhuma: estes clientes
54
+ * parecem alcançáveis (têm endereço) e a régua não os toca. Sem o número,
55
+ * o escritório concluiria que a cobrança está rodando quando ela está
56
+ * parada — que é o modo de falha oposto ao dos 81 e-mails, e igualmente
57
+ * silencioso.
58
+ */
59
+ aguardandoLiberacao: number;
60
+ };
61
+ obrigacoes: {
62
+ venceHoje: number;
63
+ venceEm7Dias: number;
64
+ atrasadas: number;
65
+ semResponsavel: number;
66
+ aguardandoCliente: number;
67
+ };
68
+ documentos: {
69
+ pendentes: number;
70
+ vencidos: number;
71
+ aguardandoValidacao: number;
72
+ };
73
+ solicitacoes: {
74
+ aguardandoCliente: number;
75
+ aguardandoEquipe: number;
76
+ };
77
+ /**
78
+ * Delegado a `financialSummary`, e não recalculado aqui.
79
+ *
80
+ * A régua do financeiro desconta pagamentos confirmados e usa o status
81
+ * EFETIVO (derivado da data), não o gravado. Uma segunda consulta escrita
82
+ * neste arquivo responderia a mesma pergunta com outro número — e o painel
83
+ * discordaria da tela de recebíveis sem que nada explicasse por quê.
84
+ */
85
+ financeiro: {
86
+ recebiveisVencidos: number;
87
+ valorVencido: number;
88
+ aVencerEm7Dias: number;
89
+ };
90
+ }
91
+ /**
92
+ * Uma consulta por bloco, não uma por número.
93
+ *
94
+ * `count(*) FILTER (WHERE …)` faz o Postgres varrer a tabela uma vez e devolver
95
+ * todos os recortes. Doze `SELECT count(*)` separados dariam o mesmo resultado
96
+ * com doze varreduras — e, pior, com doze instantes diferentes: dois números do
97
+ * mesmo painel poderiam discordar entre si.
98
+ */
99
+ export declare function getPilotPanel(tx: Tx): Promise<PilotPanel>;
100
+ //# sourceMappingURL=pilot-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pilot-panel.d.ts","sourceRoot":"","sources":["../../src/dashboard/pilot-panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;OAOG;IACH,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB;;;;;;;;WAQG;QACH,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,YAAY,EAAE;QACZ,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF;;;;;;;OAOG;IACH,UAAU,EAAE;QACV,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CA0F/D"}
@@ -0,0 +1,87 @@
1
+ import { financialSummary } from '../billing/ar-repository.js';
2
+ import { dataProvenance } from '../pilot/milestone.js';
3
+ /**
4
+ * Uma consulta por bloco, não uma por número.
5
+ *
6
+ * `count(*) FILTER (WHERE …)` faz o Postgres varrer a tabela uma vez e devolver
7
+ * todos os recortes. Doze `SELECT count(*)` separados dariam o mesmo resultado
8
+ * com doze varreduras — e, pior, com doze instantes diferentes: dois números do
9
+ * mesmo painel poderiam discordar entre si.
10
+ */
11
+ export async function getPilotPanel(tx) {
12
+ const [clientes] = await tx `
13
+ SELECT
14
+ count(*) FILTER (WHERE c.status = 'active')::int AS ativos,
15
+ count(*) FILTER (WHERE c.status = 'prospect')::int AS onboarding,
16
+ count(*) FILTER (WHERE c.status = 'active' AND c.email IS NULL)::int AS sem_canal,
17
+ count(*) FILTER (WHERE c.status = 'active'
18
+ AND c.responsible_user_id IS NULL)::int AS sem_resp,
19
+ count(*) FILTER (WHERE c.status = 'active'
20
+ AND c.email IS NOT NULL
21
+ AND c.communication_cleared_at IS NULL)::int AS sem_liberacao
22
+ FROM client c
23
+ WHERE c.deleted_at IS NULL
24
+ `;
25
+ const [obrigacoes] = await tx `
26
+ SELECT
27
+ count(*) FILTER (WHERE due_date = current_date)::int AS hoje,
28
+ count(*) FILTER (WHERE due_date > current_date
29
+ AND due_date <= current_date + 7)::int AS sete,
30
+ count(*) FILTER (WHERE due_date < current_date)::int AS atraso,
31
+ count(*) FILTER (WHERE responsible_user_id IS NULL)::int AS sem_resp,
32
+ count(*) FILTER (WHERE status = 'awaiting_client')::int AS aguardando
33
+ FROM recurring_instance
34
+ WHERE deleted_at IS NULL
35
+ AND status NOT IN ('done', 'not_applicable', 'canceled')
36
+ `;
37
+ const [documentos] = await tx `
38
+ SELECT
39
+ count(*) FILTER (WHERE status = 'requested')::int AS pendentes,
40
+ count(*) FILTER (WHERE status = 'requested'
41
+ AND due_date IS NOT NULL AND due_date < current_date)::int AS vencidos,
42
+ count(*) FILTER (WHERE status = 'received')::int AS validar
43
+ FROM document_request
44
+ WHERE deleted_at IS NULL
45
+ `;
46
+ const [solicitacoes] = await tx `
47
+ SELECT
48
+ count(*) FILTER (WHERE status IN ('sent', 'viewed', 'awaiting_client'))::int AS cliente,
49
+ count(*) FILTER (WHERE status IN ('answered', 'in_review'))::int AS equipe
50
+ FROM service_request
51
+ WHERE deleted_at IS NULL
52
+ `;
53
+ const financeiro = await financialSummary(tx);
54
+ const provenance = await dataProvenance(tx);
55
+ return {
56
+ provenance,
57
+ clientes: {
58
+ ativos: clientes?.ativos ?? 0,
59
+ emOnboarding: clientes?.onboarding ?? 0,
60
+ semCanalAutomatico: clientes?.sem_canal ?? 0,
61
+ semResponsavel: clientes?.sem_resp ?? 0,
62
+ aguardandoLiberacao: clientes?.sem_liberacao ?? 0,
63
+ },
64
+ obrigacoes: {
65
+ venceHoje: obrigacoes?.hoje ?? 0,
66
+ venceEm7Dias: obrigacoes?.sete ?? 0,
67
+ atrasadas: obrigacoes?.atraso ?? 0,
68
+ semResponsavel: obrigacoes?.sem_resp ?? 0,
69
+ aguardandoCliente: obrigacoes?.aguardando ?? 0,
70
+ },
71
+ documentos: {
72
+ pendentes: documentos?.pendentes ?? 0,
73
+ vencidos: documentos?.vencidos ?? 0,
74
+ aguardandoValidacao: documentos?.validar ?? 0,
75
+ },
76
+ solicitacoes: {
77
+ aguardandoCliente: solicitacoes?.cliente ?? 0,
78
+ aguardandoEquipe: solicitacoes?.equipe ?? 0,
79
+ },
80
+ financeiro: {
81
+ recebiveisVencidos: financeiro.overdueCount,
82
+ valorVencido: financeiro.totalOverdue,
83
+ aVencerEm7Dias: financeiro.totalDueSoon,
84
+ },
85
+ };
86
+ }
87
+ //# sourceMappingURL=pilot-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pilot-panel.js","sourceRoot":"","sources":["../../src/dashboard/pilot-panel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAuB,MAAM,uBAAuB,CAAC;AA2F5E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAM;IACxC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,CAQ1B;;;;;;;;;;;;GAYA,CAAC;IAEF,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,EAAE,CAE5B;;;;;;;;;;;GAWA,CAAC;IAEF,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,EAAE,CAA4D;;;;;;;;GAQxF,CAAC;IAEF,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,EAAE,CAAuC;;;;;;GAMrE,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;IAE5C,OAAO;QACL,UAAU;QACV,QAAQ,EAAE;YACR,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;YAC7B,YAAY,EAAE,QAAQ,EAAE,UAAU,IAAI,CAAC;YACvC,kBAAkB,EAAE,QAAQ,EAAE,SAAS,IAAI,CAAC;YAC5C,cAAc,EAAE,QAAQ,EAAE,QAAQ,IAAI,CAAC;YACvC,mBAAmB,EAAE,QAAQ,EAAE,aAAa,IAAI,CAAC;SAClD;QACD,UAAU,EAAE;YACV,SAAS,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC;YAChC,YAAY,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC;YACnC,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;YAClC,cAAc,EAAE,UAAU,EAAE,QAAQ,IAAI,CAAC;YACzC,iBAAiB,EAAE,UAAU,EAAE,UAAU,IAAI,CAAC;SAC/C;QACD,UAAU,EAAE;YACV,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,CAAC;YACrC,QAAQ,EAAE,UAAU,EAAE,QAAQ,IAAI,CAAC;YACnC,mBAAmB,EAAE,UAAU,EAAE,OAAO,IAAI,CAAC;SAC9C;QACD,YAAY,EAAE;YACZ,iBAAiB,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC;YAC7C,gBAAgB,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;SAC5C;QACD,UAAU,EAAE;YACV,kBAAkB,EAAE,UAAU,CAAC,YAAY;YAC3C,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,cAAc,EAAE,UAAU,CAAC,YAAY;SACxC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/dashboard/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChF;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkCtE"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/dashboard/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChF;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4CtE"}