@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,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ADN_RESPONSE_SHAPE_VERIFIED = exports.ADN_HOSTS = void 0;
|
|
4
|
+
exports.adnDfeUrl = adnDfeUrl;
|
|
5
|
+
exports.adnEventsUrl = adnEventsUrl;
|
|
6
|
+
exports.mapAdnStatus = mapAdnStatus;
|
|
7
|
+
exports.defaultAdnProfile = defaultAdnProfile;
|
|
8
|
+
exports.assertAdnTransportAllowed = assertAdnTransportAllowed;
|
|
9
|
+
exports.createAdnDfeTransport = createAdnDfeTransport;
|
|
10
|
+
const node_url_1 = require("node:url");
|
|
11
|
+
const types_js_1 = require("../transport/types.js");
|
|
12
|
+
const https_js_1 = require("../transport/https.js");
|
|
13
|
+
const nfse_adn_contract_js_1 = require("../contracts/nfse-adn-contract.js");
|
|
14
|
+
const nfse_adn_envelope_js_1 = require("../contracts/nfse-adn-envelope.js");
|
|
15
|
+
const nfse_adn_endpoint_js_1 = require("../contracts/nfse-adn-endpoint.js");
|
|
16
|
+
const provider_js_1 = require("./provider.js");
|
|
17
|
+
/**
|
|
18
|
+
* O transporte do ADN — pronto até onde a documentação oficial chega, e parado
|
|
19
|
+
* exatamente onde ela para.
|
|
20
|
+
*
|
|
21
|
+
* ## O que está PROVADO aqui, e o que está apenas PREPARADO
|
|
22
|
+
*
|
|
23
|
+
* **Provado**: a resolução e a AUTORIZAÇÃO do destino (allowlist), a forma da
|
|
24
|
+
* requisição, o encadeamento de NSU, a montagem do TLS mútuo, os tetos de
|
|
25
|
+
* tamanho e de descompressão, e o mapeamento de erro. Tudo isso é exercitado
|
|
26
|
+
* contra o servidor TLS sintético em toda execução da suíte.
|
|
27
|
+
*
|
|
28
|
+
* **Preparado, não provado**: os nomes dos campos do envelope e o status HTTP de
|
|
29
|
+
* cada desfecho. Não por falta de procura: as dezesseis URLs de Swagger que o
|
|
30
|
+
* gov.br publica para o ADN — oito módulos × dois ambientes — não devolvem UM
|
|
31
|
+
* byte de HTTP sem certificado ICP-Brasil de cliente (medido em 2026-09-08). O
|
|
32
|
+
* host que documenta a API é o mesmo que exige a credencial para documentá-la.
|
|
33
|
+
*
|
|
34
|
+
* Por isso o perfil oficial tem `verified: false`, e por isso este transporte
|
|
35
|
+
* recusa `homologation` E `production` — não apenas produção, como na fase
|
|
36
|
+
* anterior. Produção restrita é servidor do governo tanto quanto produção; um
|
|
37
|
+
* parser suposto contra ela devolveria zero documentos com sucesso aparente do
|
|
38
|
+
* mesmo jeito, e o cursor avançaria sobre lotes vazios até a fiscalização.
|
|
39
|
+
*
|
|
40
|
+
* ## Dois portões independentes, e é de propósito
|
|
41
|
+
*
|
|
42
|
+
* 1. `ADN_ENVELOPE_UNVERIFIED` — não sabemos ler a resposta.
|
|
43
|
+
* 2. `ADN_REAL_TRANSPORT_DISABLED` — ninguém autorizou falar.
|
|
44
|
+
*
|
|
45
|
+
* Nenhum implica o outro. No dia em que alguém conferir o envelope, o portão 1
|
|
46
|
+
* abre e o 2 continua fechado — porque ver a resposta uma vez não é o mesmo que
|
|
47
|
+
* autorizar o produto a sincronizar carteira de cliente sozinho.
|
|
48
|
+
*/
|
|
49
|
+
/** @deprecated Use `NFSE_ADN_HOSTS`. Mantido para não quebrar quem já importa. */
|
|
50
|
+
exports.ADN_HOSTS = nfse_adn_contract_js_1.NFSE_ADN_HOSTS;
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated Use `NFSE_ADN_ENVELOPE_SHAPE_VERIFIED` (envelope) ou
|
|
53
|
+
* `NFSE_ADN_PAYLOAD_SHAPE_VERIFIED` (conteúdo).
|
|
54
|
+
*
|
|
55
|
+
* A constante única confundia duas perguntas: sabemos ler o XML da NFS-e (sim,
|
|
56
|
+
* contra o XSD oficial v1.01) e sabemos ler o envelope que o embrulha (não).
|
|
57
|
+
* Um leitor concluía do `false` que também não sabíamos ler o documento.
|
|
58
|
+
*/
|
|
59
|
+
exports.ADN_RESPONSE_SHAPE_VERIFIED = nfse_adn_contract_js_1.NFSE_ADN_ENVELOPE_SHAPE_VERIFIED;
|
|
60
|
+
/**
|
|
61
|
+
* Resolve a URL de um lote.
|
|
62
|
+
*
|
|
63
|
+
* `GET /DFe/{NSU}` — o NSU é a posição de onde continuar. `0` é o começo
|
|
64
|
+
* disponível, e é o que se envia quando não há cursor: não existe "sem
|
|
65
|
+
* parâmetro" nesta API.
|
|
66
|
+
*
|
|
67
|
+
* Cursor ilegível LANÇA, e não volta para `0` em silêncio como fazia antes.
|
|
68
|
+
* Voltar para `0` contra o ambiente nacional refaz a varredura inteira do
|
|
69
|
+
* cliente — que é consumo, e consumo excessivo é o `cStat 656`, cujo bloqueio
|
|
70
|
+
* recai sobre o CNPJ do CLIENTE. Um cursor corrompido é defeito para
|
|
71
|
+
* investigar, não condição para recomeçar.
|
|
72
|
+
*/
|
|
73
|
+
function adnDfeUrl(baseUrl, fromNsu) {
|
|
74
|
+
if (fromNsu !== null && !/^\d{1,20}$/.test(fromNsu)) {
|
|
75
|
+
throw new provider_js_1.FiscalProviderError('invalid', 'cursor NSU ilegível', 'NSU_CURSOR_INVALID');
|
|
76
|
+
}
|
|
77
|
+
return `${baseUrl.replace(/\/+$/, '')}/DFe/${fromNsu ?? '0'}`;
|
|
78
|
+
}
|
|
79
|
+
/** `GET /NFSe/{ChaveAcesso}/Eventos` — os eventos de um documento específico. */
|
|
80
|
+
function adnEventsUrl(baseUrl, accessKey) {
|
|
81
|
+
if (!/^[A-Za-z0-9]{1,60}$/.test(accessKey)) {
|
|
82
|
+
// Chave com caractere fora do alfabeto seria injeção de caminho. Recusar
|
|
83
|
+
// aqui é mais barato do que confiar em quem monta a chamada.
|
|
84
|
+
throw new types_js_1.FiscalTransportError('protocol', 'ACCESS_KEY_INVALID');
|
|
85
|
+
}
|
|
86
|
+
return `${baseUrl.replace(/\/+$/, '')}/NFSe/${accessKey}/Eventos`;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Status HTTP → erro do provedor, com a espera que o servidor pediu.
|
|
90
|
+
*
|
|
91
|
+
* A tradução mora aqui porque ela é do PROTOCOLO: `429` com `Retry-After` é o
|
|
92
|
+
* servidor dizendo quando voltar, e o motor de retentativa consome essa data em
|
|
93
|
+
* vez de estimar uma.
|
|
94
|
+
*
|
|
95
|
+
* ## O `404` deixou de significar "lote vazio"
|
|
96
|
+
*
|
|
97
|
+
* Ele era mapeado para "não há documento neste NSU" por analogia com o
|
|
98
|
+
* `cStat 137` da NF-e. A analogia não se sustenta: o ADN publica um MECANISMO
|
|
99
|
+
* PRÓPRIO para dizer isso — os códigos `E2215` e `E2230` do ANEXO_IV — e não
|
|
100
|
+
* publica status HTTP nenhum. Traduzir um status suposto em lote vazio é
|
|
101
|
+
* exatamente a fabricação de sucesso que esta fase existe para eliminar.
|
|
102
|
+
*
|
|
103
|
+
* Agora o `404` devolve `null` para que o CORPO seja lido: se ele trouxer o
|
|
104
|
+
* código oficial, o leitor de envelope o reconhece como "sem documentos"; se não
|
|
105
|
+
* trouxer, o leitor recusa. A decisão passa a sair do que o ADN diz, e não do
|
|
106
|
+
* que supomos que o status dele significa.
|
|
107
|
+
*/
|
|
108
|
+
function mapAdnStatus(status, headers, now = new Date()) {
|
|
109
|
+
if (status >= 200 && status < 300)
|
|
110
|
+
return null;
|
|
111
|
+
const retryAfter = (0, types_js_1.parseRetryAfter)(headers['retry-after'], now);
|
|
112
|
+
if (status === 401) {
|
|
113
|
+
return new provider_js_1.FiscalProviderError('auth', 'ADN recusou a credencial', 'HTTP_401', retryAfter);
|
|
114
|
+
}
|
|
115
|
+
if (status === 403) {
|
|
116
|
+
return new provider_js_1.FiscalProviderError('not_allowed', 'contribuinte sem direito a este documento', 'HTTP_403', retryAfter);
|
|
117
|
+
}
|
|
118
|
+
if (status === 404)
|
|
119
|
+
return null;
|
|
120
|
+
if (status === 429) {
|
|
121
|
+
return new provider_js_1.FiscalProviderError('throttled', 'consumo excedido', 'HTTP_429', retryAfter);
|
|
122
|
+
}
|
|
123
|
+
if (status >= 500) {
|
|
124
|
+
return new provider_js_1.FiscalProviderError('transient', 'ADN indisponível', `HTTP_${status}`, retryAfter);
|
|
125
|
+
}
|
|
126
|
+
return new provider_js_1.FiscalProviderError('invalid', 'resposta recusada', `HTTP_${status}`, retryAfter);
|
|
127
|
+
}
|
|
128
|
+
/** O perfil que um ambiente usa quando o chamador não escolhe. */
|
|
129
|
+
function defaultAdnProfile(environment) {
|
|
130
|
+
return environment === 'synthetic'
|
|
131
|
+
? nfse_adn_contract_js_1.ADN_SYNTHETIC_ENVELOPE_PROFILE
|
|
132
|
+
: nfse_adn_contract_js_1.ADN_OFFICIAL_ENVELOPE_PROFILE;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Os portões do transporte real, em ordem, e o motivo de cada um.
|
|
136
|
+
*
|
|
137
|
+
* Exportada porque a tela precisa dizer POR QUE não sincroniza — e porque um
|
|
138
|
+
* portão que só existe dentro de uma função não é conferível por teste sem
|
|
139
|
+
* construir o transporte inteiro.
|
|
140
|
+
*/
|
|
141
|
+
function assertAdnTransportAllowed(environment, profile) {
|
|
142
|
+
// 0 · O perfil serve a este ambiente? Impede que o perfil sintético — que é
|
|
143
|
+
// `verified: true` porque descreve o NOSSO servidor de mentira — vire
|
|
144
|
+
// atalho para abrir produção.
|
|
145
|
+
if (!profile.environments.includes(environment)) {
|
|
146
|
+
throw new provider_js_1.FiscalProviderError('not_allowed', `perfil ${profile.id} não atende ao ambiente ${environment}`, 'ENVELOPE_PROFILE_ENVIRONMENT_MISMATCH');
|
|
147
|
+
}
|
|
148
|
+
if (environment === 'synthetic')
|
|
149
|
+
return;
|
|
150
|
+
// 1 · Sabemos ler a resposta?
|
|
151
|
+
if (!profile.verified) {
|
|
152
|
+
throw new provider_js_1.FiscalProviderError('not_allowed', 'o envelope de resposta do ADN não foi conferido contra o serviço real; ' +
|
|
153
|
+
'os ambientes oficiais permanecem fechados até que seja', 'ADN_ENVELOPE_UNVERIFIED');
|
|
154
|
+
}
|
|
155
|
+
// 2 · Alguém autorizou falar? Independente do anterior, e é o ponto: conferir
|
|
156
|
+
// o envelope não autoriza sincronizar carteira de cliente sozinho.
|
|
157
|
+
if (!nfse_adn_contract_js_1.ADN_REAL_TRANSPORT_ENABLED) {
|
|
158
|
+
throw new provider_js_1.FiscalProviderError('not_allowed', 'transporte real do ADN não habilitado nesta versão', 'ADN_REAL_TRANSPORT_DISABLED');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/** O transporte do ADN, pronto para receber uma credencial real — e travado. */
|
|
162
|
+
function createAdnDfeTransport(options) {
|
|
163
|
+
const profile = options.profile ?? defaultAdnProfile(options.environment);
|
|
164
|
+
assertAdnTransportAllowed(options.environment, profile);
|
|
165
|
+
// A allowlist vem DEPOIS dos portões e ANTES de qualquer socket: um destino
|
|
166
|
+
// recusado nunca chega a ter agente de TLS montado com o material do cliente.
|
|
167
|
+
const host = (0, nfse_adn_endpoint_js_1.resolveAdnBaseUrl)(options.environment, options.baseUrl);
|
|
168
|
+
const timeoutMs = options.timeoutMs ?? nfse_adn_contract_js_1.NFSE_ADN_LIMITS.requestTimeoutMs.value;
|
|
169
|
+
const transport = options.transport ??
|
|
170
|
+
new https_js_1.HttpsFiscalTransport({
|
|
171
|
+
tls: options.tls,
|
|
172
|
+
maxResponseBytes: nfse_adn_contract_js_1.NFSE_ADN_LIMITS.maxResponseBytes.value,
|
|
173
|
+
...(options.baseUrl ? {} : { servername: new node_url_1.URL(host).hostname }),
|
|
174
|
+
});
|
|
175
|
+
return {
|
|
176
|
+
contractVersion: profile.contractVersion,
|
|
177
|
+
profileId: profile.id,
|
|
178
|
+
async fetchDfe(input) {
|
|
179
|
+
if (input.environment !== options.environment) {
|
|
180
|
+
// Sem fallback entre ambientes, nos dois sentidos. Um transporte montado
|
|
181
|
+
// para homologação não atende um pedido de produção nem por engano de
|
|
182
|
+
// fiação — e é assim que material de ensaio NÃO entra em carteira real.
|
|
183
|
+
throw new provider_js_1.FiscalProviderError('not_allowed', `transporte de "${options.environment}" recusa pedido de "${input.environment}"`, 'ENVIRONMENT_MISMATCH');
|
|
184
|
+
}
|
|
185
|
+
let res;
|
|
186
|
+
try {
|
|
187
|
+
res = await transport.send({
|
|
188
|
+
method: 'GET',
|
|
189
|
+
url: adnDfeUrl(host, input.fromNsu),
|
|
190
|
+
headers: {
|
|
191
|
+
accept: 'application/json',
|
|
192
|
+
// O ADN identifica o contribuinte pelo CERTIFICADO, não por
|
|
193
|
+
// cabeçalho. Este só existe para a trilha do provedor.
|
|
194
|
+
'x-consulta-cnpj': input.actorDocument,
|
|
195
|
+
},
|
|
196
|
+
timeoutMs,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
if (err instanceof types_js_1.FiscalTransportError) {
|
|
201
|
+
// Falha de transporte vira falha de provedor com a classe equivalente:
|
|
202
|
+
// quem consome o adapter fala o vocabulário fiscal.
|
|
203
|
+
const cls = err.errorClass === 'certificate'
|
|
204
|
+
? 'auth'
|
|
205
|
+
: err.errorClass === 'tls'
|
|
206
|
+
? 'transient'
|
|
207
|
+
: err.errorClass === 'protocol'
|
|
208
|
+
? 'invalid'
|
|
209
|
+
: 'transient';
|
|
210
|
+
throw new provider_js_1.FiscalProviderError(cls, `transporte ${err.errorClass}`, err.code, err.retryAfter);
|
|
211
|
+
}
|
|
212
|
+
throw err;
|
|
213
|
+
}
|
|
214
|
+
const erro = mapAdnStatus(res.status, res.headers);
|
|
215
|
+
if (erro)
|
|
216
|
+
throw erro;
|
|
217
|
+
// Um lote maior que o pedido não é generosidade do servidor: é sinal de
|
|
218
|
+
// que não estamos falando com quem pensamos. O teto efetivo é o menor
|
|
219
|
+
// entre o oficial e o que o motor pediu.
|
|
220
|
+
const teto = Math.min(input.batchLimit, nfse_adn_contract_js_1.NFSE_ADN_LIMITS.maxDocumentsPerBatch.value);
|
|
221
|
+
return (0, nfse_adn_envelope_js_1.readAdnEnvelope)(res.body, {
|
|
222
|
+
profile,
|
|
223
|
+
fromNsu: input.fromNsu,
|
|
224
|
+
maxDocumentsPerBatch: teto,
|
|
225
|
+
});
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=adn-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adn-transport.js","sourceRoot":"","sources":["../../../../src/fiscal/ingestion/adn-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeFiscalDocumentNumber = normalizeFiscalDocumentNumber;
|
|
4
|
+
exports.classifyFiscalDirection = classifyFiscalDirection;
|
|
5
|
+
/** Só os dígitos. `11.222.333/0001-81` e `11222333000181` são o mesmo ator. */
|
|
6
|
+
function normalizeFiscalDocumentNumber(v) {
|
|
7
|
+
if (!v)
|
|
8
|
+
return null;
|
|
9
|
+
const digits = v.replace(/\D/g, '');
|
|
10
|
+
return digits.length > 0 ? digits : null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Classifica a direção confrontando o ator com os participantes.
|
|
14
|
+
*
|
|
15
|
+
* A ordem das comparações é a do leiaute, e importa num caso real: uma nota em
|
|
16
|
+
* que o mesmo CNPJ é emitente e tomador (serviço prestado a si) é `issued` —
|
|
17
|
+
* quem emitiu foi ele, e é a emissão que gera a obrigação.
|
|
18
|
+
*/
|
|
19
|
+
function classifyFiscalDirection(p) {
|
|
20
|
+
const actor = normalizeFiscalDocumentNumber(p.actorDocument);
|
|
21
|
+
// Sem ator não há confronto possível. Devolver `issued` aqui seria repetir o
|
|
22
|
+
// defeito com outro nome.
|
|
23
|
+
if (!actor)
|
|
24
|
+
return { direction: 'unknown', basis: 'actor_absent' };
|
|
25
|
+
if (actor === normalizeFiscalDocumentNumber(p.issuerDocument)) {
|
|
26
|
+
return { direction: 'issued', basis: 'actor_is_issuer' };
|
|
27
|
+
}
|
|
28
|
+
if (actor === normalizeFiscalDocumentNumber(p.recipientDocument)) {
|
|
29
|
+
return { direction: 'received', basis: 'actor_is_recipient' };
|
|
30
|
+
}
|
|
31
|
+
if (actor === normalizeFiscalDocumentNumber(p.intermediaryDocument)) {
|
|
32
|
+
return { direction: 'intermediary', basis: 'actor_is_intermediary' };
|
|
33
|
+
}
|
|
34
|
+
return { direction: 'unknown', basis: 'no_participant_matched' };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=direction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direction.js","sourceRoot":"","sources":["../../../../src/fiscal/ingestion/direction.ts"],"names":[],"mappings":";;AA2DA,sEAIC;AASD,0DAgBC;AA9BD,+EAA+E;AAC/E,SAAgB,6BAA6B,CAAC,CAA4B;IACxE,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,uBAAuB,CAAC,CAAwB;IAC9D,MAAM,KAAK,GAAG,6BAA6B,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAC7D,6EAA6E;IAC7E,0BAA0B;IAC1B,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAEnE,IAAI,KAAK,KAAK,6BAA6B,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,KAAK,6BAA6B,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,KAAK,6BAA6B,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACpE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NFSE_ACCESS_KEY_PATTERN = exports.AdnCredentialGateError = void 0;
|
|
4
|
+
exports.createNfseAdnAdapter = createNfseAdnAdapter;
|
|
5
|
+
exports.parseNfseDocument = parseNfseDocument;
|
|
6
|
+
const provider_js_1 = require("./provider.js");
|
|
7
|
+
const nfse_adn_contract_js_1 = require("../contracts/nfse-adn-contract.js");
|
|
8
|
+
const xml_reader_js_1 = require("./xml-reader.js");
|
|
9
|
+
/**
|
|
10
|
+
* Erro do portão humano.
|
|
11
|
+
*
|
|
12
|
+
* Classe `auth` de propósito: não é falha transitória e retentar não resolve.
|
|
13
|
+
* O que falta é uma pessoa habilitar um certificado — e o produto tem de dizer
|
|
14
|
+
* isso, não "tente de novo mais tarde".
|
|
15
|
+
*/
|
|
16
|
+
class AdnCredentialGateError extends provider_js_1.FiscalProviderError {
|
|
17
|
+
constructor() {
|
|
18
|
+
super('auth', 'ADN exige TLS mútuo com certificado ICP-Brasil do contribuinte; ' +
|
|
19
|
+
'nenhum transporte credenciado está configurado', 'MTLS_CERTIFICATE_REQUIRED');
|
|
20
|
+
this.name = 'AdnCredentialGateError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.AdnCredentialGateError = AdnCredentialGateError;
|
|
24
|
+
function createNfseAdnAdapter(options = {}) {
|
|
25
|
+
const transport = options.transport ?? null;
|
|
26
|
+
// O transporte do ADN declara `contractVersion`; um transporte sintético de
|
|
27
|
+
// teste não declara. A leitura estrutural cobre os dois sem obrigar todo
|
|
28
|
+
// implementador de `AdnTransport` a inventar um rótulo de contrato externo.
|
|
29
|
+
const declarada = transport?.contractVersion;
|
|
30
|
+
const contractVersion = options.contractVersion ?? (typeof declarada === 'string' ? declarada : null);
|
|
31
|
+
return {
|
|
32
|
+
source: options.source ?? 'nfse_adn',
|
|
33
|
+
contractVersion,
|
|
34
|
+
documentTypes: ['nfse'],
|
|
35
|
+
// Sem transporte, o adapter não declara ambiente algum: um adapter que não
|
|
36
|
+
// sabe falar não deve passar no portão de ambiente do pipeline.
|
|
37
|
+
environments: options.environments ?? (transport ? ['homologation', 'production'] : []),
|
|
38
|
+
// Os dois números são OFICIAIS, e a Fase 3 corrigiu a atribuição deles.
|
|
39
|
+
//
|
|
40
|
+
// A escrita anterior dizia que o manual do ADN "não fixa tamanho de lote" e
|
|
41
|
+
// que a NFS-e "não publica a regra de uma hora que a NF-e publica" — e que
|
|
42
|
+
// adotávamos ambos por simetria com a NT 2014.002. Estava errado nos dois
|
|
43
|
+
// casos. O Manual dos Municípios do ADN §1.4.2.b publica os dois:
|
|
44
|
+
// "Quantidade máxima de documentos no lote: 50" e a espera mínima de uma
|
|
45
|
+
// hora "caso receba a indicação que não existem mais documentos".
|
|
46
|
+
//
|
|
47
|
+
// A diferença não é acadêmica: um valor "adotado por simetria" é o primeiro
|
|
48
|
+
// que alguém afrouxa quando quer sincronizar mais rápido. Um valor de norma
|
|
49
|
+
// não é negociável, e o custo de violá-lo é o CNPJ do CLIENTE bloqueado.
|
|
50
|
+
batchLimit: nfse_adn_contract_js_1.NFSE_ADN_LIMITS.maxDocumentsPerBatch.value,
|
|
51
|
+
exhaustedBackoffSeconds: nfse_adn_contract_js_1.NFSE_ADN_LIMITS.exhaustedWaitSeconds.value,
|
|
52
|
+
async fetchBatch(request) {
|
|
53
|
+
if (!transport)
|
|
54
|
+
throw new AdnCredentialGateError();
|
|
55
|
+
return transport.fetchDfe({
|
|
56
|
+
actorDocument: request.actorDocument,
|
|
57
|
+
fromNsu: request.fromNsu,
|
|
58
|
+
batchLimit: request.batchLimit,
|
|
59
|
+
environment: request.environment,
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
parse: parseNfseDocument,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** Regra de formação da chave, do próprio XSD: 53 posições, prefixo `NFS`. */
|
|
66
|
+
exports.NFSE_ACCESS_KEY_PATTERN = /^NFS\d{50}$/;
|
|
67
|
+
function parseNfseDocument(doc) {
|
|
68
|
+
const xml = (0, xml_reader_js_1.decodeFiscalXml)(doc.raw);
|
|
69
|
+
const root = (0, xml_reader_js_1.rootElementName)(xml);
|
|
70
|
+
if (root === 'evento' || root === 'procEventoNFSe')
|
|
71
|
+
return parseNfseEvent(xml, doc);
|
|
72
|
+
if (root !== 'NFSe') {
|
|
73
|
+
throw new provider_js_1.FiscalProviderError('invalid', `raiz inesperada: ${root ?? 'ausente'}`);
|
|
74
|
+
}
|
|
75
|
+
const inf = (0, xml_reader_js_1.readElement)(xml, 'infNFSe');
|
|
76
|
+
if (!inf)
|
|
77
|
+
throw new provider_js_1.FiscalProviderError('invalid', 'infNFSe ausente');
|
|
78
|
+
const accessKey = (0, xml_reader_js_1.readAttribute)(xml, 'infNFSe', 'Id');
|
|
79
|
+
if (!accessKey || !exports.NFSE_ACCESS_KEY_PATTERN.test(accessKey)) {
|
|
80
|
+
// A chave é a identidade do documento. Sem ela não há deduplicação
|
|
81
|
+
// confiável, e deduplicar por hash de XML assinado falharia no primeiro
|
|
82
|
+
// reenvio com assinatura recalculada.
|
|
83
|
+
throw new provider_js_1.FiscalProviderError('invalid', 'Id da NFS-e ausente ou fora do formato de 53 posições');
|
|
84
|
+
}
|
|
85
|
+
const emit = (0, xml_reader_js_1.readElement)(inf, 'emit') ?? '';
|
|
86
|
+
const issuerDocument = (0, xml_reader_js_1.readText)(emit, 'CNPJ') ?? (0, xml_reader_js_1.readText)(emit, 'CPF');
|
|
87
|
+
const issuerName = (0, xml_reader_js_1.readText)(emit, 'xNome');
|
|
88
|
+
// O tomador vive no DPS (Declaração de Prestação de Serviço) embutido.
|
|
89
|
+
const dps = (0, xml_reader_js_1.readElement)(inf, 'DPS') ?? (0, xml_reader_js_1.readElement)(inf, 'infDPS') ?? '';
|
|
90
|
+
const toma = (0, xml_reader_js_1.readElement)(dps, 'toma') ?? '';
|
|
91
|
+
const recipientDocument = (0, xml_reader_js_1.readText)(toma, 'CNPJ') ?? (0, xml_reader_js_1.readText)(toma, 'CPF');
|
|
92
|
+
const recipientName = (0, xml_reader_js_1.readText)(toma, 'xNome');
|
|
93
|
+
// O terceiro papel. O ADN distribui ao contribuinte os documentos em que ele
|
|
94
|
+
// figura como emitente, tomador OU intermediário — e sem ler `interm` a
|
|
95
|
+
// ingestão não teria como distinguir o terceiro caso do "não é nenhum deles".
|
|
96
|
+
const interm = (0, xml_reader_js_1.readElement)(dps, 'interm') ?? '';
|
|
97
|
+
const intermediaryDocument = (0, xml_reader_js_1.readText)(interm, 'CNPJ') ?? (0, xml_reader_js_1.readText)(interm, 'CPF');
|
|
98
|
+
const intermediaryName = (0, xml_reader_js_1.readText)(interm, 'xNome');
|
|
99
|
+
const dhProc = (0, xml_reader_js_1.readText)(inf, 'dhProc');
|
|
100
|
+
const issuedAt = dhProc ? safeDate(dhProc) : null;
|
|
101
|
+
const valores = (0, xml_reader_js_1.readElement)(inf, 'valores') ?? '';
|
|
102
|
+
const grossAmount = (0, xml_reader_js_1.readText)(valores, 'vServPrest') ?? (0, xml_reader_js_1.readText)(valores, 'vLiq') ?? null;
|
|
103
|
+
return {
|
|
104
|
+
dedupeKey: `nfse:${accessKey}`,
|
|
105
|
+
documentType: 'nfse',
|
|
106
|
+
// Não há `direction` aqui, e o tipo já não permite: o parser não conhece o
|
|
107
|
+
// ator consultado, então qualquer valor que escrevesse seria chute. Ele
|
|
108
|
+
// devolve os PARTICIPANTES; quem confronta é o motor.
|
|
109
|
+
//
|
|
110
|
+
// O ADN entrega o documento completo, não resumo — não há manifestação do
|
|
111
|
+
// destinatário na NFS-e como há na NF-e.
|
|
112
|
+
contentKind: 'full',
|
|
113
|
+
accessKey,
|
|
114
|
+
documentNumber: (0, xml_reader_js_1.readText)(inf, 'nNFSe'),
|
|
115
|
+
series: null,
|
|
116
|
+
issuerDocument,
|
|
117
|
+
issuerName,
|
|
118
|
+
recipientDocument,
|
|
119
|
+
recipientName,
|
|
120
|
+
intermediaryDocument,
|
|
121
|
+
intermediaryName,
|
|
122
|
+
issuedAt,
|
|
123
|
+
competenceLabel: issuedAt ? competenceOf(issuedAt) : null,
|
|
124
|
+
grossAmount,
|
|
125
|
+
normalized: {
|
|
126
|
+
layoutVersion: (0, xml_reader_js_1.readAttribute)(xml, 'NFSe', 'versao'),
|
|
127
|
+
cLocIncid: (0, xml_reader_js_1.readText)(inf, 'cLocIncid'),
|
|
128
|
+
xLocEmi: (0, xml_reader_js_1.readText)(inf, 'xLocEmi'),
|
|
129
|
+
xLocPrestacao: (0, xml_reader_js_1.readText)(inf, 'xLocPrestacao'),
|
|
130
|
+
cStat: (0, xml_reader_js_1.readText)(inf, 'cStat'),
|
|
131
|
+
ambGer: (0, xml_reader_js_1.readText)(inf, 'ambGer'),
|
|
132
|
+
// Reforma tributária: o bloco existe no leiaute v1.01. Guardado como veio,
|
|
133
|
+
// sem interpretação — esta fase captura, não apura.
|
|
134
|
+
hasIbsCbs: (0, xml_reader_js_1.readElement)(inf, 'IBSCBS') !== null,
|
|
135
|
+
},
|
|
136
|
+
event: null,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function parseNfseEvent(xml, _doc) {
|
|
140
|
+
const inf = (0, xml_reader_js_1.readElement)(xml, 'infEvento') ?? xml;
|
|
141
|
+
const targetAccessKey = (0, xml_reader_js_1.readText)(inf, 'chNFSe');
|
|
142
|
+
if (!targetAccessKey) {
|
|
143
|
+
throw new provider_js_1.FiscalProviderError('invalid', 'evento sem chave de NFS-e (chNFSe)');
|
|
144
|
+
}
|
|
145
|
+
const code = (0, xml_reader_js_1.readText)(inf, 'tpEvento');
|
|
146
|
+
const occurredAt = safeDate((0, xml_reader_js_1.readText)(inf, 'dhEvento') ?? '');
|
|
147
|
+
const sequence = (0, xml_reader_js_1.readText)(inf, 'nSeqEvento');
|
|
148
|
+
return {
|
|
149
|
+
// O par (chave, tipo, sequência) identifica o evento. Sem `nSeqEvento` o
|
|
150
|
+
// mesmo tipo só pode ocorrer uma vez, que é o comportamento do leiaute.
|
|
151
|
+
dedupeKey: `nfse-evento:${targetAccessKey}:${code ?? 'sem-tipo'}:${sequence ?? '1'}`,
|
|
152
|
+
documentType: 'nfse',
|
|
153
|
+
// Evento não tem direção própria: ele HERDA a do documento que altera. Um
|
|
154
|
+
// cancelamento sobre uma nota recebida é um evento de nota recebida, e
|
|
155
|
+
// classificá-lo como `issued` — que era o que o campo fixo fazia — inverte
|
|
156
|
+
// o sinal do fato no fechamento.
|
|
157
|
+
contentKind: 'full',
|
|
158
|
+
accessKey: targetAccessKey,
|
|
159
|
+
normalized: { tpEvento: code, nSeqEvento: sequence },
|
|
160
|
+
event: {
|
|
161
|
+
type: eventTypeOf(code),
|
|
162
|
+
code,
|
|
163
|
+
occurredAt,
|
|
164
|
+
sequence,
|
|
165
|
+
targetAccessKey,
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Códigos de evento da NFS-e Nacional, do XSD oficial.
|
|
171
|
+
*
|
|
172
|
+
* Extraídos de `tiposEventos_v1.01.xsd` (`nfse-esquemas_xsd-v1-01-20260209.zip`),
|
|
173
|
+
* onde cada evento é um elemento `e<codigo>` com a descrição na enumeração do
|
|
174
|
+
* seu tipo. São dezesseis, e a lista é fechada pelo leiaute.
|
|
175
|
+
*
|
|
176
|
+
* A primeira versão disto adivinhava por prefixo (`1010*` = cancelamento) e
|
|
177
|
+
* ESTAVA ERRADA: `101101` é cancelamento e não casa com `1010`, enquanto
|
|
178
|
+
* `105102` — que é cancelamento por substituição — casaria com um prefixo
|
|
179
|
+
* `1051` inventado. Adivinhar a semântica de um código fiscal por prefixo é
|
|
180
|
+
* exatamente como uma nota cancelada passaria despercebida, ou uma nota viva
|
|
181
|
+
* seria marcada como cancelada. O mapa é explícito porque a fonte é explícita.
|
|
182
|
+
*/
|
|
183
|
+
const NFSE_EVENT_CODES = {
|
|
184
|
+
'101101': 'cancellation', // Cancelamento de NFS-e
|
|
185
|
+
'105102': 'replacement', // Cancelamento de NFS-e por Substituição
|
|
186
|
+
'101103': 'correction', // Solicitação de Análise Fiscal para Cancelamento
|
|
187
|
+
'105104': 'cancellation', // Cancelamento Deferido por Análise Fiscal
|
|
188
|
+
'105105': 'correction', // Cancelamento INDEFERIDO — a nota segue válida
|
|
189
|
+
'305101': 'cancellation', // Cancelamento por Ofício
|
|
190
|
+
'305102': 'correction', // Bloqueio por Ofício
|
|
191
|
+
'305103': 'correction', // Desbloqueio por Ofício
|
|
192
|
+
'202201': 'manifestation',
|
|
193
|
+
'203202': 'manifestation',
|
|
194
|
+
'204203': 'manifestation',
|
|
195
|
+
'205204': 'manifestation',
|
|
196
|
+
'202205': 'manifestation',
|
|
197
|
+
'203206': 'manifestation',
|
|
198
|
+
'204207': 'manifestation',
|
|
199
|
+
'205208': 'manifestation',
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* Tipo de evento a partir do código oficial.
|
|
203
|
+
*
|
|
204
|
+
* Desconhecido vira `other`, e NUNCA cancelamento. Errar para `other` preserva
|
|
205
|
+
* a nota; errar para `cancellation` a marca como cancelada — um cancelamento
|
|
206
|
+
* inventado é pior que um evento não classificado, porque o primeiro some do
|
|
207
|
+
* fechamento e o segundo só fica sem rótulo.
|
|
208
|
+
*
|
|
209
|
+
* `105105` é o caso que mostra por que o mapa não pode ser por prefixo: é o
|
|
210
|
+
* cancelamento **indeferido**, isto é, a nota CONTINUA válida. Um prefixo
|
|
211
|
+
* `1051` a cancelaria.
|
|
212
|
+
*/
|
|
213
|
+
function eventTypeOf(code) {
|
|
214
|
+
if (!code)
|
|
215
|
+
return 'other';
|
|
216
|
+
return NFSE_EVENT_CODES[code] ?? 'other';
|
|
217
|
+
}
|
|
218
|
+
function safeDate(v) {
|
|
219
|
+
if (!v)
|
|
220
|
+
return null;
|
|
221
|
+
const d = new Date(v);
|
|
222
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
223
|
+
}
|
|
224
|
+
/** `YYYY-MM` em UTC. A competência CONTÁBIL pode ser outra, e é decidida depois. */
|
|
225
|
+
function competenceOf(d) {
|
|
226
|
+
return `${d.getUTCFullYear()}-${String(d.getUTCMonth() + 1).padStart(2, '0')}`;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=nfse-adn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nfse-adn.js","sourceRoot":"","sources":["../../../../src/fiscal/ingestion/nfse-adn.ts"],"names":[],"mappings":"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"}
|