@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 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/fiscal/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { Tx } from '../../db/client.js';
2
+ import type { FiscalEnvironment } from '../eligibility.js';
3
+ /**
4
+ * O disjuntor do PROVEDOR — a proteção que o recuo por cliente não dá.
5
+ *
6
+ * ## O caso que o `next_attempt_after` não cobre
7
+ *
8
+ * A 0056 recua por cliente quando a consulta dele falha. Isso está certo e é
9
+ * insuficiente: quando o ambiente nacional cai, ele cai para TODOS. Com cem
10
+ * clientes elegíveis, o recuo por cliente produz cem requisições contra um
11
+ * serviço que já respondeu, na primeira, que está indisponível.
12
+ *
13
+ * Cem requisições em rajada contra um serviço fora do ar é exatamente o padrão
14
+ * de consumo que o `cStat 656 — Consumo Indevido` pune. E o bloqueio recai sobre
15
+ * o CNPJ de cem terceiros que não pediram nada.
16
+ *
17
+ * ## Por que `half_open`, e não só aberto/fechado
18
+ *
19
+ * Reabrir de uma vez devolve a rajada no minuto seguinte. `half_open` deixa
20
+ * passar UM cliente de prova: se ele funcionar, fecha para todos; se falhar,
21
+ * reabre com o dobro da espera. O custo de descobrir que o provedor voltou passa
22
+ * a ser uma requisição, e não a carteira inteira.
23
+ *
24
+ * ## O que NÃO conta para o disjuntor
25
+ *
26
+ * Certificado vencido de um cliente, cliente sem inscrição, documento ilegível.
27
+ * São falhas DAQUELE cliente e não dizem nada sobre o provedor — contá-las
28
+ * abriria o disjuntor para todo o escritório por causa de um A1 esquecido, que é
29
+ * o oposto do que se quer. A decisão está em `retry.ts`
30
+ * (`countsAgainstProvider`), e este módulo apenas a obedece.
31
+ */
32
+ export type CircuitState = 'closed' | 'open' | 'half_open';
33
+ export interface ProviderCircuit {
34
+ state: CircuitState;
35
+ consecutiveFailures: number;
36
+ openUntil: Date | null;
37
+ lastErrorClass: string | null;
38
+ /** `true` quando este ciclo pode chamar o provedor. */
39
+ allows: boolean;
40
+ /** `true` quando a passagem é de PROVA (só um cliente deve usá-la). */
41
+ probe: boolean;
42
+ }
43
+ export interface CircuitKey {
44
+ tenantId: string;
45
+ source: string;
46
+ environment: FiscalEnvironment;
47
+ }
48
+ /**
49
+ * Quantas falhas seguidas abrem o disjuntor.
50
+ *
51
+ * Três, e não uma: um `503` isolado é ruído normal de um serviço público, e
52
+ * abrir na primeira faria a automação passar mais tempo desligada do que ligada.
53
+ * Três seguidas já não são ruído.
54
+ */
55
+ export declare const CIRCUIT_FAILURE_THRESHOLD = 3;
56
+ /** Espera inicial com o disjuntor aberto; dobra a cada reabertura falha. */
57
+ export declare const CIRCUIT_BASE_OPEN_MS: number;
58
+ export declare const CIRCUIT_MAX_OPEN_MS: number;
59
+ /**
60
+ * Lê o disjuntor e diz se este ciclo pode chamar o provedor.
61
+ *
62
+ * Ausência de linha é `closed`: um provedor que nunca falhou não precisa de
63
+ * registro para ser confiável, e criar a linha na leitura faria toda consulta
64
+ * escrever.
65
+ */
66
+ export declare function readProviderCircuit(tx: Tx, key: CircuitKey, now?: Date): Promise<ProviderCircuit>;
67
+ /**
68
+ * Registra sucesso: fecha o disjuntor e zera o contador.
69
+ *
70
+ * Zera de uma vez, e não gradualmente. Um contador que decai devagar mantém o
71
+ * provedor "quase aberto" por horas depois de ele ter voltado — e a primeira
72
+ * oscilação seguinte o reabre sem motivo.
73
+ */
74
+ export declare function recordProviderSuccess(tx: Tx, key: CircuitKey, now?: Date): Promise<void>;
75
+ /**
76
+ * Registra falha atribuível ao provedor. Abre o disjuntor ao atingir o limite.
77
+ *
78
+ * A espera dobra a cada abertura porque um provedor que falha três vezes,
79
+ * volta, e falha três vezes de novo não está oscilando — está fora, e insistir
80
+ * no mesmo intervalo é a rajada de novo, só que espaçada.
81
+ */
82
+ export declare function recordProviderFailure(tx: Tx, key: CircuitKey, input: {
83
+ errorClass: string;
84
+ now?: Date;
85
+ }): Promise<ProviderCircuit>;
86
+ //# sourceMappingURL=circuit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit.d.ts","sourceRoot":"","sources":["../../../src/fiscal/sync/circuit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uDAAuD;IACvD,MAAM,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,iBAAiB,CAAC;CAChC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,QAAc,CAAC;AAChD,eAAO,MAAM,mBAAmB,QAAkB,CAAC;AASnD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,UAAU,EACf,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC,eAAe,CAAC,CA+B1B;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,UAAU,EACf,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,UAAU,EACf,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,eAAe,CAAC,CAyC1B"}
@@ -0,0 +1,118 @@
1
+ import { uuidv7 } from '@baruk/shared';
2
+ /**
3
+ * Quantas falhas seguidas abrem o disjuntor.
4
+ *
5
+ * Três, e não uma: um `503` isolado é ruído normal de um serviço público, e
6
+ * abrir na primeira faria a automação passar mais tempo desligada do que ligada.
7
+ * Três seguidas já não são ruído.
8
+ */
9
+ export const CIRCUIT_FAILURE_THRESHOLD = 3;
10
+ /** Espera inicial com o disjuntor aberto; dobra a cada reabertura falha. */
11
+ export const CIRCUIT_BASE_OPEN_MS = 15 * 60_000;
12
+ export const CIRCUIT_MAX_OPEN_MS = 4 * 60 * 60_000;
13
+ /**
14
+ * Lê o disjuntor e diz se este ciclo pode chamar o provedor.
15
+ *
16
+ * Ausência de linha é `closed`: um provedor que nunca falhou não precisa de
17
+ * registro para ser confiável, e criar a linha na leitura faria toda consulta
18
+ * escrever.
19
+ */
20
+ export async function readProviderCircuit(tx, key, now = new Date()) {
21
+ const [row] = await tx `
22
+ SELECT state, consecutive_failures, open_until, last_error_class
23
+ FROM fiscal_provider_circuit
24
+ WHERE source = ${key.source} AND environment = ${key.environment}
25
+ `;
26
+ if (!row) {
27
+ return {
28
+ state: 'closed',
29
+ consecutiveFailures: 0,
30
+ openUntil: null,
31
+ lastErrorClass: null,
32
+ allows: true,
33
+ probe: false,
34
+ };
35
+ }
36
+ // Aberto com o prazo vencido é meio-aberto NA LEITURA, sem escrita: quem
37
+ // materializa a transição é a primeira tentativa que de fato acontecer.
38
+ // Escrever aqui faria toda leitura de painel mexer no estado do disjuntor.
39
+ const expirou = row.state === 'open' && row.open_until !== null && row.open_until <= now;
40
+ const state = expirou ? 'half_open' : row.state;
41
+ return {
42
+ state,
43
+ consecutiveFailures: row.consecutive_failures,
44
+ openUntil: row.open_until,
45
+ lastErrorClass: row.last_error_class,
46
+ allows: state !== 'open',
47
+ probe: state === 'half_open',
48
+ };
49
+ }
50
+ /**
51
+ * Registra sucesso: fecha o disjuntor e zera o contador.
52
+ *
53
+ * Zera de uma vez, e não gradualmente. Um contador que decai devagar mantém o
54
+ * provedor "quase aberto" por horas depois de ele ter voltado — e a primeira
55
+ * oscilação seguinte o reabre sem motivo.
56
+ */
57
+ export async function recordProviderSuccess(tx, key, now = new Date()) {
58
+ await tx `
59
+ INSERT INTO fiscal_provider_circuit (
60
+ id, tenant_id, source, environment, state, consecutive_failures,
61
+ last_error_class, opened_at, open_until, last_success_at, updated_at
62
+ ) VALUES (
63
+ ${uuidv7()}, ${key.tenantId}, ${key.source}, ${key.environment}, 'closed', 0,
64
+ NULL, NULL, NULL, ${now}, now()
65
+ )
66
+ ON CONFLICT (tenant_id, source, environment)
67
+ DO UPDATE SET state = 'closed', consecutive_failures = 0, last_error_class = NULL,
68
+ opened_at = NULL, open_until = NULL, last_success_at = ${now},
69
+ updated_at = now()
70
+ `;
71
+ }
72
+ /**
73
+ * Registra falha atribuível ao provedor. Abre o disjuntor ao atingir o limite.
74
+ *
75
+ * A espera dobra a cada abertura porque um provedor que falha três vezes,
76
+ * volta, e falha três vezes de novo não está oscilando — está fora, e insistir
77
+ * no mesmo intervalo é a rajada de novo, só que espaçada.
78
+ */
79
+ export async function recordProviderFailure(tx, key, input) {
80
+ const now = input.now ?? new Date();
81
+ const atual = await readProviderCircuit(tx, key, now);
82
+ const falhas = atual.consecutiveFailures + 1;
83
+ const abre = falhas >= CIRCUIT_FAILURE_THRESHOLD;
84
+ // O expoente conta as aberturas ALÉM do limite, e não as falhas: sem isso a
85
+ // terceira falha já pediria a espera de uma décima segunda.
86
+ const excedente = Math.max(0, falhas - CIRCUIT_FAILURE_THRESHOLD);
87
+ const esperaMs = abre
88
+ ? Math.min(CIRCUIT_BASE_OPEN_MS * 2 ** Math.min(excedente, 4), CIRCUIT_MAX_OPEN_MS)
89
+ : 0;
90
+ const openUntil = abre ? new Date(now.getTime() + esperaMs) : null;
91
+ await tx `
92
+ INSERT INTO fiscal_provider_circuit (
93
+ id, tenant_id, source, environment, state, consecutive_failures,
94
+ last_error_class, opened_at, open_until, last_failure_at, updated_at
95
+ ) VALUES (
96
+ ${uuidv7()}, ${key.tenantId}, ${key.source}, ${key.environment},
97
+ ${abre ? 'open' : 'closed'}, ${falhas}, ${input.errorClass},
98
+ ${abre ? now : null}, ${openUntil}, ${now}, now()
99
+ )
100
+ ON CONFLICT (tenant_id, source, environment)
101
+ DO UPDATE SET state = ${abre ? 'open' : 'closed'},
102
+ consecutive_failures = ${falhas},
103
+ last_error_class = ${input.errorClass},
104
+ opened_at = ${abre ? now : null},
105
+ open_until = ${openUntil},
106
+ last_failure_at = ${now},
107
+ updated_at = now()
108
+ `;
109
+ return {
110
+ state: abre ? 'open' : 'closed',
111
+ consecutiveFailures: falhas,
112
+ openUntil,
113
+ lastErrorClass: input.errorClass,
114
+ allows: !abre,
115
+ probe: false,
116
+ };
117
+ }
118
+ //# sourceMappingURL=circuit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit.js","sourceRoot":"","sources":["../../../src/fiscal/sync/circuit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import type { Tx } from '../../db/client.js';
2
+ /**
3
+ * A fila do que só uma pessoa resolve.
4
+ *
5
+ * ## O erro que ela evita nos dois sentidos
6
+ *
7
+ * Um worker que não abre tarefa nenhuma deixa um certificado vencido parar a
8
+ * captura de um cliente em silêncio até alguém reparar — o que, na prática,
9
+ * significa até o cliente reclamar.
10
+ *
11
+ * Um worker que abre tarefa a cada tentativa produz trinta linhas idênticas até
12
+ * o fim do mês. Uma fila que ninguém consegue ler é indistinguível de uma fila
13
+ * vazia, e é pior: dá a impressão de que o sistema está avisando.
14
+ *
15
+ * A saída é uma linha por PROBLEMA, com contador. A trigésima ocorrência
16
+ * incrementa `occurrences` e move `last_seen_at`; ela não cria a trigésima
17
+ * tarefa. Quem garante isso é o índice único parcial da 0058 — não este arquivo.
18
+ *
19
+ * ## Retentativa transitória NÃO entra aqui
20
+ *
21
+ * `NETWORK_TRANSIENT` e `PROVIDER_TEMPORARILY_UNAVAILABLE` voltam sozinhos.
22
+ * Só viram tarefa depois de falharem seguidas o bastante para deixarem de ser
23
+ * oscilação (`repeated_failure`), e essa contagem é decidida em `retry.ts`.
24
+ */
25
+ export type InterventionKind = 'auth_required' | 'certificate_expired' | 'certificate_invalid' | 'provider_access_denied' | 'unsupported_source' | 'repeated_failure';
26
+ export type InterventionState = 'open' | 'acknowledged' | 'resolved';
27
+ export interface FiscalIntervention {
28
+ id: string;
29
+ clientId: string | null;
30
+ kind: InterventionKind;
31
+ source: string | null;
32
+ environment: string | null;
33
+ documentType: string | null;
34
+ state: InterventionState;
35
+ detail: string;
36
+ occurrences: number;
37
+ firstSeenAt: string;
38
+ lastSeenAt: string;
39
+ }
40
+ /**
41
+ * Abre a tarefa, ou soma uma ocorrência à que já existe.
42
+ *
43
+ * `detail` é atualizado a cada ocorrência: o motivo mais recente é o mais útil
44
+ * para quem for resolver. É CLASSE e contexto — nunca a resposta do provedor,
45
+ * que cita sujeito de certificado e caminho de arquivo.
46
+ */
47
+ export declare function raiseFiscalIntervention(tx: Tx, input: {
48
+ tenantId: string;
49
+ clientId?: string | null;
50
+ kind: InterventionKind;
51
+ source?: string | null;
52
+ environment?: string | null;
53
+ documentType?: string | null;
54
+ detail: string;
55
+ now?: Date;
56
+ }): Promise<{
57
+ id: string;
58
+ created: boolean;
59
+ occurrences: number;
60
+ }>;
61
+ /**
62
+ * Fecha a tarefa quando o problema deixou de existir.
63
+ *
64
+ * Fechamento AUTOMÁTICO só para o que foi observado voltar a funcionar — nunca
65
+ * por decurso de prazo. Uma tarefa que some sozinha depois de uma semana é uma
66
+ * tarefa que ninguém resolveu, apresentada como resolvida.
67
+ */
68
+ export declare function resolveFiscalInterventions(tx: Tx, input: {
69
+ clientId?: string | null;
70
+ kinds: readonly InterventionKind[];
71
+ source?: string | null;
72
+ environment?: string | null;
73
+ resolvedBy?: string | null;
74
+ now?: Date;
75
+ }): Promise<number>;
76
+ /** A fila aberta do escritório, a mais recente primeiro. */
77
+ export declare function listFiscalInterventions(tx: Tx, input?: {
78
+ state?: InterventionState | 'any';
79
+ limit?: number;
80
+ }): Promise<FiscalIntervention[]>;
81
+ //# sourceMappingURL=intervention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intervention.d.ts","sourceRoot":"","sources":["../../../src/fiscal/sync/intervention.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,qBAAqB,GACrB,qBAAqB,GACrB,wBAAwB,GACxB,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,cAAc,GAAG,UAAU,CAAC;AAErE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IACL,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GACA,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CA6EhE;AAED;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IACL,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GACA,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,4DAA4D;AAC5D,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,EAAE,EACN,KAAK,GAAE;IAAE,KAAK,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAChE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAsC/B"}
@@ -0,0 +1,135 @@
1
+ import { uuidv7 } from '@baruk/shared';
2
+ /**
3
+ * Abre a tarefa, ou soma uma ocorrência à que já existe.
4
+ *
5
+ * `detail` é atualizado a cada ocorrência: o motivo mais recente é o mais útil
6
+ * para quem for resolver. É CLASSE e contexto — nunca a resposta do provedor,
7
+ * que cita sujeito de certificado e caminho de arquivo.
8
+ */
9
+ export async function raiseFiscalIntervention(tx, input) {
10
+ const now = input.now ?? new Date();
11
+ // O índice único é parcial (`WHERE state <> 'resolved'`), então `ON CONFLICT`
12
+ // não o alcança por nome de coluna. O caminho é tentar o UPDATE primeiro e
13
+ // inserir só quando ninguém foi atingido — nesta ordem, porque a inversa
14
+ // dispararia violação de unicidade no caso comum (a tarefa já existe).
15
+ const atualizados = await tx `
16
+ UPDATE fiscal_intervention
17
+ SET occurrences = occurrences + 1, last_seen_at = ${now}, detail = ${input.detail}
18
+ WHERE state <> 'resolved'
19
+ AND kind = ${input.kind}
20
+ AND client_id IS NOT DISTINCT FROM ${input.clientId ?? null}
21
+ AND source IS NOT DISTINCT FROM ${input.source ?? null}
22
+ AND environment IS NOT DISTINCT FROM ${input.environment ?? null}
23
+ RETURNING id, occurrences
24
+ `;
25
+ const existente = atualizados[0];
26
+ if (existente) {
27
+ return { id: existente.id, created: false, occurrences: existente.occurrences };
28
+ }
29
+ /*
30
+ * A corrida que o lease NÃO cobre.
31
+ *
32
+ * A vez de sincronizar é tomada DEPOIS do portão de credencial — de propósito,
33
+ * porque não faz sentido travar um cliente para descobrir em seguida que o
34
+ * certificado dele venceu. A consequência é que dois workers podem chegar a
35
+ * este ponto ao mesmo tempo para o mesmo cliente: os dois não encontram
36
+ * pendência aberta, e os dois tentam inserir.
37
+ *
38
+ * O segundo bate no índice único parcial. Sem tratamento, a exceção aborta a
39
+ * transação inteira e o ciclo daquele escritório cai — um erro de
40
+ * infraestrutura produzido por dois processos concordando sobre um fato.
41
+ *
42
+ * O `SAVEPOINT` é o que torna a recuperação possível: no PostgreSQL um comando
43
+ * que falha aborta a transação, e daí em diante todo comando devolve `25P02`
44
+ * — inclusive o UPDATE de recuperação. Com savepoint, só a tentativa de
45
+ * inserção é desfeita.
46
+ */
47
+ const id = uuidv7();
48
+ try {
49
+ await tx.savepoint((sp) => sp `
50
+ INSERT INTO fiscal_intervention (
51
+ id, tenant_id, client_id, kind, source, environment, document_type,
52
+ state, detail, occurrences, first_seen_at, last_seen_at
53
+ ) VALUES (
54
+ ${id}, ${input.tenantId}, ${input.clientId ?? null}, ${input.kind},
55
+ ${input.source ?? null}, ${input.environment ?? null}, ${input.documentType ?? null},
56
+ 'open', ${input.detail}, 1, ${now}, ${now}
57
+ )
58
+ `);
59
+ return { id, created: true, occurrences: 1 };
60
+ }
61
+ catch (err) {
62
+ // `23505` é violação de unicidade: alguém abriu a MESMA pendência entre o
63
+ // nosso UPDATE e o nosso INSERT. O desfecho correto é o mesmo do caminho
64
+ // comum — somar uma ocorrência à linha que agora existe.
65
+ const code = err?.code;
66
+ if (code !== '23505')
67
+ throw err;
68
+ const concorrente = await tx `
69
+ UPDATE fiscal_intervention
70
+ SET occurrences = occurrences + 1, last_seen_at = ${now}, detail = ${input.detail}
71
+ WHERE state <> 'resolved'
72
+ AND kind = ${input.kind}
73
+ AND client_id IS NOT DISTINCT FROM ${input.clientId ?? null}
74
+ AND source IS NOT DISTINCT FROM ${input.source ?? null}
75
+ AND environment IS NOT DISTINCT FROM ${input.environment ?? null}
76
+ RETURNING id, occurrences
77
+ `;
78
+ const linha = concorrente[0];
79
+ if (linha)
80
+ return { id: linha.id, created: false, occurrences: linha.occurrences };
81
+ // Nem inseriu nem encontrou: alguém resolveu a pendência no intervalo. Não é
82
+ // erro, e não vale reabrir — o problema deixou de existir para quem olhou.
83
+ return { id, created: false, occurrences: 0 };
84
+ }
85
+ }
86
+ /**
87
+ * Fecha a tarefa quando o problema deixou de existir.
88
+ *
89
+ * Fechamento AUTOMÁTICO só para o que foi observado voltar a funcionar — nunca
90
+ * por decurso de prazo. Uma tarefa que some sozinha depois de uma semana é uma
91
+ * tarefa que ninguém resolveu, apresentada como resolvida.
92
+ */
93
+ export async function resolveFiscalInterventions(tx, input) {
94
+ if (input.kinds.length === 0)
95
+ return 0;
96
+ const now = input.now ?? new Date();
97
+ const rows = await tx `
98
+ UPDATE fiscal_intervention
99
+ SET state = 'resolved', resolved_at = ${now}, resolved_by = ${input.resolvedBy ?? null}
100
+ WHERE state <> 'resolved'
101
+ AND kind = ANY (${input.kinds})
102
+ AND client_id IS NOT DISTINCT FROM ${input.clientId ?? null}
103
+ AND source IS NOT DISTINCT FROM ${input.source ?? null}
104
+ AND environment IS NOT DISTINCT FROM ${input.environment ?? null}
105
+ RETURNING id
106
+ `;
107
+ return rows.length;
108
+ }
109
+ /** A fila aberta do escritório, a mais recente primeiro. */
110
+ export async function listFiscalInterventions(tx, input = {}) {
111
+ const limit = Math.min(Math.max(input.limit ?? 100, 1), 500);
112
+ const state = input.state ?? 'open';
113
+ const rows = await tx `
114
+ SELECT id, client_id, kind, source, environment, document_type, state, detail,
115
+ occurrences, first_seen_at, last_seen_at
116
+ FROM fiscal_intervention
117
+ WHERE ${state === 'any' ? tx `true` : tx `state = ${state}`}
118
+ ORDER BY last_seen_at DESC
119
+ LIMIT ${limit}
120
+ `;
121
+ return rows.map((r) => ({
122
+ id: r.id,
123
+ clientId: r.client_id,
124
+ kind: r.kind,
125
+ source: r.source,
126
+ environment: r.environment,
127
+ documentType: r.document_type,
128
+ state: r.state,
129
+ detail: r.detail,
130
+ occurrences: r.occurrences,
131
+ firstSeenAt: r.first_seen_at.toISOString(),
132
+ lastSeenAt: r.last_seen_at.toISOString(),
133
+ }));
134
+ }
135
+ //# sourceMappingURL=intervention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intervention.js","sourceRoot":"","sources":["../../../src/fiscal/sync/intervention.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import type { Tx } from '../../db/client.js';
2
+ import type { FiscalEnvironment } from '../eligibility.js';
3
+ import type { FiscalDocumentType } from '../ingestion/provider.js';
4
+ /**
5
+ * A vez de sincronizar um fluxo — tomada, renovada, devolvida e retomada.
6
+ *
7
+ * ## A corrida que isto fecha
8
+ *
9
+ * Dois processos rodando o mesmo cliente ao mesmo tempo não é hipótese: um cron
10
+ * que demora mais do que o intervalo se sobrepõe a si mesmo, e uma retentativa
11
+ * manual durante a janela automática faz o mesmo. Sem exclusão, os dois leem o
12
+ * MESMO `last_nsu`, os dois consultam o ambiente nacional em nome do mesmo CNPJ,
13
+ * e o segundo lote é integralmente duplicado. A deduplicação absorveria os
14
+ * documentos — mas não a consulta duplicada, que conta para a cota do cliente e
15
+ * aproxima o `cStat 656`.
16
+ *
17
+ * ## Por que a exclusão vive no índice
18
+ *
19
+ * `INSERT ... ON CONFLICT DO UPDATE ... WHERE expirou` é uma operação só. O
20
+ * PostgreSQL trava a linha conflitante: a segunda transação ESPERA a primeira
21
+ * confirmar e só então avalia o `WHERE`, que já será falso. Não há janela entre
22
+ * verificar e tomar porque não há dois momentos.
23
+ *
24
+ * A alternativa natural — `SELECT ... IF livre THEN UPDATE` — tem essa janela,
25
+ * e ela é da largura da latência de rede. Em um cron que percorre a carteira em
26
+ * paralelo, ela abre em todo ciclo.
27
+ *
28
+ * ## Cada função aqui roda em SUA transação
29
+ *
30
+ * A tomada precisa estar CONFIRMADA antes de a busca começar; se ela vivesse na
31
+ * mesma transação do lote, nenhum outro processo a enxergaria enquanto o lote
32
+ * roda — e a exclusão só valeria depois que ela deixasse de ser necessária.
33
+ * Quem chama abre um `withContext` por operação.
34
+ */
35
+ export interface FiscalSyncStream {
36
+ clientId: string;
37
+ source: string;
38
+ environment: FiscalEnvironment;
39
+ documentType: FiscalDocumentType;
40
+ }
41
+ export interface FiscalSyncLease {
42
+ id: string;
43
+ holder: string;
44
+ acquiredAt: Date;
45
+ expiresAt: Date;
46
+ /** Quantas vezes esta vez já foi tomada de um titular que não a devolveu. */
47
+ recoveredCount: number;
48
+ /** `true` quando ESTA tomada veio de um titular vencido, e não de vez livre. */
49
+ recovered: boolean;
50
+ }
51
+ /**
52
+ * Prazo padrão da vez.
53
+ *
54
+ * Dez minutos: mais do que qualquer lote de 50 documentos precisa, e menos do
55
+ * que o intervalo entre ciclos diários — de modo que um worker morto nunca
56
+ * atrase o cliente para o dia seguinte. Lotes longos renovam com `heartbeat`.
57
+ */
58
+ export declare const DEFAULT_LEASE_TTL_MS: number;
59
+ /**
60
+ * Toma a vez. Devolve `null` quando outro processo VIVO a tem.
61
+ *
62
+ * `null` não é erro e não merece log de erro: é a resposta correta e frequente
63
+ * quando dois workers percorrem a mesma carteira.
64
+ */
65
+ export declare function acquireFiscalSyncLease(tx: Tx, input: {
66
+ tenantId: string;
67
+ stream: FiscalSyncStream;
68
+ holder: string;
69
+ ttlMs?: number;
70
+ runId?: string | null;
71
+ now?: Date;
72
+ }): Promise<FiscalSyncLease | null>;
73
+ /**
74
+ * Renova o prazo — e confirma que a vez ainda é nossa.
75
+ *
76
+ * O `WHERE holder = ...` não é zelo: um lote que demorou mais do que o prazo já
77
+ * PERDEU a vez para outro worker, e continuar escrevendo depois disso é
78
+ * exatamente a corrida que o lease existe para impedir. `false` significa
79
+ * "pare agora", e quem chama tem de obedecer.
80
+ */
81
+ export declare function heartbeatFiscalSyncLease(tx: Tx, input: {
82
+ leaseId: string;
83
+ holder: string;
84
+ ttlMs?: number;
85
+ now?: Date;
86
+ }): Promise<boolean>;
87
+ /**
88
+ * Devolve a vez.
89
+ *
90
+ * Idempotente e tolerante: devolver uma vez que já foi tomada por outro não é
91
+ * erro, é o desfecho normal de um worker que demorou demais. Devolve `false`
92
+ * para que a trilha saiba, sem lançar.
93
+ */
94
+ export declare function releaseFiscalSyncLease(tx: Tx, input: {
95
+ leaseId: string;
96
+ holder: string;
97
+ now?: Date;
98
+ }): Promise<boolean>;
99
+ export interface StaleLease {
100
+ id: string;
101
+ clientId: string;
102
+ source: string;
103
+ environment: string;
104
+ documentType: string;
105
+ holder: string;
106
+ expiresAt: Date;
107
+ recoveredCount: number;
108
+ }
109
+ /**
110
+ * As vezes vencidas que ninguém devolveu.
111
+ *
112
+ * A retomada não depende desta função — `acquire` já toma o que venceu. Ela
113
+ * existe para OBSERVAÇÃO: uma lista que nunca esvazia é um worker que morre
114
+ * sempre no mesmo cliente, e isso é uma pergunta que nenhum contador agregado
115
+ * responde.
116
+ */
117
+ export declare function listStaleFiscalSyncLeases(tx: Tx, now?: Date): Promise<StaleLease[]>;
118
+ //# sourceMappingURL=lease.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../../../src/fiscal/sync/lease.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,iBAAiB,CAAC;IAC/B,YAAY,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,6EAA6E;IAC7E,cAAc,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,QAAc,CAAC;AAEhD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IACL,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GACA,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAkEjC;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,GACrE,OAAO,CAAC,OAAO,CAAC,CAalB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,GACrD,OAAO,CAAC,OAAO,CAAC,CASlB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,EAAE,EACN,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC,UAAU,EAAE,CAAC,CA6BvB"}