@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,138 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { getReceivable, registerPayment, reverseSettlementForCharge } from './ar-repository.js';
|
|
3
|
+
/**
|
|
4
|
+
* Grava o evento e diz se ele é novo.
|
|
5
|
+
*
|
|
6
|
+
* O INSERT é a trava: quem consegue inserir processa, quem colide já foi
|
|
7
|
+
* processado por outro. Fazer `SELECT` antes e `INSERT` depois deixaria uma
|
|
8
|
+
* janela entre os dois — e webhook duplicado chega em rajada, exatamente dentro
|
|
9
|
+
* dessa janela.
|
|
10
|
+
*/
|
|
11
|
+
export async function recordWebhookEvent(tx, input) {
|
|
12
|
+
const id = randomUUID();
|
|
13
|
+
const rows = await tx `
|
|
14
|
+
INSERT INTO webhook_event (
|
|
15
|
+
id, tenant_id, provider_account_id, provider, external_event_id, event_type, payload
|
|
16
|
+
) VALUES (
|
|
17
|
+
${id}, ${input.tenantId}, ${input.providerAccountId}, ${input.provider},
|
|
18
|
+
${input.eventId}, ${input.eventType}, ${tx.json(input.payload)}
|
|
19
|
+
)
|
|
20
|
+
ON CONFLICT DO NOTHING
|
|
21
|
+
RETURNING id
|
|
22
|
+
`;
|
|
23
|
+
return { id: rows[0]?.id ?? id, isNew: Boolean(rows[0]) };
|
|
24
|
+
}
|
|
25
|
+
export async function markWebhookProcessed(tx, id, status) {
|
|
26
|
+
await tx `
|
|
27
|
+
UPDATE webhook_event SET status = ${status}, processed_at = now() WHERE id = ${id}
|
|
28
|
+
`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Aplica o evento normalizado ao recebível.
|
|
32
|
+
*
|
|
33
|
+
* Chamada DEPOIS de `recordWebhookEvent` ter dito que o evento é novo. Ainda
|
|
34
|
+
* assim confere o estado do recebível antes de baixar: dois eventos distintos
|
|
35
|
+
* (`CONFIRMED` e `RECEIVED`) descrevem o mesmo pagamento, passam os dois pelo
|
|
36
|
+
* dedup por serem eventos diferentes, e baixariam duas vezes o mesmo dinheiro.
|
|
37
|
+
*/
|
|
38
|
+
export async function applyWebhookEvent(tx, event) {
|
|
39
|
+
if (!event.externalId)
|
|
40
|
+
return { outcome: 'ignored', receivableId: null, chargeId: null };
|
|
41
|
+
const rows = await tx `
|
|
42
|
+
SELECT id, receivable_id, method, amount, status
|
|
43
|
+
FROM charge WHERE external_id = ${event.externalId} AND deleted_at IS NULL
|
|
44
|
+
LIMIT 1
|
|
45
|
+
`;
|
|
46
|
+
const charge = rows[0];
|
|
47
|
+
if (!charge)
|
|
48
|
+
return { outcome: 'charge_not_found', receivableId: null, chargeId: null };
|
|
49
|
+
const ref = { receivableId: charge.receivable_id, chargeId: charge.id };
|
|
50
|
+
switch (event.type) {
|
|
51
|
+
case 'charge.paid':
|
|
52
|
+
return { ...ref, outcome: await applyPayment(tx, charge, event) };
|
|
53
|
+
case 'charge.overdue':
|
|
54
|
+
await setChargeStatus(tx, charge.id, 'overdue');
|
|
55
|
+
return { ...ref, outcome: 'overdue' };
|
|
56
|
+
case 'charge.canceled':
|
|
57
|
+
await setChargeStatus(tx, charge.id, 'canceled');
|
|
58
|
+
return { ...ref, outcome: 'canceled' };
|
|
59
|
+
// Estorno e chargeback marcam a COBRANÇA, e não desfazem a baixa.
|
|
60
|
+
//
|
|
61
|
+
// Reverter o recebível automaticamente ressuscitaria a dívida e religaria a
|
|
62
|
+
// régua contra alguém que pode estar em disputa legítima — uma cobrança
|
|
63
|
+
// automática nesse momento é o pior desfecho possível. O escritório vê o
|
|
64
|
+
// estado e decide.
|
|
65
|
+
case 'charge.refunded':
|
|
66
|
+
case 'charge.chargeback':
|
|
67
|
+
await setChargeStatus(tx, charge.id, 'refunded');
|
|
68
|
+
return { ...ref, outcome: 'refunded' };
|
|
69
|
+
/**
|
|
70
|
+
* Baixa anulada na origem — e aqui a diferença para o estorno é financeira,
|
|
71
|
+
* não de nomenclatura.
|
|
72
|
+
*
|
|
73
|
+
* No estorno o dinheiro **entrou e saiu**: a dívida foi quitada e reabri-la
|
|
74
|
+
* cobraria de novo algo que foi pago. Na anulação o dinheiro **nunca
|
|
75
|
+
* entrou**: manter o recebível quitado seria o sistema afirmando um
|
|
76
|
+
* recebimento que a própria origem já negou. Por isso este é o único dos
|
|
77
|
+
* três que reverte estado.
|
|
78
|
+
*/
|
|
79
|
+
case 'charge.settlement_undone': {
|
|
80
|
+
const reversal = await reverseSettlementForCharge(tx, charge.id, 'settlement_undone');
|
|
81
|
+
return {
|
|
82
|
+
receivableId: reversal.receivableId ?? charge.receivable_id,
|
|
83
|
+
chargeId: charge.id,
|
|
84
|
+
outcome: reversal.reversedPayments > 0 ? 'reversed' : 'already_reversed',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
default:
|
|
88
|
+
return { ...ref, outcome: 'ignored' };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function applyPayment(tx, charge, event) {
|
|
92
|
+
if (!charge.receivable_id) {
|
|
93
|
+
// Cobrança avulsa, anterior ao Payment Rail: marca a cobrança e para. Não
|
|
94
|
+
// há recebível a baixar, e inventar um seria criar dívida que não existia.
|
|
95
|
+
await setChargeStatus(tx, charge.id, 'paid');
|
|
96
|
+
return 'paid';
|
|
97
|
+
}
|
|
98
|
+
const receivable = await getReceivable(tx, charge.receivable_id);
|
|
99
|
+
if (receivable.status === 'paid' || receivable.outstandingAmount <= 0)
|
|
100
|
+
return 'already_paid';
|
|
101
|
+
// O gateway manda o valor creditado. Ele pode ser MENOR que a cobrança
|
|
102
|
+
// (desconto, pagamento parcial de boleto) — e nesse caso a baixa é parcial, o
|
|
103
|
+
// recebível continua aberto pelo saldo, e a régua segue. Tratar todo evento
|
|
104
|
+
// de pagamento como quitação total perdoaria a diferença em silêncio.
|
|
105
|
+
const announced = event.paidAmount ?? Number(charge.amount);
|
|
106
|
+
const amount = Math.min(announced, receivable.outstandingAmount);
|
|
107
|
+
if (amount <= 0)
|
|
108
|
+
return 'already_paid';
|
|
109
|
+
await registerPayment(tx, {
|
|
110
|
+
receivableId: charge.receivable_id,
|
|
111
|
+
chargeId: charge.id,
|
|
112
|
+
amount,
|
|
113
|
+
method: charge.method,
|
|
114
|
+
paidAt: event.paidAt ?? new Date().toISOString(),
|
|
115
|
+
});
|
|
116
|
+
// `reversed_at` é zerado junto: uma cobrança revertida continua pagável no
|
|
117
|
+
// gateway, e quando o cliente de fato paga, ela volta a ser simplesmente paga.
|
|
118
|
+
// Deixar a marca de reversão numa cobrança `paid` reproduziria, ao contrário,
|
|
119
|
+
// o mesmo defeito que esta onda corrige — estado que afirma duas coisas
|
|
120
|
+
// incompatíveis ao mesmo tempo.
|
|
121
|
+
await tx `
|
|
122
|
+
UPDATE charge
|
|
123
|
+
SET status = 'paid', paid_at = ${event.paidAt ?? new Date().toISOString()},
|
|
124
|
+
reversed_at = NULL, updated_at = now()
|
|
125
|
+
WHERE id = ${charge.id}
|
|
126
|
+
`;
|
|
127
|
+
await tx `
|
|
128
|
+
UPDATE payment
|
|
129
|
+
SET provider = (SELECT provider FROM charge WHERE id = ${charge.id}),
|
|
130
|
+
provider_payment_id = ${event.externalId}
|
|
131
|
+
WHERE charge_id = ${charge.id} AND provider_payment_id IS NULL
|
|
132
|
+
`;
|
|
133
|
+
return 'paid';
|
|
134
|
+
}
|
|
135
|
+
async function setChargeStatus(tx, id, status) {
|
|
136
|
+
await tx `UPDATE charge SET status = ${status}, updated_at = now() WHERE id = ${id}`;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/billing/reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAwChG;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAM,EACN,KAOC;IAED,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAkB;;;;QAIjC,EAAE,KAAK,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,QAAQ;QACpE,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAgB,CAAC;;;;GAI1E,CAAC;IACF,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAM,EACN,EAAU,EACV,MAA0C;IAE1C,MAAM,EAAE,CAAA;wCAC8B,MAAM,qCAAqC,EAAE;GAClF,CAAC;AACJ,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAM,EAAE,KAAmB;IACjE,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAEzF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAa;;sCAEE,KAAK,CAAC,UAAU;;GAEnD,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAExF,MAAM,GAAG,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IAExE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,aAAa;YAChB,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;QAEpE,KAAK,gBAAgB;YACnB,MAAM,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAChD,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAExC,KAAK,iBAAiB;YACpB,MAAM,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACjD,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QAEzC,kEAAkE;QAClE,EAAE;QACF,4EAA4E;QAC5E,wEAAwE;QACxE,yEAAyE;QACzE,mBAAmB;QACnB,KAAK,iBAAiB,CAAC;QACvB,KAAK,mBAAmB;YACtB,MAAM,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACjD,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QAEzC;;;;;;;;;WASG;QACH,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;YACtF,OAAO;gBACL,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,MAAM,CAAC,aAAa;gBAC3D,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,OAAO,EAAE,QAAQ,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB;aACzE,CAAC;QACJ,CAAC;QAED;YACE,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,EAAM,EACN,MAAiB,EACjB,KAAmB;IAEnB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,0EAA0E;QAC1E,2EAA2E;QAC3E,MAAM,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACjE,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,iBAAiB,IAAI,CAAC;QAAE,OAAO,cAAc,CAAC;IAE7F,uEAAuE;IACvE,8EAA8E;IAC9E,4EAA4E;IAC5E,sEAAsE;IACtE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACjE,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,cAAc,CAAC;IAEvC,MAAM,eAAe,CAAC,EAAE,EAAE;QACxB,YAAY,EAAE,MAAM,CAAC,aAAa;QAClC,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACjD,CAAC,CAAC;IAEH,2EAA2E;IAC3E,+EAA+E;IAC/E,8EAA8E;IAC9E,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,EAAE,CAAA;;qCAE2B,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;iBAE5D,MAAM,CAAC,EAAE;GACvB,CAAC;IAEF,MAAM,EAAE,CAAA;;6DAEmD,MAAM,CAAC,EAAE;gCACtC,KAAK,CAAC,UAAU;wBACxB,MAAM,CAAC,EAAE;GAC9B,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,EAAM,EAAE,EAAU,EAAE,MAAc;IAC/D,MAAM,EAAE,CAAA,8BAA8B,MAAM,mCAAmC,EAAE,EAAE,CAAC;AACtF,CAAC"}
|
|
@@ -11,6 +11,16 @@ export type FeeStatus = 'active' | 'suspended' | 'canceled';
|
|
|
11
11
|
export interface FeeAgreementRecord {
|
|
12
12
|
id: string;
|
|
13
13
|
clientId: string;
|
|
14
|
+
/**
|
|
15
|
+
* Nome do cliente, junto do acordo.
|
|
16
|
+
*
|
|
17
|
+
* Mesma razão de `ChargeRecord.clientName`: a tela lê "quem", não um uuid. Sem
|
|
18
|
+
* isto a página de Honorários pedia a lista de clientes só para cruzar em
|
|
19
|
+
* memória — e como a rota de clientes tem teto de 100, o acordo de um cliente
|
|
20
|
+
* fora dessa página aparecia sem nome, com um aviso de truncamento para
|
|
21
|
+
* explicar o buraco.
|
|
22
|
+
*/
|
|
23
|
+
clientName: string | null;
|
|
14
24
|
description: string;
|
|
15
25
|
amount: number;
|
|
16
26
|
periodicity: Periodicity;
|
|
@@ -35,15 +45,79 @@ export interface CreateFeeInput {
|
|
|
35
45
|
finePercent?: number;
|
|
36
46
|
interestPercent?: number;
|
|
37
47
|
startsOn?: string | null;
|
|
48
|
+
/**
|
|
49
|
+
* Fim da vigência. A coluna existe desde a 0014 e o formulário sempre
|
|
50
|
+
* ofereceu o campo, mas nem a rota nem este INSERT o escreviam: o acordo
|
|
51
|
+
* nascia sem fim e continuava gerando competência depois da data que o
|
|
52
|
+
* operador tinha visto no resumo da confirmação. Um acordo que não termina
|
|
53
|
+
* cobra o cliente por serviço encerrado — o erro mais caro deste domínio.
|
|
54
|
+
*/
|
|
55
|
+
endsOn?: string | null;
|
|
38
56
|
createdBy?: string | null;
|
|
39
57
|
}
|
|
40
58
|
export declare function createFeeAgreement(tx: Tx, input: CreateFeeInput): Promise<FeeAgreementRecord>;
|
|
41
59
|
export declare function listFeeAgreements(tx: Tx, clientId?: string): Promise<FeeAgreementRecord[]>;
|
|
42
60
|
export declare function setFeeStatus(tx: Tx, id: string, status: FeeStatus): Promise<number>;
|
|
43
|
-
export
|
|
61
|
+
export declare function getFeeAgreement(tx: Tx, id: string): Promise<FeeAgreementRecord>;
|
|
62
|
+
/**
|
|
63
|
+
* Campos editáveis de um acordo já cadastrado.
|
|
64
|
+
*
|
|
65
|
+
* `undefined` = não mexe; `null` = limpa. A distinção é o que permite ao
|
|
66
|
+
* operador REMOVER um término que colocou por engano — com um único "valor
|
|
67
|
+
* ausente" para os dois casos, apagar a data seria impossível pela tela.
|
|
68
|
+
*
|
|
69
|
+
* O cliente do acordo não está aqui de propósito: mudar o devedor de um
|
|
70
|
+
* honorário que já gerou recebíveis reescreveria a história da carteira. Para
|
|
71
|
+
* isso encerra-se o acordo e abre-se outro.
|
|
72
|
+
*/
|
|
73
|
+
export interface UpdateFeeInput {
|
|
74
|
+
description?: string;
|
|
75
|
+
amount?: number;
|
|
76
|
+
periodicity?: Periodicity;
|
|
77
|
+
dueDay?: number | null;
|
|
78
|
+
billingMethod?: BillingMethod;
|
|
79
|
+
discount?: number;
|
|
80
|
+
finePercent?: number;
|
|
81
|
+
interestPercent?: number;
|
|
82
|
+
startsOn?: string | null;
|
|
83
|
+
endsOn?: string | null;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Altera o acordo daqui para a frente.
|
|
87
|
+
*
|
|
88
|
+
* Recebíveis já gerados NÃO são reescritos: a competência de julho foi emitida
|
|
89
|
+
* pelo valor de julho, e o cliente pode já tê-la pago. Alterar o passado faria
|
|
90
|
+
* o extrato do Portal deixar de bater com o boleto que a pessoa tem em mãos.
|
|
91
|
+
*/
|
|
92
|
+
export declare function updateFeeAgreement(tx: Tx, id: string, patch: UpdateFeeInput): Promise<FeeAgreementRecord>;
|
|
93
|
+
export type ChargeStatus = 'pending' | 'sent' | 'paid' | 'overdue' | 'canceled' | 'refunded'
|
|
94
|
+
/** Teve a liquidação anulada na origem — continua pagável. */
|
|
95
|
+
| 'reversed';
|
|
96
|
+
export type ChargeOrigin = 'recurring' | 'one_off';
|
|
44
97
|
export interface ChargeRecord {
|
|
45
98
|
id: string;
|
|
46
99
|
clientId: string;
|
|
100
|
+
/**
|
|
101
|
+
* Nome do cliente, junto da cobrança.
|
|
102
|
+
*
|
|
103
|
+
* A operação lê "quem me deve", não um uuid. Sem isto, toda tela precisaria
|
|
104
|
+
* buscar a lista de clientes e cruzar em memória — que é exactamente o que a
|
|
105
|
+
* página de Honorários fazia quando estourou: pedia 200 clientes a uma rota
|
|
106
|
+
* que aceita 100.
|
|
107
|
+
*/
|
|
108
|
+
clientName: string | null;
|
|
109
|
+
/** Recebível que originou a cobrança (nulo em cobranças anteriores ao Payment Rail). */
|
|
110
|
+
receivableId: string | null;
|
|
111
|
+
/** Competência do recebível de origem, quando houver. */
|
|
112
|
+
competence: string | null;
|
|
113
|
+
/**
|
|
114
|
+
* De onde a cobrança nasceu.
|
|
115
|
+
*
|
|
116
|
+
* `recurring` = veio de um acordo de honorário; `one_off` = lançamento avulso.
|
|
117
|
+
* Derivado, nunca armazenado em duplicidade: a origem é o `fee_agreement_id`
|
|
118
|
+
* do recebível (ou da própria cobrança, no modelo anterior).
|
|
119
|
+
*/
|
|
120
|
+
origin: ChargeOrigin;
|
|
47
121
|
feeAgreementId: string | null;
|
|
48
122
|
provider: string;
|
|
49
123
|
externalId: string | null;
|
|
@@ -73,6 +147,13 @@ export declare function createCharge(tx: Tx, input: CreateChargeInput): Promise<
|
|
|
73
147
|
export interface ListChargesFilter {
|
|
74
148
|
clientId?: string;
|
|
75
149
|
status?: ChargeStatus;
|
|
150
|
+
competence?: string;
|
|
151
|
+
origin?: ChargeOrigin;
|
|
152
|
+
/** Vencimento de/até, inclusivo. */
|
|
153
|
+
dueFrom?: string;
|
|
154
|
+
dueTo?: string;
|
|
155
|
+
/** Busca por descrição da cobrança ou nome do cliente. */
|
|
156
|
+
search?: string;
|
|
76
157
|
limit?: number;
|
|
77
158
|
offset?: number;
|
|
78
159
|
}
|
|
@@ -80,6 +161,14 @@ export declare function listCharges(tx: Tx, filter?: ListChargesFilter): Promise
|
|
|
80
161
|
items: ChargeRecord[];
|
|
81
162
|
total: number;
|
|
82
163
|
}>;
|
|
164
|
+
/**
|
|
165
|
+
* Cobranças emitidas para um recebível — a cadeia dívida → instrumento.
|
|
166
|
+
*
|
|
167
|
+
* Mais de uma é o caso NORMAL, não a exceção: a primeira vence, o escritório
|
|
168
|
+
* reemite, e ambas ficam. Ordenadas da mais recente para a mais antiga porque a
|
|
169
|
+
* pergunta operacional é "qual é a que vale agora".
|
|
170
|
+
*/
|
|
171
|
+
export declare function listChargesForReceivable(tx: Tx, receivableId: string): Promise<ChargeRecord[]>;
|
|
83
172
|
export declare function getCharge(tx: Tx, id: string): Promise<ChargeRecord>;
|
|
84
173
|
export declare function markChargePaid(tx: Tx, id: string, paidAt?: string): Promise<number>;
|
|
85
174
|
/** Reconciliação por webhook: encontra a cobrança pelo (provider, external_id) e marca paga. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/billing/repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;GAKG;AAIH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC1E,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/billing/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { NotFoundError, uuidv7 } from '@baruk/shared';
|
|
1
|
+
import { NotFoundError, ValidationError, uuidv7 } from '@baruk/shared';
|
|
2
2
|
function mapFee(r) {
|
|
3
3
|
return {
|
|
4
4
|
id: r.id,
|
|
5
5
|
clientId: r.client_id,
|
|
6
|
+
clientName: r.client_name ?? null,
|
|
6
7
|
description: r.description,
|
|
7
8
|
amount: Number(r.amount),
|
|
8
9
|
periodicity: r.periodicity,
|
|
@@ -17,31 +18,55 @@ function mapFee(r) {
|
|
|
17
18
|
createdAt: r.created_at.toISOString(),
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Vigência coerente: fim nunca antes do início.
|
|
23
|
+
*
|
|
24
|
+
* Mora no domínio, e não só no schema da rota, porque um acordo com término
|
|
25
|
+
* anterior ao início nunca se aplica a competência alguma — `feeAppliesTo`
|
|
26
|
+
* devolve `false` para sempre. O escritório cadastraria um honorário que
|
|
27
|
+
* simplesmente nunca cobra, sem nenhum erro em lugar nenhum.
|
|
28
|
+
*/
|
|
29
|
+
function assertValidity(startsOn, endsOn) {
|
|
30
|
+
if (startsOn && endsOn && endsOn < startsOn) {
|
|
31
|
+
throw new ValidationError('Término da vigência não pode ser anterior ao início');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** As mesmas colunas, qualificadas e com o nome do cliente ao lado. */
|
|
35
|
+
const FEE_COLS_JOINED = `
|
|
36
|
+
f.id, f.client_id, f.description, f.amount, f.periodicity, f.due_day, f.billing_method,
|
|
37
|
+
f.discount, f.fine_percent, f.interest_percent, f.status, f.starts_on, f.ends_on, f.created_at,
|
|
38
|
+
cl.display_name AS client_name
|
|
23
39
|
`;
|
|
24
40
|
export async function createFeeAgreement(tx, input) {
|
|
41
|
+
assertValidity(input.startsOn, input.endsOn);
|
|
25
42
|
const rows = await tx `
|
|
26
43
|
INSERT INTO fee_agreement (
|
|
27
44
|
id, tenant_id, client_id, description, amount, periodicity, due_day,
|
|
28
|
-
billing_method, discount, fine_percent, interest_percent, starts_on, created_by
|
|
45
|
+
billing_method, discount, fine_percent, interest_percent, starts_on, ends_on, created_by
|
|
29
46
|
) VALUES (
|
|
30
47
|
${uuidv7()}, current_setting('app.current_tenant')::uuid, ${input.clientId},
|
|
31
48
|
${input.description ?? 'Honorários'}, ${input.amount}, ${input.periodicity ?? 'monthly'},
|
|
32
49
|
${input.dueDay ?? null}, ${input.billingMethod ?? 'pix'}, ${input.discount ?? 0},
|
|
33
|
-
${input.finePercent ?? 0}, ${input.interestPercent ?? 0}, ${input.startsOn ?? null},
|
|
50
|
+
${input.finePercent ?? 0}, ${input.interestPercent ?? 0}, ${input.startsOn ?? null},
|
|
51
|
+
${input.endsOn ?? null}, ${input.createdBy ?? null}
|
|
34
52
|
)
|
|
35
|
-
RETURNING
|
|
53
|
+
RETURNING id
|
|
36
54
|
`;
|
|
37
|
-
|
|
55
|
+
// Releitura em vez de `RETURNING` das colunas: um `RETURNING` não alcança o
|
|
56
|
+
// JOIN do cliente, e devolver aqui um registro sem `clientName` criaria duas
|
|
57
|
+
// formas do mesmo tipo — uma completa na leitura, outra pela metade na
|
|
58
|
+
// criação. Quem consumisse o retorno do POST veria o nome como null sem que
|
|
59
|
+
// nada estivesse errado no banco.
|
|
60
|
+
return getFeeAgreement(tx, rows[0].id);
|
|
38
61
|
}
|
|
39
62
|
export async function listFeeAgreements(tx, clientId) {
|
|
40
63
|
const rows = await tx `
|
|
41
|
-
SELECT ${tx.unsafe(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
64
|
+
SELECT ${tx.unsafe(FEE_COLS_JOINED)}
|
|
65
|
+
FROM fee_agreement f
|
|
66
|
+
LEFT JOIN client cl ON cl.id = f.client_id AND cl.deleted_at IS NULL
|
|
67
|
+
WHERE f.deleted_at IS NULL
|
|
68
|
+
AND (${clientId ?? null}::uuid IS NULL OR f.client_id = ${clientId ?? null})
|
|
69
|
+
ORDER BY f.created_at DESC
|
|
45
70
|
`;
|
|
46
71
|
return rows.map(mapFee);
|
|
47
72
|
}
|
|
@@ -52,10 +77,64 @@ export async function setFeeStatus(tx, id, status) {
|
|
|
52
77
|
`;
|
|
53
78
|
return rows.count;
|
|
54
79
|
}
|
|
80
|
+
export async function getFeeAgreement(tx, id) {
|
|
81
|
+
const rows = await tx `
|
|
82
|
+
SELECT ${tx.unsafe(FEE_COLS_JOINED)}
|
|
83
|
+
FROM fee_agreement f
|
|
84
|
+
LEFT JOIN client cl ON cl.id = f.client_id AND cl.deleted_at IS NULL
|
|
85
|
+
WHERE f.id = ${id} AND f.deleted_at IS NULL
|
|
86
|
+
`;
|
|
87
|
+
if (!rows[0])
|
|
88
|
+
throw new NotFoundError('Honorário não encontrado');
|
|
89
|
+
return mapFee(rows[0]);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Altera o acordo daqui para a frente.
|
|
93
|
+
*
|
|
94
|
+
* Recebíveis já gerados NÃO são reescritos: a competência de julho foi emitida
|
|
95
|
+
* pelo valor de julho, e o cliente pode já tê-la pago. Alterar o passado faria
|
|
96
|
+
* o extrato do Portal deixar de bater com o boleto que a pessoa tem em mãos.
|
|
97
|
+
*/
|
|
98
|
+
export async function updateFeeAgreement(tx, id, patch) {
|
|
99
|
+
const has = (k) => patch[k] !== undefined;
|
|
100
|
+
// Sem campo nenhum, o UPDATE viraria `SET updated_at = now()` e bumparia a
|
|
101
|
+
// versão de um acordo intocado — ruído na trilha de auditoria.
|
|
102
|
+
const touched = Object.keys(patch).some((k) => has(k));
|
|
103
|
+
if (!touched)
|
|
104
|
+
return getFeeAgreement(tx, id);
|
|
105
|
+
// A vigência é validada contra o estado RESULTANTE, não contra o patch: quem
|
|
106
|
+
// muda só o término precisa ser comparado com o início que já está gravado.
|
|
107
|
+
const current = await getFeeAgreement(tx, id);
|
|
108
|
+
assertValidity(has('startsOn') ? (patch.startsOn ?? null) : current.startsOn, has('endsOn') ? (patch.endsOn ?? null) : current.endsOn);
|
|
109
|
+
const rows = await tx `
|
|
110
|
+
UPDATE fee_agreement SET
|
|
111
|
+
description = ${has('description') ? patch.description : tx `description`},
|
|
112
|
+
amount = ${has('amount') ? patch.amount : tx `amount`},
|
|
113
|
+
periodicity = ${has('periodicity') ? patch.periodicity : tx `periodicity`},
|
|
114
|
+
due_day = ${has('dueDay') ? (patch.dueDay ?? null) : tx `due_day`},
|
|
115
|
+
billing_method = ${has('billingMethod') ? patch.billingMethod : tx `billing_method`},
|
|
116
|
+
discount = ${has('discount') ? patch.discount : tx `discount`},
|
|
117
|
+
fine_percent = ${has('finePercent') ? patch.finePercent : tx `fine_percent`},
|
|
118
|
+
interest_percent = ${has('interestPercent') ? patch.interestPercent : tx `interest_percent`},
|
|
119
|
+
starts_on = ${has('startsOn') ? (patch.startsOn ?? null) : tx `starts_on`},
|
|
120
|
+
ends_on = ${has('endsOn') ? (patch.endsOn ?? null) : tx `ends_on`},
|
|
121
|
+
updated_at = now(), version = version + 1
|
|
122
|
+
WHERE id = ${id} AND deleted_at IS NULL
|
|
123
|
+
RETURNING id
|
|
124
|
+
`;
|
|
125
|
+
if (!rows[0])
|
|
126
|
+
throw new NotFoundError('Honorário não encontrado');
|
|
127
|
+
return getFeeAgreement(tx, rows[0].id);
|
|
128
|
+
}
|
|
55
129
|
function mapCharge(r) {
|
|
130
|
+
const recurring = Boolean(r.receivable_fee_agreement_id ?? r.fee_agreement_id);
|
|
56
131
|
return {
|
|
57
132
|
id: r.id,
|
|
58
133
|
clientId: r.client_id,
|
|
134
|
+
clientName: r.client_name ?? null,
|
|
135
|
+
receivableId: r.receivable_id ?? null,
|
|
136
|
+
competence: r.competence ?? null,
|
|
137
|
+
origin: recurring ? 'recurring' : 'one_off',
|
|
59
138
|
feeAgreementId: r.fee_agreement_id,
|
|
60
139
|
provider: r.provider,
|
|
61
140
|
externalId: r.external_id,
|
|
@@ -73,6 +152,26 @@ const CHARGE_COLS = `
|
|
|
73
152
|
id, client_id, fee_agreement_id, provider, external_id, method, amount,
|
|
74
153
|
status, description, due_date, paid_at, metadata, created_at
|
|
75
154
|
`;
|
|
155
|
+
/**
|
|
156
|
+
* Colunas da cobrança já acompanhadas do que a operação precisa ler.
|
|
157
|
+
*
|
|
158
|
+
* O `LEFT JOIN` é deliberado nos dois lados: cliente removido não deve fazer a
|
|
159
|
+
* cobrança desaparecer da lista financeira, e cobrança anterior ao Payment Rail
|
|
160
|
+
* não tem recebível. Em ambos os casos o campo vem nulo e a tela mostra "—".
|
|
161
|
+
*/
|
|
162
|
+
const CHARGE_COLS_JOINED = `
|
|
163
|
+
c.id, c.client_id, c.fee_agreement_id, c.provider, c.external_id, c.method, c.amount,
|
|
164
|
+
c.status, c.description, c.due_date, c.paid_at, c.metadata, c.created_at,
|
|
165
|
+
cl.display_name AS client_name,
|
|
166
|
+
c.receivable_id,
|
|
167
|
+
r.competence,
|
|
168
|
+
r.fee_agreement_id AS receivable_fee_agreement_id
|
|
169
|
+
`;
|
|
170
|
+
const CHARGE_JOINS = `
|
|
171
|
+
FROM charge c
|
|
172
|
+
LEFT JOIN client cl ON cl.id = c.client_id AND cl.deleted_at IS NULL
|
|
173
|
+
LEFT JOIN receivable r ON r.id = c.receivable_id AND r.deleted_at IS NULL
|
|
174
|
+
`;
|
|
76
175
|
export async function createCharge(tx, input) {
|
|
77
176
|
const rows = await tx `
|
|
78
177
|
INSERT INTO charge (
|
|
@@ -92,21 +191,51 @@ export async function createCharge(tx, input) {
|
|
|
92
191
|
export async function listCharges(tx, filter = {}) {
|
|
93
192
|
const limit = Math.min(filter.limit ?? 50, 200);
|
|
94
193
|
const offset = filter.offset ?? 0;
|
|
194
|
+
// `origin` é filtrado sobre a MESMA derivação que `mapCharge` usa. Repetir a
|
|
195
|
+
// regra em SQL com outro critério faria a lista e o rótulo da linha
|
|
196
|
+
// discordarem — a tela diria "avulsa" num item trazido pelo filtro
|
|
197
|
+
// "recorrente".
|
|
198
|
+
const search = filter.search?.trim();
|
|
95
199
|
const rows = await tx `
|
|
96
|
-
SELECT ${tx.unsafe(
|
|
97
|
-
|
|
98
|
-
WHERE deleted_at IS NULL
|
|
99
|
-
AND (${filter.clientId ?? null}::uuid IS NULL OR client_id = ${filter.clientId ?? null})
|
|
100
|
-
AND (${filter.status ?? null}::text IS NULL OR status = ${filter.status ?? null})
|
|
101
|
-
|
|
200
|
+
SELECT ${tx.unsafe(CHARGE_COLS_JOINED)}, count(*) OVER() AS total
|
|
201
|
+
${tx.unsafe(CHARGE_JOINS)}
|
|
202
|
+
WHERE c.deleted_at IS NULL
|
|
203
|
+
AND (${filter.clientId ?? null}::uuid IS NULL OR c.client_id = ${filter.clientId ?? null})
|
|
204
|
+
AND (${filter.status ?? null}::text IS NULL OR c.status = ${filter.status ?? null})
|
|
205
|
+
AND (${filter.competence ?? null}::text IS NULL OR r.competence = ${filter.competence ?? null})
|
|
206
|
+
AND (${filter.dueFrom ?? null}::date IS NULL OR c.due_date >= ${filter.dueFrom ?? null}::date)
|
|
207
|
+
AND (${filter.dueTo ?? null}::date IS NULL OR c.due_date <= ${filter.dueTo ?? null}::date)
|
|
208
|
+
AND (${filter.origin ?? null}::text IS NULL
|
|
209
|
+
OR (${filter.origin ?? null} = 'recurring')
|
|
210
|
+
= (COALESCE(r.fee_agreement_id, c.fee_agreement_id) IS NOT NULL))
|
|
211
|
+
AND (${search ?? null}::text IS NULL
|
|
212
|
+
OR c.description ILIKE '%' || ${search ?? null} || '%'
|
|
213
|
+
OR cl.display_name ILIKE '%' || ${search ?? null} || '%')
|
|
214
|
+
ORDER BY c.due_date DESC NULLS LAST, c.created_at DESC
|
|
102
215
|
LIMIT ${limit} OFFSET ${offset}
|
|
103
216
|
`;
|
|
104
217
|
const total = rows[0] ? Number(rows[0].total) : 0;
|
|
105
218
|
return { items: rows.map(mapCharge), total };
|
|
106
219
|
}
|
|
220
|
+
/**
|
|
221
|
+
* Cobranças emitidas para um recebível — a cadeia dívida → instrumento.
|
|
222
|
+
*
|
|
223
|
+
* Mais de uma é o caso NORMAL, não a exceção: a primeira vence, o escritório
|
|
224
|
+
* reemite, e ambas ficam. Ordenadas da mais recente para a mais antiga porque a
|
|
225
|
+
* pergunta operacional é "qual é a que vale agora".
|
|
226
|
+
*/
|
|
227
|
+
export async function listChargesForReceivable(tx, receivableId) {
|
|
228
|
+
const rows = await tx `
|
|
229
|
+
SELECT ${tx.unsafe(CHARGE_COLS_JOINED)} ${tx.unsafe(CHARGE_JOINS)}
|
|
230
|
+
WHERE c.receivable_id = ${receivableId} AND c.deleted_at IS NULL
|
|
231
|
+
ORDER BY c.created_at DESC
|
|
232
|
+
`;
|
|
233
|
+
return rows.map(mapCharge);
|
|
234
|
+
}
|
|
107
235
|
export async function getCharge(tx, id) {
|
|
108
236
|
const rows = await tx `
|
|
109
|
-
SELECT ${tx.unsafe(
|
|
237
|
+
SELECT ${tx.unsafe(CHARGE_COLS_JOINED)} ${tx.unsafe(CHARGE_JOINS)}
|
|
238
|
+
WHERE c.id = ${id} AND c.deleted_at IS NULL
|
|
110
239
|
`;
|
|
111
240
|
if (!rows[0])
|
|
112
241
|
throw new NotFoundError('Cobrança não encontrada');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/billing/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/billing/repository.ts"],"names":[],"mappings":"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"}
|