@baruk/core 0.3.1 → 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 +10 -0
- package/CHANGELOG.md +127 -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/password-reset.d.ts +30 -1
- package/dist/auth/password-reset.d.ts.map +1 -1
- package/dist/auth/password-reset.js +139 -11
- package/dist/auth/password-reset.js.map +1 -1
- package/dist/auth/service.d.ts +60 -2
- package/dist/auth/service.d.ts.map +1 -1
- package/dist/auth/service.js +121 -11
- package/dist/auth/service.js.map +1 -1
- package/dist/billing/ar-repository.d.ts +374 -0
- package/dist/billing/ar-repository.d.ts.map +1 -0
- package/dist/billing/ar-repository.js +783 -0
- package/dist/billing/ar-repository.js.map +1 -0
- package/dist/billing/auto-generation.d.ts +87 -0
- package/dist/billing/auto-generation.d.ts.map +1 -0
- package/dist/billing/auto-generation.js +181 -0
- package/dist/billing/auto-generation.js.map +1 -0
- package/dist/billing/live-guard.d.ts +64 -0
- package/dist/billing/live-guard.d.ts.map +1 -0
- package/dist/billing/live-guard.js +68 -0
- package/dist/billing/live-guard.js.map +1 -0
- package/dist/billing/payment-means-catalog.d.ts +17 -0
- package/dist/billing/payment-means-catalog.d.ts.map +1 -0
- package/dist/billing/payment-means-catalog.js +21 -0
- package/dist/billing/payment-means-catalog.js.map +1 -0
- package/dist/billing/payment-means.d.ts +38 -0
- package/dist/billing/payment-means.d.ts.map +1 -0
- package/dist/billing/payment-means.js +29 -0
- package/dist/billing/payment-means.js.map +1 -0
- package/dist/billing/payment-rail.d.ts +118 -0
- package/dist/billing/payment-rail.d.ts.map +1 -0
- package/dist/billing/payment-rail.js +295 -0
- package/dist/billing/payment-rail.js.map +1 -0
- package/dist/billing/provider/asaas.d.ts +46 -1
- package/dist/billing/provider/asaas.d.ts.map +1 -1
- package/dist/billing/provider/asaas.js +194 -14
- package/dist/billing/provider/asaas.js.map +1 -1
- package/dist/billing/provider/manual.js +1 -1
- package/dist/billing/provider/manual.js.map +1 -1
- package/dist/billing/provider/types.d.ts +115 -8
- package/dist/billing/provider/types.d.ts.map +1 -1
- package/dist/billing/provider-account.d.ts +127 -0
- package/dist/billing/provider-account.d.ts.map +1 -0
- package/dist/billing/provider-account.js +217 -0
- package/dist/billing/provider-account.js.map +1 -0
- package/dist/billing/provider-onboarding.d.ts +67 -0
- package/dist/billing/provider-onboarding.d.ts.map +1 -0
- package/dist/billing/provider-onboarding.js +234 -0
- package/dist/billing/provider-onboarding.js.map +1 -0
- package/dist/billing/receivable.d.ts +5 -1
- package/dist/billing/receivable.d.ts.map +1 -1
- package/dist/billing/reconcile.d.ts +58 -0
- package/dist/billing/reconcile.d.ts.map +1 -0
- package/dist/billing/reconcile.js +138 -0
- package/dist/billing/reconcile.js.map +1 -0
- package/dist/billing/repository.d.ts +134 -1
- package/dist/billing/repository.d.ts.map +1 -1
- package/dist/billing/repository.js +193 -20
- 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/password-reset.js +141 -11
- package/dist/cjs/auth/password-reset.js.map +1 -1
- package/dist/cjs/auth/service.js +121 -10
- package/dist/cjs/auth/service.js.map +1 -1
- package/dist/cjs/billing/ar-repository.js +804 -0
- package/dist/cjs/billing/ar-repository.js.map +1 -0
- package/dist/cjs/billing/auto-generation.js +186 -0
- package/dist/cjs/billing/auto-generation.js.map +1 -0
- package/dist/cjs/billing/live-guard.js +72 -0
- package/dist/cjs/billing/live-guard.js.map +1 -0
- package/dist/cjs/billing/payment-means-catalog.js +25 -0
- package/dist/cjs/billing/payment-means-catalog.js.map +1 -0
- package/dist/cjs/billing/payment-means.js +33 -0
- package/dist/cjs/billing/payment-means.js.map +1 -0
- package/dist/cjs/billing/payment-rail.js +301 -0
- package/dist/cjs/billing/payment-rail.js.map +1 -0
- package/dist/cjs/billing/provider/asaas.js +194 -14
- package/dist/cjs/billing/provider/asaas.js.map +1 -1
- package/dist/cjs/billing/provider/manual.js +1 -1
- package/dist/cjs/billing/provider/manual.js.map +1 -1
- package/dist/cjs/billing/provider-account.js +229 -0
- package/dist/cjs/billing/provider-account.js.map +1 -0
- package/dist/cjs/billing/provider-onboarding.js +239 -0
- package/dist/cjs/billing/provider-onboarding.js.map +1 -0
- package/dist/cjs/billing/reconcile.js +143 -0
- package/dist/cjs/billing/reconcile.js.map +1 -0
- package/dist/cjs/billing/repository.js +197 -19
- 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 +276 -23
- package/dist/cjs/clients/repository.js.map +1 -1
- package/dist/cjs/collection/branding.js +330 -0
- package/dist/cjs/collection/branding.js.map +1 -0
- package/dist/cjs/collection/channel-accounts.js +137 -0
- package/dist/cjs/collection/channel-accounts.js.map +1 -0
- package/dist/cjs/collection/channel.js +17 -0
- package/dist/cjs/collection/channel.js.map +1 -0
- package/dist/cjs/collection/clearance-store.js +74 -0
- package/dist/cjs/collection/clearance-store.js.map +1 -0
- package/dist/cjs/collection/communication-bridge.js +140 -0
- package/dist/cjs/collection/communication-bridge.js.map +1 -0
- package/dist/cjs/collection/communication-runtime.js +256 -0
- package/dist/cjs/collection/communication-runtime.js.map +1 -0
- package/dist/cjs/collection/consent-repository.js +84 -0
- package/dist/cjs/collection/consent-repository.js.map +1 -0
- package/dist/cjs/collection/copy.js +125 -0
- package/dist/cjs/collection/copy.js.map +1 -0
- package/dist/cjs/collection/delivery-callback.js +151 -0
- package/dist/cjs/collection/delivery-callback.js.map +1 -0
- package/dist/cjs/collection/email-layout.js +252 -0
- package/dist/cjs/collection/email-layout.js.map +1 -0
- package/dist/cjs/collection/engine.js +434 -0
- package/dist/cjs/collection/engine.js.map +1 -0
- package/dist/cjs/collection/format.js +76 -0
- package/dist/cjs/collection/format.js.map +1 -0
- package/dist/cjs/collection/payment-block.js +3 -0
- package/dist/cjs/collection/payment-block.js.map +1 -0
- package/dist/cjs/collection/policy.js +175 -0
- package/dist/cjs/collection/policy.js.map +1 -0
- package/dist/cjs/collection/repository.js +260 -0
- package/dist/cjs/collection/repository.js.map +1 -0
- package/dist/cjs/collection/subject.js +104 -0
- package/dist/cjs/collection/subject.js.map +1 -0
- package/dist/cjs/collection/template-catalog.js +165 -0
- package/dist/cjs/collection/template-catalog.js.map +1 -0
- package/dist/cjs/collection/template.js +78 -0
- package/dist/cjs/collection/template.js.map +1 -0
- package/dist/cjs/communication/adapters/email.js +132 -0
- package/dist/cjs/communication/adapters/email.js.map +1 -0
- package/dist/cjs/communication/adapters/sms.js +127 -0
- package/dist/cjs/communication/adapters/sms.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp-language.js +39 -0
- package/dist/cjs/communication/adapters/whatsapp-language.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp-templates.js +100 -0
- package/dist/cjs/communication/adapters/whatsapp-templates.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp.js +213 -0
- package/dist/cjs/communication/adapters/whatsapp.js.map +1 -0
- package/dist/cjs/communication/audit.js +61 -0
- package/dist/cjs/communication/audit.js.map +1 -0
- package/dist/cjs/communication/capabilities.js +76 -0
- package/dist/cjs/communication/capabilities.js.map +1 -0
- package/dist/cjs/communication/channel.js +53 -0
- package/dist/cjs/communication/channel.js.map +1 -0
- package/dist/cjs/communication/claim.js +228 -0
- package/dist/cjs/communication/claim.js.map +1 -0
- package/dist/cjs/communication/clearance.js +18 -0
- package/dist/cjs/communication/clearance.js.map +1 -0
- package/dist/cjs/communication/consent.js +43 -0
- package/dist/cjs/communication/consent.js.map +1 -0
- package/dist/cjs/communication/context.js +45 -0
- package/dist/cjs/communication/context.js.map +1 -0
- package/dist/cjs/communication/credentials.js +121 -0
- package/dist/cjs/communication/credentials.js.map +1 -0
- package/dist/cjs/communication/dry-run-scenario.js +166 -0
- package/dist/cjs/communication/dry-run-scenario.js.map +1 -0
- package/dist/cjs/communication/dry-run.js +97 -0
- package/dist/cjs/communication/dry-run.js.map +1 -0
- package/dist/cjs/communication/engine.js +495 -0
- package/dist/cjs/communication/engine.js.map +1 -0
- package/dist/cjs/communication/graph.js +50 -0
- package/dist/cjs/communication/graph.js.map +1 -0
- package/dist/cjs/communication/idempotency.js +26 -0
- package/dist/cjs/communication/idempotency.js.map +1 -0
- package/dist/cjs/communication/identity.js +110 -0
- package/dist/cjs/communication/identity.js.map +1 -0
- package/dist/cjs/communication/index.js +135 -0
- package/dist/cjs/communication/index.js.map +1 -0
- package/dist/cjs/communication/onboarding.js +297 -0
- package/dist/cjs/communication/onboarding.js.map +1 -0
- package/dist/cjs/communication/policy.js +16 -0
- package/dist/cjs/communication/policy.js.map +1 -0
- package/dist/cjs/communication/routing.js +77 -0
- package/dist/cjs/communication/routing.js.map +1 -0
- package/dist/cjs/communication/sender-profile.js +128 -0
- package/dist/cjs/communication/sender-profile.js.map +1 -0
- package/dist/cjs/communication/status.js +86 -0
- package/dist/cjs/communication/status.js.map +1 -0
- package/dist/cjs/communication/stores/onboarding.js +135 -0
- package/dist/cjs/communication/stores/onboarding.js.map +1 -0
- package/dist/cjs/communication/stores/postgres.js +458 -0
- package/dist/cjs/communication/stores/postgres.js.map +1 -0
- package/dist/cjs/communication/stores/routing.js +334 -0
- package/dist/cjs/communication/stores/routing.js.map +1 -0
- package/dist/cjs/communication/stores/secrets.js +126 -0
- package/dist/cjs/communication/stores/secrets.js.map +1 -0
- package/dist/cjs/communication/template-provider.js +22 -0
- package/dist/cjs/communication/template-provider.js.map +1 -0
- package/dist/cjs/communication/template.js +63 -0
- package/dist/cjs/communication/template.js.map +1 -0
- package/dist/cjs/communication/webhook-subscription.js +258 -0
- package/dist/cjs/communication/webhook-subscription.js.map +1 -0
- package/dist/cjs/communication/webhook.js +292 -0
- package/dist/cjs/communication/webhook.js.map +1 -0
- 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 +622 -0
- package/dist/cjs/competence/repository.js.map +1 -0
- package/dist/cjs/contacts/phone.js +192 -0
- package/dist/cjs/contacts/phone.js.map +1 -0
- 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/db/seed-catalog.js +48 -0
- package/dist/cjs/db/seed-catalog.js.map +1 -0
- package/dist/cjs/db/seed.js +15 -7
- package/dist/cjs/db/seed.js.map +1 -1
- package/dist/cjs/documents/repository.js +244 -0
- package/dist/cjs/documents/repository.js.map +1 -0
- package/dist/cjs/documents/requests.js +136 -0
- package/dist/cjs/documents/requests.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 +711 -39
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/documents.js +224 -17
- 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 +1 -0
- package/dist/cjs/legal/types.js.map +1 -1
- package/dist/cjs/mail/auth-templates.js +29 -0
- package/dist/cjs/mail/auth-templates.js.map +1 -0
- package/dist/cjs/mail/dedup-store.js +12 -51
- package/dist/cjs/mail/dedup-store.js.map +1 -1
- package/dist/cjs/mail/index.js +16 -4
- package/dist/cjs/mail/index.js.map +1 -1
- package/dist/cjs/mail/provider.js +12 -247
- package/dist/cjs/mail/provider.js.map +1 -1
- package/dist/cjs/mail/resend.js +14 -18
- package/dist/cjs/mail/resend.js.map +1 -1
- package/dist/cjs/mail/sender-resolver.js +12 -11
- package/dist/cjs/mail/sender-resolver.js.map +1 -1
- package/dist/cjs/mail/template-renderer.js +11 -16
- package/dist/cjs/mail/template-renderer.js.map +1 -1
- package/dist/cjs/mail/transactional-outbound.js +117 -0
- package/dist/cjs/mail/transactional-outbound.js.map +1 -0
- package/dist/cjs/mail/types.js +8 -35
- package/dist/cjs/mail/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/portal/provisioning.js +144 -0
- package/dist/cjs/portal/provisioning.js.map +1 -0
- package/dist/cjs/pricing-engine/canonical.js +42 -0
- package/dist/cjs/pricing-engine/canonical.js.map +1 -0
- package/dist/cjs/pricing-engine/errors.js +6 -1
- package/dist/cjs/pricing-engine/errors.js.map +1 -1
- package/dist/cjs/pricing-engine/index.js +12 -1
- package/dist/cjs/pricing-engine/index.js.map +1 -1
- package/dist/cjs/pricing-engine/pipeline.js +200 -26
- package/dist/cjs/pricing-engine/pipeline.js.map +1 -1
- package/dist/cjs/pricing-engine/shadow-adapter.js +79 -0
- package/dist/cjs/pricing-engine/shadow-adapter.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-diff.js +55 -0
- package/dist/cjs/pricing-engine/shadow-diff.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-facade.js +85 -0
- package/dist/cjs/pricing-engine/shadow-facade.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-legacy-types.js +19 -0
- package/dist/cjs/pricing-engine/shadow-legacy-types.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-metrics.js +34 -0
- package/dist/cjs/pricing-engine/shadow-metrics.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-normalizer.js +42 -0
- package/dist/cjs/pricing-engine/shadow-normalizer.js.map +1 -0
- package/dist/cjs/rbac/authorize.js +28 -0
- package/dist/cjs/rbac/authorize.js.map +1 -1
- package/dist/cjs/rbac/catalog.js +101 -1
- package/dist/cjs/rbac/catalog.js.map +1 -1
- package/dist/cjs/rbac/workload-provisioning.js +160 -0
- package/dist/cjs/rbac/workload-provisioning.js.map +1 -0
- package/dist/cjs/rbac/workload.js +191 -0
- package/dist/cjs/rbac/workload.js.map +1 -0
- package/dist/cjs/storage/checksum.js +15 -0
- package/dist/cjs/storage/checksum.js.map +1 -0
- package/dist/cjs/storage/key.js +72 -0
- package/dist/cjs/storage/key.js.map +1 -0
- package/dist/cjs/storage/local.js +100 -0
- package/dist/cjs/storage/local.js.map +1 -0
- package/dist/cjs/storage/r2.js +181 -0
- package/dist/cjs/storage/r2.js.map +1 -0
- package/dist/cjs/storage/registry.js +41 -0
- package/dist/cjs/storage/registry.js.map +1 -0
- package/dist/cjs/storage/types.js +50 -0
- package/dist/cjs/storage/types.js.map +1 -0
- package/dist/cjs/subscription-billing/index.js +2 -1
- package/dist/cjs/subscription-billing/index.js.map +1 -1
- package/dist/cjs/subscription-billing/provider/asaas.js +32 -7
- package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -1
- package/dist/cjs/subscription-billing/provider/disabled.js +8 -0
- package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -1
- package/dist/cjs/subscription-billing/provider/registry.js +17 -0
- package/dist/cjs/subscription-billing/provider/registry.js.map +1 -1
- package/dist/cjs/subscription-billing/service.js +208 -83
- package/dist/cjs/subscription-billing/service.js.map +1 -1
- package/dist/cjs/subscription-billing/types.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/provisioning.js +32 -8
- package/dist/cjs/tenancy/provisioning.js.map +1 -1
- package/dist/cjs/tenancy/settings.js +224 -0
- package/dist/cjs/tenancy/settings.js.map +1 -0
- package/dist/cjs/users/repository.js +143 -3
- package/dist/cjs/users/repository.js.map +1 -1
- package/dist/cjs/vault/repository.js +81 -0
- package/dist/cjs/vault/repository.js.map +1 -1
- package/dist/clients/ibge.d.ts +17 -0
- package/dist/clients/ibge.d.ts.map +1 -0
- package/dist/clients/ibge.js +98 -0
- package/dist/clients/ibge.js.map +1 -0
- package/dist/clients/repository.d.ts +196 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +270 -24
- package/dist/clients/repository.js.map +1 -1
- package/dist/collection/branding.d.ts +137 -0
- package/dist/collection/branding.d.ts.map +1 -0
- package/dist/collection/branding.js +322 -0
- package/dist/collection/branding.js.map +1 -0
- package/dist/collection/channel-accounts.d.ts +57 -0
- package/dist/collection/channel-accounts.d.ts.map +1 -0
- package/dist/collection/channel-accounts.js +133 -0
- package/dist/collection/channel-accounts.js.map +1 -0
- package/dist/collection/channel.d.ts +24 -0
- package/dist/collection/channel.d.ts.map +1 -0
- package/dist/collection/channel.js +16 -0
- package/dist/collection/channel.js.map +1 -0
- 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-bridge.d.ts +66 -0
- package/dist/collection/communication-bridge.d.ts.map +1 -0
- package/dist/collection/communication-bridge.js +134 -0
- package/dist/collection/communication-bridge.js.map +1 -0
- package/dist/collection/communication-runtime.d.ts +132 -0
- package/dist/collection/communication-runtime.d.ts.map +1 -0
- package/dist/collection/communication-runtime.js +249 -0
- package/dist/collection/communication-runtime.js.map +1 -0
- package/dist/collection/consent-repository.d.ts +32 -0
- package/dist/collection/consent-repository.d.ts.map +1 -0
- package/dist/collection/consent-repository.js +79 -0
- package/dist/collection/consent-repository.js.map +1 -0
- package/dist/collection/copy.d.ts +50 -0
- package/dist/collection/copy.d.ts.map +1 -0
- package/dist/collection/copy.js +122 -0
- package/dist/collection/copy.js.map +1 -0
- package/dist/collection/delivery-callback.d.ts +49 -0
- package/dist/collection/delivery-callback.d.ts.map +1 -0
- package/dist/collection/delivery-callback.js +147 -0
- package/dist/collection/delivery-callback.js.map +1 -0
- package/dist/collection/email-layout.d.ts +45 -0
- package/dist/collection/email-layout.d.ts.map +1 -0
- package/dist/collection/email-layout.js +247 -0
- package/dist/collection/email-layout.js.map +1 -0
- package/dist/collection/engine.d.ts +200 -0
- package/dist/collection/engine.d.ts.map +1 -0
- package/dist/collection/engine.js +427 -0
- package/dist/collection/engine.js.map +1 -0
- package/dist/collection/format.d.ts +32 -0
- package/dist/collection/format.d.ts.map +1 -0
- package/dist/collection/format.js +70 -0
- package/dist/collection/format.js.map +1 -0
- package/dist/collection/payment-block.d.ts +24 -0
- package/dist/collection/payment-block.d.ts.map +1 -0
- package/dist/collection/payment-block.js +2 -0
- package/dist/collection/payment-block.js.map +1 -0
- package/dist/collection/policy.d.ts +78 -0
- package/dist/collection/policy.d.ts.map +1 -0
- package/dist/collection/policy.js +168 -0
- package/dist/collection/policy.js.map +1 -0
- package/dist/collection/repository.d.ts +129 -0
- package/dist/collection/repository.d.ts.map +1 -0
- package/dist/collection/repository.js +246 -0
- package/dist/collection/repository.js.map +1 -0
- package/dist/collection/subject.d.ts +66 -0
- package/dist/collection/subject.d.ts.map +1 -0
- package/dist/collection/subject.js +99 -0
- package/dist/collection/subject.js.map +1 -0
- package/dist/collection/template-catalog.d.ts +16 -0
- package/dist/collection/template-catalog.d.ts.map +1 -0
- package/dist/collection/template-catalog.js +162 -0
- package/dist/collection/template-catalog.js.map +1 -0
- package/dist/collection/template.d.ts +37 -0
- package/dist/collection/template.d.ts.map +1 -0
- package/dist/collection/template.js +73 -0
- package/dist/collection/template.js.map +1 -0
- package/dist/communication/adapters/email.d.ts +28 -0
- package/dist/communication/adapters/email.d.ts.map +1 -0
- package/dist/communication/adapters/email.js +129 -0
- package/dist/communication/adapters/email.js.map +1 -0
- package/dist/communication/adapters/sms.d.ts +95 -0
- package/dist/communication/adapters/sms.d.ts.map +1 -0
- package/dist/communication/adapters/sms.js +121 -0
- package/dist/communication/adapters/sms.js.map +1 -0
- package/dist/communication/adapters/whatsapp-language.d.ts +34 -0
- package/dist/communication/adapters/whatsapp-language.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp-language.js +36 -0
- package/dist/communication/adapters/whatsapp-language.js.map +1 -0
- package/dist/communication/adapters/whatsapp-templates.d.ts +18 -0
- package/dist/communication/adapters/whatsapp-templates.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp-templates.js +97 -0
- package/dist/communication/adapters/whatsapp-templates.js.map +1 -0
- package/dist/communication/adapters/whatsapp.d.ts +29 -0
- package/dist/communication/adapters/whatsapp.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp.js +210 -0
- package/dist/communication/adapters/whatsapp.js.map +1 -0
- package/dist/communication/audit.d.ts +105 -0
- package/dist/communication/audit.d.ts.map +1 -0
- package/dist/communication/audit.js +56 -0
- package/dist/communication/audit.js.map +1 -0
- package/dist/communication/capabilities.d.ts +88 -0
- package/dist/communication/capabilities.d.ts.map +1 -0
- package/dist/communication/capabilities.js +72 -0
- package/dist/communication/capabilities.js.map +1 -0
- package/dist/communication/channel.d.ts +125 -0
- package/dist/communication/channel.d.ts.map +1 -0
- package/dist/communication/channel.js +47 -0
- package/dist/communication/channel.js.map +1 -0
- package/dist/communication/claim.d.ts +368 -0
- package/dist/communication/claim.d.ts.map +1 -0
- package/dist/communication/claim.js +224 -0
- package/dist/communication/claim.js.map +1 -0
- 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/consent.d.ts +65 -0
- package/dist/communication/consent.d.ts.map +1 -0
- package/dist/communication/consent.js +40 -0
- package/dist/communication/consent.js.map +1 -0
- package/dist/communication/context.d.ts +48 -0
- package/dist/communication/context.d.ts.map +1 -0
- package/dist/communication/context.js +41 -0
- package/dist/communication/context.js.map +1 -0
- package/dist/communication/credentials.d.ts +74 -0
- package/dist/communication/credentials.d.ts.map +1 -0
- package/dist/communication/credentials.js +115 -0
- package/dist/communication/credentials.js.map +1 -0
- package/dist/communication/dry-run-scenario.d.ts +37 -0
- package/dist/communication/dry-run-scenario.d.ts.map +1 -0
- package/dist/communication/dry-run-scenario.js +163 -0
- package/dist/communication/dry-run-scenario.js.map +1 -0
- package/dist/communication/dry-run.d.ts +40 -0
- package/dist/communication/dry-run.d.ts.map +1 -0
- package/dist/communication/dry-run.js +92 -0
- package/dist/communication/dry-run.js.map +1 -0
- package/dist/communication/engine.d.ts +163 -0
- package/dist/communication/engine.d.ts.map +1 -0
- package/dist/communication/engine.js +492 -0
- package/dist/communication/engine.js.map +1 -0
- package/dist/communication/graph.d.ts +38 -0
- package/dist/communication/graph.d.ts.map +1 -0
- package/dist/communication/graph.js +45 -0
- package/dist/communication/graph.js.map +1 -0
- package/dist/communication/idempotency.d.ts +33 -0
- package/dist/communication/idempotency.d.ts.map +1 -0
- package/dist/communication/idempotency.js +23 -0
- package/dist/communication/idempotency.js.map +1 -0
- package/dist/communication/identity.d.ts +127 -0
- package/dist/communication/identity.d.ts.map +1 -0
- package/dist/communication/identity.js +105 -0
- package/dist/communication/identity.js.map +1 -0
- package/dist/communication/index.d.ts +66 -0
- package/dist/communication/index.d.ts.map +1 -0
- package/dist/communication/index.js +42 -0
- package/dist/communication/index.js.map +1 -0
- package/dist/communication/onboarding.d.ts +223 -0
- package/dist/communication/onboarding.d.ts.map +1 -0
- package/dist/communication/onboarding.js +287 -0
- package/dist/communication/onboarding.js.map +1 -0
- package/dist/communication/policy.d.ts +115 -0
- package/dist/communication/policy.d.ts.map +1 -0
- package/dist/communication/policy.js +13 -0
- package/dist/communication/policy.js.map +1 -0
- package/dist/communication/routing.d.ts +99 -0
- package/dist/communication/routing.d.ts.map +1 -0
- package/dist/communication/routing.js +73 -0
- package/dist/communication/routing.js.map +1 -0
- package/dist/communication/sender-profile.d.ts +100 -0
- package/dist/communication/sender-profile.d.ts.map +1 -0
- package/dist/communication/sender-profile.js +123 -0
- package/dist/communication/sender-profile.js.map +1 -0
- package/dist/communication/status.d.ts +48 -0
- package/dist/communication/status.d.ts.map +1 -0
- package/dist/communication/status.js +79 -0
- package/dist/communication/status.js.map +1 -0
- package/dist/communication/stores/onboarding.d.ts +88 -0
- package/dist/communication/stores/onboarding.d.ts.map +1 -0
- package/dist/communication/stores/onboarding.js +127 -0
- package/dist/communication/stores/onboarding.js.map +1 -0
- package/dist/communication/stores/postgres.d.ts +81 -0
- package/dist/communication/stores/postgres.d.ts.map +1 -0
- package/dist/communication/stores/postgres.js +453 -0
- package/dist/communication/stores/postgres.js.map +1 -0
- package/dist/communication/stores/routing.d.ts +169 -0
- package/dist/communication/stores/routing.d.ts.map +1 -0
- package/dist/communication/stores/routing.js +324 -0
- package/dist/communication/stores/routing.js.map +1 -0
- package/dist/communication/stores/secrets.d.ts +89 -0
- package/dist/communication/stores/secrets.d.ts.map +1 -0
- package/dist/communication/stores/secrets.js +122 -0
- package/dist/communication/stores/secrets.js.map +1 -0
- package/dist/communication/template-provider.d.ts +85 -0
- package/dist/communication/template-provider.d.ts.map +1 -0
- package/dist/communication/template-provider.js +21 -0
- package/dist/communication/template-provider.js.map +1 -0
- package/dist/communication/template.d.ts +87 -0
- package/dist/communication/template.d.ts.map +1 -0
- package/dist/communication/template.js +59 -0
- package/dist/communication/template.js.map +1 -0
- package/dist/communication/webhook-subscription.d.ts +156 -0
- package/dist/communication/webhook-subscription.d.ts.map +1 -0
- package/dist/communication/webhook-subscription.js +252 -0
- package/dist/communication/webhook-subscription.js.map +1 -0
- package/dist/communication/webhook.d.ts +121 -0
- package/dist/communication/webhook.d.ts.map +1 -0
- package/dist/communication/webhook.js +283 -0
- package/dist/communication/webhook.js.map +1 -0
- 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 +285 -0
- package/dist/competence/repository.d.ts.map +1 -0
- package/dist/competence/repository.js +602 -0
- package/dist/competence/repository.js.map +1 -0
- package/dist/contacts/phone.d.ts +70 -0
- package/dist/contacts/phone.d.ts.map +1 -0
- package/dist/contacts/phone.js +186 -0
- package/dist/contacts/phone.js.map +1 -0
- 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 +208 -35
- 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/db/seed-catalog.d.ts +18 -0
- package/dist/db/seed-catalog.d.ts.map +1 -0
- package/dist/db/seed-catalog.js +45 -0
- package/dist/db/seed-catalog.js.map +1 -0
- package/dist/db/seed.js +16 -8
- package/dist/db/seed.js.map +1 -1
- package/dist/documents/repository.d.ts +97 -0
- package/dist/documents/repository.d.ts.map +1 -0
- package/dist/documents/repository.js +236 -0
- package/dist/documents/repository.js.map +1 -0
- package/dist/documents/requests.d.ts +73 -0
- package/dist/documents/requests.d.ts.map +1 -0
- package/dist/documents/requests.js +127 -0
- package/dist/documents/requests.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 +217 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +196 -11
- 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 +222 -16
- package/dist/legal/documents.js.map +1 -1
- package/dist/legal/index.d.ts +2 -2
- package/dist/legal/index.d.ts.map +1 -1
- package/dist/legal/index.js +1 -1
- package/dist/legal/index.js.map +1 -1
- package/dist/legal/types.d.ts +69 -3
- package/dist/legal/types.d.ts.map +1 -1
- package/dist/legal/types.js +1 -0
- package/dist/legal/types.js.map +1 -1
- package/dist/mail/auth-templates.d.ts +15 -0
- package/dist/mail/auth-templates.d.ts.map +1 -0
- package/dist/mail/auth-templates.js +26 -0
- package/dist/mail/auth-templates.js.map +1 -0
- package/dist/mail/dedup-store.d.ts +1 -24
- package/dist/mail/dedup-store.d.ts.map +1 -1
- package/dist/mail/dedup-store.js +9 -48
- package/dist/mail/dedup-store.js.map +1 -1
- package/dist/mail/index.d.ts +2 -1
- package/dist/mail/index.d.ts.map +1 -1
- package/dist/mail/index.js +13 -2
- package/dist/mail/index.js.map +1 -1
- package/dist/mail/provider.d.ts +2 -30
- package/dist/mail/provider.d.ts.map +1 -1
- package/dist/mail/provider.js +10 -246
- package/dist/mail/provider.js.map +1 -1
- package/dist/mail/resend.d.ts +2 -12
- package/dist/mail/resend.d.ts.map +1 -1
- package/dist/mail/resend.js +11 -17
- package/dist/mail/resend.js.map +1 -1
- package/dist/mail/sender-resolver.d.ts +1 -7
- package/dist/mail/sender-resolver.d.ts.map +1 -1
- package/dist/mail/sender-resolver.js +11 -10
- package/dist/mail/sender-resolver.js.map +1 -1
- package/dist/mail/template-renderer.d.ts +1 -9
- package/dist/mail/template-renderer.d.ts.map +1 -1
- package/dist/mail/template-renderer.js +10 -15
- package/dist/mail/template-renderer.js.map +1 -1
- package/dist/mail/transactional-outbound.d.ts +115 -0
- package/dist/mail/transactional-outbound.d.ts.map +1 -0
- package/dist/mail/transactional-outbound.js +113 -0
- package/dist/mail/transactional-outbound.js.map +1 -0
- package/dist/mail/types.d.ts +2 -142
- package/dist/mail/types.d.ts.map +1 -1
- package/dist/mail/types.js +1 -33
- package/dist/mail/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/portal/provisioning.d.ts +58 -0
- package/dist/portal/provisioning.d.ts.map +1 -0
- package/dist/portal/provisioning.js +139 -0
- package/dist/portal/provisioning.js.map +1 -0
- package/dist/pricing-engine/canonical.d.ts +14 -0
- package/dist/pricing-engine/canonical.d.ts.map +1 -0
- package/dist/pricing-engine/canonical.js +39 -0
- package/dist/pricing-engine/canonical.js.map +1 -0
- package/dist/pricing-engine/errors.d.ts.map +1 -1
- package/dist/pricing-engine/errors.js +6 -1
- package/dist/pricing-engine/errors.js.map +1 -1
- package/dist/pricing-engine/index.d.ts +12 -2
- package/dist/pricing-engine/index.d.ts.map +1 -1
- package/dist/pricing-engine/index.js +6 -1
- package/dist/pricing-engine/index.js.map +1 -1
- package/dist/pricing-engine/pipeline.d.ts.map +1 -1
- package/dist/pricing-engine/pipeline.js +202 -28
- package/dist/pricing-engine/pipeline.js.map +1 -1
- package/dist/pricing-engine/shadow-adapter.d.ts +37 -0
- package/dist/pricing-engine/shadow-adapter.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-adapter.js +75 -0
- package/dist/pricing-engine/shadow-adapter.js.map +1 -0
- package/dist/pricing-engine/shadow-diff.d.ts +26 -0
- package/dist/pricing-engine/shadow-diff.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-diff.js +52 -0
- package/dist/pricing-engine/shadow-diff.js.map +1 -0
- package/dist/pricing-engine/shadow-facade.d.ts +42 -0
- package/dist/pricing-engine/shadow-facade.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-facade.js +82 -0
- package/dist/pricing-engine/shadow-facade.js.map +1 -0
- package/dist/pricing-engine/shadow-legacy-types.d.ts +64 -0
- package/dist/pricing-engine/shadow-legacy-types.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-legacy-types.js +18 -0
- package/dist/pricing-engine/shadow-legacy-types.js.map +1 -0
- package/dist/pricing-engine/shadow-metrics.d.ts +33 -0
- package/dist/pricing-engine/shadow-metrics.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-metrics.js +31 -0
- package/dist/pricing-engine/shadow-metrics.js.map +1 -0
- package/dist/pricing-engine/shadow-normalizer.d.ts +17 -0
- package/dist/pricing-engine/shadow-normalizer.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-normalizer.js +39 -0
- package/dist/pricing-engine/shadow-normalizer.js.map +1 -0
- package/dist/pricing-engine/types.d.ts +2 -0
- package/dist/pricing-engine/types.d.ts.map +1 -1
- package/dist/rbac/authorize.d.ts +12 -0
- package/dist/rbac/authorize.d.ts.map +1 -1
- package/dist/rbac/authorize.js +27 -0
- package/dist/rbac/authorize.js.map +1 -1
- package/dist/rbac/catalog.d.ts.map +1 -1
- package/dist/rbac/catalog.js +101 -1
- package/dist/rbac/catalog.js.map +1 -1
- package/dist/rbac/workload-provisioning.d.ts +66 -0
- package/dist/rbac/workload-provisioning.d.ts.map +1 -0
- package/dist/rbac/workload-provisioning.js +153 -0
- package/dist/rbac/workload-provisioning.js.map +1 -0
- package/dist/rbac/workload.d.ts +124 -0
- package/dist/rbac/workload.d.ts.map +1 -0
- package/dist/rbac/workload.js +184 -0
- package/dist/rbac/workload.js.map +1 -0
- package/dist/storage/checksum.d.ts +9 -0
- package/dist/storage/checksum.d.ts.map +1 -0
- package/dist/storage/checksum.js +12 -0
- package/dist/storage/checksum.js.map +1 -0
- package/dist/storage/key.d.ts +37 -0
- package/dist/storage/key.d.ts.map +1 -0
- package/dist/storage/key.js +67 -0
- package/dist/storage/key.js.map +1 -0
- package/dist/storage/local.d.ts +40 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +96 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/r2.d.ts +43 -0
- package/dist/storage/r2.d.ts.map +1 -0
- package/dist/storage/r2.js +177 -0
- package/dist/storage/r2.js.map +1 -0
- package/dist/storage/registry.d.ts +23 -0
- package/dist/storage/registry.d.ts.map +1 -0
- package/dist/storage/registry.js +37 -0
- package/dist/storage/registry.js.map +1 -0
- package/dist/storage/types.d.ts +67 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +45 -0
- package/dist/storage/types.js.map +1 -0
- 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/provider/asaas.d.ts +14 -0
- package/dist/subscription-billing/provider/asaas.d.ts.map +1 -1
- package/dist/subscription-billing/provider/asaas.js +32 -7
- package/dist/subscription-billing/provider/asaas.js.map +1 -1
- package/dist/subscription-billing/provider/disabled.d.ts +9 -0
- package/dist/subscription-billing/provider/disabled.d.ts.map +1 -1
- package/dist/subscription-billing/provider/disabled.js +8 -0
- package/dist/subscription-billing/provider/disabled.js.map +1 -1
- package/dist/subscription-billing/provider/registry.d.ts +10 -0
- package/dist/subscription-billing/provider/registry.d.ts.map +1 -1
- package/dist/subscription-billing/provider/registry.js +17 -0
- package/dist/subscription-billing/provider/registry.js.map +1 -1
- package/dist/subscription-billing/service.d.ts +38 -1
- package/dist/subscription-billing/service.d.ts.map +1 -1
- package/dist/subscription-billing/service.js +147 -23
- package/dist/subscription-billing/service.js.map +1 -1
- package/dist/subscription-billing/types.d.ts +13 -0
- package/dist/subscription-billing/types.d.ts.map +1 -1
- package/dist/subscription-billing/types.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/provisioning.d.ts.map +1 -1
- package/dist/tenancy/provisioning.js +32 -8
- package/dist/tenancy/provisioning.js.map +1 -1
- 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 +54 -1
- package/dist/users/repository.d.ts.map +1 -1
- package/dist/users/repository.js +142 -4
- package/dist/users/repository.js.map +1 -1
- package/dist/vault/repository.d.ts +67 -0
- package/dist/vault/repository.d.ts.map +1 -1
- package/dist/vault/repository.js +78 -0
- package/dist/vault/repository.js.map +1 -1
- package/package.json +20 -4
- package/src/db/migrations/0023_user_invite_activation.sql +15 -0
- package/src/db/migrations/0024_set_user_password_function.sql +32 -0
- package/src/db/migrations/0025_revoke_user_session_function.sql +28 -0
- package/src/db/migrations/0026_documents_and_competence.sql +353 -0
- package/src/db/migrations/0027_receivable_client_isolation.sql +58 -0
- package/src/db/migrations/0028_collection_engine.sql +94 -0
- package/src/db/migrations/0029_payment_rail.sql +107 -0
- package/src/db/migrations/0030_provider_account_uniqueness.sql +22 -0
- package/src/db/migrations/0031_provider_account_environment_scope.sql +21 -0
- package/src/db/migrations/0032_settlement_reversal.sql +76 -0
- package/src/db/migrations/0033_receivable_idempotency.sql +28 -0
- package/src/db/migrations/0034_payment_customer_reconcile.sql +30 -0
- package/src/db/migrations/0035_payment_account_environments.sql +61 -0
- package/src/db/migrations/0036_primary_backfill_under_force_rls.sql +41 -0
- package/src/db/migrations/0037_receivable_generation_source.sql +29 -0
- package/src/db/migrations/0038_notification_channels.sql +175 -0
- package/src/db/migrations/0039_communication_dispatch_claim.sql +193 -0
- package/src/db/migrations/0040_communication_unknown_outcome.sql +99 -0
- package/src/db/migrations/0041_channel_binding_routing.sql +146 -0
- package/src/db/migrations/0042_channel_route_read_isolation.sql +165 -0
- package/src/db/migrations/0043_workload_identity.sql +105 -0
- package/src/db/migrations/0044_channel_onboarding_session.sql +96 -0
- package/src/db/migrations/0045_role_write_scope.sql +122 -0
- package/src/db/migrations/0046_pilot_activation_model.sql +184 -0
- package/src/db/migrations/0047_recipient_clearance.sql +89 -0
- package/src/db/migrations/0048_item_type_note.sql +16 -0
- package/src/db/migrations/0049_national_fiscal_engine.sql +279 -0
- package/src/db/migrations/0050_fiscal_vocabulary_readonly.sql +29 -0
- package/src/db/migrations/0051_seed_rules_from_catalog.sql +72 -0
- package/src/db/migrations/0052_fiscal_rule_delete_scope.sql +57 -0
- package/src/db/migrations/0053_rule_validity_lower_bound.sql +44 -0
- package/src/db/migrations/0054_tenant_profile_and_rule_source.sql +89 -0
- package/src/db/migrations/0055_job_capability_contract.sql +300 -0
- package/src/db/migrations/0056_fiscal_document_ingestion.sql +337 -0
- package/src/db/migrations/0057_fiscal_pending_event_inbox.sql +228 -0
- package/src/db/migrations/0058_fiscal_operational_engine.sql +516 -0
- package/src/db/migrations/0059_fiscal_contract_version.sql +59 -0
- package/dist/cjs/mail/resend-client.js +0 -103
- package/dist/cjs/mail/resend-client.js.map +0 -1
- package/dist/mail/resend-client.d.ts +0 -16
- package/dist/mail/resend-client.d.ts.map +0 -1
- package/dist/mail/resend-client.js +0 -100
- package/dist/mail/resend-client.js.map +0 -1
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
import type { RecipientClearanceStore } from '../communication/clearance.js';
|
|
3
|
+
import { type CollectionPolicy, type CollectionStep } from './policy.js';
|
|
4
|
+
import type { TenantBranding } from './branding.js';
|
|
5
|
+
import type { PaymentBlock } from './payment-block.js';
|
|
6
|
+
import { type ChannelAccountStore, type ChannelPolicy, type ChannelRegistry as CommChannelRegistry, type CommunicationAuditSink, type ConsentPolicy, type ConsentStore, type DispatchClaimStore, type SenderOrigin, type TemplateStore } from '../communication/index.js';
|
|
7
|
+
import { type CollectionActionRecord } from './repository.js';
|
|
8
|
+
export interface PlanReport {
|
|
9
|
+
examined: number;
|
|
10
|
+
scheduled: number;
|
|
11
|
+
skippedAlreadyHandled: number;
|
|
12
|
+
canceledByPayment: number;
|
|
13
|
+
canceledByCancellation: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Planeja: cancela o que não deve mais sair e agenda o que a régua manda.
|
|
17
|
+
*
|
|
18
|
+
* A ordem importa. Cancelar ANTES de agendar evita a janela em que um recebível
|
|
19
|
+
* pago recebe uma etapa nova no mesmo ciclo.
|
|
20
|
+
*/
|
|
21
|
+
export declare function planCollections(tx: Tx, today: string, policyOverride?: CollectionPolicy): Promise<PlanReport>;
|
|
22
|
+
export interface ExecuteReport {
|
|
23
|
+
attempted: number;
|
|
24
|
+
sent: number;
|
|
25
|
+
failedTemporary: number;
|
|
26
|
+
failedPermanent: number;
|
|
27
|
+
skippedNoLongerDue: number;
|
|
28
|
+
skippedNoChannel: number;
|
|
29
|
+
escalated: number;
|
|
30
|
+
}
|
|
31
|
+
export interface ExecuteContext {
|
|
32
|
+
/** Identidade visual e dados de contato do escritório. */
|
|
33
|
+
branding: TenantBranding;
|
|
34
|
+
/** Resolve o destinatário lógico do cliente para o canal. */
|
|
35
|
+
resolveRecipient: (clientId: string, channel: string) => Promise<string | null>;
|
|
36
|
+
/** Descrição do recebível, para identificar a dívida sem inventar dado. */
|
|
37
|
+
describeReceivable?: (receivableId: string) => Promise<string | null>;
|
|
38
|
+
/**
|
|
39
|
+
* Como pagar este recebível, se já houver cobrança emitida.
|
|
40
|
+
*
|
|
41
|
+
* Opcional, e resolvido no momento do envio — não no agendamento. Entre um e
|
|
42
|
+
* outro passam dias: a cobrança pode ter sido criada depois, cancelada, ou o
|
|
43
|
+
* escritório pode ter conectado a conta de pagamento no meio. Congelar o link
|
|
44
|
+
* no agendamento mandaria o cliente para uma cobrança que não existe mais.
|
|
45
|
+
*/
|
|
46
|
+
resolvePayment?: (receivableId: string) => Promise<PaymentBlock | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Entrega pelo motor compartilhado do ecossistema. **Obrigatória.**
|
|
49
|
+
*
|
|
50
|
+
* Era opcional, e o opcional era o defeito. Enquanto este campo pôde faltar,
|
|
51
|
+
* havia um segundo caminho de envio — `channels` legado, HTML pronto, e-mail
|
|
52
|
+
* direto pelo Resend — com uma idempotência PRÓPRIA (`receivableId:stepKey`,
|
|
53
|
+
* que não era gravada em lugar nenhum). O cron usava um caminho, a rota
|
|
54
|
+
* manual usava o outro, e a proteção de cada um era invisível para o outro: os
|
|
55
|
+
* dois podiam enviar a mesma etapa no mesmo minuto.
|
|
56
|
+
*
|
|
57
|
+
* Sem `?`, o compilador recusa qualquer chamador que tente enviar por fora.
|
|
58
|
+
* A montagem canônica está em `communication-runtime.ts`, e ela é a única.
|
|
59
|
+
*/
|
|
60
|
+
communication: CollectionCommunication;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* O que a régua precisa fornecer para falar com o motor compartilhado.
|
|
64
|
+
*
|
|
65
|
+
* A SC não monta o `CommunicationIntent` à mão em cada etapa: ela declara uma
|
|
66
|
+
* vez de onde vêm contas, templates e consentimento, e o adaptador abaixo faz a
|
|
67
|
+
* tradução — que é o que impede o vocabulário de cobrança de vazar para o motor
|
|
68
|
+
* e o vocabulário do motor de vazar para a régua.
|
|
69
|
+
*/
|
|
70
|
+
export interface CollectionCommunication {
|
|
71
|
+
tenantId: string;
|
|
72
|
+
/** Marca do escritório. Distinta do tenant: um tenant pode operar sob mais de uma. */
|
|
73
|
+
brand: string;
|
|
74
|
+
channels: CommChannelRegistry;
|
|
75
|
+
accounts: ChannelAccountStore;
|
|
76
|
+
templates: TemplateStore;
|
|
77
|
+
consent: ConsentStore;
|
|
78
|
+
consentPolicy?: ConsentPolicy;
|
|
79
|
+
/**
|
|
80
|
+
* Liberação do destinatário pelo escritório. **Obrigatória.**
|
|
81
|
+
*
|
|
82
|
+
* Distinta de `consent`: aquilo é a vontade do cliente, isto é a conferência
|
|
83
|
+
* de quem envia. Sem `?` porque a régua é justamente o caminho automático
|
|
84
|
+
* que dispara sobre a carteira inteira — o consumidor que a esquecesse
|
|
85
|
+
* ganharia de volta o comportamento que esta barreira existe para impedir.
|
|
86
|
+
*/
|
|
87
|
+
clearance: RecipientClearanceStore;
|
|
88
|
+
/**
|
|
89
|
+
* Canais a tentar, por etapa. Política do ESCRITÓRIO — o motor só executa.
|
|
90
|
+
*
|
|
91
|
+
* Recebe a etapa inteira, e não só a chave, para que a régua possa decidir por
|
|
92
|
+
* tom (uma etapa `reminder` pode preferir WhatsApp; uma `overdue_collection`,
|
|
93
|
+
* e-mail com trilha). Sem isto, o canal declarado no passo é o único usado.
|
|
94
|
+
*/
|
|
95
|
+
policyFor?: (step: CollectionStep) => ChannelPolicy;
|
|
96
|
+
/**
|
|
97
|
+
* Reserva atômica do direito de enviar. Substitui `alreadySent`.
|
|
98
|
+
*
|
|
99
|
+
* A consulta antiga respondia "já enviei?" e devolvia um booleano — e entre a
|
|
100
|
+
* resposta e o envio havia uma janela em que a resposta continuava valendo
|
|
101
|
+
* para todo mundo que perguntasse. A reserva não responde: ela DECIDE, uma vez
|
|
102
|
+
* só, e só um chamador ganha. Ver `communication/claim.ts`.
|
|
103
|
+
*/
|
|
104
|
+
claims: DispatchClaimStore;
|
|
105
|
+
/** Trilha estruturada do motor. Ver `communication/audit.ts`. */
|
|
106
|
+
audit: CommunicationAuditSink;
|
|
107
|
+
/**
|
|
108
|
+
* De onde veio o remetente de e-mail resolvido para este tenant.
|
|
109
|
+
*
|
|
110
|
+
* Vai para a trilha do ciclo. "Saiu pelo remetente da plataforma" tem de ser
|
|
111
|
+
* uma coisa que o escritório consegue ver, e não uma linha de código.
|
|
112
|
+
*/
|
|
113
|
+
emailSenderOrigin?: SenderOrigin | null;
|
|
114
|
+
/**
|
|
115
|
+
* De onde veio a CREDENCIAL de e-mail — distinto do remetente.
|
|
116
|
+
*
|
|
117
|
+
* `tenant-vault`: o escritório tem conta própria do provedor no cofre.
|
|
118
|
+
* `platform-fallback`: está mandando pela conta compartilhada da plataforma —
|
|
119
|
+
* um bloqueio ou uma queda de reputação ali atinge todos os escritórios que
|
|
120
|
+
* dependem dela ao mesmo tempo.
|
|
121
|
+
*
|
|
122
|
+
* A distinção existe para que essa dependência seja MEDÍVEL. Enquanto era só
|
|
123
|
+
* um `credentialRef` fixo no fallback, "quantos escritórios ainda dividem a
|
|
124
|
+
* mesma conta?" não tinha resposta sem ler código.
|
|
125
|
+
*/
|
|
126
|
+
emailCredentialOrigin?: 'tenant-vault' | 'platform-fallback' | null;
|
|
127
|
+
/** Percorre tudo e relata, sem chamar adapter nenhum e sem reservar chave. */
|
|
128
|
+
dryRun?: boolean;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Executa as ações vencidas.
|
|
132
|
+
*
|
|
133
|
+
* **Revalida o estado no momento do envio.** O agendamento pode ter dias; entre
|
|
134
|
+
* ele e agora o cliente pode ter pago, o recebível pode ter sido cancelado, ou
|
|
135
|
+
* uma baixa parcial pode ter mudado o valor. Confiar no que foi agendado é como
|
|
136
|
+
* o motor manda cobrança de dívida quitada.
|
|
137
|
+
*/
|
|
138
|
+
export declare function executeCollections(tx: Tx, ctx: ExecuteContext, today: string, policyOverride?: CollectionPolicy): Promise<ExecuteReport>;
|
|
139
|
+
export interface CollectionCycleReport extends PlanReport, ExecuteReport {
|
|
140
|
+
}
|
|
141
|
+
/** Ciclo completo — o que o job roda. */
|
|
142
|
+
export declare function runCollectionCycle(tx: Tx, ctx: ExecuteContext, today: string): Promise<CollectionCycleReport>;
|
|
143
|
+
export type { CollectionActionRecord };
|
|
144
|
+
/**
|
|
145
|
+
* Desliga a régua de um recebível que acabou de ser quitado.
|
|
146
|
+
*
|
|
147
|
+
* Existe porque a baixa passou a ter dois caminhos: o job diário, que varre
|
|
148
|
+
* todos os recebíveis, e o webhook, que sabe exatamente qual foi pago. Sem esta
|
|
149
|
+
* função o webhook baixaria o valor e deixaria a comunicação agendada — o
|
|
150
|
+
* cliente pagaria e receberia a cobrança de atraso mesmo assim, que é a pior
|
|
151
|
+
* falha possível numa régua automática.
|
|
152
|
+
*
|
|
153
|
+
* Só o que ainda não saiu é cancelado. Mensagem enviada é histórico.
|
|
154
|
+
*/
|
|
155
|
+
export declare function cancelDunningForSettled(tx: Tx, receivableId: string): Promise<number>;
|
|
156
|
+
/**
|
|
157
|
+
* Religa a régua de um recebível cuja liquidação foi anulada.
|
|
158
|
+
*
|
|
159
|
+
* Sem isto, corrigir o saldo não bastaria: `planCollections` não reagenda um
|
|
160
|
+
* passo cujo `step_key` já existe na tabela — a idempotência olha a EXISTÊNCIA
|
|
161
|
+
* da linha, não o status dela. Os passos desligados pela baixa ficariam
|
|
162
|
+
* `canceled` para sempre, e o cliente voltaria a dever sem que ninguém jamais o
|
|
163
|
+
* lembrasse. O saldo estaria certo e a cobrança nunca aconteceria.
|
|
164
|
+
*
|
|
165
|
+
* Reabre **somente** o que foi fechado POR PAGAMENTO. Um passo cancelado porque
|
|
166
|
+
* o recebível foi cancelado, ou já enviado, é história e permanece intocado —
|
|
167
|
+
* reabrir tudo faria a régua reenviar mensagem que o cliente já recebeu.
|
|
168
|
+
*/
|
|
169
|
+
/**
|
|
170
|
+
* Religa etapas fechadas por FALHA DE INFRAESTRUTURA, nunca por decisão humana.
|
|
171
|
+
*
|
|
172
|
+
* Existe para o resíduo do incidente C1-PROV-R1B-C2: etapas que o motor fechou
|
|
173
|
+
* como `escalated` porque o canal ficou indisponível (cofre de credenciais fora
|
|
174
|
+
* do ar). A correção em `sendViaSharedEngine` impede que isso volte a
|
|
175
|
+
* acontecer, mas não desfaz o que já foi fechado — e nada mais no domínio
|
|
176
|
+
* consegue, porque `planCollections` não reagenda um `step_key` existente e
|
|
177
|
+
* `listActions` só enxerga `scheduled`.
|
|
178
|
+
*
|
|
179
|
+
* As guardas são deliberadamente estreitas, e cada uma exclui uma classe:
|
|
180
|
+
*
|
|
181
|
+
* - `closed_reason = 'escalated'` — deixa de fora `no_contact_data`,
|
|
182
|
+
* `opted_out`, `consent_unknown`, `paid`, `canceled`, `rule_disabled` e
|
|
183
|
+
* `permanent_failure`. Todas são decisão de negócio e permanecem terminais.
|
|
184
|
+
* - `attempts = 0` — `markEscalated` NUNCA incrementa `attempts`, enquanto
|
|
185
|
+
* `markSent` e `markFailed` sempre incrementam. Zero prova que nenhum adapter
|
|
186
|
+
* chegou a tentar.
|
|
187
|
+
* - `provider_ref IS NULL` e `sent_at IS NULL` — prova que nada saiu. Uma
|
|
188
|
+
* mensagem entregue jamais é reaberta, e o cliente nunca recebe duplicata.
|
|
189
|
+
*
|
|
190
|
+
* O `step_key` é obrigatório: recuperação é pontual e auditável, nunca
|
|
191
|
+
* "reabra tudo deste recebível".
|
|
192
|
+
*
|
|
193
|
+
* O histórico da falha NÃO é apagado. `communication_event`
|
|
194
|
+
* (`dispatch_skipped` / `no_credential`) e `communication_dispatch`
|
|
195
|
+
* (`failed_retryable`) continuam intactos — esta função move apenas o estado da
|
|
196
|
+
* régua, e `last_error` registra a origem da reabertura.
|
|
197
|
+
*/
|
|
198
|
+
export declare function rearmDunningAfterInfraFailure(tx: Tx, receivableId: string, stepKey: string, incidentRef: string): Promise<number>;
|
|
199
|
+
export declare function rearmDunningAfterReversal(tx: Tx, receivableId: string): Promise<number>;
|
|
200
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/collection/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
import { getReceivable, listReceivables, } from '../billing/ar-repository.js';
|
|
2
|
+
import { dueSteps } from './policy.js';
|
|
3
|
+
import { renderCopy } from './copy.js';
|
|
4
|
+
import {} from './email-layout.js';
|
|
5
|
+
import { dispatch, } from '../communication/index.js';
|
|
6
|
+
import { buildCollectionContent, collectionContext, collectionEventType, collectionVariables, } from './communication-bridge.js';
|
|
7
|
+
import { cancelPendingActions, getCollectionPolicy, handledStepKeys, listActions, markEscalated, markFailed, markSent, scheduleAction, } from './repository.js';
|
|
8
|
+
/**
|
|
9
|
+
* Motor de cobrança: RECEIVABLE → EVENT → RULE → ACTION → DELIVERY → STOP.
|
|
10
|
+
*
|
|
11
|
+
* Dois passos separados de propósito:
|
|
12
|
+
*
|
|
13
|
+
* `planCollections` decide o que DEVE acontecer (puro em relação a I/O de
|
|
14
|
+
* provider — só toca o banco)
|
|
15
|
+
* `executeCollections` faz acontecer
|
|
16
|
+
*
|
|
17
|
+
* Separar permite rodar o planejamento em dry-run e mostrar ao escritório o que
|
|
18
|
+
* sairia, antes de qualquer mensagem existir. Numa régua de cobrança isso não é
|
|
19
|
+
* luxo: a primeira execução contra uma carteira real precisa ser inspecionável.
|
|
20
|
+
*/
|
|
21
|
+
const MAX_ATTEMPTS = 3;
|
|
22
|
+
/** Um recebível ainda merece cobrança? */
|
|
23
|
+
function isCollectible(r) {
|
|
24
|
+
if (r.status === 'paid' || r.status === 'canceled')
|
|
25
|
+
return false;
|
|
26
|
+
if (r.status === 'renegotiated' || r.status === 'written_off')
|
|
27
|
+
return false;
|
|
28
|
+
// Saldo zero sem status `paid` acontece quando a soma dos pagamentos fecha o
|
|
29
|
+
// valor mas o status ainda não foi reavaliado. Cobrar aqui seria pedir dinheiro
|
|
30
|
+
// de quem já pagou — o pior erro operacional deste motor.
|
|
31
|
+
if (r.outstandingAmount <= 0)
|
|
32
|
+
return false;
|
|
33
|
+
if (!r.dueDate)
|
|
34
|
+
return false;
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Planeja: cancela o que não deve mais sair e agenda o que a régua manda.
|
|
39
|
+
*
|
|
40
|
+
* A ordem importa. Cancelar ANTES de agendar evita a janela em que um recebível
|
|
41
|
+
* pago recebe uma etapa nova no mesmo ciclo.
|
|
42
|
+
*/
|
|
43
|
+
export async function planCollections(tx, today, policyOverride) {
|
|
44
|
+
const policy = policyOverride ?? (await getCollectionPolicy(tx));
|
|
45
|
+
const report = {
|
|
46
|
+
examined: 0,
|
|
47
|
+
scheduled: 0,
|
|
48
|
+
skippedAlreadyHandled: 0,
|
|
49
|
+
canceledByPayment: 0,
|
|
50
|
+
canceledByCancellation: 0,
|
|
51
|
+
};
|
|
52
|
+
// Tudo que não está cancelado — inclusive pago, porque é justamente o pago que
|
|
53
|
+
// precisa ter a régua interrompida.
|
|
54
|
+
const { items } = await listReceivables(tx, { limit: 200 });
|
|
55
|
+
for (const r of items) {
|
|
56
|
+
report.examined += 1;
|
|
57
|
+
if (r.status === 'paid' || r.outstandingAmount <= 0) {
|
|
58
|
+
report.canceledByPayment += await cancelPendingActions(tx, r.id, 'paid');
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (r.status === 'canceled') {
|
|
62
|
+
report.canceledByCancellation += await cancelPendingActions(tx, r.id, 'canceled');
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (!isCollectible(r))
|
|
66
|
+
continue;
|
|
67
|
+
const handled = await handledStepKeys(tx, r.id);
|
|
68
|
+
const due = dueSteps(policy, r.dueDate, today, handled);
|
|
69
|
+
// Quantas etapas a régua já cobriu para este recebível — é o que explica
|
|
70
|
+
// "por que não agendei nada" num ciclo que não criou ação nenhuma.
|
|
71
|
+
report.skippedAlreadyHandled += handled.size;
|
|
72
|
+
for (const { step, scheduledFor } of due) {
|
|
73
|
+
const action = await scheduleAction(tx, {
|
|
74
|
+
receivableId: r.id,
|
|
75
|
+
stepKey: step.key,
|
|
76
|
+
channel: step.channel,
|
|
77
|
+
template: step.templateKey,
|
|
78
|
+
scheduledFor,
|
|
79
|
+
});
|
|
80
|
+
if (action)
|
|
81
|
+
report.scheduled += 1;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return report;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Monta a cópia da etapa.
|
|
88
|
+
*
|
|
89
|
+
* Extraída para que os dois caminhos de entrega — legado e compartilhado — usem
|
|
90
|
+
* exatamente o mesmo texto. Duas montagens em paralelo divergiriam na primeira
|
|
91
|
+
* correção feita só de um lado, e o defeito apareceria como "o WhatsApp diz uma
|
|
92
|
+
* coisa e o e-mail diz outra" para o mesmo cliente, no mesmo dia.
|
|
93
|
+
*/
|
|
94
|
+
async function buildStepCopy(ctx, receivableId, current, step) {
|
|
95
|
+
const description = ctx.describeReceivable ? await ctx.describeReceivable(receivableId) : null;
|
|
96
|
+
const payment = (await ctx.resolvePayment?.(receivableId)) ?? undefined;
|
|
97
|
+
const { subject, block } = renderCopy(step.tone, {
|
|
98
|
+
clientName: current.clientName ?? 'cliente',
|
|
99
|
+
branding: ctx.branding,
|
|
100
|
+
// Saldo de AGORA, não o valor original: depois de uma baixa parcial,
|
|
101
|
+
// anunciar o valor cheio é cobrar duas vezes o que já entrou.
|
|
102
|
+
outstandingAmount: current.outstandingAmount,
|
|
103
|
+
originalAmount: current.amount,
|
|
104
|
+
hasPartialPayment: current.amountPaid > 0,
|
|
105
|
+
dueDate: current.dueDate,
|
|
106
|
+
competence: current.competence,
|
|
107
|
+
description,
|
|
108
|
+
daysOverdue: current.daysOverdue,
|
|
109
|
+
payment,
|
|
110
|
+
});
|
|
111
|
+
return { subject, block, payment };
|
|
112
|
+
}
|
|
113
|
+
const NO_ATTEMPT = {
|
|
114
|
+
sent: 0,
|
|
115
|
+
escalated: 0,
|
|
116
|
+
skippedNoChannel: 0,
|
|
117
|
+
failedPermanent: 0,
|
|
118
|
+
failedTemporary: 0,
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Traduz uma etapa da régua em intenção de comunicação e assenta o desfecho.
|
|
122
|
+
*
|
|
123
|
+
* Tudo que é específico da SC (evento, variáveis, cópia) é montado aqui e
|
|
124
|
+
* entregue pronto ao motor; tudo que é específico de canal (identidade,
|
|
125
|
+
* consentimento, template, provider) fica lá. Nenhum dos dois lados precisa
|
|
126
|
+
* conhecer o vocabulário do outro.
|
|
127
|
+
*/
|
|
128
|
+
async function sendViaSharedEngine(tx, ctx, comm, action, current, step) {
|
|
129
|
+
const receivableId = action.receivableId;
|
|
130
|
+
const copy = await buildStepCopy(ctx, receivableId, current, step);
|
|
131
|
+
const result = await dispatch({
|
|
132
|
+
ctx: collectionContext(comm.tenantId, comm.brand),
|
|
133
|
+
eventType: collectionEventType(step.key),
|
|
134
|
+
subjectRef: receivableId,
|
|
135
|
+
// A permissão pertence à PESSOA, não ao número: a referência é o cliente.
|
|
136
|
+
recipientRef: current.clientId,
|
|
137
|
+
variables: collectionVariables({
|
|
138
|
+
clientName: current.clientName ?? 'cliente',
|
|
139
|
+
officeName: ctx.branding.officeName,
|
|
140
|
+
outstandingAmount: current.outstandingAmount,
|
|
141
|
+
dueDate: current.dueDate,
|
|
142
|
+
reference: current.competence ?? null,
|
|
143
|
+
paymentUrl: copy.payment?.url,
|
|
144
|
+
}),
|
|
145
|
+
// Sem política declarada, o canal do passo é o único tentado — que é
|
|
146
|
+
// exatamente o comportamento da régua hoje. Ligar fallback é decisão do
|
|
147
|
+
// escritório, nunca default do motor.
|
|
148
|
+
policy: comm.policyFor?.(step) ?? { order: [step.channel] },
|
|
149
|
+
}, {
|
|
150
|
+
channels: comm.channels,
|
|
151
|
+
accounts: comm.accounts,
|
|
152
|
+
templates: comm.templates,
|
|
153
|
+
consent: comm.consent,
|
|
154
|
+
consentPolicy: comm.consentPolicy,
|
|
155
|
+
clearance: comm.clearance,
|
|
156
|
+
resolveRecipient: (ref, channel) => ctx.resolveRecipient(ref, channel),
|
|
157
|
+
buildContent: buildCollectionContent({
|
|
158
|
+
branding: ctx.branding,
|
|
159
|
+
subject: copy.subject,
|
|
160
|
+
block: copy.block,
|
|
161
|
+
}),
|
|
162
|
+
claims: comm.claims,
|
|
163
|
+
audit: comm.audit,
|
|
164
|
+
}, { dryRun: comm.dryRun });
|
|
165
|
+
// Ensaio não escreve. Um dry-run que marca a ação como enviada não é ensaio —
|
|
166
|
+
// é a execução real com o envio removido, e cala a etapa para sempre.
|
|
167
|
+
if (comm.dryRun) {
|
|
168
|
+
return { ...NO_ATTEMPT, sent: result.delivered ? 1 : 0, notAttempted: true };
|
|
169
|
+
}
|
|
170
|
+
if (result.invalidContext) {
|
|
171
|
+
// Defeito de integração, não estado do cliente. Escala para humano em vez de
|
|
172
|
+
// fechar a etapa: ninguém deve descobrir isso só quando a dívida prescrever.
|
|
173
|
+
await markEscalated(tx, action.id);
|
|
174
|
+
return { ...NO_ATTEMPT, escalated: 1, skippedNoChannel: 1, notAttempted: true };
|
|
175
|
+
}
|
|
176
|
+
if (result.delivered) {
|
|
177
|
+
const recipient = await ctx.resolveRecipient(current.clientId, result.delivered);
|
|
178
|
+
await markSent(tx, action.id, {
|
|
179
|
+
recipientRef: recipient ?? '',
|
|
180
|
+
amount: current.outstandingAmount,
|
|
181
|
+
providerRef: result.providerRef,
|
|
182
|
+
// A reserva já é a proteção contra reenvio; esta coluna é a JUNÇÃO entre
|
|
183
|
+
// a etapa da régua e a linha de `communication_dispatch`. Sem ela, ver "o
|
|
184
|
+
// que aconteceu com esta cobrança" exigiria adivinhar a chave a partir de
|
|
185
|
+
// sete campos.
|
|
186
|
+
idempotencyKey: result.idempotencyKey,
|
|
187
|
+
});
|
|
188
|
+
return { ...NO_ATTEMPT, sent: 1 };
|
|
189
|
+
}
|
|
190
|
+
const permanentAttempt = result.attempts.find((a) => a.outcome === 'permanent');
|
|
191
|
+
/*
|
|
192
|
+
* `unavailable` entra aqui junto com `temporary`, e a distinção importa.
|
|
193
|
+
*
|
|
194
|
+
* Canal indisponível é falha de INFRAESTRUTURA — cofre fora do ar, credencial
|
|
195
|
+
* ainda não propagada, canal não registrado. Não é uma decisão sobre o
|
|
196
|
+
* cliente, e por isso não pode virar `escalated`, que no domínio significa
|
|
197
|
+
* "sai da automação e vai para a fila humana": a etapa fecharia para sempre,
|
|
198
|
+
* porque `planCollections` não reagenda um `step_key` que já existe e
|
|
199
|
+
* `listActions` só enxerga `scheduled`. Foi o que aconteceu no incidente
|
|
200
|
+
* C1-PROV-R1B-C2 — a infra voltou e as quatro cobranças continuaram mortas.
|
|
201
|
+
*
|
|
202
|
+
* Tratado como temporário, `markFailed` devolve a etapa a `scheduled` e o
|
|
203
|
+
* ciclo seguinte tenta de novo. O teto é o mesmo `MAX_ATTEMPTS` das demais
|
|
204
|
+
* falhas: uma credencial ausente de forma PERMANENTE consome as três
|
|
205
|
+
* tentativas e assenta como `permanent_failure`, em vez de reagendar em
|
|
206
|
+
* silêncio para sempre.
|
|
207
|
+
*/
|
|
208
|
+
const temporaryAttempt = result.attempts.find((a) => a.outcome === 'temporary' || a.outcome === 'unavailable');
|
|
209
|
+
if (permanentAttempt || temporaryAttempt) {
|
|
210
|
+
const permanent = Boolean(permanentAttempt) || action.attempts + 1 >= MAX_ATTEMPTS;
|
|
211
|
+
await markFailed(tx, action.id, {
|
|
212
|
+
error: (permanentAttempt ?? temporaryAttempt).detail ?? 'falha de entrega',
|
|
213
|
+
permanent,
|
|
214
|
+
});
|
|
215
|
+
return permanent
|
|
216
|
+
? { ...NO_ATTEMPT, failedPermanent: 1 }
|
|
217
|
+
: { ...NO_ATTEMPT, failedTemporary: 1 };
|
|
218
|
+
}
|
|
219
|
+
// Reserva negada: a etapa fica exatamente como está. Não é falha, não é
|
|
220
|
+
// escalonamento, e não gasta tentativa — outra execução já entregou, ou está
|
|
221
|
+
// entregando agora, e é ela quem vai assentar o desfecho.
|
|
222
|
+
if (claimRefusedIn(result.attempts)) {
|
|
223
|
+
return { ...NO_ATTEMPT, notAttempted: true };
|
|
224
|
+
}
|
|
225
|
+
// Aguardando conferência do escritório: a etapa fica INTACTA e volta no
|
|
226
|
+
// próximo ciclo.
|
|
227
|
+
//
|
|
228
|
+
// Escalar aqui seria o defeito, e o teste que o encontrou é
|
|
229
|
+
// `collection-clearance-gate`: `markEscalated` fecha a etapa, e
|
|
230
|
+
// `planCollections` não reagenda um `step_key` que já existe. A cobrança
|
|
231
|
+
// daquele dia morreria, e liberar o cliente depois não a recuperaria — a
|
|
232
|
+
// barreira teria virado perda silenciosa em vez de espera.
|
|
233
|
+
//
|
|
234
|
+
// Tratado como a reserva negada, e pela mesma lógica: nada aconteceu de
|
|
235
|
+
// errado, só ainda não é hora. Também não gasta tentativa — três dias sem
|
|
236
|
+
// alguém clicar "conferir" matariam a etapa por decurso de prazo.
|
|
237
|
+
//
|
|
238
|
+
// O escritório não fica sem saber: o pulo tem nome na trilha
|
|
239
|
+
// (`recipient_not_confirmed`), o painel conta os clientes com e-mail
|
|
240
|
+
// aguardando liberação, e o checklist de go-live tem o gate.
|
|
241
|
+
if (result.attempts.some((a) => a.skipped === 'recipient_not_confirmed')) {
|
|
242
|
+
return { ...NO_ATTEMPT, notAttempted: true };
|
|
243
|
+
}
|
|
244
|
+
// Nada foi enviado e nenhum adapter falhou: todas as portas recusaram antes.
|
|
245
|
+
// O motivo é o que diz ao escritório o que fazer — e cada um exige uma ação
|
|
246
|
+
// diferente, então nenhum deles pode virar um "não enviado" genérico.
|
|
247
|
+
const reason = closeReasonFor(result.attempts);
|
|
248
|
+
await markEscalated(tx, action.id, reason);
|
|
249
|
+
return { ...NO_ATTEMPT, escalated: 1, skippedNoChannel: 1, notAttempted: true };
|
|
250
|
+
}
|
|
251
|
+
function closeReasonFor(attempts) {
|
|
252
|
+
const skips = attempts.map((a) => a.skipped);
|
|
253
|
+
// Opt-out é o mais forte: se QUALQUER canal foi recusado por vontade do
|
|
254
|
+
// cliente, é isso que o escritório precisa ver — não "faltou cadastro".
|
|
255
|
+
if (skips.includes('opted_out'))
|
|
256
|
+
return 'opted_out';
|
|
257
|
+
if (skips.includes('consent_unknown'))
|
|
258
|
+
return 'consent_unknown';
|
|
259
|
+
if (skips.includes('no_recipient') || skips.includes('invalid_recipient')) {
|
|
260
|
+
return 'no_contact_data';
|
|
261
|
+
}
|
|
262
|
+
return 'escalated';
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* A etapa não saiu porque a RESERVA foi negada — ou seja, o sistema funcionou.
|
|
266
|
+
*
|
|
267
|
+
* Precisa de tratamento próprio: `already_sent` e `claim_in_flight` não são
|
|
268
|
+
* falha, não são cadastro e não são escalonamento. Marcar a ação como escalada
|
|
269
|
+
* mandaria um humano investigar um envio que ou já aconteceu, ou está
|
|
270
|
+
* acontecendo — e encheria a fila operacional de ruído justamente quando a
|
|
271
|
+
* proteção está trabalhando.
|
|
272
|
+
*/
|
|
273
|
+
function claimRefusedIn(attempts) {
|
|
274
|
+
return attempts.some((a) => a.skipped === 'already_sent' || a.skipped === 'claim_in_flight');
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Executa as ações vencidas.
|
|
278
|
+
*
|
|
279
|
+
* **Revalida o estado no momento do envio.** O agendamento pode ter dias; entre
|
|
280
|
+
* ele e agora o cliente pode ter pago, o recebível pode ter sido cancelado, ou
|
|
281
|
+
* uma baixa parcial pode ter mudado o valor. Confiar no que foi agendado é como
|
|
282
|
+
* o motor manda cobrança de dívida quitada.
|
|
283
|
+
*/
|
|
284
|
+
export async function executeCollections(tx, ctx, today, policyOverride) {
|
|
285
|
+
const policy = policyOverride ?? (await getCollectionPolicy(tx));
|
|
286
|
+
const report = {
|
|
287
|
+
attempted: 0,
|
|
288
|
+
sent: 0,
|
|
289
|
+
failedTemporary: 0,
|
|
290
|
+
failedPermanent: 0,
|
|
291
|
+
skippedNoLongerDue: 0,
|
|
292
|
+
skippedNoChannel: 0,
|
|
293
|
+
escalated: 0,
|
|
294
|
+
};
|
|
295
|
+
const pending = await listActions(tx, { dueOnly: true, dueUntil: today, limit: 200 });
|
|
296
|
+
for (const action of pending) {
|
|
297
|
+
if (!action.receivableId)
|
|
298
|
+
continue;
|
|
299
|
+
// Estado atual, não o do agendamento. Busca pelo id — filtrar por cliente e
|
|
300
|
+
// procurar na página seria correto só enquanto a página coubesse.
|
|
301
|
+
const current = await getReceivable(tx, action.receivableId).catch(() => null);
|
|
302
|
+
if (!current || !isCollectible(current)) {
|
|
303
|
+
const reason = current?.status === 'canceled' ? 'canceled' : 'paid';
|
|
304
|
+
await cancelPendingActions(tx, action.receivableId, reason);
|
|
305
|
+
report.skippedNoLongerDue += 1;
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
const step = policy.steps.find((s) => s.key === action.stepKey);
|
|
309
|
+
if (!step || step.active === false) {
|
|
310
|
+
await cancelPendingActions(tx, action.receivableId, 'rule_disabled');
|
|
311
|
+
report.skippedNoLongerDue += 1;
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
// Escalonamento é evento interno: fecha a ação e entra na fila humana, sem
|
|
315
|
+
// mensagem ao cliente.
|
|
316
|
+
if (step.tone === 'human_escalation') {
|
|
317
|
+
await markEscalated(tx, action.id);
|
|
318
|
+
report.escalated += 1;
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
// Caminho ÚNICO. Não há alternativa: `ctx.communication` é obrigatório, e o
|
|
322
|
+
// registry legado de canais saiu do contexto. Enquanto existiam dois, o
|
|
323
|
+
// cron e a rota manual enviavam por vias com idempotências diferentes que
|
|
324
|
+
// não se enxergavam — `LEGACY_SHARED_COEXISTENCE=BLOCKING` na certificação.
|
|
325
|
+
report.attempted += 1;
|
|
326
|
+
const applied = await sendViaSharedEngine(tx, ctx, ctx.communication, action, current, step);
|
|
327
|
+
report.sent += applied.sent;
|
|
328
|
+
report.escalated += applied.escalated;
|
|
329
|
+
report.skippedNoChannel += applied.skippedNoChannel;
|
|
330
|
+
report.failedPermanent += applied.failedPermanent;
|
|
331
|
+
report.failedTemporary += applied.failedTemporary;
|
|
332
|
+
if (applied.notAttempted)
|
|
333
|
+
report.attempted -= 1;
|
|
334
|
+
}
|
|
335
|
+
return report;
|
|
336
|
+
}
|
|
337
|
+
/** Ciclo completo — o que o job roda. */
|
|
338
|
+
export async function runCollectionCycle(tx, ctx, today) {
|
|
339
|
+
const policy = await getCollectionPolicy(tx);
|
|
340
|
+
const plan = await planCollections(tx, today, policy);
|
|
341
|
+
const exec = await executeCollections(tx, ctx, today, policy);
|
|
342
|
+
return { ...plan, ...exec };
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Desliga a régua de um recebível que acabou de ser quitado.
|
|
346
|
+
*
|
|
347
|
+
* Existe porque a baixa passou a ter dois caminhos: o job diário, que varre
|
|
348
|
+
* todos os recebíveis, e o webhook, que sabe exatamente qual foi pago. Sem esta
|
|
349
|
+
* função o webhook baixaria o valor e deixaria a comunicação agendada — o
|
|
350
|
+
* cliente pagaria e receberia a cobrança de atraso mesmo assim, que é a pior
|
|
351
|
+
* falha possível numa régua automática.
|
|
352
|
+
*
|
|
353
|
+
* Só o que ainda não saiu é cancelado. Mensagem enviada é histórico.
|
|
354
|
+
*/
|
|
355
|
+
export async function cancelDunningForSettled(tx, receivableId) {
|
|
356
|
+
return cancelPendingActions(tx, receivableId, 'paid');
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Religa a régua de um recebível cuja liquidação foi anulada.
|
|
360
|
+
*
|
|
361
|
+
* Sem isto, corrigir o saldo não bastaria: `planCollections` não reagenda um
|
|
362
|
+
* passo cujo `step_key` já existe na tabela — a idempotência olha a EXISTÊNCIA
|
|
363
|
+
* da linha, não o status dela. Os passos desligados pela baixa ficariam
|
|
364
|
+
* `canceled` para sempre, e o cliente voltaria a dever sem que ninguém jamais o
|
|
365
|
+
* lembrasse. O saldo estaria certo e a cobrança nunca aconteceria.
|
|
366
|
+
*
|
|
367
|
+
* Reabre **somente** o que foi fechado POR PAGAMENTO. Um passo cancelado porque
|
|
368
|
+
* o recebível foi cancelado, ou já enviado, é história e permanece intocado —
|
|
369
|
+
* reabrir tudo faria a régua reenviar mensagem que o cliente já recebeu.
|
|
370
|
+
*/
|
|
371
|
+
/**
|
|
372
|
+
* Religa etapas fechadas por FALHA DE INFRAESTRUTURA, nunca por decisão humana.
|
|
373
|
+
*
|
|
374
|
+
* Existe para o resíduo do incidente C1-PROV-R1B-C2: etapas que o motor fechou
|
|
375
|
+
* como `escalated` porque o canal ficou indisponível (cofre de credenciais fora
|
|
376
|
+
* do ar). A correção em `sendViaSharedEngine` impede que isso volte a
|
|
377
|
+
* acontecer, mas não desfaz o que já foi fechado — e nada mais no domínio
|
|
378
|
+
* consegue, porque `planCollections` não reagenda um `step_key` existente e
|
|
379
|
+
* `listActions` só enxerga `scheduled`.
|
|
380
|
+
*
|
|
381
|
+
* As guardas são deliberadamente estreitas, e cada uma exclui uma classe:
|
|
382
|
+
*
|
|
383
|
+
* - `closed_reason = 'escalated'` — deixa de fora `no_contact_data`,
|
|
384
|
+
* `opted_out`, `consent_unknown`, `paid`, `canceled`, `rule_disabled` e
|
|
385
|
+
* `permanent_failure`. Todas são decisão de negócio e permanecem terminais.
|
|
386
|
+
* - `attempts = 0` — `markEscalated` NUNCA incrementa `attempts`, enquanto
|
|
387
|
+
* `markSent` e `markFailed` sempre incrementam. Zero prova que nenhum adapter
|
|
388
|
+
* chegou a tentar.
|
|
389
|
+
* - `provider_ref IS NULL` e `sent_at IS NULL` — prova que nada saiu. Uma
|
|
390
|
+
* mensagem entregue jamais é reaberta, e o cliente nunca recebe duplicata.
|
|
391
|
+
*
|
|
392
|
+
* O `step_key` é obrigatório: recuperação é pontual e auditável, nunca
|
|
393
|
+
* "reabra tudo deste recebível".
|
|
394
|
+
*
|
|
395
|
+
* O histórico da falha NÃO é apagado. `communication_event`
|
|
396
|
+
* (`dispatch_skipped` / `no_credential`) e `communication_dispatch`
|
|
397
|
+
* (`failed_retryable`) continuam intactos — esta função move apenas o estado da
|
|
398
|
+
* régua, e `last_error` registra a origem da reabertura.
|
|
399
|
+
*/
|
|
400
|
+
export async function rearmDunningAfterInfraFailure(tx, receivableId, stepKey, incidentRef) {
|
|
401
|
+
const rows = await tx `
|
|
402
|
+
UPDATE dunning_event
|
|
403
|
+
SET status = 'scheduled', closed_at = NULL, closed_reason = NULL,
|
|
404
|
+
last_error = ${`infra_failure_recovery:${incidentRef}`.slice(0, 300)}
|
|
405
|
+
WHERE receivable_id = ${receivableId}
|
|
406
|
+
AND step_key = ${stepKey}
|
|
407
|
+
AND status = 'escalated'
|
|
408
|
+
AND closed_reason = 'escalated'
|
|
409
|
+
AND attempts = 0
|
|
410
|
+
AND provider_ref IS NULL
|
|
411
|
+
AND sent_at IS NULL
|
|
412
|
+
RETURNING id
|
|
413
|
+
`;
|
|
414
|
+
return rows.length;
|
|
415
|
+
}
|
|
416
|
+
export async function rearmDunningAfterReversal(tx, receivableId) {
|
|
417
|
+
const rows = await tx `
|
|
418
|
+
UPDATE dunning_event
|
|
419
|
+
SET status = 'scheduled', closed_at = NULL, closed_reason = NULL
|
|
420
|
+
WHERE receivable_id = ${receivableId}
|
|
421
|
+
AND status = 'canceled'
|
|
422
|
+
AND closed_reason = 'paid'
|
|
423
|
+
RETURNING id
|
|
424
|
+
`;
|
|
425
|
+
return rows.length;
|
|
426
|
+
}
|
|
427
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/collection/engine.ts"],"names":[],"mappings":"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"}
|