@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,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Condições de aplicabilidade — uma AST declarativa, tipada e interpretada.
|
|
3
|
+
*
|
|
4
|
+
* ## Por que não uma linguagem
|
|
5
|
+
*
|
|
6
|
+
* A tentação é guardar uma expressão e avaliá-la. Nada aqui é avaliado: não há
|
|
7
|
+
* `eval`, nem `Function`, nem SQL montado, nem código do usuário. A condição é
|
|
8
|
+
* um objeto JSON com formato fechado, validado na escrita e percorrido por um
|
|
9
|
+
* `switch` na leitura. O pior que uma condição malformada consegue fazer é ser
|
|
10
|
+
* recusada.
|
|
11
|
+
*
|
|
12
|
+
* ## Por que não uma floresta de `if`
|
|
13
|
+
*
|
|
14
|
+
* A alternativa seria `requires_employees`, `requires_icms`, `requires_iss`…
|
|
15
|
+
* uma coluna e um `if` por pergunta fiscal. Não escala: cada UF e cada segmento
|
|
16
|
+
* acrescenta perguntas, e o motor vira uma cascata que ninguém consegue ler nem
|
|
17
|
+
* testar. Aqui o motor sabe avaliar **operadores**; o catálogo declara **fatos**.
|
|
18
|
+
*
|
|
19
|
+
* ## O terceiro valor
|
|
20
|
+
*
|
|
21
|
+
* A avaliação não devolve booleano. Devolve `true`, `false` ou **`unknown`** —
|
|
22
|
+
* e `unknown` é o ponto inteiro desta fase. Um cliente sobre o qual ninguém
|
|
23
|
+
* disse se tem empregados não é "sem empregados": é desconhecido, e a decisão
|
|
24
|
+
* segura é não gerar nem declarar isento. Colapsar `unknown` em `false` é
|
|
25
|
+
* exatamente o defeito que a auditoria nacional encontrou.
|
|
26
|
+
*/
|
|
27
|
+
/** Lógica ternária de Kleene. `unknown` contamina, e é para isso que existe. */
|
|
28
|
+
export type Truth = true | false | 'unknown';
|
|
29
|
+
export type Condition =
|
|
30
|
+
/** Sempre aplicável — o padrão de uma regra sem restrição declarada. */
|
|
31
|
+
{
|
|
32
|
+
op: 'always';
|
|
33
|
+
} | {
|
|
34
|
+
op: 'eq';
|
|
35
|
+
attribute: string;
|
|
36
|
+
value: string | boolean;
|
|
37
|
+
} | {
|
|
38
|
+
op: 'neq';
|
|
39
|
+
attribute: string;
|
|
40
|
+
value: string | boolean;
|
|
41
|
+
} | {
|
|
42
|
+
op: 'in';
|
|
43
|
+
attribute: string;
|
|
44
|
+
values: readonly (string | boolean)[];
|
|
45
|
+
} | {
|
|
46
|
+
op: 'not_in';
|
|
47
|
+
attribute: string;
|
|
48
|
+
values: readonly (string | boolean)[];
|
|
49
|
+
}
|
|
50
|
+
/** O atributo tem valor conhecido, qualquer que seja. */
|
|
51
|
+
| {
|
|
52
|
+
op: 'exists';
|
|
53
|
+
attribute: string;
|
|
54
|
+
} | {
|
|
55
|
+
op: 'not_exists';
|
|
56
|
+
attribute: string;
|
|
57
|
+
} | {
|
|
58
|
+
op: 'and';
|
|
59
|
+
of: readonly Condition[];
|
|
60
|
+
} | {
|
|
61
|
+
op: 'or';
|
|
62
|
+
of: readonly Condition[];
|
|
63
|
+
};
|
|
64
|
+
/** O perfil como o motor o enxerga: nome do atributo → valor conhecido. */
|
|
65
|
+
export type FiscalProfile = Readonly<Record<string, string | boolean>>;
|
|
66
|
+
export declare class InvalidCondition extends Error {
|
|
67
|
+
constructor(message: string);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Valida a forma ANTES de gravar.
|
|
71
|
+
*
|
|
72
|
+
* Uma condição malformada gravada é uma regra que ninguém consegue avaliar, e
|
|
73
|
+
* o motor descobriria isso na madrugada do vencimento. Recusar na escrita é
|
|
74
|
+
* mais barato que descobrir na geração.
|
|
75
|
+
*
|
|
76
|
+
* `maxDepth` existe porque uma AST profunda o bastante estoura a pilha na
|
|
77
|
+
* avaliação, e a escrita é onde isso pode ser recusado com uma mensagem.
|
|
78
|
+
*/
|
|
79
|
+
export declare function parseCondition(raw: unknown, depth?: number): Condition;
|
|
80
|
+
/** Atributos citados pela condição — o motor usa para explicar o que faltou. */
|
|
81
|
+
export declare function referencedAttributes(c: Condition, into?: Set<string>): Set<string>;
|
|
82
|
+
/**
|
|
83
|
+
* Avalia em lógica ternária.
|
|
84
|
+
*
|
|
85
|
+
* As regras de `and` e `or` são as de Kleene, e a escolha importa:
|
|
86
|
+
*
|
|
87
|
+
* - `and` com um `false` é `false` mesmo havendo desconhecidos — não adianta
|
|
88
|
+
* saber o resto, a regra já não se aplica;
|
|
89
|
+
* - `or` com um `true` é `true` pelo mesmo motivo;
|
|
90
|
+
* - fora esses casos, qualquer desconhecido torna o todo desconhecido.
|
|
91
|
+
*
|
|
92
|
+
* Sem isso, uma regra "Simples E tem empregados" avaliada para um cliente do
|
|
93
|
+
* Lucro Real sem informação de folha devolveria `unknown` e viraria pendência
|
|
94
|
+
* na mesa de alguém — quando a resposta já era `false` pelo regime.
|
|
95
|
+
*/
|
|
96
|
+
export declare function evaluate(condition: Condition, profile: FiscalProfile): Truth;
|
|
97
|
+
/** Atributos citados que o perfil não conhece — a explicação do `unknown`. */
|
|
98
|
+
export declare function missingAttributes(condition: Condition, profile: FiscalProfile): string[];
|
|
99
|
+
//# sourceMappingURL=conditions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../src/fiscal/conditions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,gFAAgF;AAChF,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;AAE7C,MAAM,MAAM,SAAS;AACnB,wEAAwE;AACtE;IAAE,EAAE,EAAE,QAAQ,CAAA;CAAE,GAChB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GACxD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GACzD;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAA;CAAE,GACtE;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAA;CAAE;AAC5E,yDAAyD;GACvD;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,EAAE,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,GACvC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,CAAC;AAE3C,2EAA2E;AAC3E,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;AAIvE,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,SAAS,CAiEjE;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,cAAoB,GAAG,GAAG,CAAC,MAAM,CAAC,CAYxF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK,CA+C5E;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,EAAE,CAExF"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Condições de aplicabilidade — uma AST declarativa, tipada e interpretada.
|
|
3
|
+
*
|
|
4
|
+
* ## Por que não uma linguagem
|
|
5
|
+
*
|
|
6
|
+
* A tentação é guardar uma expressão e avaliá-la. Nada aqui é avaliado: não há
|
|
7
|
+
* `eval`, nem `Function`, nem SQL montado, nem código do usuário. A condição é
|
|
8
|
+
* um objeto JSON com formato fechado, validado na escrita e percorrido por um
|
|
9
|
+
* `switch` na leitura. O pior que uma condição malformada consegue fazer é ser
|
|
10
|
+
* recusada.
|
|
11
|
+
*
|
|
12
|
+
* ## Por que não uma floresta de `if`
|
|
13
|
+
*
|
|
14
|
+
* A alternativa seria `requires_employees`, `requires_icms`, `requires_iss`…
|
|
15
|
+
* uma coluna e um `if` por pergunta fiscal. Não escala: cada UF e cada segmento
|
|
16
|
+
* acrescenta perguntas, e o motor vira uma cascata que ninguém consegue ler nem
|
|
17
|
+
* testar. Aqui o motor sabe avaliar **operadores**; o catálogo declara **fatos**.
|
|
18
|
+
*
|
|
19
|
+
* ## O terceiro valor
|
|
20
|
+
*
|
|
21
|
+
* A avaliação não devolve booleano. Devolve `true`, `false` ou **`unknown`** —
|
|
22
|
+
* e `unknown` é o ponto inteiro desta fase. Um cliente sobre o qual ninguém
|
|
23
|
+
* disse se tem empregados não é "sem empregados": é desconhecido, e a decisão
|
|
24
|
+
* segura é não gerar nem declarar isento. Colapsar `unknown` em `false` é
|
|
25
|
+
* exatamente o defeito que a auditoria nacional encontrou.
|
|
26
|
+
*/
|
|
27
|
+
const OPS = new Set(['always', 'eq', 'neq', 'in', 'not_in', 'exists', 'not_exists', 'and', 'or']);
|
|
28
|
+
export class InvalidCondition extends Error {
|
|
29
|
+
constructor(message) {
|
|
30
|
+
super(message);
|
|
31
|
+
this.name = 'InvalidCondition';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Valida a forma ANTES de gravar.
|
|
36
|
+
*
|
|
37
|
+
* Uma condição malformada gravada é uma regra que ninguém consegue avaliar, e
|
|
38
|
+
* o motor descobriria isso na madrugada do vencimento. Recusar na escrita é
|
|
39
|
+
* mais barato que descobrir na geração.
|
|
40
|
+
*
|
|
41
|
+
* `maxDepth` existe porque uma AST profunda o bastante estoura a pilha na
|
|
42
|
+
* avaliação, e a escrita é onde isso pode ser recusado com uma mensagem.
|
|
43
|
+
*/
|
|
44
|
+
export function parseCondition(raw, depth = 0) {
|
|
45
|
+
if (depth > 12)
|
|
46
|
+
throw new InvalidCondition('condição aninhada demais (limite 12)');
|
|
47
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
48
|
+
throw new InvalidCondition('condição precisa ser um objeto');
|
|
49
|
+
}
|
|
50
|
+
const o = raw;
|
|
51
|
+
const op = o['op'];
|
|
52
|
+
if (typeof op !== 'string' || !OPS.has(op)) {
|
|
53
|
+
throw new InvalidCondition(`operador desconhecido: ${String(op)}`);
|
|
54
|
+
}
|
|
55
|
+
const attr = () => {
|
|
56
|
+
const a = o['attribute'];
|
|
57
|
+
if (typeof a !== 'string' || a.length === 0) {
|
|
58
|
+
throw new InvalidCondition(`${op} exige "attribute"`);
|
|
59
|
+
}
|
|
60
|
+
return a;
|
|
61
|
+
};
|
|
62
|
+
const scalar = () => {
|
|
63
|
+
const v = o['value'];
|
|
64
|
+
if (typeof v !== 'string' && typeof v !== 'boolean') {
|
|
65
|
+
throw new InvalidCondition(`${op} exige "value" texto ou booleano`);
|
|
66
|
+
}
|
|
67
|
+
return v;
|
|
68
|
+
};
|
|
69
|
+
const list = () => {
|
|
70
|
+
const v = o['values'];
|
|
71
|
+
if (!Array.isArray(v) || v.length === 0) {
|
|
72
|
+
throw new InvalidCondition(`${op} exige "values" não vazio`);
|
|
73
|
+
}
|
|
74
|
+
return v.map((x) => {
|
|
75
|
+
if (typeof x !== 'string' && typeof x !== 'boolean') {
|
|
76
|
+
throw new InvalidCondition(`${op} aceita apenas texto ou booleano em "values"`);
|
|
77
|
+
}
|
|
78
|
+
return x;
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
const children = () => {
|
|
82
|
+
const v = o['of'];
|
|
83
|
+
if (!Array.isArray(v) || v.length === 0) {
|
|
84
|
+
throw new InvalidCondition(`${op} exige "of" não vazio`);
|
|
85
|
+
}
|
|
86
|
+
return v.map((c) => parseCondition(c, depth + 1));
|
|
87
|
+
};
|
|
88
|
+
switch (op) {
|
|
89
|
+
case 'always':
|
|
90
|
+
return { op: 'always' };
|
|
91
|
+
case 'eq':
|
|
92
|
+
return { op: 'eq', attribute: attr(), value: scalar() };
|
|
93
|
+
case 'neq':
|
|
94
|
+
return { op: 'neq', attribute: attr(), value: scalar() };
|
|
95
|
+
case 'in':
|
|
96
|
+
return { op: 'in', attribute: attr(), values: list() };
|
|
97
|
+
case 'not_in':
|
|
98
|
+
return { op: 'not_in', attribute: attr(), values: list() };
|
|
99
|
+
case 'exists':
|
|
100
|
+
return { op: 'exists', attribute: attr() };
|
|
101
|
+
case 'not_exists':
|
|
102
|
+
return { op: 'not_exists', attribute: attr() };
|
|
103
|
+
case 'and':
|
|
104
|
+
return { op: 'and', of: children() };
|
|
105
|
+
default:
|
|
106
|
+
return { op: 'or', of: children() };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** Atributos citados pela condição — o motor usa para explicar o que faltou. */
|
|
110
|
+
export function referencedAttributes(c, into = new Set()) {
|
|
111
|
+
switch (c.op) {
|
|
112
|
+
case 'always':
|
|
113
|
+
break;
|
|
114
|
+
case 'and':
|
|
115
|
+
case 'or':
|
|
116
|
+
for (const child of c.of)
|
|
117
|
+
referencedAttributes(child, into);
|
|
118
|
+
break;
|
|
119
|
+
default:
|
|
120
|
+
into.add(c.attribute);
|
|
121
|
+
}
|
|
122
|
+
return into;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Avalia em lógica ternária.
|
|
126
|
+
*
|
|
127
|
+
* As regras de `and` e `or` são as de Kleene, e a escolha importa:
|
|
128
|
+
*
|
|
129
|
+
* - `and` com um `false` é `false` mesmo havendo desconhecidos — não adianta
|
|
130
|
+
* saber o resto, a regra já não se aplica;
|
|
131
|
+
* - `or` com um `true` é `true` pelo mesmo motivo;
|
|
132
|
+
* - fora esses casos, qualquer desconhecido torna o todo desconhecido.
|
|
133
|
+
*
|
|
134
|
+
* Sem isso, uma regra "Simples E tem empregados" avaliada para um cliente do
|
|
135
|
+
* Lucro Real sem informação de folha devolveria `unknown` e viraria pendência
|
|
136
|
+
* na mesa de alguém — quando a resposta já era `false` pelo regime.
|
|
137
|
+
*/
|
|
138
|
+
export function evaluate(condition, profile) {
|
|
139
|
+
switch (condition.op) {
|
|
140
|
+
case 'always':
|
|
141
|
+
return true;
|
|
142
|
+
case 'exists':
|
|
143
|
+
return profile[condition.attribute] !== undefined;
|
|
144
|
+
case 'not_exists':
|
|
145
|
+
return profile[condition.attribute] === undefined;
|
|
146
|
+
case 'eq':
|
|
147
|
+
case 'neq': {
|
|
148
|
+
const v = profile[condition.attribute];
|
|
149
|
+
if (v === undefined)
|
|
150
|
+
return 'unknown';
|
|
151
|
+
const igual = v === condition.value;
|
|
152
|
+
return condition.op === 'eq' ? igual : !igual;
|
|
153
|
+
}
|
|
154
|
+
case 'in':
|
|
155
|
+
case 'not_in': {
|
|
156
|
+
const v = profile[condition.attribute];
|
|
157
|
+
if (v === undefined)
|
|
158
|
+
return 'unknown';
|
|
159
|
+
const dentro = condition.values.includes(v);
|
|
160
|
+
return condition.op === 'in' ? dentro : !dentro;
|
|
161
|
+
}
|
|
162
|
+
case 'and': {
|
|
163
|
+
let desconhecido = false;
|
|
164
|
+
for (const c of condition.of) {
|
|
165
|
+
const r = evaluate(c, profile);
|
|
166
|
+
if (r === false)
|
|
167
|
+
return false;
|
|
168
|
+
if (r === 'unknown')
|
|
169
|
+
desconhecido = true;
|
|
170
|
+
}
|
|
171
|
+
return desconhecido ? 'unknown' : true;
|
|
172
|
+
}
|
|
173
|
+
default: {
|
|
174
|
+
let desconhecido = false;
|
|
175
|
+
for (const c of condition.of) {
|
|
176
|
+
const r = evaluate(c, profile);
|
|
177
|
+
if (r === true)
|
|
178
|
+
return true;
|
|
179
|
+
if (r === 'unknown')
|
|
180
|
+
desconhecido = true;
|
|
181
|
+
}
|
|
182
|
+
return desconhecido ? 'unknown' : false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/** Atributos citados que o perfil não conhece — a explicação do `unknown`. */
|
|
187
|
+
export function missingAttributes(condition, profile) {
|
|
188
|
+
return [...referencedAttributes(condition)].filter((a) => profile[a] === undefined).sort();
|
|
189
|
+
}
|
|
190
|
+
//# 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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"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O contrato oficial da NFS-e Nacional — ADN — como artefato versionado.
|
|
3
|
+
*
|
|
4
|
+
* ## Por que um módulo, e não comentários espalhados
|
|
5
|
+
*
|
|
6
|
+
* Até a Fase 2 o que sabíamos do ADN estava disperso em comentários de
|
|
7
|
+
* `nfse-adn.ts` e `adn-transport.ts`, misturado com o que apenas SUPÚNHAMOS. Um
|
|
8
|
+
* leitor não tinha como separar "o manual diz" de "assumimos por simetria com a
|
|
9
|
+
* NF-e" — e a segunda categoria é exatamente a que produz um parser que devolve
|
|
10
|
+
* lote vazio com sucesso aparente.
|
|
11
|
+
*
|
|
12
|
+
* Aqui cada afirmação carrega a fonte que a sustenta e, quando não há fonte, diz
|
|
13
|
+
* que não há. `evidence: 'official'` significa que existe um documento oficial
|
|
14
|
+
* publicado, com versão, data e sha256 registrados abaixo; `evidence:
|
|
15
|
+
* 'unverified'` significa que a afirmação é a melhor leitura disponível e NÃO
|
|
16
|
+
* foi conferida contra o serviço.
|
|
17
|
+
*
|
|
18
|
+
* A distinção não é documental: ela é executável. Um perfil de envelope com
|
|
19
|
+
* `verified: false` fecha o transporte real (`adn-transport.ts`), e é por isso
|
|
20
|
+
* que a Fase 3 termina com o motor pronto e parado em vez de pronto e chutando.
|
|
21
|
+
*
|
|
22
|
+
* ## O que foi medido nesta onda, e como
|
|
23
|
+
*
|
|
24
|
+
* Todo host do ADN — `adn.nfse.gov.br` e `adn.producaorestrita.nfse.gov.br` —
|
|
25
|
+
* exige TLS mútuo com certificado ICP-Brasil para TODOS os seus módulos,
|
|
26
|
+
* documentação inclusive. Medido em 2026-09-08 percorrendo as dezesseis URLs de
|
|
27
|
+
* Swagger publicadas em gov.br (oito módulos × dois ambientes): o handshake
|
|
28
|
+
* completa, o servidor envia `CertificateRequest` — 170 CAs aceitas em produção
|
|
29
|
+
* restrita, 5 em produção — e então encerra a conexão sem UM byte de HTTP.
|
|
30
|
+
* Não há caminho público para ler o envelope de resposta.
|
|
31
|
+
*
|
|
32
|
+
* Por isso o envelope permanece `unverified`, e por isso a Fase 3 não é a
|
|
33
|
+
* primeira conexão real: é a transformação do que ESTÁ publicado num contrato
|
|
34
|
+
* executável que se recusa a adivinhar o que não está.
|
|
35
|
+
*/
|
|
36
|
+
import type { FiscalProviderErrorClass } from '../ingestion/provider.js';
|
|
37
|
+
/**
|
|
38
|
+
* A versão do contrato que este código implementa.
|
|
39
|
+
*
|
|
40
|
+
* Vai gravada em `fiscal_sync_run.contract_version`. O motivo é operacional e
|
|
41
|
+
* concreto: quando o governo alterar o leiaute — e ele já alterou duas vezes
|
|
42
|
+
* entre dez/2025 e fev/2026 —, a pergunta "qual parser processou este lote?"
|
|
43
|
+
* precisa ter resposta no dado, não na arqueologia do `git log`.
|
|
44
|
+
*/
|
|
45
|
+
export declare const NFSE_ADN_CONTRACT_VERSION: "nfse-adn:v1";
|
|
46
|
+
/** Uma afirmação do contrato tem, ou não tem, documento oficial por trás. */
|
|
47
|
+
export type ContractEvidence = 'official' | 'unverified';
|
|
48
|
+
export interface OfficialSource {
|
|
49
|
+
readonly id: string;
|
|
50
|
+
readonly title: string;
|
|
51
|
+
readonly url: string;
|
|
52
|
+
/** Versão declarada PELO documento. `null` quando ele não declara uma. */
|
|
53
|
+
readonly version: string | null;
|
|
54
|
+
/** Data declarada pelo documento ou pelo portal, em ISO. */
|
|
55
|
+
readonly publishedAt: string | null;
|
|
56
|
+
/** sha256 do arquivo baixado em `retrievedAt`. É o detector de troca silenciosa. */
|
|
57
|
+
readonly sha256: string;
|
|
58
|
+
readonly retrievedAt: string;
|
|
59
|
+
readonly scope: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* As fontes primárias. Somente gov.br / Portal Nacional NFS-e.
|
|
63
|
+
*
|
|
64
|
+
* Blog, fórum, artigo de fornecedor e repositório de terceiro ficaram de fora
|
|
65
|
+
* por decisão de fase, e não por desdém: nenhum deles é responsável pelo
|
|
66
|
+
* protocolo, e um deles CONTRADIZ o manual quanto ao papel do certificado.
|
|
67
|
+
* Pista serve para saber onde procurar; certificação, não.
|
|
68
|
+
*/
|
|
69
|
+
export declare const NFSE_ADN_OFFICIAL_SOURCES: readonly OfficialSource[];
|
|
70
|
+
/**
|
|
71
|
+
* ═══ A distinção que a Fase 3 existe para tornar precisa ═══════════════════
|
|
72
|
+
*
|
|
73
|
+
* `payloadShapeVerified` — o CONTEÚDO (o XML da NFS-e e do evento). Conferido
|
|
74
|
+
* contra o XSD oficial v1.01, cujo hash está acima. É `true`.
|
|
75
|
+
*
|
|
76
|
+
* `envelopeShapeVerified` — o ENVELOPE de transporte que embrulha esse conteúdo
|
|
77
|
+
* na resposta HTTP do ADN. NÃO existe em nenhum artefato alcançável sem
|
|
78
|
+
* certificado ICP-Brasil: o Swagger é servido pelo próprio host que exige TLS
|
|
79
|
+
* mútuo. É `false`.
|
|
80
|
+
*
|
|
81
|
+
* Uma constante só para os dois esconderia justamente a diferença que importa.
|
|
82
|
+
* O antigo `ADN_RESPONSE_SHAPE_VERIFIED` era essa constante única, e ela dizia
|
|
83
|
+
* `false` por causa do envelope — deixando o leitor concluir que também não
|
|
84
|
+
* sabíamos ler o documento, o que era falso e desnecessariamente pessimista.
|
|
85
|
+
*/
|
|
86
|
+
export declare const NFSE_ADN_PAYLOAD_SHAPE_VERIFIED = true;
|
|
87
|
+
export declare const NFSE_ADN_ENVELOPE_SHAPE_VERIFIED = false;
|
|
88
|
+
/**
|
|
89
|
+
* mTLS é exigência do PROTOCOLO neste endpoint — medido e documentado.
|
|
90
|
+
*
|
|
91
|
+
* Duas evidências independentes, e nenhuma delas é dedução:
|
|
92
|
+
*
|
|
93
|
+
* 1. O manual do contribuinte (v1.0, §1.1) fala do "CNPJ do certificado
|
|
94
|
+
* utilizado para ESTABELECER A CONEXÃO" e valida o CNPJ Raiz entre o
|
|
95
|
+
* parâmetro informado e esse certificado. Certificado que estabelece a
|
|
96
|
+
* conexão é certificado de cliente em TLS.
|
|
97
|
+
* 2. As dezesseis URLs oficiais de Swagger do ADN, nos dois ambientes, não
|
|
98
|
+
* devolvem um byte de HTTP sem certificado de cliente (medido 2026-09-08).
|
|
99
|
+
*
|
|
100
|
+
* O escopo desta afirmação é o HOST do ADN, e para nada além dele. A NFS-e
|
|
101
|
+
* nacional tem outros serviços — emissão pela Sefin, sistemas municipais
|
|
102
|
+
* próprios, Emissor Público Web com login gov.br — e generalizar um endpoint
|
|
103
|
+
* para todo o ecossistema seria o mesmo erro de método que a Fase 1 cometeu ao
|
|
104
|
+
* adivinhar código de evento por prefixo.
|
|
105
|
+
*/
|
|
106
|
+
export declare const NFSE_ADN_MTLS_REQUIREMENT: "required";
|
|
107
|
+
/**
|
|
108
|
+
* A1 continua REFUTADO como exigência de protocolo.
|
|
109
|
+
*
|
|
110
|
+
* O que as fontes oficiais exigem do certificado é: raiz ICP-Brasil (E1208),
|
|
111
|
+
* `KeyUsage` com Autenticação Cliente (E1200), extensão de CNPJ no `OtherName`
|
|
112
|
+
* OID 2.16.76.1.3.3 (E1209), cadeia e LCR válidas (E1205/E1206/E1207). Nada
|
|
113
|
+
* disso distingue A1 de A3 — um A3 em token satisfaz os cinco.
|
|
114
|
+
*
|
|
115
|
+
* A1 é PREFERÊNCIA DE AUTOMAÇÃO nossa: um worker sem pessoa presente não digita
|
|
116
|
+
* PIN de token. Registrar isso como preferência, e não como obrigação legal, é o
|
|
117
|
+
* que impede o produto de exigir do cliente um certificado que a norma não pede.
|
|
118
|
+
*/
|
|
119
|
+
export declare const NFSE_ADN_A1_REQUIREMENT: "refuted";
|
|
120
|
+
export declare const NFSE_ADN_A1_RATIONALE: "server_side_automation_preference";
|
|
121
|
+
/** Hosts oficiais, por ambiente. Nunca substituíveis um pelo outro. */
|
|
122
|
+
export declare const NFSE_ADN_HOSTS: Readonly<Record<'homologation' | 'production', string>>;
|
|
123
|
+
/**
|
|
124
|
+
* Limites. Os oficiais vêm da norma; os defensivos são nossos e dizem que são.
|
|
125
|
+
*
|
|
126
|
+
* A separação existe porque um limite oficial ultrapassado é violação de norma —
|
|
127
|
+
* e o CNPJ bloqueado é o do CLIENTE —, enquanto um limite defensivo ultrapassado
|
|
128
|
+
* é só a nossa proteção agindo. Confundi-los faria alguém "afrouxar o limite"
|
|
129
|
+
* numa madrugada sem saber qual dos dois estava afrouxando.
|
|
130
|
+
*/
|
|
131
|
+
export declare const NFSE_ADN_LIMITS: Readonly<{
|
|
132
|
+
/** Manual dos Municípios §1.4.2.b: "Quantidade máxima de documentos no lote: 50". */
|
|
133
|
+
readonly maxDocumentsPerBatch: {
|
|
134
|
+
readonly value: 50;
|
|
135
|
+
readonly evidence: ContractEvidence;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Manual dos Municípios §1.4.2.b: espera mínima de UMA HORA depois de receber
|
|
139
|
+
* a indicação de que não há mais documentos.
|
|
140
|
+
*
|
|
141
|
+
* Isto corrige o comentário da Fase 1, que dizia que a NFS-e "não publica a
|
|
142
|
+
* regra de uma hora que a NF-e publica" e que adotávamos 3600s por simetria.
|
|
143
|
+
* Ela publica. A regra é dela, não emprestada.
|
|
144
|
+
*/
|
|
145
|
+
readonly exhaustedWaitSeconds: {
|
|
146
|
+
readonly value: 3600;
|
|
147
|
+
readonly evidence: ContractEvidence;
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Teto de bytes da resposta HTTP. DEFENSIVO — a norma não fixa um.
|
|
151
|
+
*
|
|
152
|
+
* 16 MiB acomoda com folga 50 documentos comprimidos (uma NFS-e tem alguns KB)
|
|
153
|
+
* e impede que um servidor comprometido, um proxy hostil ou um defeito do lado
|
|
154
|
+
* de lá transformem uma sincronização em consumo ilimitado de memória.
|
|
155
|
+
*/
|
|
156
|
+
readonly maxResponseBytes: {
|
|
157
|
+
readonly value: number;
|
|
158
|
+
readonly evidence: ContractEvidence;
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Teto de bytes DESCOMPACTADOS por documento. DEFENSIVO.
|
|
162
|
+
*
|
|
163
|
+
* É o mesmo 8 MiB que `decodeFiscalXml` já impõe ao XML. Repeti-lo aqui não é
|
|
164
|
+
* duplicação: sem ele, uma bomba de descompressão estoura a memória ANTES de
|
|
165
|
+
* o leitor de XML ter a chance de recusar o tamanho.
|
|
166
|
+
*/
|
|
167
|
+
readonly maxDecompressedBytesPerDocument: {
|
|
168
|
+
readonly value: number;
|
|
169
|
+
readonly evidence: ContractEvidence;
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Teto de bytes descompactados do lote inteiro. DEFENSIVO.
|
|
173
|
+
*
|
|
174
|
+
* 50 × 8 MiB seriam 400 MiB — o produto dos dois tetos anteriores não é um
|
|
175
|
+
* teto útil. 64 MiB é generoso para o caso real e finito para o hostil.
|
|
176
|
+
*/
|
|
177
|
+
readonly maxDecompressedBytesPerBatch: {
|
|
178
|
+
readonly value: number;
|
|
179
|
+
readonly evidence: ContractEvidence;
|
|
180
|
+
};
|
|
181
|
+
/** Teto de espera de uma requisição. DEFENSIVO — ver `FiscalTransportRequest`. */
|
|
182
|
+
readonly requestTimeoutMs: {
|
|
183
|
+
readonly value: 30000;
|
|
184
|
+
readonly evidence: ContractEvidence;
|
|
185
|
+
};
|
|
186
|
+
}>;
|
|
187
|
+
/**
|
|
188
|
+
* As quatro séries de NSU do ADN — Manual dos Municípios §1.3.4.
|
|
189
|
+
*
|
|
190
|
+
* Confundi-las é o erro caro: cada uma numera um conjunto diferente de fatos, e
|
|
191
|
+
* usar o cursor de uma para consultar outra pularia documentos em silêncio.
|
|
192
|
+
* A nossa é a QUARTA, e apenas ela.
|
|
193
|
+
*/
|
|
194
|
+
export declare const NFSE_ADN_NSU_SERIES: Readonly<{
|
|
195
|
+
readonly general: "NSU Geral do ADN (por DF-e) — controle interno do ADN; NÃO é distribuição.";
|
|
196
|
+
readonly municipalReception: "NSU de Recepção/Backup (por Código de Município) — do município emissor.";
|
|
197
|
+
readonly municipalDistribution: "NSU de Distribuição (por Código de Município) — do município interessado.";
|
|
198
|
+
readonly actorDistribution: "NSU de Distribuição para os atores da NFS-e (por CPF/CNPJ) — Prestador, Tomador e Intermediário. É ESTA que o Office consome.";
|
|
199
|
+
}>;
|
|
200
|
+
/** A série que este adapter consome. Explícito para que nunca seja "a outra". */
|
|
201
|
+
export declare const NFSE_ADN_NSU_SERIES_IN_USE: "actorDistribution";
|
|
202
|
+
export interface AdnOperation {
|
|
203
|
+
readonly id: string;
|
|
204
|
+
readonly method: 'GET';
|
|
205
|
+
readonly path: string;
|
|
206
|
+
readonly environments: readonly ('homologation' | 'production')[];
|
|
207
|
+
readonly authentication: string;
|
|
208
|
+
readonly identityScope: string;
|
|
209
|
+
readonly requestFormat: string;
|
|
210
|
+
readonly responseFormat: string;
|
|
211
|
+
readonly cursorSemantics: string;
|
|
212
|
+
readonly emptySemantics: string;
|
|
213
|
+
readonly errorShape: string;
|
|
214
|
+
readonly rateLimitSemantics: string;
|
|
215
|
+
readonly sourceId: string;
|
|
216
|
+
/** Implementado por este adapter nesta fase? */
|
|
217
|
+
readonly implemented: boolean;
|
|
218
|
+
/** O que dentro desta operação NÃO está conferido. Vazio = tudo conferido. */
|
|
219
|
+
readonly unverified: readonly string[];
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* A matriz de contrato. Nada aqui é inferido em silêncio.
|
|
223
|
+
*
|
|
224
|
+
* Onde a fonte oficial não diz, o campo diz "não publicado" e o item entra em
|
|
225
|
+
* `unverified`. Um campo preenchido com a melhor suposição e sem marca seria
|
|
226
|
+
* indistinguível de um campo conferido — e essa indistinção é precisamente o
|
|
227
|
+
* defeito que a Fase 3 fecha.
|
|
228
|
+
*/
|
|
229
|
+
export declare const NFSE_ADN_OPERATIONS: readonly AdnOperation[];
|
|
230
|
+
/**
|
|
231
|
+
* Códigos oficiais do ADN → como o motor deve tratá-los.
|
|
232
|
+
*
|
|
233
|
+
* `outcome` separa o que a classe de erro sozinha não separa: E2215 é uma
|
|
234
|
+
* REJEIÇÃO no vocabulário do ADN e um DIA NORMAL no nosso. Tratá-lo como erro
|
|
235
|
+
* encheria a caixa de intervenções de escritórios cujos clientes simplesmente
|
|
236
|
+
* não receberam nota nenhuma na semana; tratá-lo como sucesso genérico o tornaria
|
|
237
|
+
* indistinguível de um envelope que mudou. Ele é um terceiro estado, nomeado.
|
|
238
|
+
*/
|
|
239
|
+
export interface AdnOfficialCode {
|
|
240
|
+
readonly code: string;
|
|
241
|
+
readonly meaning: string;
|
|
242
|
+
readonly outcome: 'no_documents' | 'error';
|
|
243
|
+
readonly errorClass: FiscalProviderErrorClass | null;
|
|
244
|
+
}
|
|
245
|
+
export declare const NFSE_ADN_OFFICIAL_CODES: Readonly<Record<string, AdnOfficialCode>>;
|
|
246
|
+
/**
|
|
247
|
+
* O perfil de um envelope: os nomes EXATOS que o parser aceita.
|
|
248
|
+
*
|
|
249
|
+
* ## Por que os nomes viram dado, e não `if`
|
|
250
|
+
*
|
|
251
|
+
* A versão anterior aceitava `LoteDFe ?? loteDFe` e `ArquivoXml ?? arquivoXml`.
|
|
252
|
+
* Cada `??` desses é uma hipótese silenciosa: se o campo real for um terceiro
|
|
253
|
+
* nome, o `??` devolve `undefined`, o array não existe, e — na melhor das
|
|
254
|
+
* hipóteses — o parser lança. Na pior, um envelope com `LoteDFe: []` de um
|
|
255
|
+
* serviço que na verdade usa outro nome para o lote NÃO lança: devolve zero
|
|
256
|
+
* documentos com sucesso aparente.
|
|
257
|
+
*
|
|
258
|
+
* Com o perfil, o parser aceita exatamente UM conjunto de nomes. Se a resposta
|
|
259
|
+
* não os tiver, ela não é reconhecida — e não ser reconhecida é um desfecho
|
|
260
|
+
* nomeado, nunca um lote vazio.
|
|
261
|
+
*
|
|
262
|
+
* ## `verified` é o portão, e não um rótulo
|
|
263
|
+
*
|
|
264
|
+
* `verified: false` fecha o transporte real. É a única forma honesta de embarcar
|
|
265
|
+
* um parser escrito contra um formato suposto: ele existe, é testado contra o
|
|
266
|
+
* que supomos, e não pode falar com o serviço até alguém ter visto a resposta.
|
|
267
|
+
*/
|
|
268
|
+
export interface AdnEnvelopeProfile {
|
|
269
|
+
readonly id: string;
|
|
270
|
+
readonly contractVersion: string;
|
|
271
|
+
/** O envelope foi conferido contra o serviço oficial? */
|
|
272
|
+
readonly verified: boolean;
|
|
273
|
+
/** Ambientes em que este perfil pode ser usado. */
|
|
274
|
+
readonly environments: readonly ('synthetic' | 'homologation' | 'production')[];
|
|
275
|
+
readonly batchField: string;
|
|
276
|
+
readonly itemNsuField: string;
|
|
277
|
+
readonly itemContentField: string;
|
|
278
|
+
readonly lastNsuField: string;
|
|
279
|
+
readonly maxNsuField: string;
|
|
280
|
+
/** Códigos do ADN chegam neste campo, quando a resposta é uma rejeição. */
|
|
281
|
+
readonly codeField: string;
|
|
282
|
+
readonly contentEncoding: 'gzip+base64' | 'base64';
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* O perfil OFICIAL — a melhor leitura disponível, e declaradamente não conferida.
|
|
286
|
+
*
|
|
287
|
+
* Os nomes vêm da descrição pública da API e da simetria com o `docZip` da
|
|
288
|
+
* NF-e. Estão aqui para que exista UM lugar onde corrigi-los no dia em que
|
|
289
|
+
* alguém vir a resposta — e para que o `verified: false` mantenha o transporte
|
|
290
|
+
* real fechado até esse dia.
|
|
291
|
+
*/
|
|
292
|
+
export declare const ADN_OFFICIAL_ENVELOPE_PROFILE: AdnEnvelopeProfile;
|
|
293
|
+
/**
|
|
294
|
+
* O perfil SINTÉTICO — conferido, porque somos nós quem o define.
|
|
295
|
+
*
|
|
296
|
+
* Não há circularidade: ele não afirma nada sobre o ADN. Ele descreve o servidor
|
|
297
|
+
* de mentira que a suíte levanta, e `verified: true` aqui significa apenas "o
|
|
298
|
+
* parser e o servidor sintético concordam", que é uma afirmação verificável e
|
|
299
|
+
* verificada. `environments: ['synthetic']` impede que ele seja usado como
|
|
300
|
+
* atalho para abrir o transporte real.
|
|
301
|
+
*/
|
|
302
|
+
export declare const ADN_SYNTHETIC_ENVELOPE_PROFILE: AdnEnvelopeProfile;
|
|
303
|
+
/**
|
|
304
|
+
* O transporte real está ligado?
|
|
305
|
+
*
|
|
306
|
+
* Constante, e não variável de ambiente, por decisão de fase: uma variável de
|
|
307
|
+
* ambiente é ligável sem revisão, e a primeira conexão fiscal real do produto
|
|
308
|
+
* não deve poder acontecer por causa de uma linha num painel. Quando o portão
|
|
309
|
+
* humano da Fase 4 for aberto, isto vira um commit — revisável, revertível, e
|
|
310
|
+
* com o nome de quem o abriu.
|
|
311
|
+
*/
|
|
312
|
+
export declare const ADN_REAL_TRANSPORT_ENABLED = false;
|
|
313
|
+
/** Motivos pelos quais o transporte real está fechado, para tela e trilha. */
|
|
314
|
+
export declare function adnRealTransportBlockers(profile?: AdnEnvelopeProfile): readonly string[];
|
|
315
|
+
//# sourceMappingURL=nfse-adn-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nfse-adn-contract.d.ts","sourceRoot":"","sources":["../../../src/fiscal/contracts/nfse-adn-contract.ts"],"names":[],"mappings":"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"}
|