@baruk/core 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/.baruk-provenance.json +4 -4
  2. package/CHANGELOG.md +42 -0
  3. package/dist/audit/repository.d.ts +33 -1
  4. package/dist/audit/repository.d.ts.map +1 -1
  5. package/dist/audit/repository.js +41 -7
  6. package/dist/audit/repository.js.map +1 -1
  7. package/dist/auth/service.d.ts +21 -0
  8. package/dist/auth/service.d.ts.map +1 -1
  9. package/dist/auth/service.js +46 -1
  10. package/dist/auth/service.js.map +1 -1
  11. package/dist/billing/ar-repository.d.ts +41 -1
  12. package/dist/billing/ar-repository.d.ts.map +1 -1
  13. package/dist/billing/ar-repository.js +82 -6
  14. package/dist/billing/ar-repository.js.map +1 -1
  15. package/dist/billing/provider-account.d.ts +38 -0
  16. package/dist/billing/provider-account.d.ts.map +1 -1
  17. package/dist/billing/provider-account.js +58 -2
  18. package/dist/billing/provider-account.js.map +1 -1
  19. package/dist/billing/repository.d.ts +44 -0
  20. package/dist/billing/repository.d.ts.map +1 -1
  21. package/dist/billing/repository.js +49 -5
  22. package/dist/billing/repository.js.map +1 -1
  23. package/dist/cjs/audit/repository.js +41 -7
  24. package/dist/cjs/audit/repository.js.map +1 -1
  25. package/dist/cjs/auth/service.js +46 -1
  26. package/dist/cjs/auth/service.js.map +1 -1
  27. package/dist/cjs/billing/ar-repository.js +82 -6
  28. package/dist/cjs/billing/ar-repository.js.map +1 -1
  29. package/dist/cjs/billing/provider-account.js +60 -1
  30. package/dist/cjs/billing/provider-account.js.map +1 -1
  31. package/dist/cjs/billing/repository.js +51 -5
  32. package/dist/cjs/billing/repository.js.map +1 -1
  33. package/dist/cjs/clients/ibge.js +103 -0
  34. package/dist/cjs/clients/ibge.js.map +1 -0
  35. package/dist/cjs/clients/repository.js +186 -9
  36. package/dist/cjs/clients/repository.js.map +1 -1
  37. package/dist/cjs/collection/branding.js +190 -0
  38. package/dist/cjs/collection/branding.js.map +1 -1
  39. package/dist/cjs/collection/clearance-store.js +74 -0
  40. package/dist/cjs/collection/clearance-store.js.map +1 -0
  41. package/dist/cjs/collection/communication-runtime.js +65 -2
  42. package/dist/cjs/collection/communication-runtime.js.map +1 -1
  43. package/dist/cjs/collection/engine.js +20 -0
  44. package/dist/cjs/collection/engine.js.map +1 -1
  45. package/dist/cjs/collection/policy.js +29 -1
  46. package/dist/cjs/collection/policy.js.map +1 -1
  47. package/dist/cjs/communication/clearance.js +18 -0
  48. package/dist/cjs/communication/clearance.js.map +1 -0
  49. package/dist/cjs/communication/dry-run-scenario.js +5 -0
  50. package/dist/cjs/communication/dry-run-scenario.js.map +1 -1
  51. package/dist/cjs/communication/engine.js +12 -0
  52. package/dist/cjs/communication/engine.js.map +1 -1
  53. package/dist/cjs/communication/policy.js.map +1 -1
  54. package/dist/cjs/competence/business-days.js +155 -0
  55. package/dist/cjs/competence/business-days.js.map +1 -0
  56. package/dist/cjs/competence/catalog-validation.js +174 -0
  57. package/dist/cjs/competence/catalog-validation.js.map +1 -0
  58. package/dist/cjs/competence/obligation-preview.js +190 -0
  59. package/dist/cjs/competence/obligation-preview.js.map +1 -0
  60. package/dist/cjs/competence/repository.js +330 -17
  61. package/dist/cjs/competence/repository.js.map +1 -1
  62. package/dist/cjs/dashboard/pilot-panel.js +90 -0
  63. package/dist/cjs/dashboard/pilot-panel.js.map +1 -0
  64. package/dist/cjs/dashboard/repository.js +11 -1
  65. package/dist/cjs/dashboard/repository.js.map +1 -1
  66. package/dist/cjs/db/client.js +17 -11
  67. package/dist/cjs/db/client.js.map +1 -1
  68. package/dist/cjs/db/provision-e2e-identity.js +111 -0
  69. package/dist/cjs/db/provision-e2e-identity.js.map +1 -0
  70. package/dist/cjs/fiscal/applicability.js +164 -0
  71. package/dist/cjs/fiscal/applicability.js.map +1 -0
  72. package/dist/cjs/fiscal/conditions.js +198 -0
  73. package/dist/cjs/fiscal/conditions.js.map +1 -0
  74. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js +390 -0
  75. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  76. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js +108 -0
  77. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  78. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js +220 -0
  79. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  80. package/dist/cjs/fiscal/coverage/model.js +127 -0
  81. package/dist/cjs/fiscal/coverage/model.js.map +1 -0
  82. package/dist/cjs/fiscal/coverage/requests.js +99 -0
  83. package/dist/cjs/fiscal/coverage/requests.js.map +1 -0
  84. package/dist/cjs/fiscal/credentials/material.js +168 -0
  85. package/dist/cjs/fiscal/credentials/material.js.map +1 -0
  86. package/dist/cjs/fiscal/credentials/readiness.js +163 -0
  87. package/dist/cjs/fiscal/credentials/readiness.js.map +1 -0
  88. package/dist/cjs/fiscal/eligibility.js +199 -0
  89. package/dist/cjs/fiscal/eligibility.js.map +1 -0
  90. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js +128 -0
  91. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  92. package/dist/cjs/fiscal/ingestion/adn-transport.js +229 -0
  93. package/dist/cjs/fiscal/ingestion/adn-transport.js.map +1 -0
  94. package/dist/cjs/fiscal/ingestion/direction.js +36 -0
  95. package/dist/cjs/fiscal/ingestion/direction.js.map +1 -0
  96. package/dist/cjs/fiscal/ingestion/nfse-adn.js +228 -0
  97. package/dist/cjs/fiscal/ingestion/nfse-adn.js.map +1 -0
  98. package/dist/cjs/fiscal/ingestion/pipeline.js +704 -0
  99. package/dist/cjs/fiscal/ingestion/pipeline.js.map +1 -0
  100. package/dist/cjs/fiscal/ingestion/provider.js +51 -0
  101. package/dist/cjs/fiscal/ingestion/provider.js.map +1 -0
  102. package/dist/cjs/fiscal/ingestion/repository.js +132 -0
  103. package/dist/cjs/fiscal/ingestion/repository.js.map +1 -0
  104. package/dist/cjs/fiscal/ingestion/synthetic-provider.js +103 -0
  105. package/dist/cjs/fiscal/ingestion/synthetic-provider.js.map +1 -0
  106. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js +13 -0
  107. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  108. package/dist/cjs/fiscal/ingestion/synthetic-transport.js +61 -0
  109. package/dist/cjs/fiscal/ingestion/synthetic-transport.js.map +1 -0
  110. package/dist/cjs/fiscal/ingestion/xml-reader.js +121 -0
  111. package/dist/cjs/fiscal/ingestion/xml-reader.js.map +1 -0
  112. package/dist/cjs/fiscal/repository.js +470 -0
  113. package/dist/cjs/fiscal/repository.js.map +1 -0
  114. package/dist/cjs/fiscal/sync/circuit.js +124 -0
  115. package/dist/cjs/fiscal/sync/circuit.js.map +1 -0
  116. package/dist/cjs/fiscal/sync/intervention.js +140 -0
  117. package/dist/cjs/fiscal/sync/intervention.js.map +1 -0
  118. package/dist/cjs/fiscal/sync/lease.js +146 -0
  119. package/dist/cjs/fiscal/sync/lease.js.map +1 -0
  120. package/dist/cjs/fiscal/sync/observability.js +244 -0
  121. package/dist/cjs/fiscal/sync/observability.js.map +1 -0
  122. package/dist/cjs/fiscal/sync/orchestrator.js +490 -0
  123. package/dist/cjs/fiscal/sync/orchestrator.js.map +1 -0
  124. package/dist/cjs/fiscal/sync/policy.js +143 -0
  125. package/dist/cjs/fiscal/sync/policy.js.map +1 -0
  126. package/dist/cjs/fiscal/sync/reprocess.js +241 -0
  127. package/dist/cjs/fiscal/sync/reprocess.js.map +1 -0
  128. package/dist/cjs/fiscal/sync/retry.js +183 -0
  129. package/dist/cjs/fiscal/sync/retry.js.map +1 -0
  130. package/dist/cjs/fiscal/sync/secret-boundary.js +123 -0
  131. package/dist/cjs/fiscal/sync/secret-boundary.js.map +1 -0
  132. package/dist/cjs/fiscal/transport/https.js +309 -0
  133. package/dist/cjs/fiscal/transport/https.js.map +1 -0
  134. package/dist/cjs/fiscal/transport/synthetic-tls.js +328 -0
  135. package/dist/cjs/fiscal/transport/synthetic-tls.js.map +1 -0
  136. package/dist/cjs/fiscal/transport/types.js +93 -0
  137. package/dist/cjs/fiscal/transport/types.js.map +1 -0
  138. package/dist/cjs/import/br-documents.js +85 -0
  139. package/dist/cjs/import/br-documents.js.map +1 -0
  140. package/dist/cjs/import/clients-import.js +347 -40
  141. package/dist/cjs/import/clients-import.js.map +1 -1
  142. package/dist/cjs/index.js +316 -11
  143. package/dist/cjs/index.js.map +1 -1
  144. package/dist/cjs/legal/documents.js +100 -15
  145. package/dist/cjs/legal/documents.js.map +1 -1
  146. package/dist/cjs/legal/index.js +3 -1
  147. package/dist/cjs/legal/index.js.map +1 -1
  148. package/dist/cjs/legal/types.js.map +1 -1
  149. package/dist/cjs/onboarding/persistence.js +4 -4
  150. package/dist/cjs/onboarding/persistence.js.map +1 -1
  151. package/dist/cjs/pilot/go-live-checklist.js +212 -0
  152. package/dist/cjs/pilot/go-live-checklist.js.map +1 -0
  153. package/dist/cjs/pilot/milestone.js +79 -0
  154. package/dist/cjs/pilot/milestone.js.map +1 -0
  155. package/dist/cjs/platform/capabilities.js +144 -0
  156. package/dist/cjs/platform/capabilities.js.map +1 -0
  157. package/dist/cjs/platform/job-contract.js +411 -0
  158. package/dist/cjs/platform/job-contract.js.map +1 -0
  159. package/dist/cjs/rbac/catalog.js +34 -0
  160. package/dist/cjs/rbac/catalog.js.map +1 -1
  161. package/dist/cjs/subscription-billing/index.js +2 -1
  162. package/dist/cjs/subscription-billing/index.js.map +1 -1
  163. package/dist/cjs/subscription-billing/service.js +153 -77
  164. package/dist/cjs/subscription-billing/service.js.map +1 -1
  165. package/dist/cjs/tenancy/features.js +131 -0
  166. package/dist/cjs/tenancy/features.js.map +1 -0
  167. package/dist/cjs/tenancy/settings.js +224 -0
  168. package/dist/cjs/tenancy/settings.js.map +1 -0
  169. package/dist/cjs/users/repository.js +24 -1
  170. package/dist/cjs/users/repository.js.map +1 -1
  171. package/dist/clients/ibge.d.ts +17 -0
  172. package/dist/clients/ibge.d.ts.map +1 -0
  173. package/dist/clients/ibge.js +98 -0
  174. package/dist/clients/ibge.js.map +1 -0
  175. package/dist/clients/repository.d.ts +154 -0
  176. package/dist/clients/repository.d.ts.map +1 -1
  177. package/dist/clients/repository.js +182 -9
  178. package/dist/clients/repository.js.map +1 -1
  179. package/dist/collection/branding.d.ts +65 -0
  180. package/dist/collection/branding.d.ts.map +1 -1
  181. package/dist/collection/branding.js +186 -0
  182. package/dist/collection/branding.js.map +1 -1
  183. package/dist/collection/clearance-store.d.ts +39 -0
  184. package/dist/collection/clearance-store.d.ts.map +1 -0
  185. package/dist/collection/clearance-store.js +69 -0
  186. package/dist/collection/clearance-store.js.map +1 -0
  187. package/dist/collection/communication-runtime.d.ts +37 -0
  188. package/dist/collection/communication-runtime.d.ts.map +1 -1
  189. package/dist/collection/communication-runtime.js +63 -1
  190. package/dist/collection/communication-runtime.js.map +1 -1
  191. package/dist/collection/engine.d.ts +23 -0
  192. package/dist/collection/engine.d.ts.map +1 -1
  193. package/dist/collection/engine.js +20 -0
  194. package/dist/collection/engine.js.map +1 -1
  195. package/dist/collection/policy.d.ts +25 -0
  196. package/dist/collection/policy.d.ts.map +1 -1
  197. package/dist/collection/policy.js +27 -0
  198. package/dist/collection/policy.js.map +1 -1
  199. package/dist/communication/clearance.d.ts +53 -0
  200. package/dist/communication/clearance.d.ts.map +1 -0
  201. package/dist/communication/clearance.js +15 -0
  202. package/dist/communication/clearance.js.map +1 -0
  203. package/dist/communication/dry-run-scenario.d.ts.map +1 -1
  204. package/dist/communication/dry-run-scenario.js +5 -0
  205. package/dist/communication/dry-run-scenario.js.map +1 -1
  206. package/dist/communication/engine.d.ts +10 -0
  207. package/dist/communication/engine.d.ts.map +1 -1
  208. package/dist/communication/engine.js +12 -0
  209. package/dist/communication/engine.js.map +1 -1
  210. package/dist/communication/policy.d.ts +16 -0
  211. package/dist/communication/policy.d.ts.map +1 -1
  212. package/dist/communication/policy.js.map +1 -1
  213. package/dist/competence/business-days.d.ts +51 -0
  214. package/dist/competence/business-days.d.ts.map +1 -0
  215. package/dist/competence/business-days.js +145 -0
  216. package/dist/competence/business-days.js.map +1 -0
  217. package/dist/competence/catalog-validation.d.ts +86 -0
  218. package/dist/competence/catalog-validation.d.ts.map +1 -0
  219. package/dist/competence/catalog-validation.js +168 -0
  220. package/dist/competence/catalog-validation.js.map +1 -0
  221. package/dist/competence/obligation-preview.d.ts +103 -0
  222. package/dist/competence/obligation-preview.d.ts.map +1 -0
  223. package/dist/competence/obligation-preview.js +184 -0
  224. package/dist/competence/obligation-preview.js.map +1 -0
  225. package/dist/competence/repository.d.ts +139 -1
  226. package/dist/competence/repository.d.ts.map +1 -1
  227. package/dist/competence/repository.js +325 -17
  228. package/dist/competence/repository.js.map +1 -1
  229. package/dist/dashboard/pilot-panel.d.ts +100 -0
  230. package/dist/dashboard/pilot-panel.d.ts.map +1 -0
  231. package/dist/dashboard/pilot-panel.js +87 -0
  232. package/dist/dashboard/pilot-panel.js.map +1 -0
  233. package/dist/dashboard/repository.d.ts.map +1 -1
  234. package/dist/dashboard/repository.js +11 -1
  235. package/dist/dashboard/repository.js.map +1 -1
  236. package/dist/db/client.d.ts +45 -0
  237. package/dist/db/client.d.ts.map +1 -1
  238. package/dist/db/client.js +16 -11
  239. package/dist/db/client.js.map +1 -1
  240. package/dist/db/migrate.d.ts +36 -1
  241. package/dist/db/migrate.d.ts.map +1 -1
  242. package/dist/db/migrate.js +199 -32
  243. package/dist/db/migrate.js.map +1 -1
  244. package/dist/db/provision-e2e-identity.d.ts +2 -0
  245. package/dist/db/provision-e2e-identity.d.ts.map +1 -0
  246. package/dist/db/provision-e2e-identity.js +109 -0
  247. package/dist/db/provision-e2e-identity.js.map +1 -0
  248. package/dist/fiscal/applicability.d.ts +73 -0
  249. package/dist/fiscal/applicability.d.ts.map +1 -0
  250. package/dist/fiscal/applicability.js +160 -0
  251. package/dist/fiscal/applicability.js.map +1 -0
  252. package/dist/fiscal/conditions.d.ts +99 -0
  253. package/dist/fiscal/conditions.d.ts.map +1 -0
  254. package/dist/fiscal/conditions.js +190 -0
  255. package/dist/fiscal/conditions.js.map +1 -0
  256. package/dist/fiscal/contracts/nfse-adn-contract.d.ts +315 -0
  257. package/dist/fiscal/contracts/nfse-adn-contract.d.ts.map +1 -0
  258. package/dist/fiscal/contracts/nfse-adn-contract.js +386 -0
  259. package/dist/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  260. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts +13 -0
  261. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts.map +1 -0
  262. package/dist/fiscal/contracts/nfse-adn-endpoint.js +103 -0
  263. package/dist/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  264. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts +77 -0
  265. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts.map +1 -0
  266. package/dist/fiscal/contracts/nfse-adn-envelope.js +215 -0
  267. package/dist/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  268. package/dist/fiscal/coverage/model.d.ts +86 -0
  269. package/dist/fiscal/coverage/model.d.ts.map +1 -0
  270. package/dist/fiscal/coverage/model.js +120 -0
  271. package/dist/fiscal/coverage/model.js.map +1 -0
  272. package/dist/fiscal/coverage/requests.d.ts +70 -0
  273. package/dist/fiscal/coverage/requests.d.ts.map +1 -0
  274. package/dist/fiscal/coverage/requests.js +95 -0
  275. package/dist/fiscal/coverage/requests.js.map +1 -0
  276. package/dist/fiscal/credentials/material.d.ts +81 -0
  277. package/dist/fiscal/credentials/material.d.ts.map +1 -0
  278. package/dist/fiscal/credentials/material.js +164 -0
  279. package/dist/fiscal/credentials/material.js.map +1 -0
  280. package/dist/fiscal/credentials/readiness.d.ts +92 -0
  281. package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
  282. package/dist/fiscal/credentials/readiness.js +159 -0
  283. package/dist/fiscal/credentials/readiness.js.map +1 -0
  284. package/dist/fiscal/eligibility.d.ts +106 -0
  285. package/dist/fiscal/eligibility.d.ts.map +1 -0
  286. package/dist/fiscal/eligibility.js +194 -0
  287. package/dist/fiscal/eligibility.js.map +1 -0
  288. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts +57 -0
  289. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts.map +1 -0
  290. package/dist/fiscal/ingestion/__fixtures__/nfse.js +121 -0
  291. package/dist/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  292. package/dist/fiscal/ingestion/adn-transport.d.ts +123 -0
  293. package/dist/fiscal/ingestion/adn-transport.d.ts.map +1 -0
  294. package/dist/fiscal/ingestion/adn-transport.js +220 -0
  295. package/dist/fiscal/ingestion/adn-transport.js.map +1 -0
  296. package/dist/fiscal/ingestion/direction.d.ts +60 -0
  297. package/dist/fiscal/ingestion/direction.d.ts.map +1 -0
  298. package/dist/fiscal/ingestion/direction.js +32 -0
  299. package/dist/fiscal/ingestion/direction.js.map +1 -0
  300. package/dist/fiscal/ingestion/nfse-adn.d.ts +91 -0
  301. package/dist/fiscal/ingestion/nfse-adn.d.ts.map +1 -0
  302. package/dist/fiscal/ingestion/nfse-adn.js +222 -0
  303. package/dist/fiscal/ingestion/nfse-adn.js.map +1 -0
  304. package/dist/fiscal/ingestion/pipeline.d.ts +168 -0
  305. package/dist/fiscal/ingestion/pipeline.d.ts.map +1 -0
  306. package/dist/fiscal/ingestion/pipeline.js +699 -0
  307. package/dist/fiscal/ingestion/pipeline.js.map +1 -0
  308. package/dist/fiscal/ingestion/provider.d.ts +206 -0
  309. package/dist/fiscal/ingestion/provider.d.ts.map +1 -0
  310. package/dist/fiscal/ingestion/provider.js +47 -0
  311. package/dist/fiscal/ingestion/provider.js.map +1 -0
  312. package/dist/fiscal/ingestion/repository.d.ts +82 -0
  313. package/dist/fiscal/ingestion/repository.d.ts.map +1 -0
  314. package/dist/fiscal/ingestion/repository.js +127 -0
  315. package/dist/fiscal/ingestion/repository.js.map +1 -0
  316. package/dist/fiscal/ingestion/synthetic-provider.d.ts +92 -0
  317. package/dist/fiscal/ingestion/synthetic-provider.d.ts.map +1 -0
  318. package/dist/fiscal/ingestion/synthetic-provider.js +99 -0
  319. package/dist/fiscal/ingestion/synthetic-provider.js.map +1 -0
  320. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts +19 -0
  321. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts.map +1 -0
  322. package/dist/fiscal/ingestion/synthetic-transport-types.js +9 -0
  323. package/dist/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  324. package/dist/fiscal/ingestion/synthetic-transport.d.ts +55 -0
  325. package/dist/fiscal/ingestion/synthetic-transport.d.ts.map +1 -0
  326. package/dist/fiscal/ingestion/synthetic-transport.js +57 -0
  327. package/dist/fiscal/ingestion/synthetic-transport.js.map +1 -0
  328. package/dist/fiscal/ingestion/xml-reader.d.ts +55 -0
  329. package/dist/fiscal/ingestion/xml-reader.d.ts.map +1 -0
  330. package/dist/fiscal/ingestion/xml-reader.js +112 -0
  331. package/dist/fiscal/ingestion/xml-reader.js.map +1 -0
  332. package/dist/fiscal/repository.d.ts +220 -0
  333. package/dist/fiscal/repository.d.ts.map +1 -0
  334. package/dist/fiscal/repository.js +449 -0
  335. package/dist/fiscal/repository.js.map +1 -0
  336. package/dist/fiscal/sync/circuit.d.ts +86 -0
  337. package/dist/fiscal/sync/circuit.d.ts.map +1 -0
  338. package/dist/fiscal/sync/circuit.js +118 -0
  339. package/dist/fiscal/sync/circuit.js.map +1 -0
  340. package/dist/fiscal/sync/intervention.d.ts +81 -0
  341. package/dist/fiscal/sync/intervention.d.ts.map +1 -0
  342. package/dist/fiscal/sync/intervention.js +135 -0
  343. package/dist/fiscal/sync/intervention.js.map +1 -0
  344. package/dist/fiscal/sync/lease.d.ts +118 -0
  345. package/dist/fiscal/sync/lease.d.ts.map +1 -0
  346. package/dist/fiscal/sync/lease.js +139 -0
  347. package/dist/fiscal/sync/lease.js.map +1 -0
  348. package/dist/fiscal/sync/observability.d.ts +148 -0
  349. package/dist/fiscal/sync/observability.d.ts.map +1 -0
  350. package/dist/fiscal/sync/observability.js +239 -0
  351. package/dist/fiscal/sync/observability.js.map +1 -0
  352. package/dist/fiscal/sync/orchestrator.d.ts +132 -0
  353. package/dist/fiscal/sync/orchestrator.d.ts.map +1 -0
  354. package/dist/fiscal/sync/orchestrator.js +487 -0
  355. package/dist/fiscal/sync/orchestrator.js.map +1 -0
  356. package/dist/fiscal/sync/policy.d.ts +87 -0
  357. package/dist/fiscal/sync/policy.d.ts.map +1 -0
  358. package/dist/fiscal/sync/policy.js +136 -0
  359. package/dist/fiscal/sync/policy.js.map +1 -0
  360. package/dist/fiscal/sync/reprocess.d.ts +76 -0
  361. package/dist/fiscal/sync/reprocess.d.ts.map +1 -0
  362. package/dist/fiscal/sync/reprocess.js +237 -0
  363. package/dist/fiscal/sync/reprocess.js.map +1 -0
  364. package/dist/fiscal/sync/retry.d.ts +82 -0
  365. package/dist/fiscal/sync/retry.d.ts.map +1 -0
  366. package/dist/fiscal/sync/retry.js +176 -0
  367. package/dist/fiscal/sync/retry.js.map +1 -0
  368. package/dist/fiscal/sync/secret-boundary.d.ts +169 -0
  369. package/dist/fiscal/sync/secret-boundary.d.ts.map +1 -0
  370. package/dist/fiscal/sync/secret-boundary.js +116 -0
  371. package/dist/fiscal/sync/secret-boundary.js.map +1 -0
  372. package/dist/fiscal/transport/https.d.ts +86 -0
  373. package/dist/fiscal/transport/https.d.ts.map +1 -0
  374. package/dist/fiscal/transport/https.js +303 -0
  375. package/dist/fiscal/transport/https.js.map +1 -0
  376. package/dist/fiscal/transport/synthetic-tls.d.ts +80 -0
  377. package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
  378. package/dist/fiscal/transport/synthetic-tls.js +323 -0
  379. package/dist/fiscal/transport/synthetic-tls.js.map +1 -0
  380. package/dist/fiscal/transport/types.d.ts +134 -0
  381. package/dist/fiscal/transport/types.d.ts.map +1 -0
  382. package/dist/fiscal/transport/types.js +88 -0
  383. package/dist/fiscal/transport/types.js.map +1 -0
  384. package/dist/import/br-documents.d.ts +26 -0
  385. package/dist/import/br-documents.d.ts.map +1 -0
  386. package/dist/import/br-documents.js +78 -0
  387. package/dist/import/br-documents.js.map +1 -0
  388. package/dist/import/clients-import.d.ts +122 -4
  389. package/dist/import/clients-import.d.ts.map +1 -1
  390. package/dist/import/clients-import.js +341 -41
  391. package/dist/import/clients-import.js.map +1 -1
  392. package/dist/index.d.ts +115 -11
  393. package/dist/index.d.ts.map +1 -1
  394. package/dist/index.js +100 -7
  395. package/dist/index.js.map +1 -1
  396. package/dist/legal/documents.d.ts +12 -1
  397. package/dist/legal/documents.d.ts.map +1 -1
  398. package/dist/legal/documents.js +98 -14
  399. package/dist/legal/documents.js.map +1 -1
  400. package/dist/legal/index.d.ts +1 -1
  401. package/dist/legal/index.d.ts.map +1 -1
  402. package/dist/legal/index.js +1 -1
  403. package/dist/legal/index.js.map +1 -1
  404. package/dist/legal/types.d.ts +37 -2
  405. package/dist/legal/types.d.ts.map +1 -1
  406. package/dist/legal/types.js.map +1 -1
  407. package/dist/onboarding/persistence.d.ts +10 -1
  408. package/dist/onboarding/persistence.d.ts.map +1 -1
  409. package/dist/onboarding/persistence.js +4 -4
  410. package/dist/onboarding/persistence.js.map +1 -1
  411. package/dist/pilot/go-live-checklist.d.ts +41 -0
  412. package/dist/pilot/go-live-checklist.d.ts.map +1 -0
  413. package/dist/pilot/go-live-checklist.js +209 -0
  414. package/dist/pilot/go-live-checklist.js.map +1 -0
  415. package/dist/pilot/milestone.d.ts +56 -0
  416. package/dist/pilot/milestone.d.ts.map +1 -0
  417. package/dist/pilot/milestone.js +74 -0
  418. package/dist/pilot/milestone.js.map +1 -0
  419. package/dist/platform/capabilities.d.ts +88 -0
  420. package/dist/platform/capabilities.d.ts.map +1 -0
  421. package/dist/platform/capabilities.js +140 -0
  422. package/dist/platform/capabilities.js.map +1 -0
  423. package/dist/platform/job-contract.d.ts +232 -0
  424. package/dist/platform/job-contract.d.ts.map +1 -0
  425. package/dist/platform/job-contract.js +403 -0
  426. package/dist/platform/job-contract.js.map +1 -0
  427. package/dist/rbac/catalog.d.ts.map +1 -1
  428. package/dist/rbac/catalog.js +34 -0
  429. package/dist/rbac/catalog.js.map +1 -1
  430. package/dist/subscription-billing/index.d.ts +6 -5
  431. package/dist/subscription-billing/index.d.ts.map +1 -1
  432. package/dist/subscription-billing/index.js +3 -3
  433. package/dist/subscription-billing/index.js.map +1 -1
  434. package/dist/subscription-billing/service.d.ts +21 -0
  435. package/dist/subscription-billing/service.d.ts.map +1 -1
  436. package/dist/subscription-billing/service.js +90 -15
  437. package/dist/subscription-billing/service.js.map +1 -1
  438. package/dist/tenancy/features.d.ts +69 -0
  439. package/dist/tenancy/features.d.ts.map +1 -0
  440. package/dist/tenancy/features.js +123 -0
  441. package/dist/tenancy/features.js.map +1 -0
  442. package/dist/tenancy/settings.d.ts +63 -0
  443. package/dist/tenancy/settings.d.ts.map +1 -0
  444. package/dist/tenancy/settings.js +218 -0
  445. package/dist/tenancy/settings.js.map +1 -0
  446. package/dist/users/repository.d.ts +16 -1
  447. package/dist/users/repository.d.ts.map +1 -1
  448. package/dist/users/repository.js +24 -1
  449. package/dist/users/repository.js.map +1 -1
  450. package/package.json +9 -2
  451. package/src/db/migrations/0045_role_write_scope.sql +122 -0
  452. package/src/db/migrations/0046_pilot_activation_model.sql +184 -0
  453. package/src/db/migrations/0047_recipient_clearance.sql +89 -0
  454. package/src/db/migrations/0048_item_type_note.sql +16 -0
  455. package/src/db/migrations/0049_national_fiscal_engine.sql +279 -0
  456. package/src/db/migrations/0050_fiscal_vocabulary_readonly.sql +29 -0
  457. package/src/db/migrations/0051_seed_rules_from_catalog.sql +72 -0
  458. package/src/db/migrations/0052_fiscal_rule_delete_scope.sql +57 -0
  459. package/src/db/migrations/0053_rule_validity_lower_bound.sql +44 -0
  460. package/src/db/migrations/0054_tenant_profile_and_rule_source.sql +89 -0
  461. package/src/db/migrations/0055_job_capability_contract.sql +300 -0
  462. package/src/db/migrations/0056_fiscal_document_ingestion.sql +337 -0
  463. package/src/db/migrations/0057_fiscal_pending_event_inbox.sql +228 -0
  464. package/src/db/migrations/0058_fiscal_operational_engine.sql +516 -0
  465. package/src/db/migrations/0059_fiscal_contract_version.sql +59 -0
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readFiscalCredentialReadiness = readFiscalCredentialReadiness;
4
+ exports.interventionKindFor = interventionKindFor;
5
+ /**
6
+ * Classes de erro de verificação que significam "o titular foi recusado".
7
+ *
8
+ * Guardadas em `digital_certificate.last_verification_error` como CLASSE — a
9
+ * coluna existe desde a 1004 justamente para não guardar a mensagem.
10
+ */
11
+ const DENIED_CLASSES = new Set(['auth', 'not_allowed', 'access_denied', 'permission_denied']);
12
+ /**
13
+ * Lê a prontidão operacional.
14
+ *
15
+ * Roda dentro de `withContext` com o tenant: `digital_certificate` tem RLS FORCE
16
+ * e é a GUC que decide de quem são as linhas lidas.
17
+ *
18
+ * Tolera a ausência da tabela (`42P01`) porque `digital_certificate` pertence à
19
+ * VERTICAL contábil: um tenant sem ela instalada não tem credencial nenhuma, e
20
+ * a leitura correta disso é `NOT_CONFIGURED` — não uma exceção que derruba o
21
+ * worker no meio da carteira.
22
+ */
23
+ async function readFiscalCredentialReadiness(tx, input) {
24
+ const kind = input.kind ?? 'certificate_a1';
25
+ const base = {
26
+ kind,
27
+ usableByWorker: false,
28
+ selfHealing: false,
29
+ expiresOn: null,
30
+ verifiedAt: null,
31
+ fingerprint: null,
32
+ providerAuthorization: 'unknown',
33
+ };
34
+ if (kind === 'municipal_portal') {
35
+ // Login de portal municipal não é certificado ICP-Brasil e ainda não tem
36
+ // onde morar. Um cron também não digita captcha. Negado até existir.
37
+ return {
38
+ ...base,
39
+ state: 'NOT_CONFIGURED',
40
+ detail: 'portal municipal não tem credencial automatizável neste produto',
41
+ };
42
+ }
43
+ let rows;
44
+ try {
45
+ rows = await tx `
46
+ SELECT id, cert_type, status, expires_at, verified_at,
47
+ last_verification_error, vault_credential_id
48
+ FROM digital_certificate
49
+ WHERE client_id = ${input.clientId}
50
+ AND cert_type = ${kind === 'certificate_a3' ? 'A3' : 'A1'}
51
+ AND deleted_at IS NULL
52
+ ORDER BY expires_at DESC
53
+ LIMIT 1
54
+ `;
55
+ }
56
+ catch (err) {
57
+ const code = err?.code;
58
+ if (code === '42P01' || code === '42703') {
59
+ return { ...base, state: 'NOT_CONFIGURED', detail: 'vertical contábil não aplicada' };
60
+ }
61
+ throw err;
62
+ }
63
+ const cert = rows[0];
64
+ if (!cert) {
65
+ return { ...base, state: 'NOT_CONFIGURED', detail: 'nenhum certificado cadastrado' };
66
+ }
67
+ const expiresOn = cert.expires_at ? isoDate(cert.expires_at) : null;
68
+ const verifiedAt = cert.verified_at?.toISOString() ?? null;
69
+ const withDates = { ...base, expiresOn, verifiedAt };
70
+ if (cert.status === 'revoked') {
71
+ return { ...withDates, state: 'INVALID', detail: 'certificado revogado' };
72
+ }
73
+ // Vencimento é fato do calendário, não do registro: um certificado marcado
74
+ // `active` cuja data passou está vencido mesmo que ninguém tenha corrido para
75
+ // atualizar a linha.
76
+ if (cert.expires_at && cert.expires_at < todayUtc()) {
77
+ return { ...withDates, state: 'EXPIRED', detail: `vencido em ${expiresOn}` };
78
+ }
79
+ if (cert.status === 'expired') {
80
+ return { ...withDates, state: 'EXPIRED', detail: 'marcado como vencido' };
81
+ }
82
+ if (cert.last_verification_error && DENIED_CLASSES.has(cert.last_verification_error)) {
83
+ return {
84
+ ...withDates,
85
+ state: 'ACCESS_DENIED',
86
+ detail: `último acesso recusado (${cert.last_verification_error})`,
87
+ };
88
+ }
89
+ if (kind === 'certificate_a3') {
90
+ // A3 vive em token ou cartão com PIN digitado por uma pessoa. Ele EXISTE, e
91
+ // dizer "não tem certificado" seria falso; o que ele não é, é automatizável.
92
+ return {
93
+ ...withDates,
94
+ state: 'REQUIRES_REVIEW',
95
+ detail: 'A3 exige PIN presencial e não é automatizável por cron',
96
+ };
97
+ }
98
+ if (!cert.vault_credential_id) {
99
+ // Cadastro sem material é uma promessa sem lastro: a tela diria "tem
100
+ // certificado" e o worker não teria o que apresentar no handshake.
101
+ return {
102
+ ...withDates,
103
+ state: 'INVALID',
104
+ detail: 'certificado cadastrado sem material no cofre',
105
+ };
106
+ }
107
+ if (!cert.verified_at) {
108
+ return {
109
+ ...withDates,
110
+ state: 'REQUIRES_REVIEW',
111
+ detail: 'cadastrado e nunca exercido contra o ambiente oficial',
112
+ };
113
+ }
114
+ // A autorização do provedor sai de execução OBSERVADA. Um `SELECT` sobre a
115
+ // trilha, e não uma dedução a partir do cadastro.
116
+ const [ok] = await tx `
117
+ SELECT count(*)::int AS n
118
+ FROM fiscal_sync_run
119
+ WHERE client_id = ${input.clientId}
120
+ AND source = ${input.source}
121
+ AND environment = ${input.environment}
122
+ AND outcome IN ('completed', 'no_documents')
123
+ `;
124
+ const established = (ok?.n ?? 0) > 0;
125
+ return {
126
+ ...withDates,
127
+ state: 'READY',
128
+ usableByWorker: true,
129
+ selfHealing: true,
130
+ providerAuthorization: established ? 'established' : 'unknown',
131
+ detail: established
132
+ ? 'pronta; o ambiente já aceitou esta credencial'
133
+ : 'pronta; o ambiente ainda não aceitou esta credencial nenhuma vez',
134
+ };
135
+ }
136
+ function todayUtc() {
137
+ const now = new Date();
138
+ return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
139
+ }
140
+ function isoDate(d) {
141
+ return d.toISOString().slice(0, 10);
142
+ }
143
+ /**
144
+ * O motivo de intervenção que este estado pede — ou `null` quando não pede.
145
+ *
146
+ * Aqui mora a regra de B2.36 que evita a fila ilegível: `REQUIRES_REVIEW` e
147
+ * `NOT_CONFIGURED` NÃO abrem tarefa. Não configurar automação é uma escolha
148
+ * legítima do escritório, e transformá-la em pendência encheria a fila de
149
+ * clientes que ninguém pediu para automatizar.
150
+ */
151
+ function interventionKindFor(state) {
152
+ switch (state) {
153
+ case 'EXPIRED':
154
+ return 'certificate_expired';
155
+ case 'INVALID':
156
+ return 'certificate_invalid';
157
+ case 'ACCESS_DENIED':
158
+ return 'auth_required';
159
+ default:
160
+ return null;
161
+ }
162
+ }
163
+ //# sourceMappingURL=readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../../../src/fiscal/credentials/readiness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTenantFiscalAutomation = getTenantFiscalAutomation;
4
+ exports.evaluateFiscalEligibility = evaluateFiscalEligibility;
5
+ exports.listFiscalEligibleClients = listFiscalEligibleClients;
6
+ const milestone_js_1 = require("../pilot/milestone.js");
7
+ /** Lê o modo do escritório. Ausência de linha é `disabled` — nunca "herda". */
8
+ async function getTenantFiscalAutomation(tx) {
9
+ const rows = await tx `
10
+ SELECT mode, enabled_at, enabled_by FROM tenant_fiscal_automation
11
+ `;
12
+ const r = rows[0];
13
+ if (!r)
14
+ return { mode: 'disabled', enabledAt: null, enabledBy: null };
15
+ return {
16
+ mode: r.mode,
17
+ enabledAt: r.enabled_at?.toISOString() ?? null,
18
+ enabledBy: r.enabled_by,
19
+ };
20
+ }
21
+ /**
22
+ * Este cliente pode entrar em automação fiscal, neste ambiente, para este tipo?
23
+ *
24
+ * Devolve TODOS os motivos de recusa, e não só o primeiro: quem for habilitar
25
+ * um cliente precisa saber tudo o que falta de uma vez, e não descobrir a
26
+ * próxima pendência a cada tentativa.
27
+ *
28
+ * Precisa rodar dentro de `withContext` com o tenant: as três tabelas têm RLS
29
+ * FORCE, e é a GUC que decide de quem são as linhas lidas.
30
+ */
31
+ async function evaluateFiscalEligibility(tx, input) {
32
+ const reasons = [];
33
+ // NFS-e nacional (ADN) e NF-e/CT-e (DF-e) exigem o MESMO insumo: certificado
34
+ // ICP-Brasil apresentado por TLS mútuo. Foi MEDIDO nesta onda, não deduzido —
35
+ // o host do ADN pede certificado de cliente no handshake, com CAs ICP-Brasil
36
+ // aceitas, e nem a documentação abre sem ele. Por isso o padrão é A1 para
37
+ // todos os tipos, e não `municipal_portal` para NFS-e como a 0055 supunha.
38
+ const kind = input.credentialKind ?? 'certificate_a1';
39
+ const automation = await getTenantFiscalAutomation(tx);
40
+ if (automation.mode === 'disabled') {
41
+ reasons.push('tenant_automation_disabled');
42
+ }
43
+ else if (automation.mode !== input.environment) {
44
+ // Sem fallback nas duas direções. Ver o cabeçalho.
45
+ reasons.push('environment_mismatch');
46
+ }
47
+ // Operação real exige o marco declarado. Ambiente sintético não — é ele que
48
+ // mantém desenvolvimento e homologação possíveis antes do piloto começar.
49
+ if (input.environment === 'production') {
50
+ const milestone = await (0, milestone_js_1.getRealPilotStart)(tx);
51
+ if (!milestone)
52
+ reasons.push('real_operation_not_declared');
53
+ }
54
+ const clients = await tx `
55
+ SELECT status FROM client WHERE id = ${input.clientId} AND deleted_at IS NULL
56
+ `;
57
+ const client = clients[0];
58
+ if (!client) {
59
+ reasons.push('client_not_found');
60
+ }
61
+ else if (client.status !== 'active') {
62
+ // `deleted_at IS NULL` NÃO basta, e é este o achado do gate: os dois
63
+ // cadastros vivos da SC estão exatamente aqui — não apagados e não ativos.
64
+ reasons.push('client_inactive');
65
+ }
66
+ const enrollments = await tx `
67
+ SELECT id FROM client_fiscal_enrollment
68
+ WHERE client_id = ${input.clientId}
69
+ AND document_type = ${input.documentType}
70
+ AND revoked_at IS NULL
71
+ `;
72
+ if (enrollments.length === 0)
73
+ reasons.push('client_not_enrolled');
74
+ const credential = await readCredentialReadiness(tx, input.clientId, kind);
75
+ if (credential !== 'verified')
76
+ reasons.push('credential_not_ready');
77
+ return {
78
+ eligible: reasons.length === 0,
79
+ reasons,
80
+ environment: automation.mode === 'disabled' ? null : automation.mode,
81
+ credential,
82
+ detail: reasons.length === 0
83
+ ? `elegível (${input.documentType}, ${input.environment})`
84
+ : `negado: ${reasons.join(', ')}`,
85
+ };
86
+ }
87
+ /**
88
+ * Prontidão do certificado do cliente.
89
+ *
90
+ * ## Por que lê `digital_certificate`, e não uma tabela própria
91
+ *
92
+ * A 0055 criou `client_fiscal_credential` para esta pergunta. Foi invenção: o
93
+ * domínio já existia na vertical contábil (`digital_certificate`, migration
94
+ * 1002), com consumidores vivos. Duas tabelas para o mesmo fato dariam duas
95
+ * respostas para "este cliente tem certificado?", e elas divergiriam na
96
+ * primeira vez que alguém atualizasse só uma. A 0056 removeu a duplicata.
97
+ *
98
+ * ## Por que a consulta é defensiva
99
+ *
100
+ * `digital_certificate` pertence à VERTICAL. Um tenant sem a vertical instalada
101
+ * não tem a tabela — e a leitura correta disso é `no_credential`, não uma
102
+ * exceção. Ausência de tabela e ausência de linha significam a mesma coisa
103
+ * aqui: ninguém provou nada, então nada é autorizado.
104
+ *
105
+ * ## Por que `status = 'active'` não basta
106
+ *
107
+ * `active` diz que ninguém revogou o cadastro. Não diz que a credencial
108
+ * funciona. Um A1 cadastrado com a senha errada fica `active` para sempre e só
109
+ * falha no dia em que o job tentar usá-lo — em nome do cliente, contra a
110
+ * Receita, gerando bloqueio no CNPJ DELE. `verified_at` é o campo que separa
111
+ * cadastro de prova (migration 1004).
112
+ */
113
+ async function readCredentialReadiness(tx, clientId, kind) {
114
+ if (kind === 'municipal_portal') {
115
+ // Portal municipal não é certificado ICP-Brasil e ainda não tem onde morar.
116
+ // Devolver `no_credential` é a leitura honesta: negado até existir.
117
+ return 'no_credential';
118
+ }
119
+ const certType = kind === 'certificate_a3' ? 'A3' : 'A1';
120
+ let rows;
121
+ try {
122
+ rows = await tx `
123
+ SELECT status, expires_at, verified_at
124
+ FROM digital_certificate
125
+ WHERE client_id = ${clientId}
126
+ AND cert_type = ${certType}
127
+ AND deleted_at IS NULL
128
+ ORDER BY expires_at DESC
129
+ LIMIT 1
130
+ `;
131
+ }
132
+ catch (err) {
133
+ const code = err?.code;
134
+ // 42P01 tabela ausente, 42703 coluna ausente: a vertical não está aplicada
135
+ // neste banco. Ausência é negado, nunca exceção.
136
+ if (code === '42P01' || code === '42703')
137
+ return 'no_credential';
138
+ throw err;
139
+ }
140
+ const r = rows[0];
141
+ if (!r)
142
+ return 'no_credential';
143
+ if (r.status === 'revoked')
144
+ return 'revoked';
145
+ // Vencimento é fato do calendário, não do registro: um certificado marcado
146
+ // `active` cuja data passou está EXPIRADO mesmo que ninguém tenha corrido
147
+ // para atualizar a linha. Ler o contrário seria confiar na diligência de um
148
+ // processo que ainda não existe.
149
+ if (r.expires_at && r.expires_at < todayUtc())
150
+ return 'expired';
151
+ if (r.status === 'expired')
152
+ return 'expired';
153
+ if (!r.verified_at)
154
+ return 'configured_not_verified';
155
+ return 'verified';
156
+ }
157
+ function todayUtc() {
158
+ const now = new Date();
159
+ return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
160
+ }
161
+ /**
162
+ * Os clientes elegíveis do tenant corrente.
163
+ *
164
+ * É esta função — e não uma consulta escrita à mão dentro do worker — que um
165
+ * job fiscal futuro deve usar para montar o lote. A regra vale porque o caminho
166
+ * óbvio (`SELECT id FROM client WHERE deleted_at IS NULL`) é justamente o
167
+ * defeito: ele existe, é fácil de escrever, e não pergunta nada do que importa.
168
+ */
169
+ async function listFiscalEligibleClients(tx, input) {
170
+ const automation = await getTenantFiscalAutomation(tx);
171
+ if (automation.mode === 'disabled' || automation.mode !== input.environment)
172
+ return [];
173
+ if (input.environment === 'production' && !(await (0, milestone_js_1.getRealPilotStart)(tx)))
174
+ return [];
175
+ const candidates = await tx `
176
+ SELECT e.client_id
177
+ FROM client_fiscal_enrollment e
178
+ JOIN client c ON c.id = e.client_id AND c.deleted_at IS NULL
179
+ WHERE e.document_type = ${input.documentType}
180
+ AND e.revoked_at IS NULL
181
+ AND c.status = 'active'
182
+ ORDER BY e.client_id
183
+ `;
184
+ // A credencial é conferida uma a uma, pela MESMA função da decisão
185
+ // individual. Repetir a regra em SQL aqui criaria duas rédeas para a mesma
186
+ // pergunta, e elas divergiriam na primeira mudança.
187
+ const eligible = [];
188
+ for (const row of candidates) {
189
+ const decision = await evaluateFiscalEligibility(tx, {
190
+ clientId: row.client_id,
191
+ documentType: input.documentType,
192
+ environment: input.environment,
193
+ });
194
+ if (decision.eligible)
195
+ eligible.push(row.client_id);
196
+ }
197
+ return eligible;
198
+ }
199
+ //# sourceMappingURL=eligibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eligibility.js","sourceRoot":"","sources":["../../../src/fiscal/eligibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * Fixtures SINTÉTICAS de NFS-e, conformes ao leiaute oficial.
4
+ *
5
+ * Nenhum documento de pessoa ou empresa real. Os CNPJ usados são os de teste
6
+ * consagrados (`11.222.333/0001-81` e derivados com DV válido) e os nomes são
7
+ * inventados. O município é Goiânia (5208707) porque é o do escritório piloto,
8
+ * e o dado é público.
9
+ *
10
+ * A estrutura segue `NFSe_v1.01.xsd` / `tiposComplexos_v1.01.xsd`
11
+ * (`nfse-esquemas_xsd-v1-01-20260209.zip`, 09/02/2026): raiz `NFSe`, atributo
12
+ * `versao`, `infNFSe` com `@Id` de 53 posições, `emit`, `DPS/infDPS/toma`,
13
+ * `valores`, e o bloco `IBSCBS` que a v1.01 já traz.
14
+ *
15
+ * A chave obedece a regra do XSD: `"NFS" + IBGE(7) + AmbGer(1) + TpInsc(1) +
16
+ * Insc(14) + nNFSe(13) + AAMM(4) + cNum(9) + DV(1)`.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.XXE_ATTACK_XML = exports.UNKNOWN_ROOT_XML = exports.MALFORMED_XML = void 0;
20
+ exports.nfseAccessKey = nfseAccessKey;
21
+ exports.nfseFixture = nfseFixture;
22
+ exports.nfseCancellationFixture = nfseCancellationFixture;
23
+ exports.nfseInvalidKeyFixture = nfseInvalidKeyFixture;
24
+ const IBGE_GOIANIA = '5208707';
25
+ const AMB_GERADOR = '1';
26
+ const TIPO_INSCRICAO_CNPJ = '2';
27
+ /** Monta a chave de 53 posições exatamente como o XSD a descreve. */
28
+ function nfseAccessKey(input) {
29
+ const key = 'NFS' +
30
+ IBGE_GOIANIA +
31
+ AMB_GERADOR +
32
+ TIPO_INSCRICAO_CNPJ +
33
+ input.emitCnpj.padStart(14, '0') +
34
+ input.nNFSe.padStart(13, '0') +
35
+ input.anoMes +
36
+ input.cNum.padStart(9, '0') +
37
+ (input.dv ?? '0');
38
+ return key;
39
+ }
40
+ function nfseFixture(input) {
41
+ const emitCnpj = input.emitCnpj ?? '11222333000181';
42
+ const tomaCnpj = input.tomaCnpj ?? '04252011000110';
43
+ const dhProc = input.dhProc ?? '2026-09-03T14:20:00-03:00';
44
+ const anoMes = input.anoMes ?? '2609';
45
+ const valor = input.valor ?? '1500.00';
46
+ const chave = nfseAccessKey({ nNFSe: input.nNFSe, cNum: input.cNum, anoMes, emitCnpj });
47
+ return `<?xml version="1.0" encoding="UTF-8"?>
48
+ <NFSe xmlns="http://www.sped.fazenda.gov.br/nfse" versao="1.01">
49
+ <infNFSe Id="${chave}">
50
+ <xLocEmi>Goiania</xLocEmi>
51
+ <xLocPrestacao>Goiania</xLocPrestacao>
52
+ <nNFSe>${input.nNFSe}</nNFSe>
53
+ <cLocIncid>${IBGE_GOIANIA}</cLocIncid>
54
+ <xLocIncid>Goiania</xLocIncid>
55
+ <verAplic>SINTETICO-1.0</verAplic>
56
+ <ambGer>${AMB_GERADOR}</ambGer>
57
+ <tpEmis>1</tpEmis>
58
+ <procEmi>1</procEmi>
59
+ <cStat>100</cStat>
60
+ <dhProc>${dhProc}</dhProc>
61
+ <nDFSe>${input.nNFSe}</nDFSe>
62
+ <emit>
63
+ <CNPJ>${emitCnpj}</CNPJ>
64
+ <IM>123456</IM>
65
+ <xNome>${input.emitNome ?? 'Prestadora Sintetica Ltda'}</xNome>
66
+ </emit>
67
+ <DPS>
68
+ <infDPS>${input.withToma === false
69
+ ? ''
70
+ : `
71
+ <toma>
72
+ <CNPJ>${tomaCnpj}</CNPJ>
73
+ <xNome>${input.tomaNome ?? 'Tomadora Sintetica Ltda'}</xNome>
74
+ </toma>`}${input.intermCnpj
75
+ ? `
76
+ <interm>
77
+ <CNPJ>${input.intermCnpj}</CNPJ>
78
+ <xNome>${input.intermNome ?? 'Intermediaria Sintetica Ltda'}</xNome>
79
+ </interm>`
80
+ : ''}
81
+ </infDPS>
82
+ </DPS>
83
+ <valores>
84
+ <vServPrest>${valor}</vServPrest>
85
+ <vLiq>${valor}</vLiq>
86
+ </valores>${input.withIbsCbs === false
87
+ ? ''
88
+ : `
89
+ <IBSCBS>
90
+ <gIBSCBS>
91
+ <vBC>${valor}</vBC>
92
+ </gIBSCBS>
93
+ </IBSCBS>`}
94
+ </infNFSe>
95
+ </NFSe>`;
96
+ }
97
+ /** Evento de cancelamento sobre uma chave existente. */
98
+ function nfseCancellationFixture(chNFSe, seq = '1') {
99
+ return `<?xml version="1.0" encoding="UTF-8"?>
100
+ <evento xmlns="http://www.sped.fazenda.gov.br/nfse" versao="1.01">
101
+ <infEvento Id="EVT${chNFSe.slice(3, 20)}">
102
+ <chNFSe>${chNFSe}</chNFSe>
103
+ <tpEvento>101101</tpEvento>
104
+ <nSeqEvento>${seq}</nSeqEvento>
105
+ <dhEvento>2026-09-05T09:00:00-03:00</dhEvento>
106
+ </infEvento>
107
+ </evento>`;
108
+ }
109
+ /** XML malformado — tag não fechada. */
110
+ exports.MALFORMED_XML = '<NFSe versao="1.01"><infNFSe Id="NFS1">';
111
+ /** XML bem formado, mas de raiz que este adapter não reconhece. */
112
+ exports.UNKNOWN_ROOT_XML = '<?xml version="1.0"?><DPS xmlns="http://www.sped.fazenda.gov.br/nfse" versao="1.01"><infDPS/></DPS>';
113
+ /**
114
+ * Ataque XXE clássico. O leitor tem de RECUSAR na entrada — e a recusa não
115
+ * depende de configuração, porque ele não sabe expandir entidade.
116
+ */
117
+ exports.XXE_ATTACK_XML = `<?xml version="1.0"?>
118
+ <!DOCTYPE NFSe [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
119
+ <NFSe xmlns="http://www.sped.fazenda.gov.br/nfse" versao="1.01">
120
+ <infNFSe Id="NFS52087071211222333000181000000000000126090000000010">
121
+ <emit><CNPJ>&xxe;</CNPJ><xNome>x</xNome></emit>
122
+ </infNFSe>
123
+ </NFSe>`;
124
+ /** Chave fora do formato de 53 posições. */
125
+ function nfseInvalidKeyFixture() {
126
+ return nfseFixture({ nNFSe: '1', cNum: '1' }).replace(/Id="NFS\d+"/, 'Id="NFS123"');
127
+ }
128
+ //# sourceMappingURL=nfse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nfse.js","sourceRoot":"","sources":["../../../../../src/fiscal/ingestion/__fixtures__/nfse.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAyBH,sCAkBC;AAED,kCA+DC;AAGD,0DAUC;AAsBD,sDAEC;AA7HD,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,qEAAqE;AACrE,SAAgB,aAAa,CAAC,KAM7B;IACC,MAAM,GAAG,GACP,KAAK;QACL,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;QAC7B,KAAK,CAAC,MAAM;QACZ,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAC3B,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IACpB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,WAAW,CAAC,KAAuB;IACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,2BAA2B,CAAC;IAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;IACvC,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAExF,OAAO;;iBAEQ,KAAK;;;aAGT,KAAK,CAAC,KAAK;iBACP,YAAY;;;cAGf,WAAW;;;;cAIX,MAAM;aACP,KAAK,CAAC,KAAK;;cAEV,QAAQ;;eAEP,KAAK,CAAC,QAAQ,IAAI,2BAA2B;;;gBAIpD,KAAK,CAAC,QAAQ,KAAK,KAAK;QACtB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;;kBAEM,QAAQ;mBACP,KAAK,CAAC,QAAQ,IAAI,yBAAyB;gBAExD,GACE,KAAK,CAAC,UAAU;QACd,CAAC,CAAC;;kBAEM,KAAK,CAAC,UAAU;mBACf,KAAK,CAAC,UAAU,IAAI,8BAA8B;kBACnD;QACR,CAAC,CAAC,EACN;;;;oBAIc,KAAK;cACX,KAAK;gBAEb,KAAK,CAAC,UAAU,KAAK,KAAK;QACxB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;;;eAGK,KAAK;;cAGhB;;QAEI,CAAC;AACT,CAAC;AAED,wDAAwD;AACxD,SAAgB,uBAAuB,CAAC,MAAc,EAAE,GAAG,GAAG,GAAG;IAC/D,OAAO;;sBAEa,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;cAC3B,MAAM;;kBAEF,GAAG;;;UAGX,CAAC;AACX,CAAC;AAED,wCAAwC;AAC3B,QAAA,aAAa,GAAG,yCAAyC,CAAC;AAEvE,mEAAmE;AACtD,QAAA,gBAAgB,GAC3B,qGAAqG,CAAC;AAExG;;;GAGG;AACU,QAAA,cAAc,GAAG;;;;;;QAMtB,CAAC;AAET,4CAA4C;AAC5C,SAAgB,qBAAqB;IACnC,OAAO,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AACtF,CAAC"}