@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
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.goLiveChecklist = goLiveChecklist;
4
+ const catalog_validation_js_1 = require("../competence/catalog-validation.js");
5
+ const live_guard_js_1 = require("../billing/live-guard.js");
6
+ const clearance_store_js_1 = require("../collection/clearance-store.js");
7
+ const milestone_js_1 = require("./milestone.js");
8
+ async function goLiveChecklist(tx, env = process.env) {
9
+ const gates = [];
10
+ const add = (g) => void gates.push(g);
11
+ // ── DATA ────────────────────────────────────────────────────────────────
12
+ const [clientes] = await tx `
13
+ SELECT count(*)::int AS total,
14
+ count(*) FILTER (WHERE email IS NULL)::int AS sem_email,
15
+ count(*) FILTER (WHERE responsible_user_id IS NULL)::int AS sem_resp
16
+ FROM client
17
+ WHERE deleted_at IS NULL AND status = 'active'
18
+ `;
19
+ const total = clientes?.total ?? 0;
20
+ add({
21
+ key: 'CLIENT_DATA_READY',
22
+ category: 'DATA',
23
+ ready: total > 0,
24
+ detail: total > 0
25
+ ? `${total} cliente(s) ativos.`
26
+ : 'Nenhum cliente ativo — carteira real não importada.',
27
+ humanOnly: true,
28
+ });
29
+ add({
30
+ key: 'REAL_EMAIL_READY',
31
+ category: 'DATA',
32
+ ready: total > 0 && (clientes?.sem_email ?? 0) === 0,
33
+ detail: total === 0
34
+ ? 'Sem carteira para avaliar.'
35
+ : (clientes?.sem_email ?? 0) === 0
36
+ ? 'Todos os clientes ativos têm e-mail.'
37
+ : `${clientes?.sem_email} cliente(s) sem e-mail: cobrança e pedido de documento não os alcançam.`,
38
+ humanOnly: true,
39
+ });
40
+ add({
41
+ key: 'USERS_READY',
42
+ category: 'DATA',
43
+ ready: total > 0 && (clientes?.sem_resp ?? 0) === 0,
44
+ detail: total === 0
45
+ ? 'Sem carteira para distribuir.'
46
+ : (clientes?.sem_resp ?? 0) === 0
47
+ ? 'Carteira inteira com responsável.'
48
+ : `${clientes?.sem_resp} cliente(s) sem responsável.`,
49
+ humanOnly: true,
50
+ });
51
+ // ── COMUNICAÇÃO EXTERNA ─────────────────────────────────────────────────
52
+ //
53
+ // Este gate mede o que a Fase 6 encontrou rodando em produção: a régua
54
+ // enviava e-mail para todo cliente com endereço e recebível vencido, sem que
55
+ // nada perguntasse se alguém conferiu aquele endereço.
56
+ const clr = await (0, clearance_store_js_1.clearanceSummary)(tx);
57
+ add({
58
+ key: 'EMAIL_RECIPIENT_CONFIRMED',
59
+ category: 'HUMAN',
60
+ ready: total > 0 && clr.pendingWithEmail === 0,
61
+ detail: total === 0
62
+ ? 'Sem carteira para conferir.'
63
+ : clr.pendingWithEmail === 0
64
+ ? `${clr.cleared} cliente(s) liberados para comunicação externa.`
65
+ : `${clr.pendingWithEmail} cliente(s) com e-mail e SEM liberação — a régua não os alcança até alguém conferir.`,
66
+ humanOnly: true,
67
+ });
68
+ // ── FRONTEIRA ENSAIO × OPERAÇÃO ─────────────────────────────────────────
69
+ const marco = await (0, milestone_js_1.getRealPilotStart)(tx);
70
+ add({
71
+ key: 'REAL_PILOT_START_DECLARED',
72
+ category: 'BUSINESS',
73
+ ready: marco !== null,
74
+ detail: marco
75
+ ? `Piloto real declarado em ${marco.occurredAt}. Dados anteriores são pré-produtivos por definição.`
76
+ : 'Marco não declarado: todo dado atual conta como pré-produtivo (QA, demo, App Review da Meta).',
77
+ humanOnly: true,
78
+ });
79
+ // ── IMPORTAÇÃO ──────────────────────────────────────────────────────────
80
+ const [lotes] = await tx `SELECT count(*)::int AS n FROM client_import_batch`;
81
+ add({
82
+ key: 'IMPORT_READY',
83
+ category: 'TECHNICAL',
84
+ ready: true,
85
+ detail: `Plano, digest, avisos, lote e desfazer disponíveis. ${lotes?.n ?? 0} importação(ões) registrada(s).`,
86
+ humanOnly: false,
87
+ });
88
+ add({
89
+ key: 'ROLLBACK_READY',
90
+ category: 'TECHNICAL',
91
+ ready: true,
92
+ detail: 'Desfazer é lógico e seletivo: cliente com honorário, obrigação, documento ou cobrança é preservado.',
93
+ humanOnly: false,
94
+ });
95
+ // ── CATÁLOGO ────────────────────────────────────────────────────────────
96
+ const cat = await (0, catalog_validation_js_1.catalogValidationSummary)(tx);
97
+ add({
98
+ key: 'CATALOG_READY',
99
+ category: 'BUSINESS',
100
+ ready: cat.humanValidationComplete,
101
+ detail: cat.humanValidationComplete
102
+ ? `${cat.validated} obrigação(ões) conferidas.`
103
+ : cat.total === 0
104
+ ? 'Lista de conferência ainda não preparada.'
105
+ : `${cat.pending} item(ns) por conferir — a prévia não os propõe enquanto isso.`,
106
+ humanOnly: true,
107
+ });
108
+ // ── FINANCEIRO ──────────────────────────────────────────────────────────
109
+ // `payment_provider_account` não tem soft-delete: a conta ou está cadastrada
110
+ // ou não está. Filtrar por `deleted_at` aqui quebraria a consulta inteira.
111
+ const [contas] = await tx `
112
+ SELECT count(*) FILTER (WHERE environment = 'live')::int AS live
113
+ FROM payment_provider_account
114
+ `;
115
+ add({
116
+ key: 'FINANCE_READY',
117
+ category: 'FINANCIAL',
118
+ ready: true,
119
+ detail: 'Honorário → recebível → aging → régua operam sem provedor configurado (ASAAS_NOT_READY tolerado).',
120
+ humanOnly: false,
121
+ });
122
+ // **Este gate nunca fica verde sozinho, e é de propósito.**
123
+ //
124
+ // A primeira versão respondia `ready: (contas.live > 0)` — existe linha de
125
+ // conta em produção? Rodando contra o banco real, ela deu VERDE enquanto o
126
+ // KYC do Asaas estava REJEITADO. A linha existir não prova que a conta emite
127
+ // cobrança; prova só que alguém a cadastrou.
128
+ //
129
+ // A aprovação do KYC não é derivável do banco: ela vive no provedor. Um gate
130
+ // que afirma prontidão a partir de um substituto local é pior que gate
131
+ // nenhum, porque dá autorização com a aparência de verificação. Então ele
132
+ // declara o que sabe, diz o que não pode saber, e deixa a confirmação com
133
+ // quem consegue fazê-la.
134
+ const temContaLive = (contas?.live ?? 0) > 0;
135
+ add({
136
+ key: 'ASAAS_LIVE_ACTIVATION_AUTHORIZED_BY_HUMAN',
137
+ category: 'FINANCIAL',
138
+ ready: false,
139
+ detail: 'Segundo portão, independente do KYC: mesmo com o KYC aprovado, ligar a emissão em produção é uma autorização humana explícita e separada. Aprovação do provedor não é autorização do escritório.',
140
+ humanOnly: true,
141
+ });
142
+ add({
143
+ key: 'ASAAS_READY',
144
+ category: 'FINANCIAL',
145
+ ready: false,
146
+ detail: temContaLive
147
+ ? 'Conta de produção cadastrada — mas isto NÃO prova que ela emite cobrança. A aprovação do KYC vive no provedor e não é verificável a partir do banco: confirme no painel do Asaas antes de ligar a emissão.'
148
+ : 'Sem conta de produção cadastrada, e o KYC do Asaas é dependência externa não contornável pelo produto.',
149
+ humanOnly: true,
150
+ });
151
+ const live = (0, live_guard_js_1.readLiveRuntime)(env);
152
+ add({
153
+ key: 'LIVE_CHARGES_GATE',
154
+ category: 'SECURITY',
155
+ ready: true,
156
+ detail: live.liveChargesDisabled
157
+ ? 'Emissão em produção PAUSADA — estado desejado até o KYC sair.'
158
+ : 'Emissão em produção liberada.',
159
+ humanOnly: false,
160
+ });
161
+ // ── SEGURANÇA ───────────────────────────────────────────────────────────
162
+ //
163
+ // Mede o ATRIBUTO no catálogo do Postgres, e não o comportamento: uma sonda
164
+ // comportamental passa quando a conexão de teste tem privilégio de mais.
165
+ const [rls] = await tx `
166
+ SELECT count(*)::int AS sem_force
167
+ FROM pg_class c
168
+ JOIN pg_namespace n ON n.oid = c.relnamespace
169
+ WHERE n.nspname = 'public'
170
+ AND c.relname IN ('client','fee_agreement','receivable','recurring_instance',
171
+ 'document_request','client_import_batch',
172
+ 'recurring_item_type_validation','fee_agreement_obligation')
173
+ AND NOT (c.relrowsecurity AND c.relforcerowsecurity)
174
+ `;
175
+ add({
176
+ key: 'TENANT_SECURITY_READY',
177
+ category: 'SECURITY',
178
+ ready: (rls?.sem_force ?? 1) === 0,
179
+ detail: (rls?.sem_force ?? 1) === 0
180
+ ? 'RLS FORCE ativo nas tabelas do ciclo, incluindo as criadas nesta fase.'
181
+ : `${rls?.sem_force} tabela(s) do ciclo sem RLS FORCE.`,
182
+ humanOnly: false,
183
+ });
184
+ add({
185
+ key: 'WHATSAPP_READY_OR_OPTIONAL',
186
+ category: 'TECHNICAL',
187
+ ready: true,
188
+ detail: 'Opcional para o piloto: o e-mail cobre cobrança, pedido de documento e portal. WhatsApp segue fora de escopo.',
189
+ humanOnly: false,
190
+ });
191
+ // ── MONITORAMENTO ───────────────────────────────────────────────────────
192
+ const [auditoria] = await tx `
193
+ SELECT count(*)::int AS n FROM audit_log WHERE occurred_at > now() - interval '30 days'
194
+ `;
195
+ add({
196
+ key: 'MONITORING_READY',
197
+ category: 'TECHNICAL',
198
+ ready: (auditoria?.n ?? 0) > 0,
199
+ detail: (auditoria?.n ?? 0) > 0
200
+ ? `${auditoria?.n} evento(s) de auditoria nos últimos 30 dias.`
201
+ : 'Sem eventos de auditoria recentes — a trilha existe e não está sendo alimentada.',
202
+ humanOnly: false,
203
+ });
204
+ const technicalReady = gates.filter((g) => !g.humanOnly).every((g) => g.ready);
205
+ return {
206
+ gates,
207
+ technicalReady,
208
+ activationReady: gates.every((g) => g.ready),
209
+ humanBlockers: gates.filter((g) => g.humanOnly && !g.ready).map((g) => g.key),
210
+ };
211
+ }
212
+ //# sourceMappingURL=go-live-checklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-live-checklist.js","sourceRoot":"","sources":["../../../src/pilot/go-live-checklist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRealPilotStart = getRealPilotStart;
4
+ exports.declareRealPilotStart = declareRealPilotStart;
5
+ exports.dataProvenance = dataProvenance;
6
+ const shared_1 = require("@baruk/shared");
7
+ async function getRealPilotStart(tx) {
8
+ const rows = await tx `
9
+ SELECT occurred_at, declared_by, note
10
+ FROM tenant_pilot_milestone
11
+ WHERE milestone = 'real_pilot_start'
12
+ `;
13
+ const r = rows[0];
14
+ return r
15
+ ? { occurredAt: r.occurred_at.toISOString(), declaredBy: r.declared_by, note: r.note }
16
+ : null;
17
+ }
18
+ /**
19
+ * Declara o início do piloto real.
20
+ *
21
+ * **Idempotente e não sobrescreve.** Se o marco já existe, a chamada devolve o
22
+ * que está lá em vez de mover a linha: "quando começou de verdade" não admite
23
+ * duas respostas, e uma segunda declaração seria alguém reescrevendo a
24
+ * fronteira depois de os dados já terem cruzado.
25
+ */
26
+ async function declareRealPilotStart(tx, input) {
27
+ const existente = await getRealPilotStart(tx);
28
+ if (existente)
29
+ return { milestone: existente, created: false };
30
+ const rows = await tx `
31
+ INSERT INTO tenant_pilot_milestone (id, tenant_id, milestone, declared_by, note)
32
+ VALUES (${(0, shared_1.uuidv7)()}, current_setting('app.current_tenant')::uuid, 'real_pilot_start',
33
+ ${input.actorId}, ${input.note ?? null})
34
+ ON CONFLICT DO NOTHING
35
+ RETURNING occurred_at, declared_by, note
36
+ `;
37
+ const r = rows[0];
38
+ if (!r) {
39
+ // Corrida: outra sessão declarou entre a consulta e o INSERT. A resposta
40
+ // certa é a linha que ficou, não um erro.
41
+ const agora = await getRealPilotStart(tx);
42
+ return { milestone: agora, created: false };
43
+ }
44
+ return {
45
+ milestone: {
46
+ occurredAt: r.occurred_at.toISOString(),
47
+ declaredBy: r.declared_by,
48
+ note: r.note,
49
+ },
50
+ created: true,
51
+ };
52
+ }
53
+ /**
54
+ * Quantos clientes de cada lado da fronteira.
55
+ *
56
+ * Enquanto o marco não existe, **tudo** é pré-produtivo — e não "tudo é real",
57
+ * que seria o default otimista. Um sistema que assume produção antes de alguém
58
+ * declarar produção é o que produz o indicador sem significado.
59
+ */
60
+ async function dataProvenance(tx) {
61
+ const marco = await getRealPilotStart(tx);
62
+ if (!marco) {
63
+ const [r] = await tx `
64
+ SELECT count(*)::int AS n FROM client WHERE deleted_at IS NULL
65
+ `;
66
+ return { realPilotStartedAt: null, preProduction: r?.n ?? 0, realPilot: 0 };
67
+ }
68
+ const [r] = await tx `
69
+ SELECT count(*) FILTER (WHERE created_at < ${marco.occurredAt}::timestamptz)::int AS antes,
70
+ count(*) FILTER (WHERE created_at >= ${marco.occurredAt}::timestamptz)::int AS depois
71
+ FROM client WHERE deleted_at IS NULL
72
+ `;
73
+ return {
74
+ realPilotStartedAt: marco.occurredAt,
75
+ preProduction: r?.antes ?? 0,
76
+ realPilot: r?.depois ?? 0,
77
+ };
78
+ }
79
+ //# sourceMappingURL=milestone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"milestone.js","sourceRoot":"","sources":["../../../src/pilot/milestone.ts"],"names":[],"mappings":";;AA2BA,8CAUC;AAUD,sDA6BC;AAkBD,wCAkBC;AA/GD,0CAAuC;AA0BhC,KAAK,UAAU,iBAAiB,CAAC,EAAM;IAC5C,MAAM,IAAI,GAAG,MAAM,EAAE,CAA0E;;;;GAI9F,CAAC;IACF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,CAAC;QACN,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACtF,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,qBAAqB,CACzC,EAAM,EACN,KAAuD;IAEvD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC9C,IAAI,SAAS;QAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE/D,MAAM,IAAI,GAAG,MAAM,EAAE,CAA0E;;cAEnF,IAAA,eAAM,GAAE;cACR,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI;;;GAG/C,CAAC;IACF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,yEAAyE;QACzE,0CAA0C;QAC1C,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,EAAE,SAAS,EAAE,KAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO;QACL,SAAS,EAAE;YACT,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE;YACvC,UAAU,EAAE,CAAC,CAAC,WAAW;YACzB,IAAI,EAAE,CAAC,CAAC,IAAI;SACb;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAWD;;;;;;GAMG;AACI,KAAK,UAAU,cAAc,CAAC,EAAM;IACzC,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAiB;;KAEpC,CAAC;QACF,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC;IACD,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAqC;kDACT,KAAK,CAAC,UAAU;kDAChB,KAAK,CAAC,UAAU;;GAE/D,CAAC;IACF,OAAO;QACL,kBAAkB,EAAE,KAAK,CAAC,UAAU;QACpC,aAAa,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;QAC5B,SAAS,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC;KAC1B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ /**
3
+ * O contrato de CAPACIDADE entre a API e as telas que a consomem.
4
+ *
5
+ * ## O defeito que isto existe para fechar
6
+ *
7
+ * O console publica na Vercel no instante do merge. A API publica na Render
8
+ * depois — build da imagem, `db:predeploy`, health check. Entre um e outro
9
+ * existe uma janela de minutos em que o navegador carrega a tela NOVA e fala
10
+ * com a API VELHA. Na Onda A isso não foi hipótese: nove rotas
11
+ * (`/v1/tenant/profile`, `/v1/tenant/features`, `/v1/tenant/setup`,
12
+ * `/v1/fiscal/governance` e as irmãs) existiram na tela antes de existirem no
13
+ * servidor.
14
+ *
15
+ * O que a pessoa via nessa janela era a pior variante possível: um 404 da API
16
+ * que o Next transforma em tela genérica de erro, com `digest` e pedido de
17
+ * abrir chamado — o mesmo modo de falha que o `SemAcesso` corrigiu para RBAC.
18
+ * Não é erro do sistema: é uma versão que ainda não subiu.
19
+ *
20
+ * ## Por que capacidade, e não SHA
21
+ *
22
+ * Comparar o commit servido com o commit esperado acopla a tela ao processo de
23
+ * release: qualquer publicação — inclusive uma que não muda nada relevante —
24
+ * passa a poder derrubar a tela, e um hotfix na API com outro SHA reprovaria
25
+ * um frontend perfeitamente compatível. O que a tela precisa saber não é QUAL
26
+ * build está no ar, e sim se aquele build SABE responder o que ela vai pedir.
27
+ *
28
+ * Por isso o contrato é uma lista de nomes. A API declara o que serve; a tela
29
+ * declara o que exige. Compatibilidade é continência de conjunto, não
30
+ * igualdade de versão — e é isso que torna o backend-first possível: a API
31
+ * publica a capacidade ANTES da tela existir, e nada quebra porque ninguém
32
+ * ainda a exige.
33
+ *
34
+ * ## Regras de evolução
35
+ *
36
+ * - Uma chave é imutável. Mudança incompatível ganha `.v2`; a `.v1` só sai
37
+ * quando nenhum frontend em produção ainda a exigir.
38
+ * - A API nunca declara capacidade que não implementa — o guarda
39
+ * `capabilities.test.ts` confere cada rota declarada contra as rotas
40
+ * efetivamente montadas no Fastify. Declarar sem implementar seria o mesmo
41
+ * defeito de novo, com um passo a mais de indireção.
42
+ * - Ausência é resposta legítima. A tela degrada para "aguardando a API", não
43
+ * para erro.
44
+ */
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.CAPABILITY_KEY_PATTERN = exports.API_CAPABILITY_KEYS = exports.API_CAPABILITIES = exports.CAPABILITY_CONTRACT_VERSION = void 0;
47
+ exports.satisfiesCapability = satisfiesCapability;
48
+ /**
49
+ * Versão do FORMATO da resposta de `/v1/capabilities` — não das capacidades.
50
+ *
51
+ * Muda apenas se a forma do documento mudar. Um cliente que não reconhece a
52
+ * versão trata tudo como indisponível: fail-closed é a única leitura segura de
53
+ * um contrato que não se sabe ler.
54
+ */
55
+ exports.CAPABILITY_CONTRACT_VERSION = 1;
56
+ /**
57
+ * O que ESTE build da API serve.
58
+ *
59
+ * A Onda A entra inteira porque foi ela quem sofreu o skew. Capacidades
60
+ * anteriores não estão aqui de propósito: uma tela que nunca conheceu janela
61
+ * de incompatibilidade não ganha um portão novo para atravessar.
62
+ */
63
+ exports.API_CAPABILITIES = [
64
+ {
65
+ key: 'office.tenant-profile.v1',
66
+ label: 'Identificação do escritório (razão social, CNPJ, fuso)',
67
+ routes: ['GET /v1/tenant/profile', 'PUT /v1/tenant/profile'],
68
+ },
69
+ {
70
+ key: 'office.tenant-branding.v1',
71
+ label: 'Marca do escritório',
72
+ routes: ['GET /v1/tenant/branding', 'PUT /v1/tenant/branding'],
73
+ },
74
+ {
75
+ key: 'office.tenant-features.v1',
76
+ label: 'Módulos ligados e desligados pelo próprio escritório',
77
+ routes: ['GET /v1/tenant/features', 'PUT /v1/tenant/features'],
78
+ },
79
+ {
80
+ key: 'office.tenant-setup.v1',
81
+ label: 'Progresso de configuração do escritório',
82
+ routes: ['GET /v1/tenant/setup'],
83
+ },
84
+ {
85
+ key: 'office.fiscal-governance.v1',
86
+ label: 'Governança do catálogo fiscal (fonte oficial e conferência)',
87
+ routes: [
88
+ 'GET /v1/fiscal/governance',
89
+ 'PUT /v1/fiscal/rules/:id/source',
90
+ 'POST /v1/fiscal/rules/:id/validate',
91
+ ],
92
+ },
93
+ {
94
+ key: 'office.fiscal-documents.v1',
95
+ label: 'Documentos fiscais capturados e o estado da sincronização',
96
+ routes: [
97
+ 'GET /v1/fiscal/documents',
98
+ 'GET /v1/fiscal/documents/:id',
99
+ 'GET /v1/fiscal/sync-state',
100
+ ],
101
+ },
102
+ {
103
+ key: 'office.fiscal-operations.v1',
104
+ label: 'Motor operacional fiscal: estado por cliente, cobertura, fila humana e caixa de entrada',
105
+ routes: [
106
+ 'GET /v1/fiscal/sync-clients',
107
+ 'GET /v1/fiscal/coverage',
108
+ 'GET /v1/fiscal/interventions',
109
+ 'GET /v1/fiscal/metrics',
110
+ 'GET /v1/fiscal/inbox',
111
+ 'POST /v1/fiscal/inbox/:id/reprocess',
112
+ 'GET /v1/fiscal/request-coverage',
113
+ ],
114
+ },
115
+ {
116
+ // Separada de `fiscal-operations` de propósito: ela não descreve a carteira
117
+ // do escritório, e sim o CONTRATO com o provedor oficial. Um console que
118
+ // exiba "transporte real desativado" antes de a rota existir mostraria a
119
+ // tela genérica de erro em vez do estado — que é exatamente o modo de falha
120
+ // que o portão de capacidade existe para fechar.
121
+ key: 'office.fiscal-provider-contract.v1',
122
+ label: 'Contrato do provedor fiscal oficial: versão, fontes e por que o transporte real está fechado',
123
+ routes: ['GET /v1/fiscal/provider-contract'],
124
+ },
125
+ {
126
+ // Declarada pela migration 0061, e exigida pela tela de cadastro.
127
+ //
128
+ // Sem o portão, um console novo contra uma API velha chamaria
129
+ // `availability`, receberia 404 e mostraria erro de sistema no lugar de um
130
+ // formulário que funciona perfeitamente sem consulta nenhuma. O cadastro
131
+ // manual é o caminho completo; a consulta é o atalho.
132
+ key: 'office.client-registry-provenance.v1',
133
+ label: 'Cadastro de cliente por CNPJ a partir de fonte oficial, com proveniência por atributo',
134
+ routes: [
135
+ 'GET /v1/client-registry/availability',
136
+ 'POST /v1/client-registry/lookup',
137
+ 'POST /v1/clients/:id/registry-apply',
138
+ 'GET /v1/clients/:id/registry-diff',
139
+ ],
140
+ },
141
+ {
142
+ // Declarada pela 0062. A tela de credenciais fiscais depende dela para
143
+ // mostrar matrícula e habilitação ao lado do botão bloqueado — sem isso,
144
+ // um console novo contra uma API velha chamaria a rota, tomaria 404 e
145
+ // mostraria erro de sistema no lugar de "cliente não matriculado".
146
+ key: 'office.fiscal-first-contact.v1',
147
+ label: 'Primeiro contato fiscal: matrícula do cliente, habilitação do escritório e a autorização que aceita credencial válida só localmente',
148
+ routes: [
149
+ 'GET /v1/clients/:id/fiscal-enrollment',
150
+ 'PUT /v1/clients/:id/fiscal-enrollment',
151
+ 'PUT /v1/tenant/fiscal-automation',
152
+ ],
153
+ },
154
+ ];
155
+ exports.API_CAPABILITY_KEYS = exports.API_CAPABILITIES.map((c) => c.key);
156
+ /** Formato exigido de uma chave. O guarda usa isto; a revisão humana não basta. */
157
+ exports.CAPABILITY_KEY_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*(?:\.[a-z0-9]+(?:-[a-z0-9]+)*)+\.v\d+$/;
158
+ /**
159
+ * A API declarada satisfaz o que a tela exige?
160
+ *
161
+ * Fail-closed em três frentes, e todas já aconteceram em produção em algum
162
+ * produto: documento ausente (API velha, sem a rota), versão de contrato
163
+ * desconhecida (cliente novo demais ou velho demais) e capacidade faltando.
164
+ * Nenhuma delas devolve "sim por não saber".
165
+ */
166
+ function satisfiesCapability(doc, required) {
167
+ if (!doc)
168
+ return false;
169
+ if (doc.contract !== exports.CAPABILITY_CONTRACT_VERSION)
170
+ return false;
171
+ return doc.capabilities.includes(required);
172
+ }
173
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/platform/capabilities.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;;;AAkJH,kDAOC;AAvJD;;;;;;GAMG;AACU,QAAA,2BAA2B,GAAG,CAAC,CAAC;AAe7C;;;;;;GAMG;AACU,QAAA,gBAAgB,GAAgC;IAC3D;QACE,GAAG,EAAE,0BAA0B;QAC/B,KAAK,EAAE,wDAAwD;QAC/D,MAAM,EAAE,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;KAC7D;IACD;QACE,GAAG,EAAE,2BAA2B;QAChC,KAAK,EAAE,qBAAqB;QAC5B,MAAM,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;KAC/D;IACD;QACE,GAAG,EAAE,2BAA2B;QAChC,KAAK,EAAE,sDAAsD;QAC7D,MAAM,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;KAC/D;IACD;QACE,GAAG,EAAE,wBAAwB;QAC7B,KAAK,EAAE,yCAAyC;QAChD,MAAM,EAAE,CAAC,sBAAsB,CAAC;KACjC;IACD;QACE,GAAG,EAAE,6BAA6B;QAClC,KAAK,EAAE,6DAA6D;QACpE,MAAM,EAAE;YACN,2BAA2B;YAC3B,iCAAiC;YACjC,oCAAoC;SACrC;KACF;IACD;QACE,GAAG,EAAE,4BAA4B;QACjC,KAAK,EAAE,2DAA2D;QAClE,MAAM,EAAE;YACN,0BAA0B;YAC1B,8BAA8B;YAC9B,2BAA2B;SAC5B;KACF;IACD;QACE,GAAG,EAAE,6BAA6B;QAClC,KAAK,EACH,yFAAyF;QAC3F,MAAM,EAAE;YACN,6BAA6B;YAC7B,yBAAyB;YACzB,8BAA8B;YAC9B,wBAAwB;YACxB,sBAAsB;YACtB,qCAAqC;YACrC,iCAAiC;SAClC;KACF;IACD;QACE,4EAA4E;QAC5E,yEAAyE;QACzE,yEAAyE;QACzE,4EAA4E;QAC5E,iDAAiD;QACjD,GAAG,EAAE,oCAAoC;QACzC,KAAK,EACH,8FAA8F;QAChG,MAAM,EAAE,CAAC,kCAAkC,CAAC;KAC7C;IACD;QACE,kEAAkE;QAClE,EAAE;QACF,8DAA8D;QAC9D,2EAA2E;QAC3E,yEAAyE;QACzE,sDAAsD;QACtD,GAAG,EAAE,sCAAsC;QAC3C,KAAK,EAAE,uFAAuF;QAC9F,MAAM,EAAE;YACN,sCAAsC;YACtC,iCAAiC;YACjC,qCAAqC;YACrC,mCAAmC;SACpC;KACF;IACD;QACE,uEAAuE;QACvE,yEAAyE;QACzE,sEAAsE;QACtE,mEAAmE;QACnE,GAAG,EAAE,gCAAgC;QACrC,KAAK,EACH,qIAAqI;QACvI,MAAM,EAAE;YACN,uCAAuC;YACvC,uCAAuC;YACvC,kCAAkC;SACnC;KACF;CACF,CAAC;AAEW,QAAA,mBAAmB,GAAsB,wBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzF,mFAAmF;AACtE,QAAA,sBAAsB,GACjC,iEAAiE,CAAC;AAOpE;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CACjC,GAA0C,EAC1C,QAAgB;IAEhB,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,GAAG,CAAC,QAAQ,KAAK,mCAA2B;QAAE,OAAO,KAAK,CAAC;IAC/D,OAAO,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC"}