@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,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runFirstContact = runFirstContact;
|
|
4
|
+
const shared_1 = require("@baruk/shared");
|
|
5
|
+
const audit_js_1 = require("../../audit/audit.js");
|
|
6
|
+
const model_js_1 = require("../coverage/model.js");
|
|
7
|
+
const readiness_js_1 = require("../credentials/readiness.js");
|
|
8
|
+
const eligibility_js_1 = require("../eligibility.js");
|
|
9
|
+
const authorization_js_1 = require("./authorization.js");
|
|
10
|
+
const recusa = (reason, detail) => ({
|
|
11
|
+
status: 'refused',
|
|
12
|
+
reason,
|
|
13
|
+
detail,
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Executa o primeiro contato — ou recusa, dizendo exatamente por quê.
|
|
17
|
+
*
|
|
18
|
+
* A ordem dos portões é deliberada e vai do mais barato ao mais caro, com uma
|
|
19
|
+
* regra acima de tudo: **nada que toque credencial ou rede acontece antes de
|
|
20
|
+
* todos os portões de papel terem passado**. Um portão que fechasse depois de o
|
|
21
|
+
* cofre ter sido aberto já teria custado o que se queria evitar.
|
|
22
|
+
*/
|
|
23
|
+
async function runFirstContact(tx, input) {
|
|
24
|
+
const now = input.now ?? new Date();
|
|
25
|
+
// ═══ 1 · A autorização existe, e é DESTE escopo ═════════════════════════
|
|
26
|
+
const [auth] = await tx `
|
|
27
|
+
SELECT id, tenant_id, client_id, source, environment, competence_year, competence_month,
|
|
28
|
+
operation, first_contact, trigger_kind, credential_fingerprint,
|
|
29
|
+
expires_at, consumed_at, revoked_at
|
|
30
|
+
FROM fiscal_run_authorization
|
|
31
|
+
WHERE id = ${input.authorizationId}
|
|
32
|
+
`;
|
|
33
|
+
if (!auth)
|
|
34
|
+
return recusa('authorization_not_found', 'autorização inexistente');
|
|
35
|
+
// Cada binding é conferido em separado, e a recusa NOMEIA qual falhou. Um
|
|
36
|
+
// "não autorizado" genérico faria toda investigação começar do zero.
|
|
37
|
+
if (auth.tenant_id !== input.tenantId) {
|
|
38
|
+
return recusa('tenant_mismatch', 'autorização é de outra organização');
|
|
39
|
+
}
|
|
40
|
+
if (auth.client_id !== input.clientId) {
|
|
41
|
+
return recusa('client_mismatch', 'autorização é de outro cliente');
|
|
42
|
+
}
|
|
43
|
+
if (auth.source !== input.connector) {
|
|
44
|
+
return recusa('connector_mismatch', `autorização é do conector ${auth.source}`);
|
|
45
|
+
}
|
|
46
|
+
if (auth.competence_year !== input.competenceYear ||
|
|
47
|
+
auth.competence_month !== input.competenceMonth) {
|
|
48
|
+
return recusa('competence_mismatch', 'autorização é de outra competência');
|
|
49
|
+
}
|
|
50
|
+
if (!auth.first_contact) {
|
|
51
|
+
return recusa('authorization_not_first_contact', 'esta autorização não declara primeiro contato');
|
|
52
|
+
}
|
|
53
|
+
if (auth.trigger_kind !== 'manual') {
|
|
54
|
+
return recusa('authorization_scheduled_trigger', 'primeiro contato não aceita agendamento');
|
|
55
|
+
}
|
|
56
|
+
if (auth.revoked_at)
|
|
57
|
+
return recusa('authorization_revoked', 'autorização revogada');
|
|
58
|
+
if (auth.consumed_at)
|
|
59
|
+
return recusa('authorization_already_consumed', 'autorização já consumida');
|
|
60
|
+
if (auth.expires_at <= now)
|
|
61
|
+
return recusa('authorization_expired', 'autorização expirada');
|
|
62
|
+
// ═══ 2 · O escritório e o cliente disseram sim ══════════════════════════
|
|
63
|
+
//
|
|
64
|
+
// A elegibilidade é default-deny e cobre habilitação do tenant e matrícula do
|
|
65
|
+
// cliente. Ela é consultada AQUI, e não confiada à tela: a tela é uma
|
|
66
|
+
// conveniência, o portão é isto.
|
|
67
|
+
const eligibility = await (0, eligibility_js_1.evaluateFiscalEligibility)(tx, {
|
|
68
|
+
clientId: input.clientId,
|
|
69
|
+
documentType: documentTypeOf(input.connector),
|
|
70
|
+
environment: input.environment,
|
|
71
|
+
});
|
|
72
|
+
if (!eligibility.eligible) {
|
|
73
|
+
const razoes = new Set(eligibility.reasons);
|
|
74
|
+
if (razoes.has('client_not_enrolled')) {
|
|
75
|
+
return recusa('client_not_enrolled', 'cliente sem matrícula fiscal para este documento');
|
|
76
|
+
}
|
|
77
|
+
if (razoes.has('tenant_automation_disabled') || razoes.has('environment_mismatch')) {
|
|
78
|
+
return recusa('tenant_automation_disabled', 'organização sem automação fiscal habilitada');
|
|
79
|
+
}
|
|
80
|
+
// `credential_not_ready` é ESPERADO aqui — o primeiro contato existe
|
|
81
|
+
// justamente para o caso em que a credencial ainda não foi aceita. Só ele
|
|
82
|
+
// é tolerado; qualquer outro motivo continua fechando.
|
|
83
|
+
const outros = [...razoes].filter((r) => r !== 'credential_not_ready' && r !== 'real_operation_not_declared');
|
|
84
|
+
if (outros.length > 0) {
|
|
85
|
+
return recusa('client_not_enrolled', `inelegível: ${outros.join(', ')}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// ═══ 3 · O conector existe DE VERDADE ══════════════════════════════════
|
|
89
|
+
//
|
|
90
|
+
// Aqui mora a correção da leitura que a C2 encontrou: cobertura oficial é
|
|
91
|
+
// fato do mundo; adaptador implementado é fato do repositório. Autorizar
|
|
92
|
+
// contra um conector inexistente falharia adiante com um erro de sistema, e a
|
|
93
|
+
// tela culparia o certificado.
|
|
94
|
+
const coverage = await (0, model_js_1.coverageForClient)(tx, {
|
|
95
|
+
clientId: input.clientId,
|
|
96
|
+
documentType: documentTypeOf(input.connector),
|
|
97
|
+
});
|
|
98
|
+
if (!coverage.connectorImplemented) {
|
|
99
|
+
return recusa('connector_not_implemented', 'este conector ainda não existe no produto');
|
|
100
|
+
}
|
|
101
|
+
if (!coverage.protocolVerified) {
|
|
102
|
+
return recusa('protocol_not_verified', 'o contrato do provedor não foi conferido');
|
|
103
|
+
}
|
|
104
|
+
if (!input.realTransportEnabled) {
|
|
105
|
+
return recusa('real_transport_disabled', 'transporte real desabilitado para este conector');
|
|
106
|
+
}
|
|
107
|
+
// ═══ 4 · A credencial: local válida, e ainda não aceita ═════════════════
|
|
108
|
+
const credential = await (0, readiness_js_1.readFiscalCredentialReadiness)(tx, {
|
|
109
|
+
clientId: input.clientId,
|
|
110
|
+
environment: input.environment,
|
|
111
|
+
source: input.connector,
|
|
112
|
+
});
|
|
113
|
+
if (credential.state === 'READY') {
|
|
114
|
+
// Já aceita: não há primeiro contato a fazer, e insistir gastaria uma
|
|
115
|
+
// requisição autenticada para descobrir o que já se sabe.
|
|
116
|
+
return recusa('credential_already_verified', 'esta credencial já foi aceita pelo ambiente');
|
|
117
|
+
}
|
|
118
|
+
if (!credential.eligibleForFirstContact) {
|
|
119
|
+
return recusa('credential_not_local_valid', `credencial em estado ${credential.state}`);
|
|
120
|
+
}
|
|
121
|
+
// O material aprovado é o material que vai. Trocar o certificado depois de
|
|
122
|
+
// autorizar invalida a autorização — quem assinou aprovou UM arquivo.
|
|
123
|
+
if (auth.credential_fingerprint && auth.credential_fingerprint !== credential.fingerprint) {
|
|
124
|
+
return recusa('credential_fingerprint_mismatch', 'o certificado mudou depois desta autorização');
|
|
125
|
+
}
|
|
126
|
+
// ═══ 5 · A reivindicação — e o banco decide quem ganha ══════════════════
|
|
127
|
+
//
|
|
128
|
+
// O `UPDATE ... WHERE consumed_at IS NULL` de `consumeRunAuthorization` é o
|
|
129
|
+
// que torna a execução única sob concorrência. Dois processos chegando juntos
|
|
130
|
+
// aqui: um recebe a linha, o outro recebe `null`. Nenhum `if` em TypeScript
|
|
131
|
+
// consegue essa garantia.
|
|
132
|
+
const runId = (0, shared_1.uuidv7)();
|
|
133
|
+
const claimed = await (0, authorization_js_1.consumeRunAuthorization)(tx, {
|
|
134
|
+
authorizationId: input.authorizationId,
|
|
135
|
+
runId,
|
|
136
|
+
});
|
|
137
|
+
if (!claimed) {
|
|
138
|
+
return recusa('claim_lost', 'outra execução reivindicou esta autorização primeiro');
|
|
139
|
+
}
|
|
140
|
+
// ═══ 6 · Só agora se fala com o provedor ═══════════════════════════════
|
|
141
|
+
let probe;
|
|
142
|
+
try {
|
|
143
|
+
probe = await input.probe();
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Exceção do transporte não atravessa: a mensagem de um cliente HTTP cita a
|
|
147
|
+
// URL, e URL de provedor carrega credencial.
|
|
148
|
+
probe = { accepted: false, failureCode: 'transport' };
|
|
149
|
+
}
|
|
150
|
+
// O registro do desfecho.
|
|
151
|
+
//
|
|
152
|
+
// `CASE` em vez de montar SQL condicional: um fragmento interpolado no meio
|
|
153
|
+
// de um `SET` é o tipo de construção que funciona no teste e produz sintaxe
|
|
154
|
+
// inválida no primeiro campo a mais.
|
|
155
|
+
//
|
|
156
|
+
// E a tentativa é registrada nos DOIS desfechos — "tentou e o ambiente
|
|
157
|
+
// recusou" e "nunca tentou" pedem coisas opostas de quem opera, e sem esta
|
|
158
|
+
// coluna eram indistinguíveis.
|
|
159
|
+
const falha = probe.accepted ? null : (probe.failureCode ?? 'unknown');
|
|
160
|
+
await tx `
|
|
161
|
+
UPDATE digital_certificate
|
|
162
|
+
SET remote_verification_last_attempt_at = ${now},
|
|
163
|
+
last_verification_error = ${falha},
|
|
164
|
+
verified_at = CASE WHEN ${probe.accepted} THEN ${now} ELSE verified_at END,
|
|
165
|
+
verified_by = CASE WHEN ${probe.accepted} THEN ${input.actorId}::uuid ELSE verified_by END,
|
|
166
|
+
remote_verification_provider =
|
|
167
|
+
CASE WHEN ${probe.accepted} THEN ${input.connector} ELSE remote_verification_provider END,
|
|
168
|
+
updated_at = now()
|
|
169
|
+
WHERE client_id = ${input.clientId}
|
|
170
|
+
AND deleted_at IS NULL
|
|
171
|
+
AND local_validated_at IS NOT NULL
|
|
172
|
+
-- O certificado EXATO que foi aprovado. Sem isto, um cliente com dois
|
|
173
|
+
-- certificados teria os dois marcados por uma execução que usou um só.
|
|
174
|
+
AND (${credential.fingerprint}::text IS NULL OR fingerprint_sha256 = ${credential.fingerprint})
|
|
175
|
+
`;
|
|
176
|
+
await (0, audit_js_1.appendAudit)(tx, {
|
|
177
|
+
actorId: input.actorId,
|
|
178
|
+
action: probe.accepted ? 'fiscal_first_contact_accepted' : 'fiscal_first_contact_refused',
|
|
179
|
+
resourceType: 'fiscal_run_authorization',
|
|
180
|
+
resourceId: input.authorizationId,
|
|
181
|
+
metadata: {
|
|
182
|
+
runId,
|
|
183
|
+
connector: input.connector,
|
|
184
|
+
environment: input.environment,
|
|
185
|
+
competence: `${input.competenceYear}-${String(input.competenceMonth).padStart(2, '0')}`,
|
|
186
|
+
documentCount: probe.documentCount ?? 0,
|
|
187
|
+
// Classe, nunca mensagem. E nenhum conteúdo fiscal.
|
|
188
|
+
failureCode: probe.accepted ? null : (probe.failureCode ?? 'unknown'),
|
|
189
|
+
cursor: probe.cursor ?? null,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
return {
|
|
193
|
+
status: 'executed',
|
|
194
|
+
runId,
|
|
195
|
+
authorization: claimed,
|
|
196
|
+
remoteVerified: probe.accepted,
|
|
197
|
+
documentCount: probe.documentCount ?? 0,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/** O tipo de documento que um conector atende. */
|
|
201
|
+
function documentTypeOf(connector) {
|
|
202
|
+
return connector === 'nfse_adn' ? 'nfse' : 'nfe';
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=first-contact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first-contact.js","sourceRoot":"","sources":["../../../../src/fiscal/collection/first-contact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildCollectionPlan = buildCollectionPlan;
|
|
4
|
+
const model_js_1 = require("../coverage/model.js");
|
|
5
|
+
const readiness_js_1 = require("../credentials/readiness.js");
|
|
6
|
+
const eligibility_js_1 = require("../eligibility.js");
|
|
7
|
+
const competence_js_1 = require("./competence.js");
|
|
8
|
+
const authorization_js_1 = require("./authorization.js");
|
|
9
|
+
/**
|
|
10
|
+
* O conector de cada tipo de documento.
|
|
11
|
+
*
|
|
12
|
+
* Municipal e estadual são conectores SEPARADOS — foi o que o discovery desta
|
|
13
|
+
* fase confirmou, e é o que impede o erro de tratar "dar baixa nas notas" como
|
|
14
|
+
* uma coisa só. A NFS-e do município vem pelo ADN nacional (que é quem recebe o
|
|
15
|
+
* compartilhamento das prefeituras); a NF-e de entrada vem pela distribuição da
|
|
16
|
+
* SEFAZ. Mesmo certificado, protocolos distintos, cursores distintos.
|
|
17
|
+
*/
|
|
18
|
+
const CONNECTOR_BY_TYPE = {
|
|
19
|
+
nfse: 'nfse_adn',
|
|
20
|
+
nfe: 'sefaz_dfe',
|
|
21
|
+
cte: 'sefaz_dfe',
|
|
22
|
+
nfce: 'sefaz_dfe',
|
|
23
|
+
};
|
|
24
|
+
async function buildCollectionPlan(tx, input) {
|
|
25
|
+
const now = input.now ?? new Date();
|
|
26
|
+
const suggested = (0, competence_js_1.suggestCompetenceFor)(now);
|
|
27
|
+
const competence = input.competenceYear !== undefined && input.competenceMonth !== undefined
|
|
28
|
+
? (0, competence_js_1.competenceOf)(input.competenceYear, input.competenceMonth)
|
|
29
|
+
: suggested;
|
|
30
|
+
const types = input.documentTypes ?? ['nfse', 'nfe'];
|
|
31
|
+
const authorizations = await (0, authorization_js_1.listRunAuthorizations)(tx, input.clientId);
|
|
32
|
+
const entries = [];
|
|
33
|
+
for (const documentType of types) {
|
|
34
|
+
const connector = CONNECTOR_BY_TYPE[documentType];
|
|
35
|
+
const coverage = await (0, model_js_1.coverageForClient)(tx, { clientId: input.clientId, documentType });
|
|
36
|
+
const credential = await (0, readiness_js_1.readFiscalCredentialReadiness)(tx, {
|
|
37
|
+
clientId: input.clientId,
|
|
38
|
+
environment: input.environment,
|
|
39
|
+
source: connector,
|
|
40
|
+
});
|
|
41
|
+
const eligibility = await (0, eligibility_js_1.evaluateFiscalEligibility)(tx, {
|
|
42
|
+
clientId: input.clientId,
|
|
43
|
+
documentType,
|
|
44
|
+
environment: input.environment,
|
|
45
|
+
});
|
|
46
|
+
const blockers = [];
|
|
47
|
+
if (!coverage.jurisdictionKnown)
|
|
48
|
+
blockers.push('jurisdiction_unknown');
|
|
49
|
+
if (coverage.coverageStatus === 'UNKNOWN')
|
|
50
|
+
blockers.push('coverage_unknown');
|
|
51
|
+
if (coverage.coverageStatus === 'UNSUPPORTED')
|
|
52
|
+
blockers.push('coverage_unsupported');
|
|
53
|
+
// A cobertura diz que o CAMINHO existe. Que ele já tenha respondido a este
|
|
54
|
+
// produto é outra afirmação, e ela mora em `verified_at` — vazio aqui
|
|
55
|
+
// significa que o conector nunca foi exercido, e o plano tem de dizer isso
|
|
56
|
+
// em vez de mostrar "conectado" por causa de um certificado salvo.
|
|
57
|
+
if (coverage.officialApiAvailable !== 'yes')
|
|
58
|
+
blockers.push('connector_not_verified');
|
|
59
|
+
// Cada camada com o seu nome. Fundir as três num "não está pronto" foi o que
|
|
60
|
+
// mandou o operador procurar no certificado um defeito de implementação.
|
|
61
|
+
if (!coverage.connectorImplemented)
|
|
62
|
+
blockers.push('connector_not_implemented');
|
|
63
|
+
else if (!coverage.protocolVerified)
|
|
64
|
+
blockers.push('protocol_not_verified');
|
|
65
|
+
// A credencial válida SÓ localmente não é mais um bloqueio absoluto: ela é
|
|
66
|
+
// exatamente o estado que o primeiro contato existe para atravessar. O que
|
|
67
|
+
// continua bloqueando é o cron — e este plano descreve a prova controlada,
|
|
68
|
+
// que é manual por definição.
|
|
69
|
+
if (!credential.usableByWorker && !credential.eligibleForFirstContact) {
|
|
70
|
+
blockers.push('credential_not_ready');
|
|
71
|
+
}
|
|
72
|
+
const motivos = new Set(eligibility.reasons);
|
|
73
|
+
if (motivos.has('client_not_enrolled'))
|
|
74
|
+
blockers.push('client_not_enrolled');
|
|
75
|
+
if (motivos.has('tenant_automation_disabled') || motivos.has('environment_mismatch')) {
|
|
76
|
+
blockers.push('tenant_automation_disabled');
|
|
77
|
+
}
|
|
78
|
+
// `credential_not_ready` da elegibilidade é esperado enquanto o aceite
|
|
79
|
+
// remoto não existir, e já está representado acima com a distinção certa.
|
|
80
|
+
const outros = [...motivos].filter((r) => r !== 'client_not_enrolled' &&
|
|
81
|
+
r !== 'tenant_automation_disabled' &&
|
|
82
|
+
r !== 'environment_mismatch' &&
|
|
83
|
+
r !== 'credential_not_ready' &&
|
|
84
|
+
r !== 'real_operation_not_declared');
|
|
85
|
+
if (outros.length > 0)
|
|
86
|
+
blockers.push('not_eligible');
|
|
87
|
+
const live = authorizations.find((a) => a.state === 'live' &&
|
|
88
|
+
a.source === connector &&
|
|
89
|
+
a.environment === input.environment &&
|
|
90
|
+
a.competence.year === competence.year &&
|
|
91
|
+
a.competence.month === competence.month);
|
|
92
|
+
entries.push({
|
|
93
|
+
documentType,
|
|
94
|
+
connector,
|
|
95
|
+
jurisdictionScope: coverage.jurisdictionScope,
|
|
96
|
+
jurisdictionCode: coverage.jurisdictionCode,
|
|
97
|
+
coverage,
|
|
98
|
+
credentialState: credential.state,
|
|
99
|
+
credentialKind: credential.kind,
|
|
100
|
+
/** O material abre aqui? Independente de algum ambiente já tê-lo aceito. */
|
|
101
|
+
credentialLocalValid: credential.localValid,
|
|
102
|
+
/** Esta prova, se autorizada, seria o primeiro contato com o ambiente. */
|
|
103
|
+
firstContact: credential.eligibleForFirstContact,
|
|
104
|
+
connectorImplemented: coverage.connectorImplemented,
|
|
105
|
+
protocolVerified: coverage.protocolVerified,
|
|
106
|
+
operation: 'READ_ONLY',
|
|
107
|
+
executionMode: 'manual',
|
|
108
|
+
blockers,
|
|
109
|
+
readyForControlledTest: blockers.length === 0,
|
|
110
|
+
authorization: live ?? null,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
clientId: input.clientId,
|
|
115
|
+
competence,
|
|
116
|
+
suggestedCompetence: suggested,
|
|
117
|
+
environment: input.environment,
|
|
118
|
+
entries,
|
|
119
|
+
readyForControlledTest: entries.length > 0 && entries.every((e) => e.readyForControlledTest),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../../src/fiscal/collection/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Condições de aplicabilidade — uma AST declarativa, tipada e interpretada.
|
|
4
|
+
*
|
|
5
|
+
* ## Por que não uma linguagem
|
|
6
|
+
*
|
|
7
|
+
* A tentação é guardar uma expressão e avaliá-la. Nada aqui é avaliado: não há
|
|
8
|
+
* `eval`, nem `Function`, nem SQL montado, nem código do usuário. A condição é
|
|
9
|
+
* um objeto JSON com formato fechado, validado na escrita e percorrido por um
|
|
10
|
+
* `switch` na leitura. O pior que uma condição malformada consegue fazer é ser
|
|
11
|
+
* recusada.
|
|
12
|
+
*
|
|
13
|
+
* ## Por que não uma floresta de `if`
|
|
14
|
+
*
|
|
15
|
+
* A alternativa seria `requires_employees`, `requires_icms`, `requires_iss`…
|
|
16
|
+
* uma coluna e um `if` por pergunta fiscal. Não escala: cada UF e cada segmento
|
|
17
|
+
* acrescenta perguntas, e o motor vira uma cascata que ninguém consegue ler nem
|
|
18
|
+
* testar. Aqui o motor sabe avaliar **operadores**; o catálogo declara **fatos**.
|
|
19
|
+
*
|
|
20
|
+
* ## O terceiro valor
|
|
21
|
+
*
|
|
22
|
+
* A avaliação não devolve booleano. Devolve `true`, `false` ou **`unknown`** —
|
|
23
|
+
* e `unknown` é o ponto inteiro desta fase. Um cliente sobre o qual ninguém
|
|
24
|
+
* disse se tem empregados não é "sem empregados": é desconhecido, e a decisão
|
|
25
|
+
* segura é não gerar nem declarar isento. Colapsar `unknown` em `false` é
|
|
26
|
+
* exatamente o defeito que a auditoria nacional encontrou.
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.InvalidCondition = void 0;
|
|
30
|
+
exports.parseCondition = parseCondition;
|
|
31
|
+
exports.referencedAttributes = referencedAttributes;
|
|
32
|
+
exports.evaluate = evaluate;
|
|
33
|
+
exports.missingAttributes = missingAttributes;
|
|
34
|
+
const OPS = new Set(['always', 'eq', 'neq', 'in', 'not_in', 'exists', 'not_exists', 'and', 'or']);
|
|
35
|
+
class InvalidCondition extends Error {
|
|
36
|
+
constructor(message) {
|
|
37
|
+
super(message);
|
|
38
|
+
this.name = 'InvalidCondition';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.InvalidCondition = InvalidCondition;
|
|
42
|
+
/**
|
|
43
|
+
* Valida a forma ANTES de gravar.
|
|
44
|
+
*
|
|
45
|
+
* Uma condição malformada gravada é uma regra que ninguém consegue avaliar, e
|
|
46
|
+
* o motor descobriria isso na madrugada do vencimento. Recusar na escrita é
|
|
47
|
+
* mais barato que descobrir na geração.
|
|
48
|
+
*
|
|
49
|
+
* `maxDepth` existe porque uma AST profunda o bastante estoura a pilha na
|
|
50
|
+
* avaliação, e a escrita é onde isso pode ser recusado com uma mensagem.
|
|
51
|
+
*/
|
|
52
|
+
function parseCondition(raw, depth = 0) {
|
|
53
|
+
if (depth > 12)
|
|
54
|
+
throw new InvalidCondition('condição aninhada demais (limite 12)');
|
|
55
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
56
|
+
throw new InvalidCondition('condição precisa ser um objeto');
|
|
57
|
+
}
|
|
58
|
+
const o = raw;
|
|
59
|
+
const op = o['op'];
|
|
60
|
+
if (typeof op !== 'string' || !OPS.has(op)) {
|
|
61
|
+
throw new InvalidCondition(`operador desconhecido: ${String(op)}`);
|
|
62
|
+
}
|
|
63
|
+
const attr = () => {
|
|
64
|
+
const a = o['attribute'];
|
|
65
|
+
if (typeof a !== 'string' || a.length === 0) {
|
|
66
|
+
throw new InvalidCondition(`${op} exige "attribute"`);
|
|
67
|
+
}
|
|
68
|
+
return a;
|
|
69
|
+
};
|
|
70
|
+
const scalar = () => {
|
|
71
|
+
const v = o['value'];
|
|
72
|
+
if (typeof v !== 'string' && typeof v !== 'boolean') {
|
|
73
|
+
throw new InvalidCondition(`${op} exige "value" texto ou booleano`);
|
|
74
|
+
}
|
|
75
|
+
return v;
|
|
76
|
+
};
|
|
77
|
+
const list = () => {
|
|
78
|
+
const v = o['values'];
|
|
79
|
+
if (!Array.isArray(v) || v.length === 0) {
|
|
80
|
+
throw new InvalidCondition(`${op} exige "values" não vazio`);
|
|
81
|
+
}
|
|
82
|
+
return v.map((x) => {
|
|
83
|
+
if (typeof x !== 'string' && typeof x !== 'boolean') {
|
|
84
|
+
throw new InvalidCondition(`${op} aceita apenas texto ou booleano em "values"`);
|
|
85
|
+
}
|
|
86
|
+
return x;
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
const children = () => {
|
|
90
|
+
const v = o['of'];
|
|
91
|
+
if (!Array.isArray(v) || v.length === 0) {
|
|
92
|
+
throw new InvalidCondition(`${op} exige "of" não vazio`);
|
|
93
|
+
}
|
|
94
|
+
return v.map((c) => parseCondition(c, depth + 1));
|
|
95
|
+
};
|
|
96
|
+
switch (op) {
|
|
97
|
+
case 'always':
|
|
98
|
+
return { op: 'always' };
|
|
99
|
+
case 'eq':
|
|
100
|
+
return { op: 'eq', attribute: attr(), value: scalar() };
|
|
101
|
+
case 'neq':
|
|
102
|
+
return { op: 'neq', attribute: attr(), value: scalar() };
|
|
103
|
+
case 'in':
|
|
104
|
+
return { op: 'in', attribute: attr(), values: list() };
|
|
105
|
+
case 'not_in':
|
|
106
|
+
return { op: 'not_in', attribute: attr(), values: list() };
|
|
107
|
+
case 'exists':
|
|
108
|
+
return { op: 'exists', attribute: attr() };
|
|
109
|
+
case 'not_exists':
|
|
110
|
+
return { op: 'not_exists', attribute: attr() };
|
|
111
|
+
case 'and':
|
|
112
|
+
return { op: 'and', of: children() };
|
|
113
|
+
default:
|
|
114
|
+
return { op: 'or', of: children() };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Atributos citados pela condição — o motor usa para explicar o que faltou. */
|
|
118
|
+
function referencedAttributes(c, into = new Set()) {
|
|
119
|
+
switch (c.op) {
|
|
120
|
+
case 'always':
|
|
121
|
+
break;
|
|
122
|
+
case 'and':
|
|
123
|
+
case 'or':
|
|
124
|
+
for (const child of c.of)
|
|
125
|
+
referencedAttributes(child, into);
|
|
126
|
+
break;
|
|
127
|
+
default:
|
|
128
|
+
into.add(c.attribute);
|
|
129
|
+
}
|
|
130
|
+
return into;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Avalia em lógica ternária.
|
|
134
|
+
*
|
|
135
|
+
* As regras de `and` e `or` são as de Kleene, e a escolha importa:
|
|
136
|
+
*
|
|
137
|
+
* - `and` com um `false` é `false` mesmo havendo desconhecidos — não adianta
|
|
138
|
+
* saber o resto, a regra já não se aplica;
|
|
139
|
+
* - `or` com um `true` é `true` pelo mesmo motivo;
|
|
140
|
+
* - fora esses casos, qualquer desconhecido torna o todo desconhecido.
|
|
141
|
+
*
|
|
142
|
+
* Sem isso, uma regra "Simples E tem empregados" avaliada para um cliente do
|
|
143
|
+
* Lucro Real sem informação de folha devolveria `unknown` e viraria pendência
|
|
144
|
+
* na mesa de alguém — quando a resposta já era `false` pelo regime.
|
|
145
|
+
*/
|
|
146
|
+
function evaluate(condition, profile) {
|
|
147
|
+
switch (condition.op) {
|
|
148
|
+
case 'always':
|
|
149
|
+
return true;
|
|
150
|
+
case 'exists':
|
|
151
|
+
return profile[condition.attribute] !== undefined;
|
|
152
|
+
case 'not_exists':
|
|
153
|
+
return profile[condition.attribute] === undefined;
|
|
154
|
+
case 'eq':
|
|
155
|
+
case 'neq': {
|
|
156
|
+
const v = profile[condition.attribute];
|
|
157
|
+
if (v === undefined)
|
|
158
|
+
return 'unknown';
|
|
159
|
+
const igual = v === condition.value;
|
|
160
|
+
return condition.op === 'eq' ? igual : !igual;
|
|
161
|
+
}
|
|
162
|
+
case 'in':
|
|
163
|
+
case 'not_in': {
|
|
164
|
+
const v = profile[condition.attribute];
|
|
165
|
+
if (v === undefined)
|
|
166
|
+
return 'unknown';
|
|
167
|
+
const dentro = condition.values.includes(v);
|
|
168
|
+
return condition.op === 'in' ? dentro : !dentro;
|
|
169
|
+
}
|
|
170
|
+
case 'and': {
|
|
171
|
+
let desconhecido = false;
|
|
172
|
+
for (const c of condition.of) {
|
|
173
|
+
const r = evaluate(c, profile);
|
|
174
|
+
if (r === false)
|
|
175
|
+
return false;
|
|
176
|
+
if (r === 'unknown')
|
|
177
|
+
desconhecido = true;
|
|
178
|
+
}
|
|
179
|
+
return desconhecido ? 'unknown' : true;
|
|
180
|
+
}
|
|
181
|
+
default: {
|
|
182
|
+
let desconhecido = false;
|
|
183
|
+
for (const c of condition.of) {
|
|
184
|
+
const r = evaluate(c, profile);
|
|
185
|
+
if (r === true)
|
|
186
|
+
return true;
|
|
187
|
+
if (r === 'unknown')
|
|
188
|
+
desconhecido = true;
|
|
189
|
+
}
|
|
190
|
+
return desconhecido ? 'unknown' : false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/** Atributos citados que o perfil não conhece — a explicação do `unknown`. */
|
|
195
|
+
function missingAttributes(condition, profile) {
|
|
196
|
+
return [...referencedAttributes(condition)].filter((a) => profile[a] === undefined).sort();
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=conditions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../../src/fiscal/conditions.ts"],"names":[],"mappings":"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"}
|