@baruk/core 0.4.2 → 0.5.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 +103 -0
- package/dist/cjs/clients/ibge.js.map +1 -0
- package/dist/cjs/clients/repository.js +186 -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 +111 -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/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 +127 -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/material.js +168 -0
- package/dist/cjs/fiscal/credentials/material.js.map +1 -0
- package/dist/cjs/fiscal/credentials/readiness.js +163 -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/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 +328 -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 +316 -11
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/documents.js +100 -15
- 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 +144 -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 +34 -0
- package/dist/cjs/rbac/catalog.js.map +1 -1
- package/dist/cjs/subscription-billing/index.js +2 -1
- package/dist/cjs/subscription-billing/index.js.map +1 -1
- package/dist/cjs/subscription-billing/service.js +153 -77
- 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/clients/ibge.d.ts +17 -0
- package/dist/clients/ibge.d.ts.map +1 -0
- package/dist/clients/ibge.js +98 -0
- package/dist/clients/ibge.js.map +1 -0
- package/dist/clients/repository.d.ts +154 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +182 -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 +109 -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/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 +86 -0
- package/dist/fiscal/coverage/model.d.ts.map +1 -0
- package/dist/fiscal/coverage/model.js +120 -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/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/readiness.d.ts +92 -0
- package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
- package/dist/fiscal/credentials/readiness.js +159 -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/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 +80 -0
- package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
- package/dist/fiscal/transport/synthetic-tls.js +323 -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 +115 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +100 -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 +98 -14
- package/dist/legal/documents.js.map +1 -1
- package/dist/legal/index.d.ts +1 -1
- 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 +37 -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 +140 -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 +34 -0
- package/dist/rbac/catalog.js.map +1 -1
- package/dist/subscription-billing/index.d.ts +6 -5
- package/dist/subscription-billing/index.d.ts.map +1 -1
- package/dist/subscription-billing/index.js +3 -3
- package/dist/subscription-billing/index.js.map +1 -1
- package/dist/subscription-billing/service.d.ts +21 -0
- package/dist/subscription-billing/service.d.ts.map +1 -1
- package/dist/subscription-billing/service.js +90 -15
- 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/package.json +9 -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
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Provisiona a identidade de automação E2E de um escritório.
|
|
5
|
+
*
|
|
6
|
+
* ## Por que é um script, e não uma rota
|
|
7
|
+
*
|
|
8
|
+
* Criar a identidade que valida o produto é ato de PROVISIONAMENTO, não de
|
|
9
|
+
* operação. Expor isso como rota daria a alguém dentro do produto o poder de
|
|
10
|
+
* fabricar uma conta de automação — e o valor de uma identidade de privilégio
|
|
11
|
+
* mínimo desaparece se qualquer administrador puder criar outra.
|
|
12
|
+
*
|
|
13
|
+
* ## O que ele garante
|
|
14
|
+
*
|
|
15
|
+
* - `user_type = 'service'` — reconhecível como não-humana em toda consulta;
|
|
16
|
+
* - papel `e2e_automation` e nada além: quatro permissões, tenant único;
|
|
17
|
+
* - idempotente: rodar de novo não duplica nem escala privilégio;
|
|
18
|
+
* - a senha vem do ambiente e **nunca** é impressa, ecoada ou gravada em log.
|
|
19
|
+
*
|
|
20
|
+
* ## Uso
|
|
21
|
+
*
|
|
22
|
+
* OFFICE_MIGRATION_DATABASE_URL=… \
|
|
23
|
+
* E2E_IDENTITY_EMAIL=… E2E_IDENTITY_PASSWORD=… \
|
|
24
|
+
* pnpm --filter @baruk/core provision:e2e --tenant sc
|
|
25
|
+
*
|
|
26
|
+
* Revogar é o caminho inverso e existe na interface: Administração → Usuários →
|
|
27
|
+
* situação "revogado". Rotacionar é rodar de novo com `--rotate` e uma senha
|
|
28
|
+
* nova.
|
|
29
|
+
*/
|
|
30
|
+
const client_js_1 = require("./client.js");
|
|
31
|
+
const context_js_1 = require("./context.js");
|
|
32
|
+
const provisioning_js_1 = require("../tenancy/provisioning.js");
|
|
33
|
+
const service_js_1 = require("../auth/service.js");
|
|
34
|
+
const ROLE = 'e2e_automation';
|
|
35
|
+
function arg(nome, padrao) {
|
|
36
|
+
const i = process.argv.indexOf(`--${nome}`);
|
|
37
|
+
return i >= 0 ? (process.argv[i + 1] ?? padrao) : padrao;
|
|
38
|
+
}
|
|
39
|
+
async function main() {
|
|
40
|
+
const url = process.env.OFFICE_MIGRATION_DATABASE_URL ?? process.env.DATABASE_URL;
|
|
41
|
+
const email = process.env.E2E_IDENTITY_EMAIL;
|
|
42
|
+
const senha = process.env.E2E_IDENTITY_PASSWORD;
|
|
43
|
+
const tenantCode = arg('tenant', 'sc');
|
|
44
|
+
const rotate = process.argv.includes('--rotate');
|
|
45
|
+
if (!url)
|
|
46
|
+
throw new Error('OFFICE_MIGRATION_DATABASE_URL ausente.');
|
|
47
|
+
if (!email)
|
|
48
|
+
throw new Error('E2E_IDENTITY_EMAIL ausente.');
|
|
49
|
+
if (!senha || senha.length < 24) {
|
|
50
|
+
throw new Error('E2E_IDENTITY_PASSWORD ausente ou curta demais (mínimo 24 caracteres).');
|
|
51
|
+
}
|
|
52
|
+
const db = (0, client_js_1.createDb)(url, { role: 'owner', max: 2 });
|
|
53
|
+
try {
|
|
54
|
+
const [tenant] = await db `
|
|
55
|
+
SELECT id FROM tenant WHERE code = ${tenantCode} AND deleted_at IS NULL
|
|
56
|
+
`;
|
|
57
|
+
if (!tenant)
|
|
58
|
+
throw new Error(`Organização "${tenantCode}" não encontrada.`);
|
|
59
|
+
// `user_type: 'service'` é o que separa esta conta de uma pessoa. O tipo já
|
|
60
|
+
// existe no domínio e na constraint do banco desde a identidade do Core —
|
|
61
|
+
// não é campo inventado para este caso.
|
|
62
|
+
const user = await (0, service_js_1.upsertUserWithPassword)(db, {
|
|
63
|
+
email,
|
|
64
|
+
fullName: 'Automação de teste (E2E)',
|
|
65
|
+
password: senha,
|
|
66
|
+
userType: 'service',
|
|
67
|
+
overwritePassword: rotate,
|
|
68
|
+
});
|
|
69
|
+
await (0, provisioning_js_1.ensureMembership)(db, tenant.id, user.id);
|
|
70
|
+
await (0, provisioning_js_1.assignSystemRole)(db, tenant.id, user.id, ROLE);
|
|
71
|
+
// Conferência de saída: o que foi concedido é exatamente o esperado.
|
|
72
|
+
const permissoes = await (0, context_js_1.withContext)(db, { tenantId: tenant.id, userId: user.id }, async (tx) => {
|
|
73
|
+
const rows = await tx `
|
|
74
|
+
SELECT p.key
|
|
75
|
+
FROM user_role ur
|
|
76
|
+
JOIN role r ON r.id = ur.role_id
|
|
77
|
+
JOIN role_permission rp ON rp.role_id = r.id
|
|
78
|
+
JOIN permission p ON p.id = rp.permission_id
|
|
79
|
+
WHERE ur.user_id = ${user.id} AND ur.deleted_at IS NULL
|
|
80
|
+
ORDER BY p.key
|
|
81
|
+
`;
|
|
82
|
+
return rows.map((r) => r.key);
|
|
83
|
+
});
|
|
84
|
+
// Nada de e-mail, id ou senha na saída: só o que se precisa conferir.
|
|
85
|
+
console.log(`✓ identidade E2E provisionada em "${tenantCode}"`);
|
|
86
|
+
console.log(` tipo: service`);
|
|
87
|
+
console.log(` papel: ${ROLE}`);
|
|
88
|
+
console.log(` permissões (${permissoes.length}): ${permissoes.join(', ')}`);
|
|
89
|
+
console.log(` senha definida nesta execução: ${user.passwordWasSet ? 'sim' : 'não (já existia)'}`);
|
|
90
|
+
if (permissoes.length !== 4) {
|
|
91
|
+
throw new Error(`Esperava 4 permissões e encontrei ${permissoes.length}. Abortando: uma identidade de automação com privilégio a mais não deve ficar de pé.`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
await db.end({ timeout: 5 });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Erro de driver de banco costuma trazer a connection string inteira dentro da
|
|
100
|
+
* mensagem. Quem redige tem de ser a ferramenta: confiar em quem chama é
|
|
101
|
+
* confiar que ninguém vai esquecer o filtro uma vez.
|
|
102
|
+
*/
|
|
103
|
+
function semSegredo(err) {
|
|
104
|
+
const bruto = err instanceof Error ? err.message : String(err);
|
|
105
|
+
return bruto.replace(/postgres(?:ql)?:\/\/\S+/gi, '[connection string redigida]');
|
|
106
|
+
}
|
|
107
|
+
main().catch((err) => {
|
|
108
|
+
console.error('✗ provisionamento falhou:', semSegredo(err));
|
|
109
|
+
process.exit(1);
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=provision-e2e-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provision-e2e-identity.js","sourceRoot":"","sources":["../../../src/db/provision-e2e-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decideApplicability = decideApplicability;
|
|
4
|
+
exports.generates = generates;
|
|
5
|
+
const conditions_js_1 = require("./conditions.js");
|
|
6
|
+
const semRegra = (reason) => ({
|
|
7
|
+
outcome: 'RULE_NOT_CONFIGURED',
|
|
8
|
+
reason,
|
|
9
|
+
evidence: {
|
|
10
|
+
ruleId: null,
|
|
11
|
+
ruleVersion: null,
|
|
12
|
+
jurisdiction: null,
|
|
13
|
+
missingAttributes: [],
|
|
14
|
+
consideredAttributes: [],
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* A regra alcança este cliente geograficamente?
|
|
19
|
+
*
|
|
20
|
+
* Federal alcança todos. Estadual exige UF igual. Municipal exige UF **e**
|
|
21
|
+
* código IBGE iguais — nome de município não entra na comparação, porque
|
|
22
|
+
* "Goiania" e "Goiânia" são o mesmo lugar e strings diferentes.
|
|
23
|
+
*
|
|
24
|
+
* Cliente sem a informação não é "fora": é desconhecido, e vira
|
|
25
|
+
* `INSUFFICIENT_DATA` em vez de sumir da lista.
|
|
26
|
+
*/
|
|
27
|
+
function jurisdictionMatch(rule, client) {
|
|
28
|
+
if (rule.scope === 'federal')
|
|
29
|
+
return 'match';
|
|
30
|
+
if (client.uf === null)
|
|
31
|
+
return 'unknown';
|
|
32
|
+
if (client.uf !== rule.uf)
|
|
33
|
+
return 'no_match';
|
|
34
|
+
if (rule.scope === 'state')
|
|
35
|
+
return 'match';
|
|
36
|
+
if (client.cityIbge === null)
|
|
37
|
+
return 'unknown';
|
|
38
|
+
return client.cityIbge === rule.cityIbge ? 'match' : 'no_match';
|
|
39
|
+
}
|
|
40
|
+
/** A competência cai dentro da vigência? Compara datas ISO, sem fuso. */
|
|
41
|
+
function withinValidity(rule, referenceDate) {
|
|
42
|
+
if (referenceDate < rule.validFrom)
|
|
43
|
+
return false;
|
|
44
|
+
return rule.validUntil === null || referenceDate <= rule.validUntil;
|
|
45
|
+
}
|
|
46
|
+
function decideApplicability(input) {
|
|
47
|
+
const { rule, profile, clientJurisdiction, referenceDate } = input;
|
|
48
|
+
if (!rule) {
|
|
49
|
+
return semRegra('Não há regra cadastrada para esta obrigação nesta jurisdição.');
|
|
50
|
+
}
|
|
51
|
+
const jurisdiction = rule.jurisdiction;
|
|
52
|
+
const base = { ruleId: rule.id, ruleVersion: rule.version, jurisdiction };
|
|
53
|
+
// ── 1 · Estado da regra, antes de qualquer coisa do cliente ─────────────
|
|
54
|
+
if (rule.status === 'disabled') {
|
|
55
|
+
return {
|
|
56
|
+
outcome: 'RULE_DISABLED',
|
|
57
|
+
reason: 'A regra está desligada.',
|
|
58
|
+
evidence: { ...base, missingAttributes: [], consideredAttributes: [] },
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (rule.status === 'not_configured') {
|
|
62
|
+
return {
|
|
63
|
+
outcome: 'RULE_NOT_CONFIGURED',
|
|
64
|
+
reason: 'A regra existe como marcador, mas ninguém configurou jurisdição ou vencimento — não há data a aplicar.',
|
|
65
|
+
evidence: { ...base, missingAttributes: [], consideredAttributes: [] },
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// ── 2 · Vigência ────────────────────────────────────────────────────────
|
|
69
|
+
if (!withinValidity(rule, referenceDate)) {
|
|
70
|
+
const futura = referenceDate < rule.validFrom;
|
|
71
|
+
return {
|
|
72
|
+
outcome: futura ? 'RULE_NOT_CONFIGURED' : 'RULE_EXPIRED',
|
|
73
|
+
reason: futura
|
|
74
|
+
? `A regra só passa a valer em ${rule.validFrom}; para esta competência não há regra vigente.`
|
|
75
|
+
: `A regra deixou de valer em ${rule.validUntil}.`,
|
|
76
|
+
evidence: { ...base, missingAttributes: [], consideredAttributes: [] },
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (rule.status === 'expired') {
|
|
80
|
+
return {
|
|
81
|
+
outcome: 'RULE_EXPIRED',
|
|
82
|
+
reason: 'A regra está marcada como vencida.',
|
|
83
|
+
evidence: { ...base, missingAttributes: [], consideredAttributes: [] },
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// ── 3 · Jurisdição ──────────────────────────────────────────────────────
|
|
87
|
+
const geo = jurisdictionMatch(jurisdiction, clientJurisdiction);
|
|
88
|
+
if (geo === 'no_match') {
|
|
89
|
+
return {
|
|
90
|
+
outcome: 'NOT_APPLICABLE',
|
|
91
|
+
reason: jurisdiction.scope === 'state'
|
|
92
|
+
? `Regra de ${jurisdiction.uf}; o cliente está em ${clientJurisdiction.uf}.`
|
|
93
|
+
: 'A regra é de outro município.',
|
|
94
|
+
evidence: { ...base, missingAttributes: [], consideredAttributes: [] },
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
if (geo === 'unknown') {
|
|
98
|
+
const falta = jurisdiction.scope === 'state' ? 'UF' : 'código IBGE do município';
|
|
99
|
+
return {
|
|
100
|
+
outcome: 'INSUFFICIENT_DATA',
|
|
101
|
+
reason: `Falta ${falta} no cadastro do cliente para saber se esta regra o alcança.`,
|
|
102
|
+
evidence: {
|
|
103
|
+
...base,
|
|
104
|
+
missingAttributes: [jurisdiction.scope === 'state' ? 'state_uf' : 'municipality_ibge_code'],
|
|
105
|
+
consideredAttributes: [],
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// ── 4 · Condições declarativas ──────────────────────────────────────────
|
|
110
|
+
let condition;
|
|
111
|
+
try {
|
|
112
|
+
condition = (0, conditions_js_1.parseCondition)(rule.conditions);
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
// Regra malformada é defeito do catálogo, não decisão sobre o cliente.
|
|
116
|
+
// Nunca vira "não se aplica": isso esconderia a obrigação.
|
|
117
|
+
return {
|
|
118
|
+
outcome: 'RULE_NOT_CONFIGURED',
|
|
119
|
+
reason: `A condição desta regra está malformada: ${err instanceof Error ? err.message : 'inválida'}.`,
|
|
120
|
+
evidence: { ...base, missingAttributes: [], consideredAttributes: [] },
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const considerados = [...(0, conditions_js_1.referencedAttributes)(condition)].sort();
|
|
124
|
+
const faltando = (0, conditions_js_1.missingAttributes)(condition, profile);
|
|
125
|
+
const veredito = (0, conditions_js_1.evaluate)(condition, profile);
|
|
126
|
+
if (veredito === 'unknown') {
|
|
127
|
+
return {
|
|
128
|
+
outcome: 'INSUFFICIENT_DATA',
|
|
129
|
+
reason: faltando.length === 1
|
|
130
|
+
? `Falta informar "${faltando[0]}" no perfil do cliente.`
|
|
131
|
+
: `Faltam informações no perfil do cliente: ${faltando.join(', ')}.`,
|
|
132
|
+
evidence: { ...base, missingAttributes: faltando, consideredAttributes: considerados },
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (veredito === false) {
|
|
136
|
+
return {
|
|
137
|
+
outcome: 'NOT_APPLICABLE',
|
|
138
|
+
reason: 'O perfil do cliente não atende às condições desta regra.',
|
|
139
|
+
evidence: { ...base, missingAttributes: [], consideredAttributes: considerados },
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// ── 5 · Conferência humana, por último ──────────────────────────────────
|
|
143
|
+
//
|
|
144
|
+
// Fica depois da aplicabilidade de propósito: dizer "pendente de conferência"
|
|
145
|
+
// sobre uma regra que nem se aplica a este cliente mandaria o escritório
|
|
146
|
+
// conferir o que não usaria.
|
|
147
|
+
if (rule.status === 'pending_validation') {
|
|
148
|
+
return {
|
|
149
|
+
outcome: 'RULE_PENDING_VALIDATION',
|
|
150
|
+
reason: 'A regra se aplica, mas ainda não foi conferida por uma pessoa.',
|
|
151
|
+
evidence: { ...base, missingAttributes: [], consideredAttributes: considerados },
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
outcome: 'APPLICABLE',
|
|
156
|
+
reason: 'A regra está vigente, conferida, e o perfil do cliente a atende.',
|
|
157
|
+
evidence: { ...base, missingAttributes: [], consideredAttributes: considerados },
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/** Só `APPLICABLE` gera. Todo o resto é espera, ausência ou decisão contrária. */
|
|
161
|
+
function generates(decision) {
|
|
162
|
+
return decision.outcome === 'APPLICABLE';
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=applicability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applicability.js","sourceRoot":"","sources":["../../../src/fiscal/applicability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Condições de aplicabilidade — uma AST declarativa, tipada e interpretada.
|
|
4
|
+
*
|
|
5
|
+
* ## Por que não uma linguagem
|
|
6
|
+
*
|
|
7
|
+
* A tentação é guardar uma expressão e avaliá-la. Nada aqui é avaliado: não há
|
|
8
|
+
* `eval`, nem `Function`, nem SQL montado, nem código do usuário. A condição é
|
|
9
|
+
* um objeto JSON com formato fechado, validado na escrita e percorrido por um
|
|
10
|
+
* `switch` na leitura. O pior que uma condição malformada consegue fazer é ser
|
|
11
|
+
* recusada.
|
|
12
|
+
*
|
|
13
|
+
* ## Por que não uma floresta de `if`
|
|
14
|
+
*
|
|
15
|
+
* A alternativa seria `requires_employees`, `requires_icms`, `requires_iss`…
|
|
16
|
+
* uma coluna e um `if` por pergunta fiscal. Não escala: cada UF e cada segmento
|
|
17
|
+
* acrescenta perguntas, e o motor vira uma cascata que ninguém consegue ler nem
|
|
18
|
+
* testar. Aqui o motor sabe avaliar **operadores**; o catálogo declara **fatos**.
|
|
19
|
+
*
|
|
20
|
+
* ## O terceiro valor
|
|
21
|
+
*
|
|
22
|
+
* A avaliação não devolve booleano. Devolve `true`, `false` ou **`unknown`** —
|
|
23
|
+
* e `unknown` é o ponto inteiro desta fase. Um cliente sobre o qual ninguém
|
|
24
|
+
* disse se tem empregados não é "sem empregados": é desconhecido, e a decisão
|
|
25
|
+
* segura é não gerar nem declarar isento. Colapsar `unknown` em `false` é
|
|
26
|
+
* exatamente o defeito que a auditoria nacional encontrou.
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.InvalidCondition = void 0;
|
|
30
|
+
exports.parseCondition = parseCondition;
|
|
31
|
+
exports.referencedAttributes = referencedAttributes;
|
|
32
|
+
exports.evaluate = evaluate;
|
|
33
|
+
exports.missingAttributes = missingAttributes;
|
|
34
|
+
const OPS = new Set(['always', 'eq', 'neq', 'in', 'not_in', 'exists', 'not_exists', 'and', 'or']);
|
|
35
|
+
class InvalidCondition extends Error {
|
|
36
|
+
constructor(message) {
|
|
37
|
+
super(message);
|
|
38
|
+
this.name = 'InvalidCondition';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.InvalidCondition = InvalidCondition;
|
|
42
|
+
/**
|
|
43
|
+
* Valida a forma ANTES de gravar.
|
|
44
|
+
*
|
|
45
|
+
* Uma condição malformada gravada é uma regra que ninguém consegue avaliar, e
|
|
46
|
+
* o motor descobriria isso na madrugada do vencimento. Recusar na escrita é
|
|
47
|
+
* mais barato que descobrir na geração.
|
|
48
|
+
*
|
|
49
|
+
* `maxDepth` existe porque uma AST profunda o bastante estoura a pilha na
|
|
50
|
+
* avaliação, e a escrita é onde isso pode ser recusado com uma mensagem.
|
|
51
|
+
*/
|
|
52
|
+
function parseCondition(raw, depth = 0) {
|
|
53
|
+
if (depth > 12)
|
|
54
|
+
throw new InvalidCondition('condição aninhada demais (limite 12)');
|
|
55
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
56
|
+
throw new InvalidCondition('condição precisa ser um objeto');
|
|
57
|
+
}
|
|
58
|
+
const o = raw;
|
|
59
|
+
const op = o['op'];
|
|
60
|
+
if (typeof op !== 'string' || !OPS.has(op)) {
|
|
61
|
+
throw new InvalidCondition(`operador desconhecido: ${String(op)}`);
|
|
62
|
+
}
|
|
63
|
+
const attr = () => {
|
|
64
|
+
const a = o['attribute'];
|
|
65
|
+
if (typeof a !== 'string' || a.length === 0) {
|
|
66
|
+
throw new InvalidCondition(`${op} exige "attribute"`);
|
|
67
|
+
}
|
|
68
|
+
return a;
|
|
69
|
+
};
|
|
70
|
+
const scalar = () => {
|
|
71
|
+
const v = o['value'];
|
|
72
|
+
if (typeof v !== 'string' && typeof v !== 'boolean') {
|
|
73
|
+
throw new InvalidCondition(`${op} exige "value" texto ou booleano`);
|
|
74
|
+
}
|
|
75
|
+
return v;
|
|
76
|
+
};
|
|
77
|
+
const list = () => {
|
|
78
|
+
const v = o['values'];
|
|
79
|
+
if (!Array.isArray(v) || v.length === 0) {
|
|
80
|
+
throw new InvalidCondition(`${op} exige "values" não vazio`);
|
|
81
|
+
}
|
|
82
|
+
return v.map((x) => {
|
|
83
|
+
if (typeof x !== 'string' && typeof x !== 'boolean') {
|
|
84
|
+
throw new InvalidCondition(`${op} aceita apenas texto ou booleano em "values"`);
|
|
85
|
+
}
|
|
86
|
+
return x;
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
const children = () => {
|
|
90
|
+
const v = o['of'];
|
|
91
|
+
if (!Array.isArray(v) || v.length === 0) {
|
|
92
|
+
throw new InvalidCondition(`${op} exige "of" não vazio`);
|
|
93
|
+
}
|
|
94
|
+
return v.map((c) => parseCondition(c, depth + 1));
|
|
95
|
+
};
|
|
96
|
+
switch (op) {
|
|
97
|
+
case 'always':
|
|
98
|
+
return { op: 'always' };
|
|
99
|
+
case 'eq':
|
|
100
|
+
return { op: 'eq', attribute: attr(), value: scalar() };
|
|
101
|
+
case 'neq':
|
|
102
|
+
return { op: 'neq', attribute: attr(), value: scalar() };
|
|
103
|
+
case 'in':
|
|
104
|
+
return { op: 'in', attribute: attr(), values: list() };
|
|
105
|
+
case 'not_in':
|
|
106
|
+
return { op: 'not_in', attribute: attr(), values: list() };
|
|
107
|
+
case 'exists':
|
|
108
|
+
return { op: 'exists', attribute: attr() };
|
|
109
|
+
case 'not_exists':
|
|
110
|
+
return { op: 'not_exists', attribute: attr() };
|
|
111
|
+
case 'and':
|
|
112
|
+
return { op: 'and', of: children() };
|
|
113
|
+
default:
|
|
114
|
+
return { op: 'or', of: children() };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Atributos citados pela condição — o motor usa para explicar o que faltou. */
|
|
118
|
+
function referencedAttributes(c, into = new Set()) {
|
|
119
|
+
switch (c.op) {
|
|
120
|
+
case 'always':
|
|
121
|
+
break;
|
|
122
|
+
case 'and':
|
|
123
|
+
case 'or':
|
|
124
|
+
for (const child of c.of)
|
|
125
|
+
referencedAttributes(child, into);
|
|
126
|
+
break;
|
|
127
|
+
default:
|
|
128
|
+
into.add(c.attribute);
|
|
129
|
+
}
|
|
130
|
+
return into;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Avalia em lógica ternária.
|
|
134
|
+
*
|
|
135
|
+
* As regras de `and` e `or` são as de Kleene, e a escolha importa:
|
|
136
|
+
*
|
|
137
|
+
* - `and` com um `false` é `false` mesmo havendo desconhecidos — não adianta
|
|
138
|
+
* saber o resto, a regra já não se aplica;
|
|
139
|
+
* - `or` com um `true` é `true` pelo mesmo motivo;
|
|
140
|
+
* - fora esses casos, qualquer desconhecido torna o todo desconhecido.
|
|
141
|
+
*
|
|
142
|
+
* Sem isso, uma regra "Simples E tem empregados" avaliada para um cliente do
|
|
143
|
+
* Lucro Real sem informação de folha devolveria `unknown` e viraria pendência
|
|
144
|
+
* na mesa de alguém — quando a resposta já era `false` pelo regime.
|
|
145
|
+
*/
|
|
146
|
+
function evaluate(condition, profile) {
|
|
147
|
+
switch (condition.op) {
|
|
148
|
+
case 'always':
|
|
149
|
+
return true;
|
|
150
|
+
case 'exists':
|
|
151
|
+
return profile[condition.attribute] !== undefined;
|
|
152
|
+
case 'not_exists':
|
|
153
|
+
return profile[condition.attribute] === undefined;
|
|
154
|
+
case 'eq':
|
|
155
|
+
case 'neq': {
|
|
156
|
+
const v = profile[condition.attribute];
|
|
157
|
+
if (v === undefined)
|
|
158
|
+
return 'unknown';
|
|
159
|
+
const igual = v === condition.value;
|
|
160
|
+
return condition.op === 'eq' ? igual : !igual;
|
|
161
|
+
}
|
|
162
|
+
case 'in':
|
|
163
|
+
case 'not_in': {
|
|
164
|
+
const v = profile[condition.attribute];
|
|
165
|
+
if (v === undefined)
|
|
166
|
+
return 'unknown';
|
|
167
|
+
const dentro = condition.values.includes(v);
|
|
168
|
+
return condition.op === 'in' ? dentro : !dentro;
|
|
169
|
+
}
|
|
170
|
+
case 'and': {
|
|
171
|
+
let desconhecido = false;
|
|
172
|
+
for (const c of condition.of) {
|
|
173
|
+
const r = evaluate(c, profile);
|
|
174
|
+
if (r === false)
|
|
175
|
+
return false;
|
|
176
|
+
if (r === 'unknown')
|
|
177
|
+
desconhecido = true;
|
|
178
|
+
}
|
|
179
|
+
return desconhecido ? 'unknown' : true;
|
|
180
|
+
}
|
|
181
|
+
default: {
|
|
182
|
+
let desconhecido = false;
|
|
183
|
+
for (const c of condition.of) {
|
|
184
|
+
const r = evaluate(c, profile);
|
|
185
|
+
if (r === true)
|
|
186
|
+
return true;
|
|
187
|
+
if (r === 'unknown')
|
|
188
|
+
desconhecido = true;
|
|
189
|
+
}
|
|
190
|
+
return desconhecido ? 'unknown' : false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/** Atributos citados que o perfil não conhece — a explicação do `unknown`. */
|
|
195
|
+
function missingAttributes(condition, profile) {
|
|
196
|
+
return [...referencedAttributes(condition)].filter((a) => profile[a] === undefined).sort();
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=conditions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../../src/fiscal/conditions.ts"],"names":[],"mappings":"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"}
|