@baruk/core 0.3.1 → 0.4.2
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 +85 -0
- 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 +39 -2
- package/dist/auth/service.d.ts.map +1 -1
- package/dist/auth/service.js +75 -10
- package/dist/auth/service.js.map +1 -1
- package/dist/billing/ar-repository.d.ts +334 -0
- package/dist/billing/ar-repository.d.ts.map +1 -0
- package/dist/billing/ar-repository.js +707 -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 +89 -0
- package/dist/billing/provider-account.d.ts.map +1 -0
- package/dist/billing/provider-account.js +161 -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 +90 -1
- package/dist/billing/repository.d.ts.map +1 -1
- package/dist/billing/repository.js +148 -19
- package/dist/billing/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 +75 -9
- package/dist/cjs/auth/service.js.map +1 -1
- package/dist/cjs/billing/ar-repository.js +728 -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 +170 -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 +150 -18
- package/dist/cjs/billing/repository.js.map +1 -1
- package/dist/cjs/clients/repository.js +96 -20
- package/dist/cjs/clients/repository.js.map +1 -1
- package/dist/cjs/collection/branding.js +140 -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/communication-bridge.js +140 -0
- package/dist/cjs/collection/communication-bridge.js.map +1 -0
- package/dist/cjs/collection/communication-runtime.js +193 -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 +414 -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 +147 -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/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 +161 -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 +483 -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/repository.js +309 -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/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/index.js +406 -39
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/documents.js +125 -3
- package/dist/cjs/legal/documents.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/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 +67 -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/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 +57 -8
- package/dist/cjs/subscription-billing/service.js.map +1 -1
- package/dist/cjs/subscription-billing/types.js.map +1 -1
- package/dist/cjs/tenancy/provisioning.js +32 -8
- package/dist/cjs/tenancy/provisioning.js.map +1 -1
- package/dist/cjs/users/repository.js +119 -2
- 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/repository.d.ts +42 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +94 -21
- package/dist/clients/repository.js.map +1 -1
- package/dist/collection/branding.d.ts +72 -0
- package/dist/collection/branding.d.ts.map +1 -0
- package/dist/collection/branding.js +136 -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/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 +95 -0
- package/dist/collection/communication-runtime.d.ts.map +1 -0
- package/dist/collection/communication-runtime.js +187 -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 +177 -0
- package/dist/collection/engine.d.ts.map +1 -0
- package/dist/collection/engine.js +407 -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 +53 -0
- package/dist/collection/policy.d.ts.map +1 -0
- package/dist/collection/policy.js +141 -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/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 +158 -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 +153 -0
- package/dist/communication/engine.d.ts.map +1 -0
- package/dist/communication/engine.js +480 -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 +99 -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/repository.d.ts +147 -0
- package/dist/competence/repository.d.ts.map +1 -0
- package/dist/competence/repository.js +294 -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/db/migrate.js +17 -11
- package/dist/db/migrate.js.map +1 -1
- 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/index.d.ts +109 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +100 -8
- package/dist/index.js.map +1 -1
- package/dist/legal/documents.d.ts.map +1 -1
- package/dist/legal/documents.js +125 -3
- 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/types.d.ts +32 -1
- 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/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 +67 -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/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 +17 -1
- package/dist/subscription-billing/service.d.ts.map +1 -1
- package/dist/subscription-billing/service.js +57 -8
- 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/provisioning.d.ts.map +1 -1
- package/dist/tenancy/provisioning.js +32 -8
- package/dist/tenancy/provisioning.js.map +1 -1
- package/dist/users/repository.d.ts +38 -0
- package/dist/users/repository.d.ts.map +1 -1
- package/dist/users/repository.js +118 -3
- 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 +13 -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/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 @@
|
|
|
1
|
+
{"version":3,"file":"ar-repository.js","sourceRoot":"","sources":["../../src/billing/ar-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
import { type GenerationResult } from './ar-repository.js';
|
|
3
|
+
/**
|
|
4
|
+
* A competência que o automático processa em `today`: a CORRENTE, e só ela.
|
|
5
|
+
*
|
|
6
|
+
* Deliberadamente míope. A alternativa — varrer para trás procurando
|
|
7
|
+
* competências não geradas — transformaria a primeira execução do scheduler num
|
|
8
|
+
* backfill: dezenas de meses de dívida nascendo de uma vez para clientes que
|
|
9
|
+
* nunca foram cobrados por eles, cada um já vencido, cada um disparando a régua
|
|
10
|
+
* inteira no mesmo dia. Backfill histórico é operação separada, explícita e
|
|
11
|
+
* autorizada — nunca efeito colateral de ligar um cron.
|
|
12
|
+
*
|
|
13
|
+
* A recuperação de falha continua existindo, dentro do mês: o job roda todo dia
|
|
14
|
+
* e é idempotente, então cair na terça e voltar na quarta não perde nada.
|
|
15
|
+
*/
|
|
16
|
+
export declare function competenceFor(today: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* O que o automático FARIA nesta competência, sem escrever nada.
|
|
19
|
+
*
|
|
20
|
+
* Existe para responder à única pergunta que autoriza ligar o scheduler: ele vai
|
|
21
|
+
* criar o que eu espero? Um número só ("42 acordos") não responde — por isso os
|
|
22
|
+
* motivos vêm separados. Se `wouldCreate` vier maior que o número de honorários
|
|
23
|
+
* mensais ativos que o escritório reconhece, a resposta é não ligar.
|
|
24
|
+
*/
|
|
25
|
+
export interface AutoGenerationPreview {
|
|
26
|
+
competence: string;
|
|
27
|
+
/** Todo acordo não-excluído do tenant, qualquer situação. */
|
|
28
|
+
agreements: number;
|
|
29
|
+
/** Ativos, vigentes e no ciclo desta competência. */
|
|
30
|
+
eligible: number;
|
|
31
|
+
/** Elegíveis que ainda não têm recebível nesta competência. */
|
|
32
|
+
wouldCreate: number;
|
|
33
|
+
/** Elegíveis que já têm recebível nesta competência (manual ou automático). */
|
|
34
|
+
wouldSkipExisting: number;
|
|
35
|
+
wouldSkipSuspended: number;
|
|
36
|
+
wouldSkipCanceled: number;
|
|
37
|
+
/** Fora de vigência: começa depois ou terminou antes desta competência. */
|
|
38
|
+
wouldSkipOutOfTerm: number;
|
|
39
|
+
/** Vigente, mas a periodicidade não cai neste mês (ou é avulso/sem âncora). */
|
|
40
|
+
wouldSkipOffCycle: number;
|
|
41
|
+
/**
|
|
42
|
+
* Dos que seriam criados, quantos já nasceriam com o vencimento no passado.
|
|
43
|
+
*
|
|
44
|
+
* Não é um erro — um acordo com vencimento no dia 5 processado no dia 20 é
|
|
45
|
+
* exatamente isso. É um AVISO: cada um desses dispara de uma vez todas as
|
|
46
|
+
* etapas da régua cujo prazo já passou, e é um número que quem autoriza a
|
|
47
|
+
* ativação precisa ver antes, não depois de os e-mails saírem.
|
|
48
|
+
*/
|
|
49
|
+
wouldCreateAlreadyOverdue: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Read-only por construção: só um SELECT, nenhuma escrita, nenhum lock.
|
|
53
|
+
*
|
|
54
|
+
* Tenant-scoped por RLS, como todo o resto do core — rodar isto exige
|
|
55
|
+
* `withContext`, e o que ele enxerga é o recorte de um tenant só.
|
|
56
|
+
*/
|
|
57
|
+
export declare function previewAutoGeneration(tx: Tx, today: string): Promise<AutoGenerationPreview>;
|
|
58
|
+
export interface AutoGenerationResult extends GenerationResult {
|
|
59
|
+
/**
|
|
60
|
+
* `false` quando outra execução já detinha o lock desta competência.
|
|
61
|
+
*
|
|
62
|
+
* Não é falha: é a segunda instância descobrindo que não tem trabalho. O
|
|
63
|
+
* contador precisa existir para que "criou zero" não seja lido como "o motor
|
|
64
|
+
* não gerou nada" quando na verdade foi outro processo que gerou.
|
|
65
|
+
*/
|
|
66
|
+
ran: boolean;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Gera a competência corrente do tenant, marcando a procedência e auditando.
|
|
70
|
+
*
|
|
71
|
+
* Três camadas contra duplicidade, nesta ordem de confiança:
|
|
72
|
+
*
|
|
73
|
+
* 1. O índice único parcial `(tenant, fee_agreement, competence)` — a garantia
|
|
74
|
+
* REAL. Vale contra tudo: dois crons, retry, redeploy, manual concorrente,
|
|
75
|
+
* e contra qualquer caminho de código que ainda nem foi escrito.
|
|
76
|
+
* 2. O `ON CONFLICT DO NOTHING` no INSERT, que transforma a violação em "pular"
|
|
77
|
+
* em vez de derrubar o lote inteiro por causa de um acordo.
|
|
78
|
+
* 3. O advisory lock daqui, que é só economia: evita que duas instâncias
|
|
79
|
+
* percorram os mesmos acordos para descobrir, uma a uma, que não há nada a
|
|
80
|
+
* fazer. Se ele falhasse por completo, o resultado continuaria correto.
|
|
81
|
+
*
|
|
82
|
+
* A ordem importa para quem for mexer nisto depois: nunca troque (1) por (3). Um
|
|
83
|
+
* lock protege contra concorrência que ele consegue observar; a constraint
|
|
84
|
+
* protege contra a que ninguém previu.
|
|
85
|
+
*/
|
|
86
|
+
export declare function runAutoGeneration(tx: Tx, today: string): Promise<AutoGenerationResult>;
|
|
87
|
+
//# sourceMappingURL=auto-generation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-generation.d.ts","sourceRoot":"","sources":["../../src/billing/auto-generation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AA2B5B;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKnD;AAID;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;OAOG;IACH,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAcD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAqEjG;AAID,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D;;;;;;OAMG;IACH,GAAG,EAAE,OAAO,CAAC;CACd;AAmBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAoC5F"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { appendAudit } from '../audit/audit.js';
|
|
2
|
+
import { assertCompetence, classifyFeeForCompetence, dueDateFor, generateReceivablesForCompetence, } from './ar-repository.js';
|
|
3
|
+
/**
|
|
4
|
+
* Geração automática dos recebíveis recorrentes.
|
|
5
|
+
*
|
|
6
|
+
* O escritório não deve depender de alguém lembrar de apertar um botão todo mês
|
|
7
|
+
* para que os honorários virem dívida cobrável. Este módulo é o gatilho
|
|
8
|
+
* automático — e nada além do gatilho: quem gera é
|
|
9
|
+
* `generateReceivablesForCompetence`, exatamente o mesmo motor que a ação
|
|
10
|
+
* "Gerar competência manualmente" chama.
|
|
11
|
+
*
|
|
12
|
+
* Isso é deliberado e não negociável. Duas implementações da mesma regra
|
|
13
|
+
* divergiriam no primeiro caso de borda, e a divergência apareceria como dois
|
|
14
|
+
* valores diferentes para a mesma dívida do mesmo cliente. Aqui só existem duas
|
|
15
|
+
* coisas que o manual não tem: QUAL competência processar (o manual pergunta ao
|
|
16
|
+
* operador; o automático deriva do calendário) e a marca de procedência.
|
|
17
|
+
*
|
|
18
|
+
* Fronteira dura com o provider: nada neste arquivo fala com gateway de
|
|
19
|
+
* pagamento. Gerar recebível é registrar que o cliente DEVE; emitir cobrança é
|
|
20
|
+
* outro passo, com outras grades (`live-guard.ts`). Um não implica o outro, e é
|
|
21
|
+
* por isso que a automação pode ser ligada com a emissão live desligada.
|
|
22
|
+
*/
|
|
23
|
+
// ── Competência a partir do calendário ───────────────────────────────────────
|
|
24
|
+
const ISO_DATE_RE = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;
|
|
25
|
+
/**
|
|
26
|
+
* A competência que o automático processa em `today`: a CORRENTE, e só ela.
|
|
27
|
+
*
|
|
28
|
+
* Deliberadamente míope. A alternativa — varrer para trás procurando
|
|
29
|
+
* competências não geradas — transformaria a primeira execução do scheduler num
|
|
30
|
+
* backfill: dezenas de meses de dívida nascendo de uma vez para clientes que
|
|
31
|
+
* nunca foram cobrados por eles, cada um já vencido, cada um disparando a régua
|
|
32
|
+
* inteira no mesmo dia. Backfill histórico é operação separada, explícita e
|
|
33
|
+
* autorizada — nunca efeito colateral de ligar um cron.
|
|
34
|
+
*
|
|
35
|
+
* A recuperação de falha continua existindo, dentro do mês: o job roda todo dia
|
|
36
|
+
* e é idempotente, então cair na terça e voltar na quarta não perde nada.
|
|
37
|
+
*/
|
|
38
|
+
export function competenceFor(today) {
|
|
39
|
+
if (!ISO_DATE_RE.test(today)) {
|
|
40
|
+
throw new Error('Data de referência deve estar no formato YYYY-MM-DD');
|
|
41
|
+
}
|
|
42
|
+
return today.slice(0, 7);
|
|
43
|
+
}
|
|
44
|
+
const isoDay = (d) => (d ? d.toISOString().slice(0, 10) : null);
|
|
45
|
+
/**
|
|
46
|
+
* Read-only por construção: só um SELECT, nenhuma escrita, nenhum lock.
|
|
47
|
+
*
|
|
48
|
+
* Tenant-scoped por RLS, como todo o resto do core — rodar isto exige
|
|
49
|
+
* `withContext`, e o que ele enxerga é o recorte de um tenant só.
|
|
50
|
+
*/
|
|
51
|
+
export async function previewAutoGeneration(tx, today) {
|
|
52
|
+
const competence = competenceFor(today);
|
|
53
|
+
assertCompetence(competence);
|
|
54
|
+
const fees = await tx `
|
|
55
|
+
SELECT f.id, f.periodicity, f.status, f.due_day, f.starts_on, f.ends_on,
|
|
56
|
+
EXISTS (
|
|
57
|
+
SELECT 1 FROM receivable r
|
|
58
|
+
WHERE r.fee_agreement_id = f.id
|
|
59
|
+
AND r.competence = ${competence}
|
|
60
|
+
AND r.deleted_at IS NULL
|
|
61
|
+
) AS has_receivable
|
|
62
|
+
FROM fee_agreement f
|
|
63
|
+
WHERE f.deleted_at IS NULL
|
|
64
|
+
`;
|
|
65
|
+
const preview = {
|
|
66
|
+
competence,
|
|
67
|
+
agreements: fees.length,
|
|
68
|
+
eligible: 0,
|
|
69
|
+
wouldCreate: 0,
|
|
70
|
+
wouldSkipExisting: 0,
|
|
71
|
+
wouldSkipSuspended: 0,
|
|
72
|
+
wouldSkipCanceled: 0,
|
|
73
|
+
wouldSkipOutOfTerm: 0,
|
|
74
|
+
wouldSkipOffCycle: 0,
|
|
75
|
+
wouldCreateAlreadyOverdue: 0,
|
|
76
|
+
};
|
|
77
|
+
for (const fee of fees) {
|
|
78
|
+
const verdict = classifyFeeForCompetence({
|
|
79
|
+
periodicity: fee.periodicity,
|
|
80
|
+
status: fee.status,
|
|
81
|
+
startsOn: isoDay(fee.starts_on),
|
|
82
|
+
endsOn: isoDay(fee.ends_on),
|
|
83
|
+
}, competence);
|
|
84
|
+
switch (verdict) {
|
|
85
|
+
case 'eligible':
|
|
86
|
+
preview.eligible += 1;
|
|
87
|
+
if (fee.has_receivable) {
|
|
88
|
+
preview.wouldSkipExisting += 1;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
preview.wouldCreate += 1;
|
|
92
|
+
if (dueDateFor(competence, fee.due_day) < today) {
|
|
93
|
+
preview.wouldCreateAlreadyOverdue += 1;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
case 'suspended':
|
|
98
|
+
preview.wouldSkipSuspended += 1;
|
|
99
|
+
break;
|
|
100
|
+
case 'canceled':
|
|
101
|
+
preview.wouldSkipCanceled += 1;
|
|
102
|
+
break;
|
|
103
|
+
case 'before_term':
|
|
104
|
+
case 'after_term':
|
|
105
|
+
preview.wouldSkipOutOfTerm += 1;
|
|
106
|
+
break;
|
|
107
|
+
default:
|
|
108
|
+
preview.wouldSkipOffCycle += 1;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return preview;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Chave do advisory lock: uma por (tenant, competência).
|
|
116
|
+
*
|
|
117
|
+
* `hashtext` do Postgres, não um hash nosso, porque a chave precisa ser a mesma
|
|
118
|
+
* em qualquer processo — e um hash em JS ficaria refém da versão do runtime que
|
|
119
|
+
* cada instância está rodando.
|
|
120
|
+
*/
|
|
121
|
+
async function tryLock(tx, competence) {
|
|
122
|
+
const rows = await tx `
|
|
123
|
+
SELECT pg_try_advisory_xact_lock(
|
|
124
|
+
hashtext('auto-receivable-generation'),
|
|
125
|
+
hashtext(current_setting('app.current_tenant', true) || ':' || ${competence})
|
|
126
|
+
) AS locked
|
|
127
|
+
`;
|
|
128
|
+
return rows[0]?.locked === true;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Gera a competência corrente do tenant, marcando a procedência e auditando.
|
|
132
|
+
*
|
|
133
|
+
* Três camadas contra duplicidade, nesta ordem de confiança:
|
|
134
|
+
*
|
|
135
|
+
* 1. O índice único parcial `(tenant, fee_agreement, competence)` — a garantia
|
|
136
|
+
* REAL. Vale contra tudo: dois crons, retry, redeploy, manual concorrente,
|
|
137
|
+
* e contra qualquer caminho de código que ainda nem foi escrito.
|
|
138
|
+
* 2. O `ON CONFLICT DO NOTHING` no INSERT, que transforma a violação em "pular"
|
|
139
|
+
* em vez de derrubar o lote inteiro por causa de um acordo.
|
|
140
|
+
* 3. O advisory lock daqui, que é só economia: evita que duas instâncias
|
|
141
|
+
* percorram os mesmos acordos para descobrir, uma a uma, que não há nada a
|
|
142
|
+
* fazer. Se ele falhasse por completo, o resultado continuaria correto.
|
|
143
|
+
*
|
|
144
|
+
* A ordem importa para quem for mexer nisto depois: nunca troque (1) por (3). Um
|
|
145
|
+
* lock protege contra concorrência que ele consegue observar; a constraint
|
|
146
|
+
* protege contra a que ninguém previu.
|
|
147
|
+
*/
|
|
148
|
+
export async function runAutoGeneration(tx, today) {
|
|
149
|
+
const competence = competenceFor(today);
|
|
150
|
+
if (!(await tryLock(tx, competence))) {
|
|
151
|
+
return { competence, created: [], skipped: 0, notApplicable: 0, ran: false };
|
|
152
|
+
}
|
|
153
|
+
const result = await generateReceivablesForCompetence(tx, {
|
|
154
|
+
competence,
|
|
155
|
+
source: 'automatic',
|
|
156
|
+
// Sem `createdBy`: não houve usuário. Quem responde pela linha é o
|
|
157
|
+
// `actor_type = 'automation'` da trilha, não um humano escolhido a esmo —
|
|
158
|
+
// atribuir isto ao último admin que logou seria falsificar a autoria.
|
|
159
|
+
createdBy: null,
|
|
160
|
+
});
|
|
161
|
+
// Auditar inclusive o lote vazio. "O cron rodou e não criou nada" e "o cron
|
|
162
|
+
// não rodou" produzem o mesmo estado no banco e exigem investigações opostas;
|
|
163
|
+
// sem esta linha, não há como distinguir os dois depois do fato.
|
|
164
|
+
await appendAudit(tx, {
|
|
165
|
+
actorType: 'automation',
|
|
166
|
+
actorId: null,
|
|
167
|
+
action: 'receivables_generated_automatically',
|
|
168
|
+
resourceType: 'receivable',
|
|
169
|
+
metadata: {
|
|
170
|
+
competence,
|
|
171
|
+
created: result.created.length,
|
|
172
|
+
skipped: result.skipped,
|
|
173
|
+
notApplicable: result.notApplicable,
|
|
174
|
+
// Ids, não valores nem nomes: a trilha precisa permitir chegar à linha,
|
|
175
|
+
// não reproduzir a dívida dentro dela.
|
|
176
|
+
receivableIds: result.created.map((r) => r.id),
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
return { ...result, ran: true };
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=auto-generation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-generation.js","sourceRoot":"","sources":["../../src/billing/auto-generation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grades de proteção entre a aplicação e dinheiro real.
|
|
3
|
+
*
|
|
4
|
+
* O isolamento de ambiente já era bom: `environment` é atributo da CONTA do
|
|
5
|
+
* tenant, e a base do gateway sai de um mapa único — não há como um `sandbox`
|
|
6
|
+
* apontar para a URL de produção. O que não existia era proteção contra o outro
|
|
7
|
+
* lado do erro: **qual aplicação** está falando com a conta live.
|
|
8
|
+
*
|
|
9
|
+
* Nada impedia que um deploy de homologação, apontado ao mesmo banco, emitisse
|
|
10
|
+
* cobrança de verdade; nem que uma suíte de teste, achando uma conta `live` no
|
|
11
|
+
* banco, criasse dívida real para alguém. Ambiente certo na conta e ambiente
|
|
12
|
+
* errado na aplicação produzem exatamente o mesmo estrago.
|
|
13
|
+
*
|
|
14
|
+
* Por isso a decisão é composta: `sandbox` passa sempre; `live` exige que a
|
|
15
|
+
* aplicação SEJA produção, que não esteja sob test runner, e — para criar
|
|
16
|
+
* cobrança nova — que a chave geral esteja ligada.
|
|
17
|
+
*/
|
|
18
|
+
export interface LiveRuntime {
|
|
19
|
+
/** Como a aplicação se declara. `production` é o único que autoriza `live`. */
|
|
20
|
+
appEnv: string;
|
|
21
|
+
/** Estamos dentro de uma suíte de teste? */
|
|
22
|
+
isTestRunner: boolean;
|
|
23
|
+
/** Chave geral: pausa a EMISSÃO nova sem derrubar o resto. */
|
|
24
|
+
liveChargesDisabled: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Autorização de UMA operação nomeada, com a chave geral ARMADA.
|
|
27
|
+
*
|
|
28
|
+
* Existe para que uma emissão live controlada não exija desligar a chave
|
|
29
|
+
* geral: desligar seria abrir uma janela em que qualquer requisição, cron ou
|
|
30
|
+
* retry concorrente também poderia emitir. Aqui a janela tem o tamanho de uma
|
|
31
|
+
* operação — a que estiver nomeada, e nenhuma outra.
|
|
32
|
+
*/
|
|
33
|
+
liveChargeAllowScope: string | null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Lê o runtime a partir do ambiente do processo.
|
|
37
|
+
*
|
|
38
|
+
* `BARUK_APP_ENV` existe separado de `NODE_ENV` porque os dois respondem
|
|
39
|
+
* perguntas diferentes: `NODE_ENV=production` é o modo de build de QUALQUER
|
|
40
|
+
* deploy — inclusive homologação, inclusive um cron. Sem a distinção, o guard
|
|
41
|
+
* aprovaria live num ambiente de homologação, que é o caso que ele existe para
|
|
42
|
+
* barrar.
|
|
43
|
+
*
|
|
44
|
+
* Por isso não há mais fallback para `NODE_ENV`. Ele existia e era uma porta
|
|
45
|
+
* aberta: os dois cron jobs financeiros rodam com `NODE_ENV=production` e SEM
|
|
46
|
+
* `BARUK_APP_ENV`, então herdavam autoridade de produção por omissão — bastava
|
|
47
|
+
* alguém ligar o modo live para que cobrança real passasse por uma grade que
|
|
48
|
+
* ninguém configurou.
|
|
49
|
+
*
|
|
50
|
+
* Quem não declara não ganha permissão: ausência vira `unknown`, e `unknown`
|
|
51
|
+
* não é `production`. Configuração desconhecida bloqueia; nunca autoriza.
|
|
52
|
+
*/
|
|
53
|
+
export declare function readLiveRuntime(env?: NodeJS.ProcessEnv): LiveRuntime;
|
|
54
|
+
export type LiveGuardAction = 'resolve' | 'charge';
|
|
55
|
+
/**
|
|
56
|
+
* Esta aplicação pode falar com esta conta, para esta ação?
|
|
57
|
+
*
|
|
58
|
+
* `resolve` cobre qualquer uso do adapter — inclusive receber webhook, que uma
|
|
59
|
+
* aplicação de homologação não deve processar de uma conta live. `charge` é mais
|
|
60
|
+
* estrito: soma a chave geral, porque pausar emissão nova não pode significar
|
|
61
|
+
* parar de reconhecer o dinheiro que já entrou.
|
|
62
|
+
*/
|
|
63
|
+
export declare function assertLiveProviderAllowed(environment: string, runtime: LiveRuntime, action: LiveGuardAction, scope?: string | null): void;
|
|
64
|
+
//# sourceMappingURL=live-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-guard.d.ts","sourceRoot":"","sources":["../../src/billing/live-guard.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,YAAY,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,mBAAmB,EAAE,OAAO,CAAC;IAC7B;;;;;;;OAOG;IACH,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,WAAW,CAUjF;AAMD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,eAAe,EACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,IAAI,CAkCN"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ConflictError, ValidationError } from '@baruk/shared';
|
|
2
|
+
/**
|
|
3
|
+
* Lê o runtime a partir do ambiente do processo.
|
|
4
|
+
*
|
|
5
|
+
* `BARUK_APP_ENV` existe separado de `NODE_ENV` porque os dois respondem
|
|
6
|
+
* perguntas diferentes: `NODE_ENV=production` é o modo de build de QUALQUER
|
|
7
|
+
* deploy — inclusive homologação, inclusive um cron. Sem a distinção, o guard
|
|
8
|
+
* aprovaria live num ambiente de homologação, que é o caso que ele existe para
|
|
9
|
+
* barrar.
|
|
10
|
+
*
|
|
11
|
+
* Por isso não há mais fallback para `NODE_ENV`. Ele existia e era uma porta
|
|
12
|
+
* aberta: os dois cron jobs financeiros rodam com `NODE_ENV=production` e SEM
|
|
13
|
+
* `BARUK_APP_ENV`, então herdavam autoridade de produção por omissão — bastava
|
|
14
|
+
* alguém ligar o modo live para que cobrança real passasse por uma grade que
|
|
15
|
+
* ninguém configurou.
|
|
16
|
+
*
|
|
17
|
+
* Quem não declara não ganha permissão: ausência vira `unknown`, e `unknown`
|
|
18
|
+
* não é `production`. Configuração desconhecida bloqueia; nunca autoriza.
|
|
19
|
+
*/
|
|
20
|
+
export function readLiveRuntime(env = process.env) {
|
|
21
|
+
return {
|
|
22
|
+
appEnv: env.BARUK_APP_ENV?.trim() || 'unknown',
|
|
23
|
+
// `VITEST` é posto pelo próprio runner. Depender só de `NODE_ENV=test`
|
|
24
|
+
// deixaria passar uma suíte rodada sem essa variável — e o custo do engano
|
|
25
|
+
// aqui é cobrança real emitida por um teste.
|
|
26
|
+
isTestRunner: env.NODE_ENV === 'test' || Boolean(env.VITEST) || Boolean(env.JEST_WORKER_ID),
|
|
27
|
+
liveChargesDisabled: isTruthy(env.BARUK_LIVE_CHARGES_DISABLED),
|
|
28
|
+
liveChargeAllowScope: env.BARUK_LIVE_CHARGE_ALLOW_SCOPE?.trim() || null,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function isTruthy(v) {
|
|
32
|
+
return v === '1' || v?.toLowerCase() === 'true';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Esta aplicação pode falar com esta conta, para esta ação?
|
|
36
|
+
*
|
|
37
|
+
* `resolve` cobre qualquer uso do adapter — inclusive receber webhook, que uma
|
|
38
|
+
* aplicação de homologação não deve processar de uma conta live. `charge` é mais
|
|
39
|
+
* estrito: soma a chave geral, porque pausar emissão nova não pode significar
|
|
40
|
+
* parar de reconhecer o dinheiro que já entrou.
|
|
41
|
+
*/
|
|
42
|
+
export function assertLiveProviderAllowed(environment, runtime, action, scope) {
|
|
43
|
+
if (environment !== 'live')
|
|
44
|
+
return;
|
|
45
|
+
if (runtime.isTestRunner) {
|
|
46
|
+
throw new ValidationError('Teste automatizado não opera conta de pagamento em produção. ' +
|
|
47
|
+
'Use uma conta `sandbox` no cenário.');
|
|
48
|
+
}
|
|
49
|
+
if (runtime.appEnv !== 'production') {
|
|
50
|
+
throw new ValidationError(`Esta aplicação está declarada como "${runtime.appEnv}" e não pode usar a conta de ` +
|
|
51
|
+
'pagamento em produção. Conta `live` só opera em ambiente de produção.');
|
|
52
|
+
}
|
|
53
|
+
if (action === 'charge' && runtime.liveChargesDisabled) {
|
|
54
|
+
// Exceção nomeada: a chave geral continua ARMADA, e exatamente uma operação
|
|
55
|
+
// passa. Vem DEPOIS das checagens de ambiente e de test runner de propósito
|
|
56
|
+
// — nomear um escopo não pode comprar autoridade que a aplicação não tem.
|
|
57
|
+
// Comparação estrita e sem default: escopo vazio dos dois lados não casa,
|
|
58
|
+
// senão "não configurado" viraria "tudo liberado".
|
|
59
|
+
if (runtime.liveChargeAllowScope && scope && scope === runtime.liveChargeAllowScope) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Conflito, não erro de validação: não há nada errado com o pedido — a
|
|
63
|
+
// emissão está pausada por decisão operacional, e volta quando for religada.
|
|
64
|
+
throw new ConflictError('A emissão de cobranças em produção está temporariamente pausada. ' +
|
|
65
|
+
'Consultas, pagamentos e baixas seguem funcionando normalmente.', { code: 'LIVE_CHARGES_DISABLED' });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=live-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-guard.js","sourceRoot":"","sources":["../../src/billing/live-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAsC/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAAC,MAAyB,OAAO,CAAC,GAAG;IAClE,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,SAAS;QAC9C,uEAAuE;QACvE,2EAA2E;QAC3E,6CAA6C;QAC7C,YAAY,EAAE,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3F,mBAAmB,EAAE,QAAQ,CAAC,GAAG,CAAC,2BAA2B,CAAC;QAC9D,oBAAoB,EAAE,GAAG,CAAC,6BAA6B,EAAE,IAAI,EAAE,IAAI,IAAI;KACxE,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,CAAqB;IACrC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC;AAClD,CAAC;AAID;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CACvC,WAAmB,EACnB,OAAoB,EACpB,MAAuB,EACvB,KAAqB;IAErB,IAAI,WAAW,KAAK,MAAM;QAAE,OAAO;IAEnC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,eAAe,CACvB,+DAA+D;YAC7D,qCAAqC,CACxC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACpC,MAAM,IAAI,eAAe,CACvB,uCAAuC,OAAO,CAAC,MAAM,+BAA+B;YAClF,uEAAuE,CAC1E,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,4EAA4E;QAC5E,4EAA4E;QAC5E,0EAA0E;QAC1E,0EAA0E;QAC1E,mDAAmD;QACnD,IAAI,OAAO,CAAC,oBAAoB,IAAI,KAAK,IAAI,KAAK,KAAK,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACpF,OAAO;QACT,CAAC;QACD,uEAAuE;QACvE,6EAA6E;QAC7E,MAAM,IAAI,aAAa,CACrB,mEAAmE;YACjE,gEAAgE,EAClE,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAClC,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quais meios de pagamento uma cobrança realmente oferece.
|
|
3
|
+
*
|
|
4
|
+
* Derivado das instruções que o gateway devolveu — nunca do `method` pedido na
|
|
5
|
+
* emissão. Os dois divergem na prática: pede-se PIX e o Asaas devolve também o
|
|
6
|
+
* boleto e o link da fatura. Mostrar o `method` faria a tela anunciar um meio a
|
|
7
|
+
* menos do que o cliente recebeu no e-mail.
|
|
8
|
+
*
|
|
9
|
+
* Mora no domínio porque a mesma pergunta é feita pela lista do console, pelo
|
|
10
|
+
* detalhe do recebível e pelo Portal. Já havia uma cópia na página de Cobranças;
|
|
11
|
+
* a segunda cópia é o momento em que duas telas passam a discordar sobre o que o
|
|
12
|
+
* cliente pode fazer.
|
|
13
|
+
*/
|
|
14
|
+
export type PaymentMean = 'pix' | 'boleto' | 'link';
|
|
15
|
+
export declare function availableMeansOf(instructions: Record<string, unknown> | null): PaymentMean[];
|
|
16
|
+
export declare function meanLabel(m: PaymentMean): string;
|
|
17
|
+
//# sourceMappingURL=payment-means-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-means-catalog.d.ts","sourceRoot":"","sources":["../../src/billing/payment-means-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpD,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,WAAW,EAAE,CAW5F;AAID,wBAAgB,SAAS,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function availableMeansOf(instructions) {
|
|
2
|
+
if (!instructions)
|
|
3
|
+
return [];
|
|
4
|
+
const has = (k) => Boolean(instructions[k]);
|
|
5
|
+
const means = [];
|
|
6
|
+
if (has('pixPayload') || has('pixQrCodeImage'))
|
|
7
|
+
means.push('pix');
|
|
8
|
+
// `bankSlipUrl` é o nome do Asaas e `boletoUrl` o nome do contrato interno.
|
|
9
|
+
// Cobranças emitidas antes da normalização guardaram o primeiro; ignorá-lo
|
|
10
|
+
// faria o boleto sumir da tela para quem já tem um.
|
|
11
|
+
if (has('boletoUrl') || has('bankSlipUrl') || has('identificationField'))
|
|
12
|
+
means.push('boleto');
|
|
13
|
+
if (has('invoiceUrl'))
|
|
14
|
+
means.push('link');
|
|
15
|
+
return means;
|
|
16
|
+
}
|
|
17
|
+
const LABEL = { pix: 'PIX', boleto: 'Boleto', link: 'Link' };
|
|
18
|
+
export function meanLabel(m) {
|
|
19
|
+
return LABEL[m];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=payment-means-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-means-catalog.js","sourceRoot":"","sources":["../../src/billing/payment-means-catalog.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,gBAAgB,CAAC,YAA4C;IAC3E,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClE,4EAA4E;IAC5E,2EAA2E;IAC3E,oDAAoD;IACpD,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,qBAAqB,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/F,IAAI,GAAG,CAAC,YAAY,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,KAAK,GAAgC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAE1F,MAAM,UAAU,SAAS,CAAC,CAAc;IACtC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
import type { PaymentBlock } from '../collection/payment-block.js';
|
|
3
|
+
import { type PayableCharge } from './payment-rail.js';
|
|
4
|
+
/**
|
|
5
|
+
* Meios de pagamento de uma cobrança — uma implementação, todos os canais.
|
|
6
|
+
*
|
|
7
|
+
* Antes desta função a mesma lógica existia em duas cópias, no cron de cobrança
|
|
8
|
+
* e na rota manual, com um comentário pedindo que não divergissem: *"mesmo
|
|
9
|
+
* resolvedor da rota manual: o cron não pode mandar um e-mail diferente do que o
|
|
10
|
+
* escritório vê ao simular o ciclo"*. Um pedido em comentário não é garantia. O
|
|
11
|
+
* console administrativo e o Portal seriam a terceira e a quarta cópia, e a
|
|
12
|
+
* primeira divergência apareceria como "o cliente recebeu um PIX diferente do
|
|
13
|
+
* que a tela mostra".
|
|
14
|
+
*
|
|
15
|
+
* A regra que justifica o lugar: **como se paga é assunto do domínio
|
|
16
|
+
* financeiro**, não do canal. O canal escolhe o que renderizar.
|
|
17
|
+
*/
|
|
18
|
+
export interface PaymentMeansOptions {
|
|
19
|
+
/**
|
|
20
|
+
* Base pública da API, para servir o QR como imagem.
|
|
21
|
+
*
|
|
22
|
+
* Obrigatória e sem default: o QR do PIX precisa de URL `https` porque cliente
|
|
23
|
+
* de e-mail não desenha `data:` URI — foi o defeito da PR #90. Um default
|
|
24
|
+
* silencioso reintroduziria exatamente esse caminho.
|
|
25
|
+
*/
|
|
26
|
+
publicApiBase: string;
|
|
27
|
+
tenantId: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Converte as instruções que o gateway devolveu no bloco agnóstico de canal.
|
|
31
|
+
*
|
|
32
|
+
* Devolve `null` quando não há **nenhum** meio de pagamento: um bloco vazio
|
|
33
|
+
* renderizaria um "Pagar agora" que não paga, o que é pior que não mostrar nada.
|
|
34
|
+
*/
|
|
35
|
+
export declare function paymentMeansOfCharge(charge: Pick<PayableCharge, 'id' | 'instructions'>, opts: PaymentMeansOptions): PaymentBlock | null;
|
|
36
|
+
/** Meios de pagamento da cobrança VIVA de um recebível, se houver alguma. */
|
|
37
|
+
export declare function paymentMeansForReceivable(tx: Tx, receivableId: string, opts: PaymentMeansOptions): Promise<PaymentBlock | null>;
|
|
38
|
+
//# sourceMappingURL=payment-means.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-means.d.ts","sourceRoot":"","sources":["../../src/billing/payment-means.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,cAAc,CAAC,EAClD,IAAI,EAAE,mBAAmB,GACxB,YAAY,GAAG,IAAI,CAarB;AAED,6EAA6E;AAC7E,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,EAAE,EACN,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAI9B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { findActiveCharge } from './payment-rail.js';
|
|
2
|
+
/**
|
|
3
|
+
* Converte as instruções que o gateway devolveu no bloco agnóstico de canal.
|
|
4
|
+
*
|
|
5
|
+
* Devolve `null` quando não há **nenhum** meio de pagamento: um bloco vazio
|
|
6
|
+
* renderizaria um "Pagar agora" que não paga, o que é pior que não mostrar nada.
|
|
7
|
+
*/
|
|
8
|
+
export function paymentMeansOfCharge(charge, opts) {
|
|
9
|
+
const i = charge.instructions;
|
|
10
|
+
const block = {
|
|
11
|
+
url: i.invoiceUrl,
|
|
12
|
+
pixPayload: i.pixPayload,
|
|
13
|
+
// URL pública em vez do base64, pela razão registrada em `PaymentMeansOptions`.
|
|
14
|
+
pixQrCodeImage: i.pixQrCodeImage
|
|
15
|
+
? `${opts.publicApiBase}/v1/billing/charges/${opts.tenantId}/${charge.id}/pix-qr.png`
|
|
16
|
+
: undefined,
|
|
17
|
+
boletoUrl: i.boletoUrl,
|
|
18
|
+
identificationField: i.identificationField,
|
|
19
|
+
};
|
|
20
|
+
return Object.values(block).some(Boolean) ? block : null;
|
|
21
|
+
}
|
|
22
|
+
/** Meios de pagamento da cobrança VIVA de um recebível, se houver alguma. */
|
|
23
|
+
export async function paymentMeansForReceivable(tx, receivableId, opts) {
|
|
24
|
+
const charge = await findActiveCharge(tx, receivableId);
|
|
25
|
+
if (!charge)
|
|
26
|
+
return null;
|
|
27
|
+
return paymentMeansOfCharge(charge, opts);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=payment-means.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-means.js","sourceRoot":"","sources":["../../src/billing/payment-means.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,mBAAmB,CAAC;AA6BzE;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAkD,EAClD,IAAyB;IAEzB,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;IAC9B,MAAM,KAAK,GAAiB;QAC1B,GAAG,EAAE,CAAC,CAAC,UAAU;QACjB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,gFAAgF;QAChF,cAAc,EAAE,CAAC,CAAC,cAAc;YAC9B,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,uBAAuB,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,EAAE,aAAa;YACrF,CAAC,CAAC,SAAS;QACb,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,mBAAmB,EAAE,CAAC,CAAC,mBAAmB;KAC3C,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,EAAM,EACN,YAAoB,EACpB,IAAyB;IAEzB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
|