@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,123 @@
|
|
|
1
|
+
import { ValidationError } from '@baruk/shared';
|
|
2
|
+
export const TENANT_FEATURES = [
|
|
3
|
+
{
|
|
4
|
+
key: 'onboarding',
|
|
5
|
+
label: 'Onboarding de clientes',
|
|
6
|
+
description: 'Roteiro de entrada do cliente novo: itens, tarefas, documentos exigidos e linha do tempo.',
|
|
7
|
+
envVar: 'BARUK_OFFICE_ONBOARDING_TENANTS',
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
key: 'onboardingAdminReview',
|
|
11
|
+
label: 'Revisão de interações do onboarding',
|
|
12
|
+
description: 'Fila interna para revisar e responder o que o cliente escreve durante o onboarding.',
|
|
13
|
+
envVar: 'BARUK_OFFICE_ONBOARDING_ADMIN_REVIEW_TENANTS',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
key: 'onboardingPortal',
|
|
17
|
+
label: 'Onboarding no portal do cliente',
|
|
18
|
+
description: 'O cliente acompanha o próprio onboarding pelo portal.',
|
|
19
|
+
envVar: 'BARUK_OFFICE_ONBOARDING_PORTAL_TENANTS',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
key: 'onboardingPortalActions',
|
|
23
|
+
label: 'Ações do cliente no onboarding',
|
|
24
|
+
description: 'O cliente responde itens, comenta e confirma entregas pelo portal.',
|
|
25
|
+
envVar: 'BARUK_OFFICE_ONBOARDING_PORTAL_ACTIONS_TENANTS',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
key: 'dunningManualRun',
|
|
29
|
+
label: 'Disparo manual da régua de cobrança',
|
|
30
|
+
description: 'Botão para rodar a régua fora do horário do cron. O ciclo diário roda de qualquer forma.',
|
|
31
|
+
envVar: 'BARUK_OFFICE_DUNNING_MANUAL_RUN_TENANTS',
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
const FEATURE_KEYS = new Set(TENANT_FEATURES.map((f) => f.key));
|
|
35
|
+
/**
|
|
36
|
+
* O tenant está na lista da env?
|
|
37
|
+
*
|
|
38
|
+
* Pura de propósito: é a metade da decisão que não precisa de banco, e um teste
|
|
39
|
+
* consegue exercitá-la sem subir nada.
|
|
40
|
+
*/
|
|
41
|
+
export function envAllowlistHas(envValue, tenantId) {
|
|
42
|
+
if (!envValue)
|
|
43
|
+
return false;
|
|
44
|
+
return envValue
|
|
45
|
+
.split(',')
|
|
46
|
+
.map((v) => v.trim())
|
|
47
|
+
.filter(Boolean)
|
|
48
|
+
.includes(tenantId);
|
|
49
|
+
}
|
|
50
|
+
/** O que o tenant ligou por CONFIGURAÇÃO (sem considerar a env). */
|
|
51
|
+
export async function getTenantFeatureSettings(tx) {
|
|
52
|
+
const rows = await tx `
|
|
53
|
+
SELECT settings -> 'features' AS features FROM tenant
|
|
54
|
+
WHERE id = NULLIF(current_setting('app.current_tenant', true), '')::uuid
|
|
55
|
+
AND deleted_at IS NULL
|
|
56
|
+
LIMIT 1
|
|
57
|
+
`;
|
|
58
|
+
const raw = rows[0]?.features ?? {};
|
|
59
|
+
const out = {};
|
|
60
|
+
for (const f of TENANT_FEATURES)
|
|
61
|
+
out[f.key] = raw[f.key] === true;
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Estado final de cada módulo, com a PROCEDÊNCIA.
|
|
66
|
+
*
|
|
67
|
+
* A tela precisa da procedência, não só do booleano: um módulo ligado pela env
|
|
68
|
+
* não pode ser desligado ali, e mostrar um interruptor que não obedece é pior
|
|
69
|
+
* que mostrar o motivo.
|
|
70
|
+
*/
|
|
71
|
+
export async function resolveTenantFeatures(tx, tenantId, env = process.env) {
|
|
72
|
+
const settings = await getTenantFeatureSettings(tx);
|
|
73
|
+
return TENANT_FEATURES.map((f) => {
|
|
74
|
+
const byEnv = envAllowlistHas(env[f.envVar], tenantId);
|
|
75
|
+
const byTenant = settings[f.key] === true;
|
|
76
|
+
return {
|
|
77
|
+
...f,
|
|
78
|
+
enabled: byEnv || byTenant,
|
|
79
|
+
source: byEnv ? 'env' : byTenant ? 'tenant' : null,
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/** Um módulo só. Mesmo resultado de `resolveTenantFeatures`, sem montar a lista. */
|
|
84
|
+
export async function tenantFeatureEnabled(tx, tenantId, key, env = process.env) {
|
|
85
|
+
if (envAllowlistHas(env[TENANT_FEATURES.find((f) => f.key === key)?.envVar ?? ''], tenantId)) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
const settings = await getTenantFeatureSettings(tx);
|
|
89
|
+
return settings[key] === true;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Liga/desliga módulos do escritório corrente.
|
|
93
|
+
*
|
|
94
|
+
* Mesma amarração da identidade: `tenant` não tem RLS, então o `WHERE` sai da
|
|
95
|
+
* GUC e não há parâmetro de tenant. Merge no banco, para não perder a escrita
|
|
96
|
+
* concorrente de outra chave de `settings`.
|
|
97
|
+
*/
|
|
98
|
+
export async function updateTenantFeatures(tx, patch) {
|
|
99
|
+
const clean = {};
|
|
100
|
+
for (const [k, v] of Object.entries(patch)) {
|
|
101
|
+
if (!FEATURE_KEYS.has(k))
|
|
102
|
+
throw new ValidationError(`Módulo desconhecido: ${k}`);
|
|
103
|
+
if (typeof v !== 'boolean')
|
|
104
|
+
throw new ValidationError(`Módulo ${k}: use true ou false.`);
|
|
105
|
+
clean[k] = v;
|
|
106
|
+
}
|
|
107
|
+
const rows = await tx `
|
|
108
|
+
UPDATE tenant
|
|
109
|
+
SET settings = jsonb_set(
|
|
110
|
+
settings, '{features}',
|
|
111
|
+
COALESCE(settings -> 'features', '{}'::jsonb) || ${tx.json(clean)}::jsonb,
|
|
112
|
+
true
|
|
113
|
+
),
|
|
114
|
+
updated_at = now()
|
|
115
|
+
WHERE id = NULLIF(current_setting('app.current_tenant', true), '')::uuid
|
|
116
|
+
AND deleted_at IS NULL
|
|
117
|
+
RETURNING id
|
|
118
|
+
`;
|
|
119
|
+
if (!rows[0])
|
|
120
|
+
throw new ValidationError('Sem contexto de escritório: os módulos não podem ser gravados.');
|
|
121
|
+
return getTenantFeatureSettings(tx);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/tenancy/features.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Identidade e configuração do escritório — o caminho de ESCRITA que faltava.
|
|
4
|
+
*
|
|
5
|
+
* ## A regra que atravessa este arquivo
|
|
6
|
+
*
|
|
7
|
+
* `tenant` é a tabela RAIZ do modelo e **não tem RLS**: ela é a fonte da
|
|
8
|
+
* fronteira, não uma linha protegida por ela. Toda função aqui amarra o `WHERE`
|
|
9
|
+
* na GUC `app.current_tenant` e **nenhuma aceita `tenantId` por parâmetro**.
|
|
10
|
+
*
|
|
11
|
+
* A distinção não é estilística. Um parâmetro é um pedido do chamador, e pedido
|
|
12
|
+
* do chamador não é fronteira: bastaria uma rota esquecer de conferir para que
|
|
13
|
+
* um escritório reescrevesse a identidade de outro. Com a GUC, quem não abriu
|
|
14
|
+
* contexto não escreve em lugar nenhum, e quem abriu só alcança o próprio.
|
|
15
|
+
*/
|
|
16
|
+
/** Fusos brasileiros aceitos. A mesma lista vive no CHECK da 0054. */
|
|
17
|
+
export declare const BR_TIMEZONES: readonly string[];
|
|
18
|
+
export interface TenantProfile {
|
|
19
|
+
code: string;
|
|
20
|
+
displayName: string;
|
|
21
|
+
legalName: string | null;
|
|
22
|
+
documentNumber: string | null;
|
|
23
|
+
/** `cpf` | `cnpj` | null — derivado, para a UI formatar sem readivinhar. */
|
|
24
|
+
documentKind: 'cpf' | 'cnpj' | null;
|
|
25
|
+
timezone: string;
|
|
26
|
+
status: string;
|
|
27
|
+
primaryProduct: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function getTenantProfile(tx: Tx): Promise<TenantProfile>;
|
|
30
|
+
export interface TenantProfileInput {
|
|
31
|
+
displayName?: string;
|
|
32
|
+
legalName?: string | null;
|
|
33
|
+
documentNumber?: string | null;
|
|
34
|
+
timezone?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Atualiza a identidade do escritório corrente.
|
|
38
|
+
*
|
|
39
|
+
* `COALESCE(param, coluna)` para cada campo: o que não vem no corpo não é
|
|
40
|
+
* tocado. `null` explícito em `legalName`/`documentNumber` limpa — e é por isso
|
|
41
|
+
* que os dois têm um sinalizador próprio, senão "limpar" e "não mandar"
|
|
42
|
+
* chegariam aqui com a mesma cara.
|
|
43
|
+
*/
|
|
44
|
+
export declare function updateTenantProfile(tx: Tx, input: TenantProfileInput): Promise<TenantProfile>;
|
|
45
|
+
export type SetupSeverity = 'required' | 'recommended';
|
|
46
|
+
export interface SetupStep {
|
|
47
|
+
key: string;
|
|
48
|
+
label: string;
|
|
49
|
+
done: boolean;
|
|
50
|
+
severity: SetupSeverity;
|
|
51
|
+
/** Rota do console que resolve a pendência. */
|
|
52
|
+
href: string;
|
|
53
|
+
detail: string;
|
|
54
|
+
}
|
|
55
|
+
export interface TenantSetupStatus {
|
|
56
|
+
steps: readonly SetupStep[];
|
|
57
|
+
requiredTotal: number;
|
|
58
|
+
requiredDone: number;
|
|
59
|
+
/** Pronto para operar = toda pendência `required` resolvida. */
|
|
60
|
+
ready: boolean;
|
|
61
|
+
}
|
|
62
|
+
export declare function tenantSetupStatus(tx: Tx): Promise<TenantSetupStatus>;
|
|
63
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/tenancy/settings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAG1C;;;;;;;;;;;;;GAaG;AAEH,sEAAsE;AACtE,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAiBzC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4EAA4E;IAC5E,YAAY,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AA0BD,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAWrE;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,aAAa,CAAC,CA0DxB;AAcD,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,aAAa,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;IACxB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiG1E"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { ValidationError } from '@baruk/shared';
|
|
2
|
+
import { classifyDocument, onlyDigits } from '../import/br-documents.js';
|
|
3
|
+
/**
|
|
4
|
+
* Identidade e configuração do escritório — o caminho de ESCRITA que faltava.
|
|
5
|
+
*
|
|
6
|
+
* ## A regra que atravessa este arquivo
|
|
7
|
+
*
|
|
8
|
+
* `tenant` é a tabela RAIZ do modelo e **não tem RLS**: ela é a fonte da
|
|
9
|
+
* fronteira, não uma linha protegida por ela. Toda função aqui amarra o `WHERE`
|
|
10
|
+
* na GUC `app.current_tenant` e **nenhuma aceita `tenantId` por parâmetro**.
|
|
11
|
+
*
|
|
12
|
+
* A distinção não é estilística. Um parâmetro é um pedido do chamador, e pedido
|
|
13
|
+
* do chamador não é fronteira: bastaria uma rota esquecer de conferir para que
|
|
14
|
+
* um escritório reescrevesse a identidade de outro. Com a GUC, quem não abriu
|
|
15
|
+
* contexto não escreve em lugar nenhum, e quem abriu só alcança o próprio.
|
|
16
|
+
*/
|
|
17
|
+
/** Fusos brasileiros aceitos. A mesma lista vive no CHECK da 0054. */
|
|
18
|
+
export const BR_TIMEZONES = [
|
|
19
|
+
'America/Sao_Paulo',
|
|
20
|
+
'America/Bahia',
|
|
21
|
+
'America/Fortaleza',
|
|
22
|
+
'America/Recife',
|
|
23
|
+
'America/Belem',
|
|
24
|
+
'America/Araguaina',
|
|
25
|
+
'America/Maceio',
|
|
26
|
+
'America/Campo_Grande',
|
|
27
|
+
'America/Cuiaba',
|
|
28
|
+
'America/Santarem',
|
|
29
|
+
'America/Manaus',
|
|
30
|
+
'America/Porto_Velho',
|
|
31
|
+
'America/Boa_Vista',
|
|
32
|
+
'America/Rio_Branco',
|
|
33
|
+
'America/Eirunepe',
|
|
34
|
+
'America/Noronha',
|
|
35
|
+
];
|
|
36
|
+
function mapProfile(row) {
|
|
37
|
+
const kind = row.document_number ? classifyDocument(row.document_number) : null;
|
|
38
|
+
return {
|
|
39
|
+
code: row.code,
|
|
40
|
+
displayName: row.display_name,
|
|
41
|
+
legalName: row.legal_name,
|
|
42
|
+
documentNumber: row.document_number,
|
|
43
|
+
documentKind: kind === 'invalid' ? null : kind,
|
|
44
|
+
timezone: row.timezone,
|
|
45
|
+
status: row.status,
|
|
46
|
+
primaryProduct: row.primary_product,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export async function getTenantProfile(tx) {
|
|
50
|
+
const rows = await tx `
|
|
51
|
+
SELECT code, display_name, legal_name, document_number, timezone, status, primary_product
|
|
52
|
+
FROM tenant
|
|
53
|
+
WHERE id = NULLIF(current_setting('app.current_tenant', true), '')::uuid
|
|
54
|
+
AND deleted_at IS NULL
|
|
55
|
+
LIMIT 1
|
|
56
|
+
`;
|
|
57
|
+
const row = rows[0];
|
|
58
|
+
if (!row)
|
|
59
|
+
throw new ValidationError('Sem contexto de escritório.');
|
|
60
|
+
return mapProfile(row);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Atualiza a identidade do escritório corrente.
|
|
64
|
+
*
|
|
65
|
+
* `COALESCE(param, coluna)` para cada campo: o que não vem no corpo não é
|
|
66
|
+
* tocado. `null` explícito em `legalName`/`documentNumber` limpa — e é por isso
|
|
67
|
+
* que os dois têm um sinalizador próprio, senão "limpar" e "não mandar"
|
|
68
|
+
* chegariam aqui com a mesma cara.
|
|
69
|
+
*/
|
|
70
|
+
export async function updateTenantProfile(tx, input) {
|
|
71
|
+
let displayName = null;
|
|
72
|
+
if (input.displayName !== undefined) {
|
|
73
|
+
const t = input.displayName.trim();
|
|
74
|
+
if (!t)
|
|
75
|
+
throw new ValidationError('Nome do escritório não pode ficar em branco.');
|
|
76
|
+
if (t.length > 160)
|
|
77
|
+
throw new ValidationError('Nome do escritório: máximo de 160 caracteres.');
|
|
78
|
+
displayName = t;
|
|
79
|
+
}
|
|
80
|
+
const clearLegal = input.legalName === null;
|
|
81
|
+
let legalName = null;
|
|
82
|
+
if (typeof input.legalName === 'string') {
|
|
83
|
+
const t = input.legalName.trim();
|
|
84
|
+
if (t.length > 200)
|
|
85
|
+
throw new ValidationError('Razão social: máximo de 200 caracteres.');
|
|
86
|
+
legalName = t || null;
|
|
87
|
+
}
|
|
88
|
+
const clearDocument = input.documentNumber === null;
|
|
89
|
+
let documentNumber = null;
|
|
90
|
+
if (typeof input.documentNumber === 'string') {
|
|
91
|
+
const digits = onlyDigits(input.documentNumber);
|
|
92
|
+
if (digits) {
|
|
93
|
+
// Dígito verificador, não só comprimento. Um CNPJ com DV errado passaria
|
|
94
|
+
// no CHECK do banco (que só conta dígitos) e quebraria na primeira
|
|
95
|
+
// consulta a um serviço externo — longe daqui, sem contexto nenhum.
|
|
96
|
+
const kind = classifyDocument(digits);
|
|
97
|
+
if (kind === 'invalid') {
|
|
98
|
+
throw new ValidationError('CNPJ ou CPF inválido: confira o número digitado.');
|
|
99
|
+
}
|
|
100
|
+
documentNumber = digits;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
let timezone = null;
|
|
104
|
+
if (input.timezone !== undefined) {
|
|
105
|
+
if (!BR_TIMEZONES.includes(input.timezone)) {
|
|
106
|
+
throw new ValidationError(`Fuso horário não suportado: ${input.timezone}`);
|
|
107
|
+
}
|
|
108
|
+
timezone = input.timezone;
|
|
109
|
+
}
|
|
110
|
+
const rows = await tx `
|
|
111
|
+
UPDATE tenant
|
|
112
|
+
SET display_name = COALESCE(${displayName}, display_name),
|
|
113
|
+
legal_name = CASE WHEN ${clearLegal} THEN NULL
|
|
114
|
+
ELSE COALESCE(${legalName}, legal_name) END,
|
|
115
|
+
document_number = CASE WHEN ${clearDocument} THEN NULL
|
|
116
|
+
ELSE COALESCE(${documentNumber}, document_number) END,
|
|
117
|
+
timezone = COALESCE(${timezone}, timezone),
|
|
118
|
+
updated_at = now()
|
|
119
|
+
WHERE id = NULLIF(current_setting('app.current_tenant', true), '')::uuid
|
|
120
|
+
AND deleted_at IS NULL
|
|
121
|
+
RETURNING code, display_name, legal_name, document_number, timezone, status, primary_product
|
|
122
|
+
`;
|
|
123
|
+
const row = rows[0];
|
|
124
|
+
if (!row)
|
|
125
|
+
throw new ValidationError('Sem contexto de escritório: a identidade não pode ser gravada.');
|
|
126
|
+
return mapProfile(row);
|
|
127
|
+
}
|
|
128
|
+
export async function tenantSetupStatus(tx) {
|
|
129
|
+
const profile = await getTenantProfile(tx);
|
|
130
|
+
const [brandingRow] = await tx `
|
|
131
|
+
SELECT COALESCE(settings -> 'branding' ->> 'officeName', '') <> '' AS configured
|
|
132
|
+
FROM tenant
|
|
133
|
+
WHERE id = NULLIF(current_setting('app.current_tenant', true), '')::uuid
|
|
134
|
+
`;
|
|
135
|
+
const [providerRow] = await tx `
|
|
136
|
+
SELECT count(*)::int AS n FROM payment_provider_account
|
|
137
|
+
WHERE status <> 'revoked' AND is_primary = true
|
|
138
|
+
`;
|
|
139
|
+
const [policyRow] = await tx `
|
|
140
|
+
SELECT count(*)::int AS n FROM dunning_rule WHERE active = true
|
|
141
|
+
`;
|
|
142
|
+
const [staffRow] = await tx `
|
|
143
|
+
SELECT count(*)::int AS n FROM membership WHERE deleted_at IS NULL AND status = 'active'
|
|
144
|
+
`;
|
|
145
|
+
const [clientRow] = await tx `
|
|
146
|
+
SELECT count(*)::int AS n FROM client WHERE deleted_at IS NULL AND status = 'active'
|
|
147
|
+
`;
|
|
148
|
+
const [validationRow] = await tx `
|
|
149
|
+
SELECT count(*)::int AS n FROM recurring_item_type_validation
|
|
150
|
+
WHERE status IN ('validated', 'not_applicable')
|
|
151
|
+
`;
|
|
152
|
+
const steps = [
|
|
153
|
+
{
|
|
154
|
+
key: 'profile',
|
|
155
|
+
label: 'Identidade do escritório',
|
|
156
|
+
done: Boolean(profile.legalName && profile.documentNumber),
|
|
157
|
+
severity: 'required',
|
|
158
|
+
href: '/settings/escritorio',
|
|
159
|
+
detail: 'Razão social e CNPJ do escritório.',
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
key: 'branding',
|
|
163
|
+
label: 'Marca',
|
|
164
|
+
done: Boolean(brandingRow?.configured),
|
|
165
|
+
severity: 'required',
|
|
166
|
+
href: '/settings/marca',
|
|
167
|
+
detail: 'Nome, cores e logomarca que assinam os e-mails ao cliente.',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
key: 'provider',
|
|
171
|
+
label: 'Conta de recebimento',
|
|
172
|
+
done: (providerRow?.n ?? 0) > 0,
|
|
173
|
+
severity: 'required',
|
|
174
|
+
href: '/settings/recebimento',
|
|
175
|
+
detail: 'A conta do escritório no gateway. Sem ela não há emissão de cobrança.',
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
key: 'dunning',
|
|
179
|
+
label: 'Régua de cobrança',
|
|
180
|
+
done: (policyRow?.n ?? 0) > 0,
|
|
181
|
+
severity: 'recommended',
|
|
182
|
+
href: '/settings/regua',
|
|
183
|
+
detail: 'Quando e por qual canal o cliente é avisado de um honorário em aberto.',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
key: 'staff',
|
|
187
|
+
label: 'Equipe',
|
|
188
|
+
done: (staffRow?.n ?? 0) > 1,
|
|
189
|
+
severity: 'recommended',
|
|
190
|
+
href: '/users',
|
|
191
|
+
detail: 'Convide quem vai operar o escritório.',
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
key: 'catalog',
|
|
195
|
+
label: 'Conferência do catálogo fiscal',
|
|
196
|
+
done: (validationRow?.n ?? 0) > 0,
|
|
197
|
+
severity: 'required',
|
|
198
|
+
href: '/compliance/catalogo',
|
|
199
|
+
detail: 'Conferir as obrigações do catálogo antes de gerar competência.',
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
key: 'clients',
|
|
203
|
+
label: 'Carteira de clientes',
|
|
204
|
+
done: (clientRow?.n ?? 0) > 0,
|
|
205
|
+
severity: 'recommended',
|
|
206
|
+
href: '/clients',
|
|
207
|
+
detail: 'Cadastre ou importe os clientes do escritório.',
|
|
208
|
+
},
|
|
209
|
+
];
|
|
210
|
+
const required = steps.filter((s) => s.severity === 'required');
|
|
211
|
+
return {
|
|
212
|
+
steps,
|
|
213
|
+
requiredTotal: required.length,
|
|
214
|
+
requiredDone: required.filter((s) => s.done).length,
|
|
215
|
+
ready: required.every((s) => s.done),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/tenancy/settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,22 @@ export interface TenantMember {
|
|
|
14
14
|
export declare function listTenantMembers(tx: Tx): Promise<TenantMember[]>;
|
|
15
15
|
/** Substitui o(s) papel(is) do usuário no tenant por um único papel (por key). */
|
|
16
16
|
export declare function setUserRole(tx: Tx, userId: string, roleKey: string): Promise<void>;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Ativa/desativa (ou revoga) a membership. Bloqueia desativar o último admin.
|
|
19
|
+
*
|
|
20
|
+
* Tirar o acesso **derruba as sessões abertas** daquele tenant. Sem isso, a
|
|
21
|
+
* revogação só valia para quem tentasse entrar de novo: quem já estava dentro
|
|
22
|
+
* seguia trabalhando até a sessão expirar — até doze horas depois. O escritório
|
|
23
|
+
* que demite alguém à tarde espera que o acesso acabe naquele instante, não no
|
|
24
|
+
* dia seguinte.
|
|
25
|
+
*
|
|
26
|
+
* O `authenticate` já reconfere a membership a cada requisição, e sozinho
|
|
27
|
+
* bastaria. Derrubar a sessão aqui é a segunda camada: torna a intenção
|
|
28
|
+
* explícita no ato, e não depende de nenhuma outra parte lembrar da regra.
|
|
29
|
+
*
|
|
30
|
+
* Só as sessões DAQUELE tenant caem. Quem atende dois escritórios não perde o
|
|
31
|
+
* acesso ao outro por causa deste.
|
|
32
|
+
*/
|
|
18
33
|
export declare function setMembershipStatus(tx: Tx, userId: string, status: 'active' | 'invited' | 'revoked'): Promise<number>;
|
|
19
34
|
export interface InviteUserInput {
|
|
20
35
|
email: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/users/repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAI1C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA8BvE;AAeD,kFAAkF;AAClF,wBAAsB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBxF;AAWD
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/users/repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAI1C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA8BvE;AAeD,kFAAkF;AAClF,wBAAsB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBxF;AAWD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GACvC,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB;8EAC0E;IAC1E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0D1F;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,4BAA4B,CAAC,CAkDvC"}
|
package/dist/users/repository.js
CHANGED
|
@@ -66,7 +66,22 @@ async function isUserAdmin(tx, userId) {
|
|
|
66
66
|
`;
|
|
67
67
|
return (rows[0]?.n ?? 0) > 0;
|
|
68
68
|
}
|
|
69
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Ativa/desativa (ou revoga) a membership. Bloqueia desativar o último admin.
|
|
71
|
+
*
|
|
72
|
+
* Tirar o acesso **derruba as sessões abertas** daquele tenant. Sem isso, a
|
|
73
|
+
* revogação só valia para quem tentasse entrar de novo: quem já estava dentro
|
|
74
|
+
* seguia trabalhando até a sessão expirar — até doze horas depois. O escritório
|
|
75
|
+
* que demite alguém à tarde espera que o acesso acabe naquele instante, não no
|
|
76
|
+
* dia seguinte.
|
|
77
|
+
*
|
|
78
|
+
* O `authenticate` já reconfere a membership a cada requisição, e sozinho
|
|
79
|
+
* bastaria. Derrubar a sessão aqui é a segunda camada: torna a intenção
|
|
80
|
+
* explícita no ato, e não depende de nenhuma outra parte lembrar da regra.
|
|
81
|
+
*
|
|
82
|
+
* Só as sessões DAQUELE tenant caem. Quem atende dois escritórios não perde o
|
|
83
|
+
* acesso ao outro por causa deste.
|
|
84
|
+
*/
|
|
70
85
|
export async function setMembershipStatus(tx, userId, status) {
|
|
71
86
|
if (status !== 'active' &&
|
|
72
87
|
(await isUserAdmin(tx, userId)) &&
|
|
@@ -79,6 +94,14 @@ export async function setMembershipStatus(tx, userId, status) {
|
|
|
79
94
|
AND tenant_id = current_setting('app.current_tenant')::uuid
|
|
80
95
|
RETURNING id
|
|
81
96
|
`;
|
|
97
|
+
if (status !== 'active') {
|
|
98
|
+
await tx `
|
|
99
|
+
UPDATE user_session SET revoked_at = now()
|
|
100
|
+
WHERE user_id = ${userId}
|
|
101
|
+
AND revoked_at IS NULL
|
|
102
|
+
AND active_tenant_id = current_setting('app.current_tenant')::uuid
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
82
105
|
return rows.count;
|
|
83
106
|
}
|
|
84
107
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/users/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAehD,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAM;IAC5C,MAAM,IAAI,GAAG,MAAM,EAAE,CASpB;;;;;;;;;;;GAWA,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,MAAM,EAAE,CAAC,CAAC,OAAO;QACjB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,gBAAgB,EAAE,CAAC,CAAC,MAAM;QAC1B,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;KACzB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,EAAM,EAAE,aAAsB;IAC7D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAiB;;;;;;wBAMhB,eAAe;aAC1B,aAAa,IAAI,IAAI,kCAAkC,aAAa,IAAI,IAAI;GACtF,CAAC;IACF,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAM,EAAE,MAAc,EAAE,OAAe;IACvE,+CAA+C;IAC/C,MAAM,aAAa,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxD,IACE,CAAC,aAAa;QACd,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,EAC3C,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,0DAA0D,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAEpB,mCAAmC,OAAO,wBAAwB,CAAC;IACpE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;IACxE,MAAM,EAAE,CAAA;;sBAEY,MAAM;;GAEzB,CAAC;IACF,MAAM,EAAE,CAAA;;cAEI,MAAM,EAAE,kDAAkD,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;GAC1F,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAM,EAAE,MAAc;IAC/C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAiB;;;yBAGf,MAAM,8CAA8C,eAAe;GACzF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/users/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAehD,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAM;IAC5C,MAAM,IAAI,GAAG,MAAM,EAAE,CASpB;;;;;;;;;;;GAWA,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,MAAM,EAAE,CAAC,CAAC,OAAO;QACjB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,gBAAgB,EAAE,CAAC,CAAC,MAAM;QAC1B,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;KACzB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,EAAM,EAAE,aAAsB;IAC7D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAiB;;;;;;wBAMhB,eAAe;aAC1B,aAAa,IAAI,IAAI,kCAAkC,aAAa,IAAI,IAAI;GACtF,CAAC;IACF,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAM,EAAE,MAAc,EAAE,OAAe;IACvE,+CAA+C;IAC/C,MAAM,aAAa,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxD,IACE,CAAC,aAAa;QACd,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,EAC3C,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,0DAA0D,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAEpB,mCAAmC,OAAO,wBAAwB,CAAC;IACpE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;IACxE,MAAM,EAAE,CAAA;;sBAEY,MAAM;;GAEzB,CAAC;IACF,MAAM,EAAE,CAAA;;cAEI,MAAM,EAAE,kDAAkD,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;GAC1F,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAM,EAAE,MAAc;IAC/C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAiB;;;yBAGf,MAAM,8CAA8C,eAAe;GACzF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAM,EACN,MAAc,EACd,MAAwC;IAExC,IACE,MAAM,KAAK,QAAQ;QACnB,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,EAC3C,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,2DAA2D,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAA;qCACc,MAAM;sBACrB,MAAM;;;GAGzB,CAAC;IACF,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,EAAE,CAAA;;wBAEY,MAAM;;;KAGzB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;AAyBD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAM,EAAE,KAAsB;IAC7D,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAwE;wEAC3B,KAAK,CAAC,KAAK;GAChF,CAAC;IAEF,IAAI,MAAc,CAAC;IACnB,IAAI,QAAgB,CAAC;IACrB,IAAI,SAAkB,CAAC;IAEvB,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,uEAAuE;QACvE,uEAAuE;QACvE,mEAAmE;QACnE,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YACtC,MAAM,IAAI,aAAa,CACrB,wFAAwF,CACzF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjC,SAAS,GAAG,KAAK,CAAC;QAClB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAkB;kDACI,MAAM,oBAAoB,QAAQ;KAC/E,CAAC;QACF,IAAI,OAAO,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,mCAAmC,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,EAAE,CAAC;QAClB,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC1B,SAAS,GAAG,IAAI,CAAC;QACjB,MAAM,EAAE,CAAA;;gBAEI,MAAM,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ;KACpD,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAA;;cAEI,MAAM,EAAE,KAAK,QAAQ,KAAK,MAAM,gBAAgB,KAAK,CAAC,SAAS;GAC1E,CAAC;IACF,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzE,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC;IACrC,CAAC;IAED,MAAM,WAAW,CAAC,EAAE,EAAE;QACpB,OAAO,EAAE,KAAK,CAAC,SAAS;QACxB,MAAM,EAAE,cAAc;QACtB,YAAY,EAAE,MAAM;QACpB,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE;KACpE,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,EAAM,EACN,KAA4C;IAE5C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,EAAE,CAQpB;;;;;;;;;0BASuB,QAAQ;wBACV,KAAK,CAAC,MAAM;;;;GAIjC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,aAAa,CAAC,qCAAqC,CAAC,CAAC;IAC5E,IACE,MAAM,CAAC,SAAS,KAAK,OAAO;QAC5B,MAAM,CAAC,WAAW,KAAK,SAAS;QAChC,MAAM,CAAC,iBAAiB,KAAK,SAAS,EACtC,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,6CAA6C,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvF,MAAM,WAAW,CAAC,EAAE,EAAE;QACpB,OAAO,EAAE,KAAK,CAAC,SAAS;QACxB,MAAM,EAAE,sBAAsB;QAC9B,YAAY,EAAE,MAAM;QACpB,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;KAClC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,SAAS;QAC1B,eAAe,EAAE,UAAU,CAAC,KAAK;KAClC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,EAAM;IACnC,MAAM,IAAI,GAAG,MAAM,EAAE,CAEpB,iEAAiE,CAAC;IACnE,OAAO,IAAI,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC;AAC5B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@baruk/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -23,6 +23,12 @@
|
|
|
23
23
|
"import": "./dist/pricing-engine/index.js",
|
|
24
24
|
"require": "./dist/cjs/pricing-engine/index.js",
|
|
25
25
|
"default": "./dist/pricing-engine/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./fiscal-fixtures": {
|
|
28
|
+
"types": "./dist/fiscal/ingestion/__fixtures__/nfse.d.ts",
|
|
29
|
+
"import": "./dist/fiscal/ingestion/__fixtures__/nfse.js",
|
|
30
|
+
"require": "./dist/cjs/fiscal/ingestion/__fixtures__/nfse.js",
|
|
31
|
+
"default": "./dist/fiscal/ingestion/__fixtures__/nfse.js"
|
|
26
32
|
}
|
|
27
33
|
},
|
|
28
34
|
"files": [
|
|
@@ -61,6 +67,7 @@
|
|
|
61
67
|
"migrate": "tsx src/db/migrate.ts",
|
|
62
68
|
"seed": "tsx src/db/seed.ts",
|
|
63
69
|
"clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
64
|
-
"seed:catalog": "tsx src/db/seed-catalog.ts"
|
|
70
|
+
"seed:catalog": "tsx src/db/seed-catalog.ts",
|
|
71
|
+
"provision:e2e": "tsx src/db/provision-e2e-identity.ts"
|
|
65
72
|
}
|
|
66
73
|
}
|