@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.
- package/.baruk-provenance.json +4 -4
- package/CHANGELOG.md +42 -0
- package/dist/audit/repository.d.ts +33 -1
- package/dist/audit/repository.d.ts.map +1 -1
- package/dist/audit/repository.js +41 -7
- package/dist/audit/repository.js.map +1 -1
- package/dist/auth/service.d.ts +21 -0
- package/dist/auth/service.d.ts.map +1 -1
- package/dist/auth/service.js +46 -1
- package/dist/auth/service.js.map +1 -1
- package/dist/billing/ar-repository.d.ts +41 -1
- package/dist/billing/ar-repository.d.ts.map +1 -1
- package/dist/billing/ar-repository.js +82 -6
- package/dist/billing/ar-repository.js.map +1 -1
- package/dist/billing/provider-account.d.ts +38 -0
- package/dist/billing/provider-account.d.ts.map +1 -1
- package/dist/billing/provider-account.js +58 -2
- package/dist/billing/provider-account.js.map +1 -1
- package/dist/billing/repository.d.ts +44 -0
- package/dist/billing/repository.d.ts.map +1 -1
- package/dist/billing/repository.js +49 -5
- package/dist/billing/repository.js.map +1 -1
- package/dist/cjs/audit/repository.js +41 -7
- package/dist/cjs/audit/repository.js.map +1 -1
- package/dist/cjs/auth/service.js +46 -1
- package/dist/cjs/auth/service.js.map +1 -1
- package/dist/cjs/billing/ar-repository.js +82 -6
- package/dist/cjs/billing/ar-repository.js.map +1 -1
- package/dist/cjs/billing/provider-account.js +60 -1
- package/dist/cjs/billing/provider-account.js.map +1 -1
- package/dist/cjs/billing/repository.js +51 -5
- package/dist/cjs/billing/repository.js.map +1 -1
- package/dist/cjs/clients/ibge.js +117 -0
- package/dist/cjs/clients/ibge.js.map +1 -0
- package/dist/cjs/clients/registry/http.js +157 -0
- package/dist/cjs/clients/registry/http.js.map +1 -0
- package/dist/cjs/clients/registry/ibge-municipios.js +28 -0
- package/dist/cjs/clients/registry/ibge-municipios.js.map +1 -0
- package/dist/cjs/clients/registry/ibge.js +63 -0
- package/dist/cjs/clients/registry/ibge.js.map +1 -0
- package/dist/cjs/clients/registry/lookup.js +191 -0
- package/dist/cjs/clients/registry/lookup.js.map +1 -0
- package/dist/cjs/clients/registry/provider.js +34 -0
- package/dist/cjs/clients/registry/provider.js.map +1 -0
- package/dist/cjs/clients/registry/resolve.js +47 -0
- package/dist/cjs/clients/registry/resolve.js.map +1 -0
- package/dist/cjs/clients/registry/serpro.js +149 -0
- package/dist/cjs/clients/registry/serpro.js.map +1 -0
- package/dist/cjs/clients/registry/service.js +230 -0
- package/dist/cjs/clients/registry/service.js.map +1 -0
- package/dist/cjs/clients/registry/synthetic.js +165 -0
- package/dist/cjs/clients/registry/synthetic.js.map +1 -0
- package/dist/cjs/clients/repository.js +190 -9
- package/dist/cjs/clients/repository.js.map +1 -1
- package/dist/cjs/collection/branding.js +190 -0
- package/dist/cjs/collection/branding.js.map +1 -1
- package/dist/cjs/collection/clearance-store.js +74 -0
- package/dist/cjs/collection/clearance-store.js.map +1 -0
- package/dist/cjs/collection/communication-runtime.js +65 -2
- package/dist/cjs/collection/communication-runtime.js.map +1 -1
- package/dist/cjs/collection/engine.js +20 -0
- package/dist/cjs/collection/engine.js.map +1 -1
- package/dist/cjs/collection/policy.js +29 -1
- package/dist/cjs/collection/policy.js.map +1 -1
- package/dist/cjs/communication/clearance.js +18 -0
- package/dist/cjs/communication/clearance.js.map +1 -0
- package/dist/cjs/communication/dry-run-scenario.js +5 -0
- package/dist/cjs/communication/dry-run-scenario.js.map +1 -1
- package/dist/cjs/communication/engine.js +12 -0
- package/dist/cjs/communication/engine.js.map +1 -1
- package/dist/cjs/communication/policy.js.map +1 -1
- package/dist/cjs/competence/business-days.js +155 -0
- package/dist/cjs/competence/business-days.js.map +1 -0
- package/dist/cjs/competence/catalog-validation.js +174 -0
- package/dist/cjs/competence/catalog-validation.js.map +1 -0
- package/dist/cjs/competence/obligation-preview.js +190 -0
- package/dist/cjs/competence/obligation-preview.js.map +1 -0
- package/dist/cjs/competence/repository.js +330 -17
- package/dist/cjs/competence/repository.js.map +1 -1
- package/dist/cjs/dashboard/pilot-panel.js +90 -0
- package/dist/cjs/dashboard/pilot-panel.js.map +1 -0
- package/dist/cjs/dashboard/repository.js +11 -1
- package/dist/cjs/dashboard/repository.js.map +1 -1
- package/dist/cjs/db/client.js +17 -11
- package/dist/cjs/db/client.js.map +1 -1
- package/dist/cjs/db/provision-e2e-identity.js +116 -0
- package/dist/cjs/db/provision-e2e-identity.js.map +1 -0
- package/dist/cjs/fiscal/applicability.js +164 -0
- package/dist/cjs/fiscal/applicability.js.map +1 -0
- package/dist/cjs/fiscal/collection/authorization.js +186 -0
- package/dist/cjs/fiscal/collection/authorization.js.map +1 -0
- package/dist/cjs/fiscal/collection/competence.js +97 -0
- package/dist/cjs/fiscal/collection/competence.js.map +1 -0
- package/dist/cjs/fiscal/collection/first-contact.js +204 -0
- package/dist/cjs/fiscal/collection/first-contact.js.map +1 -0
- package/dist/cjs/fiscal/collection/plan.js +122 -0
- package/dist/cjs/fiscal/collection/plan.js.map +1 -0
- package/dist/cjs/fiscal/conditions.js +198 -0
- package/dist/cjs/fiscal/conditions.js.map +1 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-contract.js +390 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-contract.js.map +1 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js +108 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js +220 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
- package/dist/cjs/fiscal/coverage/model.js +137 -0
- package/dist/cjs/fiscal/coverage/model.js.map +1 -0
- package/dist/cjs/fiscal/coverage/requests.js +99 -0
- package/dist/cjs/fiscal/coverage/requests.js.map +1 -0
- package/dist/cjs/fiscal/credentials/inspect.js +182 -0
- package/dist/cjs/fiscal/credentials/inspect.js.map +1 -0
- package/dist/cjs/fiscal/credentials/material.js +168 -0
- package/dist/cjs/fiscal/credentials/material.js.map +1 -0
- package/dist/cjs/fiscal/credentials/onboarding.js +266 -0
- package/dist/cjs/fiscal/credentials/onboarding.js.map +1 -0
- package/dist/cjs/fiscal/credentials/readiness.js +190 -0
- package/dist/cjs/fiscal/credentials/readiness.js.map +1 -0
- package/dist/cjs/fiscal/eligibility.js +199 -0
- package/dist/cjs/fiscal/eligibility.js.map +1 -0
- package/dist/cjs/fiscal/enrollment.js +134 -0
- package/dist/cjs/fiscal/enrollment.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js +128 -0
- package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/adn-transport.js +229 -0
- package/dist/cjs/fiscal/ingestion/adn-transport.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/direction.js +36 -0
- package/dist/cjs/fiscal/ingestion/direction.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/nfse-adn.js +228 -0
- package/dist/cjs/fiscal/ingestion/nfse-adn.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/pipeline.js +704 -0
- package/dist/cjs/fiscal/ingestion/pipeline.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/provider.js +51 -0
- package/dist/cjs/fiscal/ingestion/provider.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/repository.js +132 -0
- package/dist/cjs/fiscal/ingestion/repository.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/synthetic-provider.js +103 -0
- package/dist/cjs/fiscal/ingestion/synthetic-provider.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js +13 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport.js +61 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/xml-reader.js +121 -0
- package/dist/cjs/fiscal/ingestion/xml-reader.js.map +1 -0
- package/dist/cjs/fiscal/repository.js +470 -0
- package/dist/cjs/fiscal/repository.js.map +1 -0
- package/dist/cjs/fiscal/sync/circuit.js +124 -0
- package/dist/cjs/fiscal/sync/circuit.js.map +1 -0
- package/dist/cjs/fiscal/sync/intervention.js +140 -0
- package/dist/cjs/fiscal/sync/intervention.js.map +1 -0
- package/dist/cjs/fiscal/sync/lease.js +146 -0
- package/dist/cjs/fiscal/sync/lease.js.map +1 -0
- package/dist/cjs/fiscal/sync/observability.js +244 -0
- package/dist/cjs/fiscal/sync/observability.js.map +1 -0
- package/dist/cjs/fiscal/sync/orchestrator.js +490 -0
- package/dist/cjs/fiscal/sync/orchestrator.js.map +1 -0
- package/dist/cjs/fiscal/sync/policy.js +143 -0
- package/dist/cjs/fiscal/sync/policy.js.map +1 -0
- package/dist/cjs/fiscal/sync/reprocess.js +241 -0
- package/dist/cjs/fiscal/sync/reprocess.js.map +1 -0
- package/dist/cjs/fiscal/sync/retry.js +183 -0
- package/dist/cjs/fiscal/sync/retry.js.map +1 -0
- package/dist/cjs/fiscal/sync/secret-boundary.js +123 -0
- package/dist/cjs/fiscal/sync/secret-boundary.js.map +1 -0
- package/dist/cjs/fiscal/transport/https.js +309 -0
- package/dist/cjs/fiscal/transport/https.js.map +1 -0
- package/dist/cjs/fiscal/transport/synthetic-tls.js +380 -0
- package/dist/cjs/fiscal/transport/synthetic-tls.js.map +1 -0
- package/dist/cjs/fiscal/transport/types.js +93 -0
- package/dist/cjs/fiscal/transport/types.js.map +1 -0
- package/dist/cjs/import/br-documents.js +85 -0
- package/dist/cjs/import/br-documents.js.map +1 -0
- package/dist/cjs/import/clients-import.js +347 -40
- package/dist/cjs/import/clients-import.js.map +1 -1
- package/dist/cjs/index.js +461 -73
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/documents.js +164 -19
- package/dist/cjs/legal/documents.js.map +1 -1
- package/dist/cjs/legal/index.js +3 -1
- package/dist/cjs/legal/index.js.map +1 -1
- package/dist/cjs/legal/types.js.map +1 -1
- package/dist/cjs/onboarding/persistence.js +4 -4
- package/dist/cjs/onboarding/persistence.js.map +1 -1
- package/dist/cjs/pilot/go-live-checklist.js +212 -0
- package/dist/cjs/pilot/go-live-checklist.js.map +1 -0
- package/dist/cjs/pilot/milestone.js +79 -0
- package/dist/cjs/pilot/milestone.js.map +1 -0
- package/dist/cjs/platform/capabilities.js +173 -0
- package/dist/cjs/platform/capabilities.js.map +1 -0
- package/dist/cjs/platform/job-contract.js +411 -0
- package/dist/cjs/platform/job-contract.js.map +1 -0
- package/dist/cjs/rbac/catalog.js +110 -0
- package/dist/cjs/rbac/catalog.js.map +1 -1
- package/dist/cjs/subscription-billing/index.js +9 -1
- package/dist/cjs/subscription-billing/index.js.map +1 -1
- package/dist/cjs/subscription-billing/platform-exemption.js +121 -0
- package/dist/cjs/subscription-billing/platform-exemption.js.map +1 -0
- package/dist/cjs/subscription-billing/service.js +246 -78
- package/dist/cjs/subscription-billing/service.js.map +1 -1
- package/dist/cjs/tenancy/features.js +131 -0
- package/dist/cjs/tenancy/features.js.map +1 -0
- package/dist/cjs/tenancy/settings.js +224 -0
- package/dist/cjs/tenancy/settings.js.map +1 -0
- package/dist/cjs/users/repository.js +24 -1
- package/dist/cjs/users/repository.js.map +1 -1
- package/dist/cjs/vault/repository.js +92 -5
- package/dist/cjs/vault/repository.js.map +1 -1
- package/dist/clients/ibge.d.ts +17 -0
- package/dist/clients/ibge.d.ts.map +1 -0
- package/dist/clients/ibge.js +112 -0
- package/dist/clients/ibge.js.map +1 -0
- package/dist/clients/registry/http.d.ts +61 -0
- package/dist/clients/registry/http.d.ts.map +1 -0
- package/dist/clients/registry/http.js +151 -0
- package/dist/clients/registry/http.js.map +1 -0
- package/dist/clients/registry/ibge-municipios.d.ts +25 -0
- package/dist/clients/registry/ibge-municipios.d.ts.map +1 -0
- package/dist/clients/registry/ibge-municipios.js +25 -0
- package/dist/clients/registry/ibge-municipios.js.map +1 -0
- package/dist/clients/registry/ibge.d.ts +62 -0
- package/dist/clients/registry/ibge.d.ts.map +1 -0
- package/dist/clients/registry/ibge.js +57 -0
- package/dist/clients/registry/ibge.js.map +1 -0
- package/dist/clients/registry/lookup.d.ts +94 -0
- package/dist/clients/registry/lookup.d.ts.map +1 -0
- package/dist/clients/registry/lookup.js +184 -0
- package/dist/clients/registry/lookup.js.map +1 -0
- package/dist/clients/registry/provider.d.ts +124 -0
- package/dist/clients/registry/provider.d.ts.map +1 -0
- package/dist/clients/registry/provider.js +39 -0
- package/dist/clients/registry/provider.js.map +1 -0
- package/dist/clients/registry/resolve.d.ts +36 -0
- package/dist/clients/registry/resolve.d.ts.map +1 -0
- package/dist/clients/registry/resolve.js +44 -0
- package/dist/clients/registry/resolve.js.map +1 -0
- package/dist/clients/registry/serpro.d.ts +57 -0
- package/dist/clients/registry/serpro.d.ts.map +1 -0
- package/dist/clients/registry/serpro.js +143 -0
- package/dist/clients/registry/serpro.js.map +1 -0
- package/dist/clients/registry/service.d.ts +59 -0
- package/dist/clients/registry/service.d.ts.map +1 -0
- package/dist/clients/registry/service.js +225 -0
- package/dist/clients/registry/service.js.map +1 -0
- package/dist/clients/registry/synthetic.d.ts +30 -0
- package/dist/clients/registry/synthetic.d.ts.map +1 -0
- package/dist/clients/registry/synthetic.js +161 -0
- package/dist/clients/registry/synthetic.js.map +1 -0
- package/dist/clients/repository.d.ts +158 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +186 -9
- package/dist/clients/repository.js.map +1 -1
- package/dist/collection/branding.d.ts +65 -0
- package/dist/collection/branding.d.ts.map +1 -1
- package/dist/collection/branding.js +186 -0
- package/dist/collection/branding.js.map +1 -1
- package/dist/collection/clearance-store.d.ts +39 -0
- package/dist/collection/clearance-store.d.ts.map +1 -0
- package/dist/collection/clearance-store.js +69 -0
- package/dist/collection/clearance-store.js.map +1 -0
- package/dist/collection/communication-runtime.d.ts +37 -0
- package/dist/collection/communication-runtime.d.ts.map +1 -1
- package/dist/collection/communication-runtime.js +63 -1
- package/dist/collection/communication-runtime.js.map +1 -1
- package/dist/collection/engine.d.ts +23 -0
- package/dist/collection/engine.d.ts.map +1 -1
- package/dist/collection/engine.js +20 -0
- package/dist/collection/engine.js.map +1 -1
- package/dist/collection/policy.d.ts +25 -0
- package/dist/collection/policy.d.ts.map +1 -1
- package/dist/collection/policy.js +27 -0
- package/dist/collection/policy.js.map +1 -1
- package/dist/communication/clearance.d.ts +53 -0
- package/dist/communication/clearance.d.ts.map +1 -0
- package/dist/communication/clearance.js +15 -0
- package/dist/communication/clearance.js.map +1 -0
- package/dist/communication/dry-run-scenario.d.ts.map +1 -1
- package/dist/communication/dry-run-scenario.js +5 -0
- package/dist/communication/dry-run-scenario.js.map +1 -1
- package/dist/communication/engine.d.ts +10 -0
- package/dist/communication/engine.d.ts.map +1 -1
- package/dist/communication/engine.js +12 -0
- package/dist/communication/engine.js.map +1 -1
- package/dist/communication/policy.d.ts +16 -0
- package/dist/communication/policy.d.ts.map +1 -1
- package/dist/communication/policy.js.map +1 -1
- package/dist/competence/business-days.d.ts +51 -0
- package/dist/competence/business-days.d.ts.map +1 -0
- package/dist/competence/business-days.js +145 -0
- package/dist/competence/business-days.js.map +1 -0
- package/dist/competence/catalog-validation.d.ts +86 -0
- package/dist/competence/catalog-validation.d.ts.map +1 -0
- package/dist/competence/catalog-validation.js +168 -0
- package/dist/competence/catalog-validation.js.map +1 -0
- package/dist/competence/obligation-preview.d.ts +103 -0
- package/dist/competence/obligation-preview.d.ts.map +1 -0
- package/dist/competence/obligation-preview.js +184 -0
- package/dist/competence/obligation-preview.js.map +1 -0
- package/dist/competence/repository.d.ts +139 -1
- package/dist/competence/repository.d.ts.map +1 -1
- package/dist/competence/repository.js +325 -17
- package/dist/competence/repository.js.map +1 -1
- package/dist/dashboard/pilot-panel.d.ts +100 -0
- package/dist/dashboard/pilot-panel.d.ts.map +1 -0
- package/dist/dashboard/pilot-panel.js +87 -0
- package/dist/dashboard/pilot-panel.js.map +1 -0
- package/dist/dashboard/repository.d.ts.map +1 -1
- package/dist/dashboard/repository.js +11 -1
- package/dist/dashboard/repository.js.map +1 -1
- package/dist/db/client.d.ts +45 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +16 -11
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrate.d.ts +36 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +199 -32
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/provision-e2e-identity.d.ts +2 -0
- package/dist/db/provision-e2e-identity.d.ts.map +1 -0
- package/dist/db/provision-e2e-identity.js +114 -0
- package/dist/db/provision-e2e-identity.js.map +1 -0
- package/dist/fiscal/applicability.d.ts +73 -0
- package/dist/fiscal/applicability.d.ts.map +1 -0
- package/dist/fiscal/applicability.js +160 -0
- package/dist/fiscal/applicability.js.map +1 -0
- package/dist/fiscal/collection/authorization.d.ts +152 -0
- package/dist/fiscal/collection/authorization.d.ts.map +1 -0
- package/dist/fiscal/collection/authorization.js +178 -0
- package/dist/fiscal/collection/authorization.js.map +1 -0
- package/dist/fiscal/collection/competence.d.ts +66 -0
- package/dist/fiscal/collection/competence.d.ts.map +1 -0
- package/dist/fiscal/collection/competence.js +90 -0
- package/dist/fiscal/collection/competence.js.map +1 -0
- package/dist/fiscal/collection/first-contact.d.ts +103 -0
- package/dist/fiscal/collection/first-contact.d.ts.map +1 -0
- package/dist/fiscal/collection/first-contact.js +201 -0
- package/dist/fiscal/collection/first-contact.js.map +1 -0
- package/dist/fiscal/collection/plan.d.ts +74 -0
- package/dist/fiscal/collection/plan.d.ts.map +1 -0
- package/dist/fiscal/collection/plan.js +119 -0
- package/dist/fiscal/collection/plan.js.map +1 -0
- package/dist/fiscal/conditions.d.ts +99 -0
- package/dist/fiscal/conditions.d.ts.map +1 -0
- package/dist/fiscal/conditions.js +190 -0
- package/dist/fiscal/conditions.js.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-contract.d.ts +315 -0
- package/dist/fiscal/contracts/nfse-adn-contract.d.ts.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-contract.js +386 -0
- package/dist/fiscal/contracts/nfse-adn-contract.js.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts +13 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.js +103 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.d.ts +77 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.d.ts.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.js +215 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
- package/dist/fiscal/coverage/model.d.ts +114 -0
- package/dist/fiscal/coverage/model.d.ts.map +1 -0
- package/dist/fiscal/coverage/model.js +130 -0
- package/dist/fiscal/coverage/model.js.map +1 -0
- package/dist/fiscal/coverage/requests.d.ts +70 -0
- package/dist/fiscal/coverage/requests.d.ts.map +1 -0
- package/dist/fiscal/coverage/requests.js +95 -0
- package/dist/fiscal/coverage/requests.js.map +1 -0
- package/dist/fiscal/credentials/inspect.d.ts +114 -0
- package/dist/fiscal/credentials/inspect.d.ts.map +1 -0
- package/dist/fiscal/credentials/inspect.js +178 -0
- package/dist/fiscal/credentials/inspect.js.map +1 -0
- package/dist/fiscal/credentials/material.d.ts +81 -0
- package/dist/fiscal/credentials/material.d.ts.map +1 -0
- package/dist/fiscal/credentials/material.js +164 -0
- package/dist/fiscal/credentials/material.js.map +1 -0
- package/dist/fiscal/credentials/onboarding.d.ts +119 -0
- package/dist/fiscal/credentials/onboarding.d.ts.map +1 -0
- package/dist/fiscal/credentials/onboarding.js +259 -0
- package/dist/fiscal/credentials/onboarding.js.map +1 -0
- package/dist/fiscal/credentials/readiness.d.ts +119 -0
- package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
- package/dist/fiscal/credentials/readiness.js +186 -0
- package/dist/fiscal/credentials/readiness.js.map +1 -0
- package/dist/fiscal/eligibility.d.ts +106 -0
- package/dist/fiscal/eligibility.d.ts.map +1 -0
- package/dist/fiscal/eligibility.js +194 -0
- package/dist/fiscal/eligibility.js.map +1 -0
- package/dist/fiscal/enrollment.d.ts +91 -0
- package/dist/fiscal/enrollment.d.ts.map +1 -0
- package/dist/fiscal/enrollment.js +126 -0
- package/dist/fiscal/enrollment.js.map +1 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts +57 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts.map +1 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.js +121 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
- package/dist/fiscal/ingestion/adn-transport.d.ts +123 -0
- package/dist/fiscal/ingestion/adn-transport.d.ts.map +1 -0
- package/dist/fiscal/ingestion/adn-transport.js +220 -0
- package/dist/fiscal/ingestion/adn-transport.js.map +1 -0
- package/dist/fiscal/ingestion/direction.d.ts +60 -0
- package/dist/fiscal/ingestion/direction.d.ts.map +1 -0
- package/dist/fiscal/ingestion/direction.js +32 -0
- package/dist/fiscal/ingestion/direction.js.map +1 -0
- package/dist/fiscal/ingestion/nfse-adn.d.ts +91 -0
- package/dist/fiscal/ingestion/nfse-adn.d.ts.map +1 -0
- package/dist/fiscal/ingestion/nfse-adn.js +222 -0
- package/dist/fiscal/ingestion/nfse-adn.js.map +1 -0
- package/dist/fiscal/ingestion/pipeline.d.ts +168 -0
- package/dist/fiscal/ingestion/pipeline.d.ts.map +1 -0
- package/dist/fiscal/ingestion/pipeline.js +699 -0
- package/dist/fiscal/ingestion/pipeline.js.map +1 -0
- package/dist/fiscal/ingestion/provider.d.ts +206 -0
- package/dist/fiscal/ingestion/provider.d.ts.map +1 -0
- package/dist/fiscal/ingestion/provider.js +47 -0
- package/dist/fiscal/ingestion/provider.js.map +1 -0
- package/dist/fiscal/ingestion/repository.d.ts +82 -0
- package/dist/fiscal/ingestion/repository.d.ts.map +1 -0
- package/dist/fiscal/ingestion/repository.js +127 -0
- package/dist/fiscal/ingestion/repository.js.map +1 -0
- package/dist/fiscal/ingestion/synthetic-provider.d.ts +92 -0
- package/dist/fiscal/ingestion/synthetic-provider.d.ts.map +1 -0
- package/dist/fiscal/ingestion/synthetic-provider.js +99 -0
- package/dist/fiscal/ingestion/synthetic-provider.js.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.d.ts +19 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.d.ts.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.js +9 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport.d.ts +55 -0
- package/dist/fiscal/ingestion/synthetic-transport.d.ts.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport.js +57 -0
- package/dist/fiscal/ingestion/synthetic-transport.js.map +1 -0
- package/dist/fiscal/ingestion/xml-reader.d.ts +55 -0
- package/dist/fiscal/ingestion/xml-reader.d.ts.map +1 -0
- package/dist/fiscal/ingestion/xml-reader.js +112 -0
- package/dist/fiscal/ingestion/xml-reader.js.map +1 -0
- package/dist/fiscal/repository.d.ts +220 -0
- package/dist/fiscal/repository.d.ts.map +1 -0
- package/dist/fiscal/repository.js +449 -0
- package/dist/fiscal/repository.js.map +1 -0
- package/dist/fiscal/sync/circuit.d.ts +86 -0
- package/dist/fiscal/sync/circuit.d.ts.map +1 -0
- package/dist/fiscal/sync/circuit.js +118 -0
- package/dist/fiscal/sync/circuit.js.map +1 -0
- package/dist/fiscal/sync/intervention.d.ts +81 -0
- package/dist/fiscal/sync/intervention.d.ts.map +1 -0
- package/dist/fiscal/sync/intervention.js +135 -0
- package/dist/fiscal/sync/intervention.js.map +1 -0
- package/dist/fiscal/sync/lease.d.ts +118 -0
- package/dist/fiscal/sync/lease.d.ts.map +1 -0
- package/dist/fiscal/sync/lease.js +139 -0
- package/dist/fiscal/sync/lease.js.map +1 -0
- package/dist/fiscal/sync/observability.d.ts +148 -0
- package/dist/fiscal/sync/observability.d.ts.map +1 -0
- package/dist/fiscal/sync/observability.js +239 -0
- package/dist/fiscal/sync/observability.js.map +1 -0
- package/dist/fiscal/sync/orchestrator.d.ts +132 -0
- package/dist/fiscal/sync/orchestrator.d.ts.map +1 -0
- package/dist/fiscal/sync/orchestrator.js +487 -0
- package/dist/fiscal/sync/orchestrator.js.map +1 -0
- package/dist/fiscal/sync/policy.d.ts +87 -0
- package/dist/fiscal/sync/policy.d.ts.map +1 -0
- package/dist/fiscal/sync/policy.js +136 -0
- package/dist/fiscal/sync/policy.js.map +1 -0
- package/dist/fiscal/sync/reprocess.d.ts +76 -0
- package/dist/fiscal/sync/reprocess.d.ts.map +1 -0
- package/dist/fiscal/sync/reprocess.js +237 -0
- package/dist/fiscal/sync/reprocess.js.map +1 -0
- package/dist/fiscal/sync/retry.d.ts +82 -0
- package/dist/fiscal/sync/retry.d.ts.map +1 -0
- package/dist/fiscal/sync/retry.js +176 -0
- package/dist/fiscal/sync/retry.js.map +1 -0
- package/dist/fiscal/sync/secret-boundary.d.ts +169 -0
- package/dist/fiscal/sync/secret-boundary.d.ts.map +1 -0
- package/dist/fiscal/sync/secret-boundary.js +116 -0
- package/dist/fiscal/sync/secret-boundary.js.map +1 -0
- package/dist/fiscal/transport/https.d.ts +86 -0
- package/dist/fiscal/transport/https.d.ts.map +1 -0
- package/dist/fiscal/transport/https.js +303 -0
- package/dist/fiscal/transport/https.js.map +1 -0
- package/dist/fiscal/transport/synthetic-tls.d.ts +99 -0
- package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
- package/dist/fiscal/transport/synthetic-tls.js +374 -0
- package/dist/fiscal/transport/synthetic-tls.js.map +1 -0
- package/dist/fiscal/transport/types.d.ts +134 -0
- package/dist/fiscal/transport/types.d.ts.map +1 -0
- package/dist/fiscal/transport/types.js +88 -0
- package/dist/fiscal/transport/types.js.map +1 -0
- package/dist/import/br-documents.d.ts +26 -0
- package/dist/import/br-documents.d.ts.map +1 -0
- package/dist/import/br-documents.js +78 -0
- package/dist/import/br-documents.js.map +1 -0
- package/dist/import/clients-import.d.ts +122 -4
- package/dist/import/clients-import.d.ts.map +1 -1
- package/dist/import/clients-import.js +341 -41
- package/dist/import/clients-import.js.map +1 -1
- package/dist/index.d.ts +145 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +120 -7
- package/dist/index.js.map +1 -1
- package/dist/legal/documents.d.ts +12 -1
- package/dist/legal/documents.d.ts.map +1 -1
- package/dist/legal/documents.js +162 -18
- package/dist/legal/documents.js.map +1 -1
- package/dist/legal/index.d.ts +2 -2
- package/dist/legal/index.d.ts.map +1 -1
- package/dist/legal/index.js +1 -1
- package/dist/legal/index.js.map +1 -1
- package/dist/legal/types.d.ts +114 -2
- package/dist/legal/types.d.ts.map +1 -1
- package/dist/legal/types.js.map +1 -1
- package/dist/onboarding/persistence.d.ts +10 -1
- package/dist/onboarding/persistence.d.ts.map +1 -1
- package/dist/onboarding/persistence.js +4 -4
- package/dist/onboarding/persistence.js.map +1 -1
- package/dist/pilot/go-live-checklist.d.ts +41 -0
- package/dist/pilot/go-live-checklist.d.ts.map +1 -0
- package/dist/pilot/go-live-checklist.js +209 -0
- package/dist/pilot/go-live-checklist.js.map +1 -0
- package/dist/pilot/milestone.d.ts +56 -0
- package/dist/pilot/milestone.d.ts.map +1 -0
- package/dist/pilot/milestone.js +74 -0
- package/dist/pilot/milestone.js.map +1 -0
- package/dist/platform/capabilities.d.ts +88 -0
- package/dist/platform/capabilities.d.ts.map +1 -0
- package/dist/platform/capabilities.js +169 -0
- package/dist/platform/capabilities.js.map +1 -0
- package/dist/platform/job-contract.d.ts +232 -0
- package/dist/platform/job-contract.d.ts.map +1 -0
- package/dist/platform/job-contract.js +403 -0
- package/dist/platform/job-contract.js.map +1 -0
- package/dist/rbac/catalog.d.ts.map +1 -1
- package/dist/rbac/catalog.js +110 -0
- package/dist/rbac/catalog.js.map +1 -1
- package/dist/subscription-billing/index.d.ts +8 -5
- package/dist/subscription-billing/index.d.ts.map +1 -1
- package/dist/subscription-billing/index.js +4 -3
- package/dist/subscription-billing/index.js.map +1 -1
- package/dist/subscription-billing/platform-exemption.d.ts +89 -0
- package/dist/subscription-billing/platform-exemption.d.ts.map +1 -0
- package/dist/subscription-billing/platform-exemption.js +113 -0
- package/dist/subscription-billing/platform-exemption.js.map +1 -0
- package/dist/subscription-billing/service.d.ts +74 -0
- package/dist/subscription-billing/service.d.ts.map +1 -1
- package/dist/subscription-billing/service.js +182 -16
- package/dist/subscription-billing/service.js.map +1 -1
- package/dist/tenancy/features.d.ts +69 -0
- package/dist/tenancy/features.d.ts.map +1 -0
- package/dist/tenancy/features.js +123 -0
- package/dist/tenancy/features.js.map +1 -0
- package/dist/tenancy/settings.d.ts +63 -0
- package/dist/tenancy/settings.d.ts.map +1 -0
- package/dist/tenancy/settings.js +218 -0
- package/dist/tenancy/settings.js.map +1 -0
- package/dist/users/repository.d.ts +16 -1
- package/dist/users/repository.d.ts.map +1 -1
- package/dist/users/repository.js +24 -1
- package/dist/users/repository.js.map +1 -1
- package/dist/vault/repository.d.ts +69 -1
- package/dist/vault/repository.d.ts.map +1 -1
- package/dist/vault/repository.js +88 -5
- package/dist/vault/repository.js.map +1 -1
- package/package.json +10 -2
- package/src/db/migrations/0045_role_write_scope.sql +122 -0
- package/src/db/migrations/0046_pilot_activation_model.sql +184 -0
- package/src/db/migrations/0047_recipient_clearance.sql +89 -0
- package/src/db/migrations/0048_item_type_note.sql +16 -0
- package/src/db/migrations/0049_national_fiscal_engine.sql +279 -0
- package/src/db/migrations/0050_fiscal_vocabulary_readonly.sql +29 -0
- package/src/db/migrations/0051_seed_rules_from_catalog.sql +72 -0
- package/src/db/migrations/0052_fiscal_rule_delete_scope.sql +57 -0
- package/src/db/migrations/0053_rule_validity_lower_bound.sql +44 -0
- package/src/db/migrations/0054_tenant_profile_and_rule_source.sql +89 -0
- package/src/db/migrations/0055_job_capability_contract.sql +300 -0
- package/src/db/migrations/0056_fiscal_document_ingestion.sql +337 -0
- package/src/db/migrations/0057_fiscal_pending_event_inbox.sql +228 -0
- package/src/db/migrations/0058_fiscal_operational_engine.sql +516 -0
- package/src/db/migrations/0059_fiscal_contract_version.sql +59 -0
- package/src/db/migrations/0060_fiscal_credential_vault_and_run_authorization.sql +321 -0
- package/src/db/migrations/0061_client_official_registry_provenance.sql +193 -0
- package/src/db/migrations/0062_first_contact_and_capability_truth.sql +119 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O contrato de CAPACIDADE entre a API e as telas que a consomem.
|
|
3
|
+
*
|
|
4
|
+
* ## O defeito que isto existe para fechar
|
|
5
|
+
*
|
|
6
|
+
* O console publica na Vercel no instante do merge. A API publica na Render
|
|
7
|
+
* depois — build da imagem, `db:predeploy`, health check. Entre um e outro
|
|
8
|
+
* existe uma janela de minutos em que o navegador carrega a tela NOVA e fala
|
|
9
|
+
* com a API VELHA. Na Onda A isso não foi hipótese: nove rotas
|
|
10
|
+
* (`/v1/tenant/profile`, `/v1/tenant/features`, `/v1/tenant/setup`,
|
|
11
|
+
* `/v1/fiscal/governance` e as irmãs) existiram na tela antes de existirem no
|
|
12
|
+
* servidor.
|
|
13
|
+
*
|
|
14
|
+
* O que a pessoa via nessa janela era a pior variante possível: um 404 da API
|
|
15
|
+
* que o Next transforma em tela genérica de erro, com `digest` e pedido de
|
|
16
|
+
* abrir chamado — o mesmo modo de falha que o `SemAcesso` corrigiu para RBAC.
|
|
17
|
+
* Não é erro do sistema: é uma versão que ainda não subiu.
|
|
18
|
+
*
|
|
19
|
+
* ## Por que capacidade, e não SHA
|
|
20
|
+
*
|
|
21
|
+
* Comparar o commit servido com o commit esperado acopla a tela ao processo de
|
|
22
|
+
* release: qualquer publicação — inclusive uma que não muda nada relevante —
|
|
23
|
+
* passa a poder derrubar a tela, e um hotfix na API com outro SHA reprovaria
|
|
24
|
+
* um frontend perfeitamente compatível. O que a tela precisa saber não é QUAL
|
|
25
|
+
* build está no ar, e sim se aquele build SABE responder o que ela vai pedir.
|
|
26
|
+
*
|
|
27
|
+
* Por isso o contrato é uma lista de nomes. A API declara o que serve; a tela
|
|
28
|
+
* declara o que exige. Compatibilidade é continência de conjunto, não
|
|
29
|
+
* igualdade de versão — e é isso que torna o backend-first possível: a API
|
|
30
|
+
* publica a capacidade ANTES da tela existir, e nada quebra porque ninguém
|
|
31
|
+
* ainda a exige.
|
|
32
|
+
*
|
|
33
|
+
* ## Regras de evolução
|
|
34
|
+
*
|
|
35
|
+
* - Uma chave é imutável. Mudança incompatível ganha `.v2`; a `.v1` só sai
|
|
36
|
+
* quando nenhum frontend em produção ainda a exigir.
|
|
37
|
+
* - A API nunca declara capacidade que não implementa — o guarda
|
|
38
|
+
* `capabilities.test.ts` confere cada rota declarada contra as rotas
|
|
39
|
+
* efetivamente montadas no Fastify. Declarar sem implementar seria o mesmo
|
|
40
|
+
* defeito de novo, com um passo a mais de indireção.
|
|
41
|
+
* - Ausência é resposta legítima. A tela degrada para "aguardando a API", não
|
|
42
|
+
* para erro.
|
|
43
|
+
*/
|
|
44
|
+
/**
|
|
45
|
+
* Versão do FORMATO da resposta de `/v1/capabilities` — não das capacidades.
|
|
46
|
+
*
|
|
47
|
+
* Muda apenas se a forma do documento mudar. Um cliente que não reconhece a
|
|
48
|
+
* versão trata tudo como indisponível: fail-closed é a única leitura segura de
|
|
49
|
+
* um contrato que não se sabe ler.
|
|
50
|
+
*/
|
|
51
|
+
export declare const CAPABILITY_CONTRACT_VERSION = 1;
|
|
52
|
+
export interface ApiCapabilityDef {
|
|
53
|
+
/** `<produto>.<recurso>.v<N>`. Imutável depois de publicada. */
|
|
54
|
+
key: string;
|
|
55
|
+
label: string;
|
|
56
|
+
/**
|
|
57
|
+
* Rotas que compõem a capacidade, no formato do Fastify (`/v1/x/:id`).
|
|
58
|
+
*
|
|
59
|
+
* Não é documentação: é o que o guarda executa. Uma capacidade cujas rotas
|
|
60
|
+
* não existem no app montado reprova o build.
|
|
61
|
+
*/
|
|
62
|
+
routes: readonly string[];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* O que ESTE build da API serve.
|
|
66
|
+
*
|
|
67
|
+
* A Onda A entra inteira porque foi ela quem sofreu o skew. Capacidades
|
|
68
|
+
* anteriores não estão aqui de propósito: uma tela que nunca conheceu janela
|
|
69
|
+
* de incompatibilidade não ganha um portão novo para atravessar.
|
|
70
|
+
*/
|
|
71
|
+
export declare const API_CAPABILITIES: readonly ApiCapabilityDef[];
|
|
72
|
+
export declare const API_CAPABILITY_KEYS: readonly string[];
|
|
73
|
+
/** Formato exigido de uma chave. O guarda usa isto; a revisão humana não basta. */
|
|
74
|
+
export declare const CAPABILITY_KEY_PATTERN: RegExp;
|
|
75
|
+
export interface CapabilityDocument {
|
|
76
|
+
contract: number;
|
|
77
|
+
capabilities: readonly string[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A API declarada satisfaz o que a tela exige?
|
|
81
|
+
*
|
|
82
|
+
* Fail-closed em três frentes, e todas já aconteceram em produção em algum
|
|
83
|
+
* produto: documento ausente (API velha, sem a rota), versão de contrato
|
|
84
|
+
* desconhecida (cliente novo demais ou velho demais) e capacidade faltando.
|
|
85
|
+
* Nenhuma delas devolve "sim por não saber".
|
|
86
|
+
*/
|
|
87
|
+
export declare function satisfiesCapability(doc: CapabilityDocument | null | undefined, required: string): boolean;
|
|
88
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/platform/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,gBAAgB,EA8FvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAuC,CAAC;AAEzF,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,QACgC,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,EAC1C,QAAQ,EAAE,MAAM,GACf,OAAO,CAIT"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O contrato de CAPACIDADE entre a API e as telas que a consomem.
|
|
3
|
+
*
|
|
4
|
+
* ## O defeito que isto existe para fechar
|
|
5
|
+
*
|
|
6
|
+
* O console publica na Vercel no instante do merge. A API publica na Render
|
|
7
|
+
* depois — build da imagem, `db:predeploy`, health check. Entre um e outro
|
|
8
|
+
* existe uma janela de minutos em que o navegador carrega a tela NOVA e fala
|
|
9
|
+
* com a API VELHA. Na Onda A isso não foi hipótese: nove rotas
|
|
10
|
+
* (`/v1/tenant/profile`, `/v1/tenant/features`, `/v1/tenant/setup`,
|
|
11
|
+
* `/v1/fiscal/governance` e as irmãs) existiram na tela antes de existirem no
|
|
12
|
+
* servidor.
|
|
13
|
+
*
|
|
14
|
+
* O que a pessoa via nessa janela era a pior variante possível: um 404 da API
|
|
15
|
+
* que o Next transforma em tela genérica de erro, com `digest` e pedido de
|
|
16
|
+
* abrir chamado — o mesmo modo de falha que o `SemAcesso` corrigiu para RBAC.
|
|
17
|
+
* Não é erro do sistema: é uma versão que ainda não subiu.
|
|
18
|
+
*
|
|
19
|
+
* ## Por que capacidade, e não SHA
|
|
20
|
+
*
|
|
21
|
+
* Comparar o commit servido com o commit esperado acopla a tela ao processo de
|
|
22
|
+
* release: qualquer publicação — inclusive uma que não muda nada relevante —
|
|
23
|
+
* passa a poder derrubar a tela, e um hotfix na API com outro SHA reprovaria
|
|
24
|
+
* um frontend perfeitamente compatível. O que a tela precisa saber não é QUAL
|
|
25
|
+
* build está no ar, e sim se aquele build SABE responder o que ela vai pedir.
|
|
26
|
+
*
|
|
27
|
+
* Por isso o contrato é uma lista de nomes. A API declara o que serve; a tela
|
|
28
|
+
* declara o que exige. Compatibilidade é continência de conjunto, não
|
|
29
|
+
* igualdade de versão — e é isso que torna o backend-first possível: a API
|
|
30
|
+
* publica a capacidade ANTES da tela existir, e nada quebra porque ninguém
|
|
31
|
+
* ainda a exige.
|
|
32
|
+
*
|
|
33
|
+
* ## Regras de evolução
|
|
34
|
+
*
|
|
35
|
+
* - Uma chave é imutável. Mudança incompatível ganha `.v2`; a `.v1` só sai
|
|
36
|
+
* quando nenhum frontend em produção ainda a exigir.
|
|
37
|
+
* - A API nunca declara capacidade que não implementa — o guarda
|
|
38
|
+
* `capabilities.test.ts` confere cada rota declarada contra as rotas
|
|
39
|
+
* efetivamente montadas no Fastify. Declarar sem implementar seria o mesmo
|
|
40
|
+
* defeito de novo, com um passo a mais de indireção.
|
|
41
|
+
* - Ausência é resposta legítima. A tela degrada para "aguardando a API", não
|
|
42
|
+
* para erro.
|
|
43
|
+
*/
|
|
44
|
+
/**
|
|
45
|
+
* Versão do FORMATO da resposta de `/v1/capabilities` — não das capacidades.
|
|
46
|
+
*
|
|
47
|
+
* Muda apenas se a forma do documento mudar. Um cliente que não reconhece a
|
|
48
|
+
* versão trata tudo como indisponível: fail-closed é a única leitura segura de
|
|
49
|
+
* um contrato que não se sabe ler.
|
|
50
|
+
*/
|
|
51
|
+
export const CAPABILITY_CONTRACT_VERSION = 1;
|
|
52
|
+
/**
|
|
53
|
+
* O que ESTE build da API serve.
|
|
54
|
+
*
|
|
55
|
+
* A Onda A entra inteira porque foi ela quem sofreu o skew. Capacidades
|
|
56
|
+
* anteriores não estão aqui de propósito: uma tela que nunca conheceu janela
|
|
57
|
+
* de incompatibilidade não ganha um portão novo para atravessar.
|
|
58
|
+
*/
|
|
59
|
+
export const API_CAPABILITIES = [
|
|
60
|
+
{
|
|
61
|
+
key: 'office.tenant-profile.v1',
|
|
62
|
+
label: 'Identificação do escritório (razão social, CNPJ, fuso)',
|
|
63
|
+
routes: ['GET /v1/tenant/profile', 'PUT /v1/tenant/profile'],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
key: 'office.tenant-branding.v1',
|
|
67
|
+
label: 'Marca do escritório',
|
|
68
|
+
routes: ['GET /v1/tenant/branding', 'PUT /v1/tenant/branding'],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
key: 'office.tenant-features.v1',
|
|
72
|
+
label: 'Módulos ligados e desligados pelo próprio escritório',
|
|
73
|
+
routes: ['GET /v1/tenant/features', 'PUT /v1/tenant/features'],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: 'office.tenant-setup.v1',
|
|
77
|
+
label: 'Progresso de configuração do escritório',
|
|
78
|
+
routes: ['GET /v1/tenant/setup'],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
key: 'office.fiscal-governance.v1',
|
|
82
|
+
label: 'Governança do catálogo fiscal (fonte oficial e conferência)',
|
|
83
|
+
routes: [
|
|
84
|
+
'GET /v1/fiscal/governance',
|
|
85
|
+
'PUT /v1/fiscal/rules/:id/source',
|
|
86
|
+
'POST /v1/fiscal/rules/:id/validate',
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
key: 'office.fiscal-documents.v1',
|
|
91
|
+
label: 'Documentos fiscais capturados e o estado da sincronização',
|
|
92
|
+
routes: [
|
|
93
|
+
'GET /v1/fiscal/documents',
|
|
94
|
+
'GET /v1/fiscal/documents/:id',
|
|
95
|
+
'GET /v1/fiscal/sync-state',
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
key: 'office.fiscal-operations.v1',
|
|
100
|
+
label: 'Motor operacional fiscal: estado por cliente, cobertura, fila humana e caixa de entrada',
|
|
101
|
+
routes: [
|
|
102
|
+
'GET /v1/fiscal/sync-clients',
|
|
103
|
+
'GET /v1/fiscal/coverage',
|
|
104
|
+
'GET /v1/fiscal/interventions',
|
|
105
|
+
'GET /v1/fiscal/metrics',
|
|
106
|
+
'GET /v1/fiscal/inbox',
|
|
107
|
+
'POST /v1/fiscal/inbox/:id/reprocess',
|
|
108
|
+
'GET /v1/fiscal/request-coverage',
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
// Separada de `fiscal-operations` de propósito: ela não descreve a carteira
|
|
113
|
+
// do escritório, e sim o CONTRATO com o provedor oficial. Um console que
|
|
114
|
+
// exiba "transporte real desativado" antes de a rota existir mostraria a
|
|
115
|
+
// tela genérica de erro em vez do estado — que é exatamente o modo de falha
|
|
116
|
+
// que o portão de capacidade existe para fechar.
|
|
117
|
+
key: 'office.fiscal-provider-contract.v1',
|
|
118
|
+
label: 'Contrato do provedor fiscal oficial: versão, fontes e por que o transporte real está fechado',
|
|
119
|
+
routes: ['GET /v1/fiscal/provider-contract'],
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
// Declarada pela migration 0061, e exigida pela tela de cadastro.
|
|
123
|
+
//
|
|
124
|
+
// Sem o portão, um console novo contra uma API velha chamaria
|
|
125
|
+
// `availability`, receberia 404 e mostraria erro de sistema no lugar de um
|
|
126
|
+
// formulário que funciona perfeitamente sem consulta nenhuma. O cadastro
|
|
127
|
+
// manual é o caminho completo; a consulta é o atalho.
|
|
128
|
+
key: 'office.client-registry-provenance.v1',
|
|
129
|
+
label: 'Cadastro de cliente por CNPJ a partir de fonte oficial, com proveniência por atributo',
|
|
130
|
+
routes: [
|
|
131
|
+
'GET /v1/client-registry/availability',
|
|
132
|
+
'POST /v1/client-registry/lookup',
|
|
133
|
+
'POST /v1/clients/:id/registry-apply',
|
|
134
|
+
'GET /v1/clients/:id/registry-diff',
|
|
135
|
+
],
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
// Declarada pela 0062. A tela de credenciais fiscais depende dela para
|
|
139
|
+
// mostrar matrícula e habilitação ao lado do botão bloqueado — sem isso,
|
|
140
|
+
// um console novo contra uma API velha chamaria a rota, tomaria 404 e
|
|
141
|
+
// mostraria erro de sistema no lugar de "cliente não matriculado".
|
|
142
|
+
key: 'office.fiscal-first-contact.v1',
|
|
143
|
+
label: 'Primeiro contato fiscal: matrícula do cliente, habilitação do escritório e a autorização que aceita credencial válida só localmente',
|
|
144
|
+
routes: [
|
|
145
|
+
'GET /v1/clients/:id/fiscal-enrollment',
|
|
146
|
+
'PUT /v1/clients/:id/fiscal-enrollment',
|
|
147
|
+
'PUT /v1/tenant/fiscal-automation',
|
|
148
|
+
],
|
|
149
|
+
},
|
|
150
|
+
];
|
|
151
|
+
export const API_CAPABILITY_KEYS = API_CAPABILITIES.map((c) => c.key);
|
|
152
|
+
/** Formato exigido de uma chave. O guarda usa isto; a revisão humana não basta. */
|
|
153
|
+
export const CAPABILITY_KEY_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*(?:\.[a-z0-9]+(?:-[a-z0-9]+)*)+\.v\d+$/;
|
|
154
|
+
/**
|
|
155
|
+
* A API declarada satisfaz o que a tela exige?
|
|
156
|
+
*
|
|
157
|
+
* Fail-closed em três frentes, e todas já aconteceram em produção em algum
|
|
158
|
+
* produto: documento ausente (API velha, sem a rota), versão de contrato
|
|
159
|
+
* desconhecida (cliente novo demais ou velho demais) e capacidade faltando.
|
|
160
|
+
* Nenhuma delas devolve "sim por não saber".
|
|
161
|
+
*/
|
|
162
|
+
export function satisfiesCapability(doc, required) {
|
|
163
|
+
if (!doc)
|
|
164
|
+
return false;
|
|
165
|
+
if (doc.contract !== CAPABILITY_CONTRACT_VERSION)
|
|
166
|
+
return false;
|
|
167
|
+
return doc.capabilities.includes(required);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/platform/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAe7C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAgC;IAC3D;QACE,GAAG,EAAE,0BAA0B;QAC/B,KAAK,EAAE,wDAAwD;QAC/D,MAAM,EAAE,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;KAC7D;IACD;QACE,GAAG,EAAE,2BAA2B;QAChC,KAAK,EAAE,qBAAqB;QAC5B,MAAM,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;KAC/D;IACD;QACE,GAAG,EAAE,2BAA2B;QAChC,KAAK,EAAE,sDAAsD;QAC7D,MAAM,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;KAC/D;IACD;QACE,GAAG,EAAE,wBAAwB;QAC7B,KAAK,EAAE,yCAAyC;QAChD,MAAM,EAAE,CAAC,sBAAsB,CAAC;KACjC;IACD;QACE,GAAG,EAAE,6BAA6B;QAClC,KAAK,EAAE,6DAA6D;QACpE,MAAM,EAAE;YACN,2BAA2B;YAC3B,iCAAiC;YACjC,oCAAoC;SACrC;KACF;IACD;QACE,GAAG,EAAE,4BAA4B;QACjC,KAAK,EAAE,2DAA2D;QAClE,MAAM,EAAE;YACN,0BAA0B;YAC1B,8BAA8B;YAC9B,2BAA2B;SAC5B;KACF;IACD;QACE,GAAG,EAAE,6BAA6B;QAClC,KAAK,EACH,yFAAyF;QAC3F,MAAM,EAAE;YACN,6BAA6B;YAC7B,yBAAyB;YACzB,8BAA8B;YAC9B,wBAAwB;YACxB,sBAAsB;YACtB,qCAAqC;YACrC,iCAAiC;SAClC;KACF;IACD;QACE,4EAA4E;QAC5E,yEAAyE;QACzE,yEAAyE;QACzE,4EAA4E;QAC5E,iDAAiD;QACjD,GAAG,EAAE,oCAAoC;QACzC,KAAK,EACH,8FAA8F;QAChG,MAAM,EAAE,CAAC,kCAAkC,CAAC;KAC7C;IACD;QACE,kEAAkE;QAClE,EAAE;QACF,8DAA8D;QAC9D,2EAA2E;QAC3E,yEAAyE;QACzE,sDAAsD;QACtD,GAAG,EAAE,sCAAsC;QAC3C,KAAK,EAAE,uFAAuF;QAC9F,MAAM,EAAE;YACN,sCAAsC;YACtC,iCAAiC;YACjC,qCAAqC;YACrC,mCAAmC;SACpC;KACF;IACD;QACE,uEAAuE;QACvE,yEAAyE;QACzE,sEAAsE;QACtE,mEAAmE;QACnE,GAAG,EAAE,gCAAgC;QACrC,KAAK,EACH,qIAAqI;QACvI,MAAM,EAAE;YACN,uCAAuC;YACvC,uCAAuC;YACvC,kCAAkC;SACnC;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAsB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzF,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GACjC,iEAAiE,CAAC;AAOpE;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAA0C,EAC1C,QAAgB;IAEhB,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,GAAG,CAAC,QAAQ,KAAK,2BAA2B;QAAE,OAAO,KAAK,CAAC;IAC/D,OAAO,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import type { Db, Tx } from '../db/client.js';
|
|
2
|
+
/**
|
|
3
|
+
* O contrato de capacidade entre um WORKER e o schema que ele opera.
|
|
4
|
+
*
|
|
5
|
+
* ## O que isto fecha, e por que não bastava o contrato HTTP
|
|
6
|
+
*
|
|
7
|
+
* `platform/capabilities.ts` protege a superfície HTTP: a tela pergunta à API
|
|
8
|
+
* se aquele build sabe responder o que ela vai pedir. Um cron não tem tela e
|
|
9
|
+
* não fala com a API — ele fala com o BANCO. A contraparte é outra, então o
|
|
10
|
+
* contrato é outro, e o registro vive no próprio banco (migration 0055).
|
|
11
|
+
*
|
|
12
|
+
* A janela é real e não é hipótese: os crons publicam na Render como serviços
|
|
13
|
+
* SEPARADOS do serviço web, e as migrations rodam no `preDeployCommand` do
|
|
14
|
+
* serviço web. A ordem entre "a imagem nova do cron subiu" e "o schema novo foi
|
|
15
|
+
* aplicado" não é garantida por nada.
|
|
16
|
+
*
|
|
17
|
+
* ## Cinco estados, não dois
|
|
18
|
+
*
|
|
19
|
+
* A primeira forma óbvia disto seria um booleano `podeRodar`. Ela colapsa dois
|
|
20
|
+
* problemas que exigem tratamentos opostos:
|
|
21
|
+
*
|
|
22
|
+
* `READY` compatível — executa.
|
|
23
|
+
* `INCOMPATIBLE` o schema é anterior ao que este worker exige.
|
|
24
|
+
* Fecha, e **não** merece retry: nenhuma
|
|
25
|
+
* quantidade de tentativas aplica uma migration.
|
|
26
|
+
* `TEMPORARILY_UNAVAILABLE` não deu para perguntar (banco fora, timeout).
|
|
27
|
+
* Fecha também — mas com backoff, porque volta
|
|
28
|
+
* sozinho.
|
|
29
|
+
* `DISABLED` desligado por configuração do processo.
|
|
30
|
+
* `BLOCKED_BY_TENANT_CONFIG` o escritório não habilitou.
|
|
31
|
+
*
|
|
32
|
+
* A distinção entre os dois primeiros bloqueios é a mesma que o contrato HTTP
|
|
33
|
+
* já paga: lá, tratar timeout como "não suportado" faria a tela mentir sobre um
|
|
34
|
+
* deploy antigo toda vez que a API hibernasse. Aqui, tratar banco fora como
|
|
35
|
+
* incompatível faria o cron desistir de um dia inteiro por uma queda de rede de
|
|
36
|
+
* trinta segundos — e tratar incompatível como indisponível faria ele martelar
|
|
37
|
+
* um schema que não vai mudar sozinho.
|
|
38
|
+
*
|
|
39
|
+
* ## Fail-closed é sobre VERSÃO
|
|
40
|
+
*
|
|
41
|
+
* Quando não é `READY`, nada é escrito: zero mutação, cursor intocado, nenhum
|
|
42
|
+
* item marcado como processado. E o bloqueio é REGISTRADO (`job_run`) — um job
|
|
43
|
+
* que para em silêncio é indistinguível de um job que rodou e não achou nada.
|
|
44
|
+
*
|
|
45
|
+
* A garantia não depende deste arquivo: `job_run` tem CHECK que torna
|
|
46
|
+
* ingravável um run bloqueado com mutação ou cursor avançado. O TypeScript
|
|
47
|
+
* ordena; o banco garante.
|
|
48
|
+
*/
|
|
49
|
+
/** Versão do FORMATO do registro. Ver `platform_capability.contract_version`. */
|
|
50
|
+
export declare const JOB_CONTRACT_VERSION = 1;
|
|
51
|
+
export interface JobDefinition {
|
|
52
|
+
/** Slug estável do worker. É ele que aparece em `job_run` e `job_cursor`. */
|
|
53
|
+
readonly name: string;
|
|
54
|
+
/** Versão do WORKER. Sobe quando o que ele exige ou escreve muda. */
|
|
55
|
+
readonly version: number;
|
|
56
|
+
/**
|
|
57
|
+
* Capacidades que este worker exige do schema.
|
|
58
|
+
*
|
|
59
|
+
* Vazio é proibido por desenho — um worker sem exigência tem um portão que
|
|
60
|
+
* nunca fecha, e um portão que nunca fecha não é portão. Se um job realmente
|
|
61
|
+
* não depende de schema novo, ele deve exigir a capacidade que descreve o que
|
|
62
|
+
* ele JÁ usa; foi para isso que a 0055 declarou as dos dois crons existentes.
|
|
63
|
+
*/
|
|
64
|
+
readonly requires: readonly string[];
|
|
65
|
+
/** Menor versão de contrato que este worker sabe ler. */
|
|
66
|
+
readonly minContractVersion: number;
|
|
67
|
+
}
|
|
68
|
+
export type JobReadiness = 'READY' | 'TEMPORARILY_UNAVAILABLE' | 'INCOMPATIBLE' | 'DISABLED' | 'BLOCKED_BY_TENANT_CONFIG';
|
|
69
|
+
export type PlatformCapabilityProbe = {
|
|
70
|
+
status: 'declared';
|
|
71
|
+
contract: number;
|
|
72
|
+
capabilities: readonly string[];
|
|
73
|
+
}
|
|
74
|
+
/** O schema respondeu e não conhece o contrato: é a versão anterior. */
|
|
75
|
+
| {
|
|
76
|
+
status: 'absent';
|
|
77
|
+
detail: string;
|
|
78
|
+
}
|
|
79
|
+
/** Não foi possível perguntar. Diz respeito à infraestrutura, não à versão. */
|
|
80
|
+
| {
|
|
81
|
+
status: 'unknown';
|
|
82
|
+
detail: string;
|
|
83
|
+
};
|
|
84
|
+
export interface JobDecision {
|
|
85
|
+
readiness: JobReadiness;
|
|
86
|
+
/** Somente `READY` autoriza mutação. */
|
|
87
|
+
canMutate: boolean;
|
|
88
|
+
/** `INCOMPATIBLE` não é retentável: só um deploy o resolve. */
|
|
89
|
+
retryable: boolean;
|
|
90
|
+
/** Sugestão de espera para o que volta sozinho. `null` quando não retenta. */
|
|
91
|
+
backoffMs: number | null;
|
|
92
|
+
contractVersion: number | null;
|
|
93
|
+
observed: readonly string[];
|
|
94
|
+
missing: readonly string[];
|
|
95
|
+
detail: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Backoff do que volta sozinho.
|
|
99
|
+
*
|
|
100
|
+
* Cinco minutos: longo o bastante para uma reinicialização de banco caber
|
|
101
|
+
* dentro, curto o bastante para o ciclo diário ainda sair no mesmo dia.
|
|
102
|
+
*/
|
|
103
|
+
export declare const TEMPORARY_BACKOFF_MS: number;
|
|
104
|
+
/**
|
|
105
|
+
* Lê o registro de capacidades do schema. Nunca lança; classifica a falha.
|
|
106
|
+
*
|
|
107
|
+
* A classificação é o ponto inteiro da função. Um `catch` que devolvesse
|
|
108
|
+
* "incompatível" para qualquer erro transformaria toda queda de rede em uma
|
|
109
|
+
* afirmação falsa sobre a versão do schema — o mesmo defeito que quase entrou
|
|
110
|
+
* em produção no contrato HTTP.
|
|
111
|
+
*/
|
|
112
|
+
export declare function probePlatformCapabilities(tx: Tx | Db): Promise<PlatformCapabilityProbe>;
|
|
113
|
+
/**
|
|
114
|
+
* A sondagem satisfaz o que este worker exige?
|
|
115
|
+
*
|
|
116
|
+
* Função pura: recebe a sondagem já feita e devolve a decisão. É essa separação
|
|
117
|
+
* que permite fixar o contrato para o lote inteiro (ver `runGuardedJob`) — a
|
|
118
|
+
* decisão de cada item usa a MESMA sondagem, não uma nova.
|
|
119
|
+
*/
|
|
120
|
+
export declare function evaluateJobReadiness(def: JobDefinition, probe: PlatformCapabilityProbe, opts?: {
|
|
121
|
+
disabled?: boolean;
|
|
122
|
+
tenantBlocked?: string | null;
|
|
123
|
+
}): JobDecision;
|
|
124
|
+
export interface JobRunRecord {
|
|
125
|
+
id: string;
|
|
126
|
+
readiness: JobReadiness;
|
|
127
|
+
status: 'completed' | 'blocked' | 'failed';
|
|
128
|
+
mutations: number;
|
|
129
|
+
cursorAdvanced: boolean;
|
|
130
|
+
detail: string;
|
|
131
|
+
}
|
|
132
|
+
export interface GuardedJobContext {
|
|
133
|
+
/** A decisão FIXADA para este lote. Não muda no meio. */
|
|
134
|
+
readonly decision: JobDecision;
|
|
135
|
+
/** Cursor lido no início. `null` quando o job nunca rodou neste tenant. */
|
|
136
|
+
readonly cursor: string | null;
|
|
137
|
+
/** Conte aqui cada escrita. É o número que o CHECK do banco confere. */
|
|
138
|
+
recordMutation(n?: number): void;
|
|
139
|
+
/** Peça o avanço do cursor. Só é aplicado se o lote terminar. */
|
|
140
|
+
advanceCursorTo(position: string): void;
|
|
141
|
+
}
|
|
142
|
+
export interface GuardedJobOptions {
|
|
143
|
+
/** Desligado pelo processo (variável de ambiente, chave geral). */
|
|
144
|
+
disabled?: boolean;
|
|
145
|
+
/** Motivo de bloqueio por configuração do escritório, quando houver. */
|
|
146
|
+
tenantBlocked?: string | null;
|
|
147
|
+
/**
|
|
148
|
+
* Sondagem já feita, para FIXAR o contrato ao longo de um processo que
|
|
149
|
+
* percorre muitos tenants. Sem isto, o tenant 40 poderia decidir sob um
|
|
150
|
+
* registro diferente do tenant 1 — e metade do dia rodaria sob cada contrato.
|
|
151
|
+
*/
|
|
152
|
+
probe?: PlatformCapabilityProbe;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Executa `handler` sob o portão, dentro do contexto de tenant.
|
|
156
|
+
*
|
|
157
|
+
* A ordem importa e é o mecanismo inteiro:
|
|
158
|
+
*
|
|
159
|
+
* 1. sonda (ou usa a sondagem fixada) e decide — ANTES de qualquer escrita;
|
|
160
|
+
* 2. se não for `READY`, grava o `job_run` bloqueado e RETORNA. O handler não
|
|
161
|
+
* é chamado, então não existe caminho pelo qual ele mute;
|
|
162
|
+
* 3. se for `READY`, lê o cursor, chama o handler, e só então grava o run e
|
|
163
|
+
* avança o cursor.
|
|
164
|
+
*
|
|
165
|
+
* Cursor e run são gravados na MESMA transação do handler: um lote que estourou
|
|
166
|
+
* no meio não deixa cursor avançado, porque o rollback leva os dois junto.
|
|
167
|
+
*/
|
|
168
|
+
export declare function runGuardedJob<T>(db: Db, tenantId: string, def: JobDefinition, handler: (tx: Tx, ctx: GuardedJobContext) => Promise<T>, opts?: GuardedJobOptions): Promise<{
|
|
169
|
+
record: JobRunRecord;
|
|
170
|
+
result: T | null;
|
|
171
|
+
decision: JobDecision;
|
|
172
|
+
}>;
|
|
173
|
+
/**
|
|
174
|
+
* Grava o desfecho de um run.
|
|
175
|
+
*
|
|
176
|
+
* Público porque os dois crons existentes não são baseados em cursor — eles são
|
|
177
|
+
* idempotentes por índice único e rodam duas transações por tenant de
|
|
178
|
+
* propósito. Forçá-los para dentro de `runGuardedJob` colapsaria essas duas
|
|
179
|
+
* transações em uma, e um erro na régua passaria a desfazer recebíveis
|
|
180
|
+
* legitimamente gerados. Eles usam o mesmo portão e a mesma trilha; o que não
|
|
181
|
+
* usam é o cursor, que não têm.
|
|
182
|
+
*/
|
|
183
|
+
export declare function recordJobRun(tx: Tx, tenantId: string, def: JobDefinition, decision: JobDecision, outcome: {
|
|
184
|
+
status: 'completed' | 'blocked' | 'failed';
|
|
185
|
+
mutations: number;
|
|
186
|
+
cursorAdvanced: boolean;
|
|
187
|
+
}): Promise<JobRunRecord>;
|
|
188
|
+
/**
|
|
189
|
+
* Grava a trilha tolerando a ausência da própria tabela.
|
|
190
|
+
*
|
|
191
|
+
* O caso é específico e derrubaria produção: quando o bloqueio é `INCOMPATIBLE`
|
|
192
|
+
* porque o schema é anterior à 0055, **`job_run` também não existe** — as duas
|
|
193
|
+
* tabelas nascem na mesma migration. Um `recordJobRun` direto estouraria para
|
|
194
|
+
* cada tenant e o cron sairia com código 1, transformando um bloqueio correto
|
|
195
|
+
* e silencioso num alarme de infraestrutura.
|
|
196
|
+
*
|
|
197
|
+
* A trilha é observabilidade, não a garantia. A garantia é o handler não ser
|
|
198
|
+
* chamado, e ela já valeu antes desta linha. Quando a trilha não cabe no
|
|
199
|
+
* schema, o log carrega o motivo — e ele é o mesmo.
|
|
200
|
+
*
|
|
201
|
+
* Devolve `true` se gravou. Só engole falha de SCHEMA (`42P01`/`42703`): erro
|
|
202
|
+
* de permissão ou de restrição é defeito nosso e tem de subir.
|
|
203
|
+
*/
|
|
204
|
+
export declare function recordJobRunBestEffort(db: Db, tenantId: string, def: JobDefinition, decision: JobDecision, outcome: {
|
|
205
|
+
status: 'completed' | 'blocked' | 'failed';
|
|
206
|
+
mutations: number;
|
|
207
|
+
cursorAdvanced: boolean;
|
|
208
|
+
}): Promise<boolean>;
|
|
209
|
+
/**
|
|
210
|
+
* Os workers deste produto.
|
|
211
|
+
*
|
|
212
|
+
* Declarados aqui, e não junto de cada entrypoint, para que a lista seja
|
|
213
|
+
* enumerável — é ela que o inventário do gate confere contra o `render.yaml`.
|
|
214
|
+
*/
|
|
215
|
+
export declare const COLLECTION_CYCLE_JOB: JobDefinition;
|
|
216
|
+
export declare const SAAS_BILLING_JOB: JobDefinition;
|
|
217
|
+
/**
|
|
218
|
+
* O worker fiscal (Onda B · Fase 2).
|
|
219
|
+
*
|
|
220
|
+
* Exige DUAS capacidades, e a segunda é o ponto: `office.fiscal-ingestion.v1`
|
|
221
|
+
* (0056) descreve onde o documento cabe; `office.fiscal-sync-worker.v1` (0058)
|
|
222
|
+
* descreve o que o worker precisa para OPERAR — lease, política, disjuntor,
|
|
223
|
+
* fila humana, cobertura.
|
|
224
|
+
*
|
|
225
|
+
* Separá-las importa numa janela concreta: um banco que já tem a 0056 e ainda
|
|
226
|
+
* não tem a 0058 sabe guardar documento e NÃO sabe travar a vez. Um worker que
|
|
227
|
+
* exigisse só a primeira rodaria ali, sem exclusão mútua, e duas execuções
|
|
228
|
+
* simultâneas consultariam o mesmo CNPJ contra a Receita.
|
|
229
|
+
*/
|
|
230
|
+
export declare const FISCAL_SYNC_JOB: JobDefinition;
|
|
231
|
+
export declare const KNOWN_JOBS: readonly JobDefinition[];
|
|
232
|
+
//# sourceMappingURL=job-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-contract.d.ts","sourceRoot":"","sources":["../../src/platform/job-contract.ts"],"names":[],"mappings":"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"}
|