@baruk/core 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.baruk-provenance.json +10 -0
- package/CHANGELOG.md +127 -0
- package/dist/audit/repository.d.ts +33 -1
- package/dist/audit/repository.d.ts.map +1 -1
- package/dist/audit/repository.js +41 -7
- package/dist/audit/repository.js.map +1 -1
- package/dist/auth/password-reset.d.ts +30 -1
- package/dist/auth/password-reset.d.ts.map +1 -1
- package/dist/auth/password-reset.js +139 -11
- package/dist/auth/password-reset.js.map +1 -1
- package/dist/auth/service.d.ts +60 -2
- package/dist/auth/service.d.ts.map +1 -1
- package/dist/auth/service.js +121 -11
- package/dist/auth/service.js.map +1 -1
- package/dist/billing/ar-repository.d.ts +374 -0
- package/dist/billing/ar-repository.d.ts.map +1 -0
- package/dist/billing/ar-repository.js +783 -0
- package/dist/billing/ar-repository.js.map +1 -0
- package/dist/billing/auto-generation.d.ts +87 -0
- package/dist/billing/auto-generation.d.ts.map +1 -0
- package/dist/billing/auto-generation.js +181 -0
- package/dist/billing/auto-generation.js.map +1 -0
- package/dist/billing/live-guard.d.ts +64 -0
- package/dist/billing/live-guard.d.ts.map +1 -0
- package/dist/billing/live-guard.js +68 -0
- package/dist/billing/live-guard.js.map +1 -0
- package/dist/billing/payment-means-catalog.d.ts +17 -0
- package/dist/billing/payment-means-catalog.d.ts.map +1 -0
- package/dist/billing/payment-means-catalog.js +21 -0
- package/dist/billing/payment-means-catalog.js.map +1 -0
- package/dist/billing/payment-means.d.ts +38 -0
- package/dist/billing/payment-means.d.ts.map +1 -0
- package/dist/billing/payment-means.js +29 -0
- package/dist/billing/payment-means.js.map +1 -0
- package/dist/billing/payment-rail.d.ts +118 -0
- package/dist/billing/payment-rail.d.ts.map +1 -0
- package/dist/billing/payment-rail.js +295 -0
- package/dist/billing/payment-rail.js.map +1 -0
- package/dist/billing/provider/asaas.d.ts +46 -1
- package/dist/billing/provider/asaas.d.ts.map +1 -1
- package/dist/billing/provider/asaas.js +194 -14
- package/dist/billing/provider/asaas.js.map +1 -1
- package/dist/billing/provider/manual.js +1 -1
- package/dist/billing/provider/manual.js.map +1 -1
- package/dist/billing/provider/types.d.ts +115 -8
- package/dist/billing/provider/types.d.ts.map +1 -1
- package/dist/billing/provider-account.d.ts +127 -0
- package/dist/billing/provider-account.d.ts.map +1 -0
- package/dist/billing/provider-account.js +217 -0
- package/dist/billing/provider-account.js.map +1 -0
- package/dist/billing/provider-onboarding.d.ts +67 -0
- package/dist/billing/provider-onboarding.d.ts.map +1 -0
- package/dist/billing/provider-onboarding.js +234 -0
- package/dist/billing/provider-onboarding.js.map +1 -0
- package/dist/billing/receivable.d.ts +5 -1
- package/dist/billing/receivable.d.ts.map +1 -1
- package/dist/billing/reconcile.d.ts +58 -0
- package/dist/billing/reconcile.d.ts.map +1 -0
- package/dist/billing/reconcile.js +138 -0
- package/dist/billing/reconcile.js.map +1 -0
- package/dist/billing/repository.d.ts +134 -1
- package/dist/billing/repository.d.ts.map +1 -1
- package/dist/billing/repository.js +193 -20
- package/dist/billing/repository.js.map +1 -1
- package/dist/cjs/audit/repository.js +41 -7
- package/dist/cjs/audit/repository.js.map +1 -1
- package/dist/cjs/auth/password-reset.js +141 -11
- package/dist/cjs/auth/password-reset.js.map +1 -1
- package/dist/cjs/auth/service.js +121 -10
- package/dist/cjs/auth/service.js.map +1 -1
- package/dist/cjs/billing/ar-repository.js +804 -0
- package/dist/cjs/billing/ar-repository.js.map +1 -0
- package/dist/cjs/billing/auto-generation.js +186 -0
- package/dist/cjs/billing/auto-generation.js.map +1 -0
- package/dist/cjs/billing/live-guard.js +72 -0
- package/dist/cjs/billing/live-guard.js.map +1 -0
- package/dist/cjs/billing/payment-means-catalog.js +25 -0
- package/dist/cjs/billing/payment-means-catalog.js.map +1 -0
- package/dist/cjs/billing/payment-means.js +33 -0
- package/dist/cjs/billing/payment-means.js.map +1 -0
- package/dist/cjs/billing/payment-rail.js +301 -0
- package/dist/cjs/billing/payment-rail.js.map +1 -0
- package/dist/cjs/billing/provider/asaas.js +194 -14
- package/dist/cjs/billing/provider/asaas.js.map +1 -1
- package/dist/cjs/billing/provider/manual.js +1 -1
- package/dist/cjs/billing/provider/manual.js.map +1 -1
- package/dist/cjs/billing/provider-account.js +229 -0
- package/dist/cjs/billing/provider-account.js.map +1 -0
- package/dist/cjs/billing/provider-onboarding.js +239 -0
- package/dist/cjs/billing/provider-onboarding.js.map +1 -0
- package/dist/cjs/billing/reconcile.js +143 -0
- package/dist/cjs/billing/reconcile.js.map +1 -0
- package/dist/cjs/billing/repository.js +197 -19
- package/dist/cjs/billing/repository.js.map +1 -1
- package/dist/cjs/clients/ibge.js +103 -0
- package/dist/cjs/clients/ibge.js.map +1 -0
- package/dist/cjs/clients/repository.js +276 -23
- package/dist/cjs/clients/repository.js.map +1 -1
- package/dist/cjs/collection/branding.js +330 -0
- package/dist/cjs/collection/branding.js.map +1 -0
- package/dist/cjs/collection/channel-accounts.js +137 -0
- package/dist/cjs/collection/channel-accounts.js.map +1 -0
- package/dist/cjs/collection/channel.js +17 -0
- package/dist/cjs/collection/channel.js.map +1 -0
- package/dist/cjs/collection/clearance-store.js +74 -0
- package/dist/cjs/collection/clearance-store.js.map +1 -0
- package/dist/cjs/collection/communication-bridge.js +140 -0
- package/dist/cjs/collection/communication-bridge.js.map +1 -0
- package/dist/cjs/collection/communication-runtime.js +256 -0
- package/dist/cjs/collection/communication-runtime.js.map +1 -0
- package/dist/cjs/collection/consent-repository.js +84 -0
- package/dist/cjs/collection/consent-repository.js.map +1 -0
- package/dist/cjs/collection/copy.js +125 -0
- package/dist/cjs/collection/copy.js.map +1 -0
- package/dist/cjs/collection/delivery-callback.js +151 -0
- package/dist/cjs/collection/delivery-callback.js.map +1 -0
- package/dist/cjs/collection/email-layout.js +252 -0
- package/dist/cjs/collection/email-layout.js.map +1 -0
- package/dist/cjs/collection/engine.js +434 -0
- package/dist/cjs/collection/engine.js.map +1 -0
- package/dist/cjs/collection/format.js +76 -0
- package/dist/cjs/collection/format.js.map +1 -0
- package/dist/cjs/collection/payment-block.js +3 -0
- package/dist/cjs/collection/payment-block.js.map +1 -0
- package/dist/cjs/collection/policy.js +175 -0
- package/dist/cjs/collection/policy.js.map +1 -0
- package/dist/cjs/collection/repository.js +260 -0
- package/dist/cjs/collection/repository.js.map +1 -0
- package/dist/cjs/collection/subject.js +104 -0
- package/dist/cjs/collection/subject.js.map +1 -0
- package/dist/cjs/collection/template-catalog.js +165 -0
- package/dist/cjs/collection/template-catalog.js.map +1 -0
- package/dist/cjs/collection/template.js +78 -0
- package/dist/cjs/collection/template.js.map +1 -0
- package/dist/cjs/communication/adapters/email.js +132 -0
- package/dist/cjs/communication/adapters/email.js.map +1 -0
- package/dist/cjs/communication/adapters/sms.js +127 -0
- package/dist/cjs/communication/adapters/sms.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp-language.js +39 -0
- package/dist/cjs/communication/adapters/whatsapp-language.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp-templates.js +100 -0
- package/dist/cjs/communication/adapters/whatsapp-templates.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp.js +213 -0
- package/dist/cjs/communication/adapters/whatsapp.js.map +1 -0
- package/dist/cjs/communication/audit.js +61 -0
- package/dist/cjs/communication/audit.js.map +1 -0
- package/dist/cjs/communication/capabilities.js +76 -0
- package/dist/cjs/communication/capabilities.js.map +1 -0
- package/dist/cjs/communication/channel.js +53 -0
- package/dist/cjs/communication/channel.js.map +1 -0
- package/dist/cjs/communication/claim.js +228 -0
- package/dist/cjs/communication/claim.js.map +1 -0
- package/dist/cjs/communication/clearance.js +18 -0
- package/dist/cjs/communication/clearance.js.map +1 -0
- package/dist/cjs/communication/consent.js +43 -0
- package/dist/cjs/communication/consent.js.map +1 -0
- package/dist/cjs/communication/context.js +45 -0
- package/dist/cjs/communication/context.js.map +1 -0
- package/dist/cjs/communication/credentials.js +121 -0
- package/dist/cjs/communication/credentials.js.map +1 -0
- package/dist/cjs/communication/dry-run-scenario.js +166 -0
- package/dist/cjs/communication/dry-run-scenario.js.map +1 -0
- package/dist/cjs/communication/dry-run.js +97 -0
- package/dist/cjs/communication/dry-run.js.map +1 -0
- package/dist/cjs/communication/engine.js +495 -0
- package/dist/cjs/communication/engine.js.map +1 -0
- package/dist/cjs/communication/graph.js +50 -0
- package/dist/cjs/communication/graph.js.map +1 -0
- package/dist/cjs/communication/idempotency.js +26 -0
- package/dist/cjs/communication/idempotency.js.map +1 -0
- package/dist/cjs/communication/identity.js +110 -0
- package/dist/cjs/communication/identity.js.map +1 -0
- package/dist/cjs/communication/index.js +135 -0
- package/dist/cjs/communication/index.js.map +1 -0
- package/dist/cjs/communication/onboarding.js +297 -0
- package/dist/cjs/communication/onboarding.js.map +1 -0
- package/dist/cjs/communication/policy.js +16 -0
- package/dist/cjs/communication/policy.js.map +1 -0
- package/dist/cjs/communication/routing.js +77 -0
- package/dist/cjs/communication/routing.js.map +1 -0
- package/dist/cjs/communication/sender-profile.js +128 -0
- package/dist/cjs/communication/sender-profile.js.map +1 -0
- package/dist/cjs/communication/status.js +86 -0
- package/dist/cjs/communication/status.js.map +1 -0
- package/dist/cjs/communication/stores/onboarding.js +135 -0
- package/dist/cjs/communication/stores/onboarding.js.map +1 -0
- package/dist/cjs/communication/stores/postgres.js +458 -0
- package/dist/cjs/communication/stores/postgres.js.map +1 -0
- package/dist/cjs/communication/stores/routing.js +334 -0
- package/dist/cjs/communication/stores/routing.js.map +1 -0
- package/dist/cjs/communication/stores/secrets.js +126 -0
- package/dist/cjs/communication/stores/secrets.js.map +1 -0
- package/dist/cjs/communication/template-provider.js +22 -0
- package/dist/cjs/communication/template-provider.js.map +1 -0
- package/dist/cjs/communication/template.js +63 -0
- package/dist/cjs/communication/template.js.map +1 -0
- package/dist/cjs/communication/webhook-subscription.js +258 -0
- package/dist/cjs/communication/webhook-subscription.js.map +1 -0
- package/dist/cjs/communication/webhook.js +292 -0
- package/dist/cjs/communication/webhook.js.map +1 -0
- package/dist/cjs/competence/business-days.js +155 -0
- package/dist/cjs/competence/business-days.js.map +1 -0
- package/dist/cjs/competence/catalog-validation.js +174 -0
- package/dist/cjs/competence/catalog-validation.js.map +1 -0
- package/dist/cjs/competence/obligation-preview.js +190 -0
- package/dist/cjs/competence/obligation-preview.js.map +1 -0
- package/dist/cjs/competence/repository.js +622 -0
- package/dist/cjs/competence/repository.js.map +1 -0
- package/dist/cjs/contacts/phone.js +192 -0
- package/dist/cjs/contacts/phone.js.map +1 -0
- package/dist/cjs/dashboard/pilot-panel.js +90 -0
- package/dist/cjs/dashboard/pilot-panel.js.map +1 -0
- package/dist/cjs/dashboard/repository.js +11 -1
- package/dist/cjs/dashboard/repository.js.map +1 -1
- package/dist/cjs/db/client.js +17 -11
- package/dist/cjs/db/client.js.map +1 -1
- package/dist/cjs/db/provision-e2e-identity.js +111 -0
- package/dist/cjs/db/provision-e2e-identity.js.map +1 -0
- package/dist/cjs/db/seed-catalog.js +48 -0
- package/dist/cjs/db/seed-catalog.js.map +1 -0
- package/dist/cjs/db/seed.js +15 -7
- package/dist/cjs/db/seed.js.map +1 -1
- package/dist/cjs/documents/repository.js +244 -0
- package/dist/cjs/documents/repository.js.map +1 -0
- package/dist/cjs/documents/requests.js +136 -0
- package/dist/cjs/documents/requests.js.map +1 -0
- package/dist/cjs/fiscal/applicability.js +164 -0
- package/dist/cjs/fiscal/applicability.js.map +1 -0
- package/dist/cjs/fiscal/conditions.js +198 -0
- package/dist/cjs/fiscal/conditions.js.map +1 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-contract.js +390 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-contract.js.map +1 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js +108 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js +220 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
- package/dist/cjs/fiscal/coverage/model.js +127 -0
- package/dist/cjs/fiscal/coverage/model.js.map +1 -0
- package/dist/cjs/fiscal/coverage/requests.js +99 -0
- package/dist/cjs/fiscal/coverage/requests.js.map +1 -0
- package/dist/cjs/fiscal/credentials/material.js +168 -0
- package/dist/cjs/fiscal/credentials/material.js.map +1 -0
- package/dist/cjs/fiscal/credentials/readiness.js +163 -0
- package/dist/cjs/fiscal/credentials/readiness.js.map +1 -0
- package/dist/cjs/fiscal/eligibility.js +199 -0
- package/dist/cjs/fiscal/eligibility.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js +128 -0
- package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/adn-transport.js +229 -0
- package/dist/cjs/fiscal/ingestion/adn-transport.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/direction.js +36 -0
- package/dist/cjs/fiscal/ingestion/direction.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/nfse-adn.js +228 -0
- package/dist/cjs/fiscal/ingestion/nfse-adn.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/pipeline.js +704 -0
- package/dist/cjs/fiscal/ingestion/pipeline.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/provider.js +51 -0
- package/dist/cjs/fiscal/ingestion/provider.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/repository.js +132 -0
- package/dist/cjs/fiscal/ingestion/repository.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/synthetic-provider.js +103 -0
- package/dist/cjs/fiscal/ingestion/synthetic-provider.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js +13 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport.js +61 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/xml-reader.js +121 -0
- package/dist/cjs/fiscal/ingestion/xml-reader.js.map +1 -0
- package/dist/cjs/fiscal/repository.js +470 -0
- package/dist/cjs/fiscal/repository.js.map +1 -0
- package/dist/cjs/fiscal/sync/circuit.js +124 -0
- package/dist/cjs/fiscal/sync/circuit.js.map +1 -0
- package/dist/cjs/fiscal/sync/intervention.js +140 -0
- package/dist/cjs/fiscal/sync/intervention.js.map +1 -0
- package/dist/cjs/fiscal/sync/lease.js +146 -0
- package/dist/cjs/fiscal/sync/lease.js.map +1 -0
- package/dist/cjs/fiscal/sync/observability.js +244 -0
- package/dist/cjs/fiscal/sync/observability.js.map +1 -0
- package/dist/cjs/fiscal/sync/orchestrator.js +490 -0
- package/dist/cjs/fiscal/sync/orchestrator.js.map +1 -0
- package/dist/cjs/fiscal/sync/policy.js +143 -0
- package/dist/cjs/fiscal/sync/policy.js.map +1 -0
- package/dist/cjs/fiscal/sync/reprocess.js +241 -0
- package/dist/cjs/fiscal/sync/reprocess.js.map +1 -0
- package/dist/cjs/fiscal/sync/retry.js +183 -0
- package/dist/cjs/fiscal/sync/retry.js.map +1 -0
- package/dist/cjs/fiscal/sync/secret-boundary.js +123 -0
- package/dist/cjs/fiscal/sync/secret-boundary.js.map +1 -0
- package/dist/cjs/fiscal/transport/https.js +309 -0
- package/dist/cjs/fiscal/transport/https.js.map +1 -0
- package/dist/cjs/fiscal/transport/synthetic-tls.js +328 -0
- package/dist/cjs/fiscal/transport/synthetic-tls.js.map +1 -0
- package/dist/cjs/fiscal/transport/types.js +93 -0
- package/dist/cjs/fiscal/transport/types.js.map +1 -0
- package/dist/cjs/import/br-documents.js +85 -0
- package/dist/cjs/import/br-documents.js.map +1 -0
- package/dist/cjs/import/clients-import.js +347 -40
- package/dist/cjs/import/clients-import.js.map +1 -1
- package/dist/cjs/index.js +711 -39
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/documents.js +224 -17
- package/dist/cjs/legal/documents.js.map +1 -1
- package/dist/cjs/legal/index.js +3 -1
- package/dist/cjs/legal/index.js.map +1 -1
- package/dist/cjs/legal/types.js +1 -0
- package/dist/cjs/legal/types.js.map +1 -1
- package/dist/cjs/mail/auth-templates.js +29 -0
- package/dist/cjs/mail/auth-templates.js.map +1 -0
- package/dist/cjs/mail/dedup-store.js +12 -51
- package/dist/cjs/mail/dedup-store.js.map +1 -1
- package/dist/cjs/mail/index.js +16 -4
- package/dist/cjs/mail/index.js.map +1 -1
- package/dist/cjs/mail/provider.js +12 -247
- package/dist/cjs/mail/provider.js.map +1 -1
- package/dist/cjs/mail/resend.js +14 -18
- package/dist/cjs/mail/resend.js.map +1 -1
- package/dist/cjs/mail/sender-resolver.js +12 -11
- package/dist/cjs/mail/sender-resolver.js.map +1 -1
- package/dist/cjs/mail/template-renderer.js +11 -16
- package/dist/cjs/mail/template-renderer.js.map +1 -1
- package/dist/cjs/mail/transactional-outbound.js +117 -0
- package/dist/cjs/mail/transactional-outbound.js.map +1 -0
- package/dist/cjs/mail/types.js +8 -35
- package/dist/cjs/mail/types.js.map +1 -1
- package/dist/cjs/onboarding/persistence.js +4 -4
- package/dist/cjs/onboarding/persistence.js.map +1 -1
- package/dist/cjs/pilot/go-live-checklist.js +212 -0
- package/dist/cjs/pilot/go-live-checklist.js.map +1 -0
- package/dist/cjs/pilot/milestone.js +79 -0
- package/dist/cjs/pilot/milestone.js.map +1 -0
- package/dist/cjs/platform/capabilities.js +144 -0
- package/dist/cjs/platform/capabilities.js.map +1 -0
- package/dist/cjs/platform/job-contract.js +411 -0
- package/dist/cjs/platform/job-contract.js.map +1 -0
- package/dist/cjs/portal/provisioning.js +144 -0
- package/dist/cjs/portal/provisioning.js.map +1 -0
- package/dist/cjs/pricing-engine/canonical.js +42 -0
- package/dist/cjs/pricing-engine/canonical.js.map +1 -0
- package/dist/cjs/pricing-engine/errors.js +6 -1
- package/dist/cjs/pricing-engine/errors.js.map +1 -1
- package/dist/cjs/pricing-engine/index.js +12 -1
- package/dist/cjs/pricing-engine/index.js.map +1 -1
- package/dist/cjs/pricing-engine/pipeline.js +200 -26
- package/dist/cjs/pricing-engine/pipeline.js.map +1 -1
- package/dist/cjs/pricing-engine/shadow-adapter.js +79 -0
- package/dist/cjs/pricing-engine/shadow-adapter.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-diff.js +55 -0
- package/dist/cjs/pricing-engine/shadow-diff.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-facade.js +85 -0
- package/dist/cjs/pricing-engine/shadow-facade.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-legacy-types.js +19 -0
- package/dist/cjs/pricing-engine/shadow-legacy-types.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-metrics.js +34 -0
- package/dist/cjs/pricing-engine/shadow-metrics.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-normalizer.js +42 -0
- package/dist/cjs/pricing-engine/shadow-normalizer.js.map +1 -0
- package/dist/cjs/rbac/authorize.js +28 -0
- package/dist/cjs/rbac/authorize.js.map +1 -1
- package/dist/cjs/rbac/catalog.js +101 -1
- package/dist/cjs/rbac/catalog.js.map +1 -1
- package/dist/cjs/rbac/workload-provisioning.js +160 -0
- package/dist/cjs/rbac/workload-provisioning.js.map +1 -0
- package/dist/cjs/rbac/workload.js +191 -0
- package/dist/cjs/rbac/workload.js.map +1 -0
- package/dist/cjs/storage/checksum.js +15 -0
- package/dist/cjs/storage/checksum.js.map +1 -0
- package/dist/cjs/storage/key.js +72 -0
- package/dist/cjs/storage/key.js.map +1 -0
- package/dist/cjs/storage/local.js +100 -0
- package/dist/cjs/storage/local.js.map +1 -0
- package/dist/cjs/storage/r2.js +181 -0
- package/dist/cjs/storage/r2.js.map +1 -0
- package/dist/cjs/storage/registry.js +41 -0
- package/dist/cjs/storage/registry.js.map +1 -0
- package/dist/cjs/storage/types.js +50 -0
- package/dist/cjs/storage/types.js.map +1 -0
- package/dist/cjs/subscription-billing/index.js +2 -1
- package/dist/cjs/subscription-billing/index.js.map +1 -1
- package/dist/cjs/subscription-billing/provider/asaas.js +32 -7
- package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -1
- package/dist/cjs/subscription-billing/provider/disabled.js +8 -0
- package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -1
- package/dist/cjs/subscription-billing/provider/registry.js +17 -0
- package/dist/cjs/subscription-billing/provider/registry.js.map +1 -1
- package/dist/cjs/subscription-billing/service.js +208 -83
- package/dist/cjs/subscription-billing/service.js.map +1 -1
- package/dist/cjs/subscription-billing/types.js.map +1 -1
- package/dist/cjs/tenancy/features.js +131 -0
- package/dist/cjs/tenancy/features.js.map +1 -0
- package/dist/cjs/tenancy/provisioning.js +32 -8
- package/dist/cjs/tenancy/provisioning.js.map +1 -1
- package/dist/cjs/tenancy/settings.js +224 -0
- package/dist/cjs/tenancy/settings.js.map +1 -0
- package/dist/cjs/users/repository.js +143 -3
- package/dist/cjs/users/repository.js.map +1 -1
- package/dist/cjs/vault/repository.js +81 -0
- package/dist/cjs/vault/repository.js.map +1 -1
- package/dist/clients/ibge.d.ts +17 -0
- package/dist/clients/ibge.d.ts.map +1 -0
- package/dist/clients/ibge.js +98 -0
- package/dist/clients/ibge.js.map +1 -0
- package/dist/clients/repository.d.ts +196 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +270 -24
- package/dist/clients/repository.js.map +1 -1
- package/dist/collection/branding.d.ts +137 -0
- package/dist/collection/branding.d.ts.map +1 -0
- package/dist/collection/branding.js +322 -0
- package/dist/collection/branding.js.map +1 -0
- package/dist/collection/channel-accounts.d.ts +57 -0
- package/dist/collection/channel-accounts.d.ts.map +1 -0
- package/dist/collection/channel-accounts.js +133 -0
- package/dist/collection/channel-accounts.js.map +1 -0
- package/dist/collection/channel.d.ts +24 -0
- package/dist/collection/channel.d.ts.map +1 -0
- package/dist/collection/channel.js +16 -0
- package/dist/collection/channel.js.map +1 -0
- package/dist/collection/clearance-store.d.ts +39 -0
- package/dist/collection/clearance-store.d.ts.map +1 -0
- package/dist/collection/clearance-store.js +69 -0
- package/dist/collection/clearance-store.js.map +1 -0
- package/dist/collection/communication-bridge.d.ts +66 -0
- package/dist/collection/communication-bridge.d.ts.map +1 -0
- package/dist/collection/communication-bridge.js +134 -0
- package/dist/collection/communication-bridge.js.map +1 -0
- package/dist/collection/communication-runtime.d.ts +132 -0
- package/dist/collection/communication-runtime.d.ts.map +1 -0
- package/dist/collection/communication-runtime.js +249 -0
- package/dist/collection/communication-runtime.js.map +1 -0
- package/dist/collection/consent-repository.d.ts +32 -0
- package/dist/collection/consent-repository.d.ts.map +1 -0
- package/dist/collection/consent-repository.js +79 -0
- package/dist/collection/consent-repository.js.map +1 -0
- package/dist/collection/copy.d.ts +50 -0
- package/dist/collection/copy.d.ts.map +1 -0
- package/dist/collection/copy.js +122 -0
- package/dist/collection/copy.js.map +1 -0
- package/dist/collection/delivery-callback.d.ts +49 -0
- package/dist/collection/delivery-callback.d.ts.map +1 -0
- package/dist/collection/delivery-callback.js +147 -0
- package/dist/collection/delivery-callback.js.map +1 -0
- package/dist/collection/email-layout.d.ts +45 -0
- package/dist/collection/email-layout.d.ts.map +1 -0
- package/dist/collection/email-layout.js +247 -0
- package/dist/collection/email-layout.js.map +1 -0
- package/dist/collection/engine.d.ts +200 -0
- package/dist/collection/engine.d.ts.map +1 -0
- package/dist/collection/engine.js +427 -0
- package/dist/collection/engine.js.map +1 -0
- package/dist/collection/format.d.ts +32 -0
- package/dist/collection/format.d.ts.map +1 -0
- package/dist/collection/format.js +70 -0
- package/dist/collection/format.js.map +1 -0
- package/dist/collection/payment-block.d.ts +24 -0
- package/dist/collection/payment-block.d.ts.map +1 -0
- package/dist/collection/payment-block.js +2 -0
- package/dist/collection/payment-block.js.map +1 -0
- package/dist/collection/policy.d.ts +78 -0
- package/dist/collection/policy.d.ts.map +1 -0
- package/dist/collection/policy.js +168 -0
- package/dist/collection/policy.js.map +1 -0
- package/dist/collection/repository.d.ts +129 -0
- package/dist/collection/repository.d.ts.map +1 -0
- package/dist/collection/repository.js +246 -0
- package/dist/collection/repository.js.map +1 -0
- package/dist/collection/subject.d.ts +66 -0
- package/dist/collection/subject.d.ts.map +1 -0
- package/dist/collection/subject.js +99 -0
- package/dist/collection/subject.js.map +1 -0
- package/dist/collection/template-catalog.d.ts +16 -0
- package/dist/collection/template-catalog.d.ts.map +1 -0
- package/dist/collection/template-catalog.js +162 -0
- package/dist/collection/template-catalog.js.map +1 -0
- package/dist/collection/template.d.ts +37 -0
- package/dist/collection/template.d.ts.map +1 -0
- package/dist/collection/template.js +73 -0
- package/dist/collection/template.js.map +1 -0
- package/dist/communication/adapters/email.d.ts +28 -0
- package/dist/communication/adapters/email.d.ts.map +1 -0
- package/dist/communication/adapters/email.js +129 -0
- package/dist/communication/adapters/email.js.map +1 -0
- package/dist/communication/adapters/sms.d.ts +95 -0
- package/dist/communication/adapters/sms.d.ts.map +1 -0
- package/dist/communication/adapters/sms.js +121 -0
- package/dist/communication/adapters/sms.js.map +1 -0
- package/dist/communication/adapters/whatsapp-language.d.ts +34 -0
- package/dist/communication/adapters/whatsapp-language.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp-language.js +36 -0
- package/dist/communication/adapters/whatsapp-language.js.map +1 -0
- package/dist/communication/adapters/whatsapp-templates.d.ts +18 -0
- package/dist/communication/adapters/whatsapp-templates.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp-templates.js +97 -0
- package/dist/communication/adapters/whatsapp-templates.js.map +1 -0
- package/dist/communication/adapters/whatsapp.d.ts +29 -0
- package/dist/communication/adapters/whatsapp.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp.js +210 -0
- package/dist/communication/adapters/whatsapp.js.map +1 -0
- package/dist/communication/audit.d.ts +105 -0
- package/dist/communication/audit.d.ts.map +1 -0
- package/dist/communication/audit.js +56 -0
- package/dist/communication/audit.js.map +1 -0
- package/dist/communication/capabilities.d.ts +88 -0
- package/dist/communication/capabilities.d.ts.map +1 -0
- package/dist/communication/capabilities.js +72 -0
- package/dist/communication/capabilities.js.map +1 -0
- package/dist/communication/channel.d.ts +125 -0
- package/dist/communication/channel.d.ts.map +1 -0
- package/dist/communication/channel.js +47 -0
- package/dist/communication/channel.js.map +1 -0
- package/dist/communication/claim.d.ts +368 -0
- package/dist/communication/claim.d.ts.map +1 -0
- package/dist/communication/claim.js +224 -0
- package/dist/communication/claim.js.map +1 -0
- package/dist/communication/clearance.d.ts +53 -0
- package/dist/communication/clearance.d.ts.map +1 -0
- package/dist/communication/clearance.js +15 -0
- package/dist/communication/clearance.js.map +1 -0
- package/dist/communication/consent.d.ts +65 -0
- package/dist/communication/consent.d.ts.map +1 -0
- package/dist/communication/consent.js +40 -0
- package/dist/communication/consent.js.map +1 -0
- package/dist/communication/context.d.ts +48 -0
- package/dist/communication/context.d.ts.map +1 -0
- package/dist/communication/context.js +41 -0
- package/dist/communication/context.js.map +1 -0
- package/dist/communication/credentials.d.ts +74 -0
- package/dist/communication/credentials.d.ts.map +1 -0
- package/dist/communication/credentials.js +115 -0
- package/dist/communication/credentials.js.map +1 -0
- package/dist/communication/dry-run-scenario.d.ts +37 -0
- package/dist/communication/dry-run-scenario.d.ts.map +1 -0
- package/dist/communication/dry-run-scenario.js +163 -0
- package/dist/communication/dry-run-scenario.js.map +1 -0
- package/dist/communication/dry-run.d.ts +40 -0
- package/dist/communication/dry-run.d.ts.map +1 -0
- package/dist/communication/dry-run.js +92 -0
- package/dist/communication/dry-run.js.map +1 -0
- package/dist/communication/engine.d.ts +163 -0
- package/dist/communication/engine.d.ts.map +1 -0
- package/dist/communication/engine.js +492 -0
- package/dist/communication/engine.js.map +1 -0
- package/dist/communication/graph.d.ts +38 -0
- package/dist/communication/graph.d.ts.map +1 -0
- package/dist/communication/graph.js +45 -0
- package/dist/communication/graph.js.map +1 -0
- package/dist/communication/idempotency.d.ts +33 -0
- package/dist/communication/idempotency.d.ts.map +1 -0
- package/dist/communication/idempotency.js +23 -0
- package/dist/communication/idempotency.js.map +1 -0
- package/dist/communication/identity.d.ts +127 -0
- package/dist/communication/identity.d.ts.map +1 -0
- package/dist/communication/identity.js +105 -0
- package/dist/communication/identity.js.map +1 -0
- package/dist/communication/index.d.ts +66 -0
- package/dist/communication/index.d.ts.map +1 -0
- package/dist/communication/index.js +42 -0
- package/dist/communication/index.js.map +1 -0
- package/dist/communication/onboarding.d.ts +223 -0
- package/dist/communication/onboarding.d.ts.map +1 -0
- package/dist/communication/onboarding.js +287 -0
- package/dist/communication/onboarding.js.map +1 -0
- package/dist/communication/policy.d.ts +115 -0
- package/dist/communication/policy.d.ts.map +1 -0
- package/dist/communication/policy.js +13 -0
- package/dist/communication/policy.js.map +1 -0
- package/dist/communication/routing.d.ts +99 -0
- package/dist/communication/routing.d.ts.map +1 -0
- package/dist/communication/routing.js +73 -0
- package/dist/communication/routing.js.map +1 -0
- package/dist/communication/sender-profile.d.ts +100 -0
- package/dist/communication/sender-profile.d.ts.map +1 -0
- package/dist/communication/sender-profile.js +123 -0
- package/dist/communication/sender-profile.js.map +1 -0
- package/dist/communication/status.d.ts +48 -0
- package/dist/communication/status.d.ts.map +1 -0
- package/dist/communication/status.js +79 -0
- package/dist/communication/status.js.map +1 -0
- package/dist/communication/stores/onboarding.d.ts +88 -0
- package/dist/communication/stores/onboarding.d.ts.map +1 -0
- package/dist/communication/stores/onboarding.js +127 -0
- package/dist/communication/stores/onboarding.js.map +1 -0
- package/dist/communication/stores/postgres.d.ts +81 -0
- package/dist/communication/stores/postgres.d.ts.map +1 -0
- package/dist/communication/stores/postgres.js +453 -0
- package/dist/communication/stores/postgres.js.map +1 -0
- package/dist/communication/stores/routing.d.ts +169 -0
- package/dist/communication/stores/routing.d.ts.map +1 -0
- package/dist/communication/stores/routing.js +324 -0
- package/dist/communication/stores/routing.js.map +1 -0
- package/dist/communication/stores/secrets.d.ts +89 -0
- package/dist/communication/stores/secrets.d.ts.map +1 -0
- package/dist/communication/stores/secrets.js +122 -0
- package/dist/communication/stores/secrets.js.map +1 -0
- package/dist/communication/template-provider.d.ts +85 -0
- package/dist/communication/template-provider.d.ts.map +1 -0
- package/dist/communication/template-provider.js +21 -0
- package/dist/communication/template-provider.js.map +1 -0
- package/dist/communication/template.d.ts +87 -0
- package/dist/communication/template.d.ts.map +1 -0
- package/dist/communication/template.js +59 -0
- package/dist/communication/template.js.map +1 -0
- package/dist/communication/webhook-subscription.d.ts +156 -0
- package/dist/communication/webhook-subscription.d.ts.map +1 -0
- package/dist/communication/webhook-subscription.js +252 -0
- package/dist/communication/webhook-subscription.js.map +1 -0
- package/dist/communication/webhook.d.ts +121 -0
- package/dist/communication/webhook.d.ts.map +1 -0
- package/dist/communication/webhook.js +283 -0
- package/dist/communication/webhook.js.map +1 -0
- package/dist/competence/business-days.d.ts +51 -0
- package/dist/competence/business-days.d.ts.map +1 -0
- package/dist/competence/business-days.js +145 -0
- package/dist/competence/business-days.js.map +1 -0
- package/dist/competence/catalog-validation.d.ts +86 -0
- package/dist/competence/catalog-validation.d.ts.map +1 -0
- package/dist/competence/catalog-validation.js +168 -0
- package/dist/competence/catalog-validation.js.map +1 -0
- package/dist/competence/obligation-preview.d.ts +103 -0
- package/dist/competence/obligation-preview.d.ts.map +1 -0
- package/dist/competence/obligation-preview.js +184 -0
- package/dist/competence/obligation-preview.js.map +1 -0
- package/dist/competence/repository.d.ts +285 -0
- package/dist/competence/repository.d.ts.map +1 -0
- package/dist/competence/repository.js +602 -0
- package/dist/competence/repository.js.map +1 -0
- package/dist/contacts/phone.d.ts +70 -0
- package/dist/contacts/phone.d.ts.map +1 -0
- package/dist/contacts/phone.js +186 -0
- package/dist/contacts/phone.js.map +1 -0
- package/dist/dashboard/pilot-panel.d.ts +100 -0
- package/dist/dashboard/pilot-panel.d.ts.map +1 -0
- package/dist/dashboard/pilot-panel.js +87 -0
- package/dist/dashboard/pilot-panel.js.map +1 -0
- package/dist/dashboard/repository.d.ts.map +1 -1
- package/dist/dashboard/repository.js +11 -1
- package/dist/dashboard/repository.js.map +1 -1
- package/dist/db/client.d.ts +45 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +16 -11
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrate.d.ts +36 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +208 -35
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/provision-e2e-identity.d.ts +2 -0
- package/dist/db/provision-e2e-identity.d.ts.map +1 -0
- package/dist/db/provision-e2e-identity.js +109 -0
- package/dist/db/provision-e2e-identity.js.map +1 -0
- package/dist/db/seed-catalog.d.ts +18 -0
- package/dist/db/seed-catalog.d.ts.map +1 -0
- package/dist/db/seed-catalog.js +45 -0
- package/dist/db/seed-catalog.js.map +1 -0
- package/dist/db/seed.js +16 -8
- package/dist/db/seed.js.map +1 -1
- package/dist/documents/repository.d.ts +97 -0
- package/dist/documents/repository.d.ts.map +1 -0
- package/dist/documents/repository.js +236 -0
- package/dist/documents/repository.js.map +1 -0
- package/dist/documents/requests.d.ts +73 -0
- package/dist/documents/requests.d.ts.map +1 -0
- package/dist/documents/requests.js +127 -0
- package/dist/documents/requests.js.map +1 -0
- package/dist/fiscal/applicability.d.ts +73 -0
- package/dist/fiscal/applicability.d.ts.map +1 -0
- package/dist/fiscal/applicability.js +160 -0
- package/dist/fiscal/applicability.js.map +1 -0
- package/dist/fiscal/conditions.d.ts +99 -0
- package/dist/fiscal/conditions.d.ts.map +1 -0
- package/dist/fiscal/conditions.js +190 -0
- package/dist/fiscal/conditions.js.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-contract.d.ts +315 -0
- package/dist/fiscal/contracts/nfse-adn-contract.d.ts.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-contract.js +386 -0
- package/dist/fiscal/contracts/nfse-adn-contract.js.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts +13 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.js +103 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.d.ts +77 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.d.ts.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.js +215 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
- package/dist/fiscal/coverage/model.d.ts +86 -0
- package/dist/fiscal/coverage/model.d.ts.map +1 -0
- package/dist/fiscal/coverage/model.js +120 -0
- package/dist/fiscal/coverage/model.js.map +1 -0
- package/dist/fiscal/coverage/requests.d.ts +70 -0
- package/dist/fiscal/coverage/requests.d.ts.map +1 -0
- package/dist/fiscal/coverage/requests.js +95 -0
- package/dist/fiscal/coverage/requests.js.map +1 -0
- package/dist/fiscal/credentials/material.d.ts +81 -0
- package/dist/fiscal/credentials/material.d.ts.map +1 -0
- package/dist/fiscal/credentials/material.js +164 -0
- package/dist/fiscal/credentials/material.js.map +1 -0
- package/dist/fiscal/credentials/readiness.d.ts +92 -0
- package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
- package/dist/fiscal/credentials/readiness.js +159 -0
- package/dist/fiscal/credentials/readiness.js.map +1 -0
- package/dist/fiscal/eligibility.d.ts +106 -0
- package/dist/fiscal/eligibility.d.ts.map +1 -0
- package/dist/fiscal/eligibility.js +194 -0
- package/dist/fiscal/eligibility.js.map +1 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts +57 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts.map +1 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.js +121 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
- package/dist/fiscal/ingestion/adn-transport.d.ts +123 -0
- package/dist/fiscal/ingestion/adn-transport.d.ts.map +1 -0
- package/dist/fiscal/ingestion/adn-transport.js +220 -0
- package/dist/fiscal/ingestion/adn-transport.js.map +1 -0
- package/dist/fiscal/ingestion/direction.d.ts +60 -0
- package/dist/fiscal/ingestion/direction.d.ts.map +1 -0
- package/dist/fiscal/ingestion/direction.js +32 -0
- package/dist/fiscal/ingestion/direction.js.map +1 -0
- package/dist/fiscal/ingestion/nfse-adn.d.ts +91 -0
- package/dist/fiscal/ingestion/nfse-adn.d.ts.map +1 -0
- package/dist/fiscal/ingestion/nfse-adn.js +222 -0
- package/dist/fiscal/ingestion/nfse-adn.js.map +1 -0
- package/dist/fiscal/ingestion/pipeline.d.ts +168 -0
- package/dist/fiscal/ingestion/pipeline.d.ts.map +1 -0
- package/dist/fiscal/ingestion/pipeline.js +699 -0
- package/dist/fiscal/ingestion/pipeline.js.map +1 -0
- package/dist/fiscal/ingestion/provider.d.ts +206 -0
- package/dist/fiscal/ingestion/provider.d.ts.map +1 -0
- package/dist/fiscal/ingestion/provider.js +47 -0
- package/dist/fiscal/ingestion/provider.js.map +1 -0
- package/dist/fiscal/ingestion/repository.d.ts +82 -0
- package/dist/fiscal/ingestion/repository.d.ts.map +1 -0
- package/dist/fiscal/ingestion/repository.js +127 -0
- package/dist/fiscal/ingestion/repository.js.map +1 -0
- package/dist/fiscal/ingestion/synthetic-provider.d.ts +92 -0
- package/dist/fiscal/ingestion/synthetic-provider.d.ts.map +1 -0
- package/dist/fiscal/ingestion/synthetic-provider.js +99 -0
- package/dist/fiscal/ingestion/synthetic-provider.js.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.d.ts +19 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.d.ts.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.js +9 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport.d.ts +55 -0
- package/dist/fiscal/ingestion/synthetic-transport.d.ts.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport.js +57 -0
- package/dist/fiscal/ingestion/synthetic-transport.js.map +1 -0
- package/dist/fiscal/ingestion/xml-reader.d.ts +55 -0
- package/dist/fiscal/ingestion/xml-reader.d.ts.map +1 -0
- package/dist/fiscal/ingestion/xml-reader.js +112 -0
- package/dist/fiscal/ingestion/xml-reader.js.map +1 -0
- package/dist/fiscal/repository.d.ts +220 -0
- package/dist/fiscal/repository.d.ts.map +1 -0
- package/dist/fiscal/repository.js +449 -0
- package/dist/fiscal/repository.js.map +1 -0
- package/dist/fiscal/sync/circuit.d.ts +86 -0
- package/dist/fiscal/sync/circuit.d.ts.map +1 -0
- package/dist/fiscal/sync/circuit.js +118 -0
- package/dist/fiscal/sync/circuit.js.map +1 -0
- package/dist/fiscal/sync/intervention.d.ts +81 -0
- package/dist/fiscal/sync/intervention.d.ts.map +1 -0
- package/dist/fiscal/sync/intervention.js +135 -0
- package/dist/fiscal/sync/intervention.js.map +1 -0
- package/dist/fiscal/sync/lease.d.ts +118 -0
- package/dist/fiscal/sync/lease.d.ts.map +1 -0
- package/dist/fiscal/sync/lease.js +139 -0
- package/dist/fiscal/sync/lease.js.map +1 -0
- package/dist/fiscal/sync/observability.d.ts +148 -0
- package/dist/fiscal/sync/observability.d.ts.map +1 -0
- package/dist/fiscal/sync/observability.js +239 -0
- package/dist/fiscal/sync/observability.js.map +1 -0
- package/dist/fiscal/sync/orchestrator.d.ts +132 -0
- package/dist/fiscal/sync/orchestrator.d.ts.map +1 -0
- package/dist/fiscal/sync/orchestrator.js +487 -0
- package/dist/fiscal/sync/orchestrator.js.map +1 -0
- package/dist/fiscal/sync/policy.d.ts +87 -0
- package/dist/fiscal/sync/policy.d.ts.map +1 -0
- package/dist/fiscal/sync/policy.js +136 -0
- package/dist/fiscal/sync/policy.js.map +1 -0
- package/dist/fiscal/sync/reprocess.d.ts +76 -0
- package/dist/fiscal/sync/reprocess.d.ts.map +1 -0
- package/dist/fiscal/sync/reprocess.js +237 -0
- package/dist/fiscal/sync/reprocess.js.map +1 -0
- package/dist/fiscal/sync/retry.d.ts +82 -0
- package/dist/fiscal/sync/retry.d.ts.map +1 -0
- package/dist/fiscal/sync/retry.js +176 -0
- package/dist/fiscal/sync/retry.js.map +1 -0
- package/dist/fiscal/sync/secret-boundary.d.ts +169 -0
- package/dist/fiscal/sync/secret-boundary.d.ts.map +1 -0
- package/dist/fiscal/sync/secret-boundary.js +116 -0
- package/dist/fiscal/sync/secret-boundary.js.map +1 -0
- package/dist/fiscal/transport/https.d.ts +86 -0
- package/dist/fiscal/transport/https.d.ts.map +1 -0
- package/dist/fiscal/transport/https.js +303 -0
- package/dist/fiscal/transport/https.js.map +1 -0
- package/dist/fiscal/transport/synthetic-tls.d.ts +80 -0
- package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
- package/dist/fiscal/transport/synthetic-tls.js +323 -0
- package/dist/fiscal/transport/synthetic-tls.js.map +1 -0
- package/dist/fiscal/transport/types.d.ts +134 -0
- package/dist/fiscal/transport/types.d.ts.map +1 -0
- package/dist/fiscal/transport/types.js +88 -0
- package/dist/fiscal/transport/types.js.map +1 -0
- package/dist/import/br-documents.d.ts +26 -0
- package/dist/import/br-documents.d.ts.map +1 -0
- package/dist/import/br-documents.js +78 -0
- package/dist/import/br-documents.js.map +1 -0
- package/dist/import/clients-import.d.ts +122 -4
- package/dist/import/clients-import.d.ts.map +1 -1
- package/dist/import/clients-import.js +341 -41
- package/dist/import/clients-import.js.map +1 -1
- package/dist/index.d.ts +217 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +196 -11
- package/dist/index.js.map +1 -1
- package/dist/legal/documents.d.ts +12 -1
- package/dist/legal/documents.d.ts.map +1 -1
- package/dist/legal/documents.js +222 -16
- package/dist/legal/documents.js.map +1 -1
- package/dist/legal/index.d.ts +2 -2
- package/dist/legal/index.d.ts.map +1 -1
- package/dist/legal/index.js +1 -1
- package/dist/legal/index.js.map +1 -1
- package/dist/legal/types.d.ts +69 -3
- package/dist/legal/types.d.ts.map +1 -1
- package/dist/legal/types.js +1 -0
- package/dist/legal/types.js.map +1 -1
- package/dist/mail/auth-templates.d.ts +15 -0
- package/dist/mail/auth-templates.d.ts.map +1 -0
- package/dist/mail/auth-templates.js +26 -0
- package/dist/mail/auth-templates.js.map +1 -0
- package/dist/mail/dedup-store.d.ts +1 -24
- package/dist/mail/dedup-store.d.ts.map +1 -1
- package/dist/mail/dedup-store.js +9 -48
- package/dist/mail/dedup-store.js.map +1 -1
- package/dist/mail/index.d.ts +2 -1
- package/dist/mail/index.d.ts.map +1 -1
- package/dist/mail/index.js +13 -2
- package/dist/mail/index.js.map +1 -1
- package/dist/mail/provider.d.ts +2 -30
- package/dist/mail/provider.d.ts.map +1 -1
- package/dist/mail/provider.js +10 -246
- package/dist/mail/provider.js.map +1 -1
- package/dist/mail/resend.d.ts +2 -12
- package/dist/mail/resend.d.ts.map +1 -1
- package/dist/mail/resend.js +11 -17
- package/dist/mail/resend.js.map +1 -1
- package/dist/mail/sender-resolver.d.ts +1 -7
- package/dist/mail/sender-resolver.d.ts.map +1 -1
- package/dist/mail/sender-resolver.js +11 -10
- package/dist/mail/sender-resolver.js.map +1 -1
- package/dist/mail/template-renderer.d.ts +1 -9
- package/dist/mail/template-renderer.d.ts.map +1 -1
- package/dist/mail/template-renderer.js +10 -15
- package/dist/mail/template-renderer.js.map +1 -1
- package/dist/mail/transactional-outbound.d.ts +115 -0
- package/dist/mail/transactional-outbound.d.ts.map +1 -0
- package/dist/mail/transactional-outbound.js +113 -0
- package/dist/mail/transactional-outbound.js.map +1 -0
- package/dist/mail/types.d.ts +2 -142
- package/dist/mail/types.d.ts.map +1 -1
- package/dist/mail/types.js +1 -33
- package/dist/mail/types.js.map +1 -1
- package/dist/onboarding/persistence.d.ts +10 -1
- package/dist/onboarding/persistence.d.ts.map +1 -1
- package/dist/onboarding/persistence.js +4 -4
- package/dist/onboarding/persistence.js.map +1 -1
- package/dist/pilot/go-live-checklist.d.ts +41 -0
- package/dist/pilot/go-live-checklist.d.ts.map +1 -0
- package/dist/pilot/go-live-checklist.js +209 -0
- package/dist/pilot/go-live-checklist.js.map +1 -0
- package/dist/pilot/milestone.d.ts +56 -0
- package/dist/pilot/milestone.d.ts.map +1 -0
- package/dist/pilot/milestone.js +74 -0
- package/dist/pilot/milestone.js.map +1 -0
- package/dist/platform/capabilities.d.ts +88 -0
- package/dist/platform/capabilities.d.ts.map +1 -0
- package/dist/platform/capabilities.js +140 -0
- package/dist/platform/capabilities.js.map +1 -0
- package/dist/platform/job-contract.d.ts +232 -0
- package/dist/platform/job-contract.d.ts.map +1 -0
- package/dist/platform/job-contract.js +403 -0
- package/dist/platform/job-contract.js.map +1 -0
- package/dist/portal/provisioning.d.ts +58 -0
- package/dist/portal/provisioning.d.ts.map +1 -0
- package/dist/portal/provisioning.js +139 -0
- package/dist/portal/provisioning.js.map +1 -0
- package/dist/pricing-engine/canonical.d.ts +14 -0
- package/dist/pricing-engine/canonical.d.ts.map +1 -0
- package/dist/pricing-engine/canonical.js +39 -0
- package/dist/pricing-engine/canonical.js.map +1 -0
- package/dist/pricing-engine/errors.d.ts.map +1 -1
- package/dist/pricing-engine/errors.js +6 -1
- package/dist/pricing-engine/errors.js.map +1 -1
- package/dist/pricing-engine/index.d.ts +12 -2
- package/dist/pricing-engine/index.d.ts.map +1 -1
- package/dist/pricing-engine/index.js +6 -1
- package/dist/pricing-engine/index.js.map +1 -1
- package/dist/pricing-engine/pipeline.d.ts.map +1 -1
- package/dist/pricing-engine/pipeline.js +202 -28
- package/dist/pricing-engine/pipeline.js.map +1 -1
- package/dist/pricing-engine/shadow-adapter.d.ts +37 -0
- package/dist/pricing-engine/shadow-adapter.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-adapter.js +75 -0
- package/dist/pricing-engine/shadow-adapter.js.map +1 -0
- package/dist/pricing-engine/shadow-diff.d.ts +26 -0
- package/dist/pricing-engine/shadow-diff.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-diff.js +52 -0
- package/dist/pricing-engine/shadow-diff.js.map +1 -0
- package/dist/pricing-engine/shadow-facade.d.ts +42 -0
- package/dist/pricing-engine/shadow-facade.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-facade.js +82 -0
- package/dist/pricing-engine/shadow-facade.js.map +1 -0
- package/dist/pricing-engine/shadow-legacy-types.d.ts +64 -0
- package/dist/pricing-engine/shadow-legacy-types.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-legacy-types.js +18 -0
- package/dist/pricing-engine/shadow-legacy-types.js.map +1 -0
- package/dist/pricing-engine/shadow-metrics.d.ts +33 -0
- package/dist/pricing-engine/shadow-metrics.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-metrics.js +31 -0
- package/dist/pricing-engine/shadow-metrics.js.map +1 -0
- package/dist/pricing-engine/shadow-normalizer.d.ts +17 -0
- package/dist/pricing-engine/shadow-normalizer.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-normalizer.js +39 -0
- package/dist/pricing-engine/shadow-normalizer.js.map +1 -0
- package/dist/pricing-engine/types.d.ts +2 -0
- package/dist/pricing-engine/types.d.ts.map +1 -1
- package/dist/rbac/authorize.d.ts +12 -0
- package/dist/rbac/authorize.d.ts.map +1 -1
- package/dist/rbac/authorize.js +27 -0
- package/dist/rbac/authorize.js.map +1 -1
- package/dist/rbac/catalog.d.ts.map +1 -1
- package/dist/rbac/catalog.js +101 -1
- package/dist/rbac/catalog.js.map +1 -1
- package/dist/rbac/workload-provisioning.d.ts +66 -0
- package/dist/rbac/workload-provisioning.d.ts.map +1 -0
- package/dist/rbac/workload-provisioning.js +153 -0
- package/dist/rbac/workload-provisioning.js.map +1 -0
- package/dist/rbac/workload.d.ts +124 -0
- package/dist/rbac/workload.d.ts.map +1 -0
- package/dist/rbac/workload.js +184 -0
- package/dist/rbac/workload.js.map +1 -0
- package/dist/storage/checksum.d.ts +9 -0
- package/dist/storage/checksum.d.ts.map +1 -0
- package/dist/storage/checksum.js +12 -0
- package/dist/storage/checksum.js.map +1 -0
- package/dist/storage/key.d.ts +37 -0
- package/dist/storage/key.d.ts.map +1 -0
- package/dist/storage/key.js +67 -0
- package/dist/storage/key.js.map +1 -0
- package/dist/storage/local.d.ts +40 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +96 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/r2.d.ts +43 -0
- package/dist/storage/r2.d.ts.map +1 -0
- package/dist/storage/r2.js +177 -0
- package/dist/storage/r2.js.map +1 -0
- package/dist/storage/registry.d.ts +23 -0
- package/dist/storage/registry.d.ts.map +1 -0
- package/dist/storage/registry.js +37 -0
- package/dist/storage/registry.js.map +1 -0
- package/dist/storage/types.d.ts +67 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +45 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/subscription-billing/index.d.ts +6 -5
- package/dist/subscription-billing/index.d.ts.map +1 -1
- package/dist/subscription-billing/index.js +3 -3
- package/dist/subscription-billing/index.js.map +1 -1
- package/dist/subscription-billing/provider/asaas.d.ts +14 -0
- package/dist/subscription-billing/provider/asaas.d.ts.map +1 -1
- package/dist/subscription-billing/provider/asaas.js +32 -7
- package/dist/subscription-billing/provider/asaas.js.map +1 -1
- package/dist/subscription-billing/provider/disabled.d.ts +9 -0
- package/dist/subscription-billing/provider/disabled.d.ts.map +1 -1
- package/dist/subscription-billing/provider/disabled.js +8 -0
- package/dist/subscription-billing/provider/disabled.js.map +1 -1
- package/dist/subscription-billing/provider/registry.d.ts +10 -0
- package/dist/subscription-billing/provider/registry.d.ts.map +1 -1
- package/dist/subscription-billing/provider/registry.js +17 -0
- package/dist/subscription-billing/provider/registry.js.map +1 -1
- package/dist/subscription-billing/service.d.ts +38 -1
- package/dist/subscription-billing/service.d.ts.map +1 -1
- package/dist/subscription-billing/service.js +147 -23
- package/dist/subscription-billing/service.js.map +1 -1
- package/dist/subscription-billing/types.d.ts +13 -0
- package/dist/subscription-billing/types.d.ts.map +1 -1
- package/dist/subscription-billing/types.js.map +1 -1
- package/dist/tenancy/features.d.ts +69 -0
- package/dist/tenancy/features.d.ts.map +1 -0
- package/dist/tenancy/features.js +123 -0
- package/dist/tenancy/features.js.map +1 -0
- package/dist/tenancy/provisioning.d.ts.map +1 -1
- package/dist/tenancy/provisioning.js +32 -8
- package/dist/tenancy/provisioning.js.map +1 -1
- package/dist/tenancy/settings.d.ts +63 -0
- package/dist/tenancy/settings.d.ts.map +1 -0
- package/dist/tenancy/settings.js +218 -0
- package/dist/tenancy/settings.js.map +1 -0
- package/dist/users/repository.d.ts +54 -1
- package/dist/users/repository.d.ts.map +1 -1
- package/dist/users/repository.js +142 -4
- package/dist/users/repository.js.map +1 -1
- package/dist/vault/repository.d.ts +67 -0
- package/dist/vault/repository.d.ts.map +1 -1
- package/dist/vault/repository.js +78 -0
- package/dist/vault/repository.js.map +1 -1
- package/package.json +20 -4
- package/src/db/migrations/0023_user_invite_activation.sql +15 -0
- package/src/db/migrations/0024_set_user_password_function.sql +32 -0
- package/src/db/migrations/0025_revoke_user_session_function.sql +28 -0
- package/src/db/migrations/0026_documents_and_competence.sql +353 -0
- package/src/db/migrations/0027_receivable_client_isolation.sql +58 -0
- package/src/db/migrations/0028_collection_engine.sql +94 -0
- package/src/db/migrations/0029_payment_rail.sql +107 -0
- package/src/db/migrations/0030_provider_account_uniqueness.sql +22 -0
- package/src/db/migrations/0031_provider_account_environment_scope.sql +21 -0
- package/src/db/migrations/0032_settlement_reversal.sql +76 -0
- package/src/db/migrations/0033_receivable_idempotency.sql +28 -0
- package/src/db/migrations/0034_payment_customer_reconcile.sql +30 -0
- package/src/db/migrations/0035_payment_account_environments.sql +61 -0
- package/src/db/migrations/0036_primary_backfill_under_force_rls.sql +41 -0
- package/src/db/migrations/0037_receivable_generation_source.sql +29 -0
- package/src/db/migrations/0038_notification_channels.sql +175 -0
- package/src/db/migrations/0039_communication_dispatch_claim.sql +193 -0
- package/src/db/migrations/0040_communication_unknown_outcome.sql +99 -0
- package/src/db/migrations/0041_channel_binding_routing.sql +146 -0
- package/src/db/migrations/0042_channel_route_read_isolation.sql +165 -0
- package/src/db/migrations/0043_workload_identity.sql +105 -0
- package/src/db/migrations/0044_channel_onboarding_session.sql +96 -0
- package/src/db/migrations/0045_role_write_scope.sql +122 -0
- package/src/db/migrations/0046_pilot_activation_model.sql +184 -0
- package/src/db/migrations/0047_recipient_clearance.sql +89 -0
- package/src/db/migrations/0048_item_type_note.sql +16 -0
- package/src/db/migrations/0049_national_fiscal_engine.sql +279 -0
- package/src/db/migrations/0050_fiscal_vocabulary_readonly.sql +29 -0
- package/src/db/migrations/0051_seed_rules_from_catalog.sql +72 -0
- package/src/db/migrations/0052_fiscal_rule_delete_scope.sql +57 -0
- package/src/db/migrations/0053_rule_validity_lower_bound.sql +44 -0
- package/src/db/migrations/0054_tenant_profile_and_rule_source.sql +89 -0
- package/src/db/migrations/0055_job_capability_contract.sql +300 -0
- package/src/db/migrations/0056_fiscal_document_ingestion.sql +337 -0
- package/src/db/migrations/0057_fiscal_pending_event_inbox.sql +228 -0
- package/src/db/migrations/0058_fiscal_operational_engine.sql +516 -0
- package/src/db/migrations/0059_fiscal_contract_version.sql +59 -0
- package/dist/cjs/mail/resend-client.js +0 -103
- package/dist/cjs/mail/resend-client.js.map +0 -1
- package/dist/mail/resend-client.d.ts +0 -16
- package/dist/mail/resend-client.d.ts.map +0 -1
- package/dist/mail/resend-client.js +0 -100
- package/dist/mail/resend-client.js.map +0 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
/**
|
|
3
|
+
* O checklist de go-live — derivado do sistema, não escrito à mão.
|
|
4
|
+
*
|
|
5
|
+
* ## Por que derivado
|
|
6
|
+
*
|
|
7
|
+
* Um checklist digitado num documento é uma foto: diz o que era verdade no dia
|
|
8
|
+
* em que alguém escreveu. Este é consultado, então não fica desatualizado sem
|
|
9
|
+
* que o próprio sistema mude junto. A pergunta que ele responde é "posso ligar
|
|
10
|
+
* hoje?", e essa não aceita resposta de ontem.
|
|
11
|
+
*
|
|
12
|
+
* ## TECHNICAL versus HUMAN
|
|
13
|
+
*
|
|
14
|
+
* A separação não é decorativa. Um gate técnico o produto fecha sozinho; um
|
|
15
|
+
* gate humano depende de alguém decidir, conferir ou enviar — e nenhuma
|
|
16
|
+
* quantidade de código o fecha. Misturar os dois produz ilusão de progresso: a
|
|
17
|
+
* barra sobe e o que faltava continua faltando.
|
|
18
|
+
*
|
|
19
|
+
* Por isso `humanOnly` existe: um gate humano aberto **não é defeito**, é
|
|
20
|
+
* trabalho de pessoa pendente. E é por isso que há dois vereditos, e não um.
|
|
21
|
+
*/
|
|
22
|
+
export type GateCategory = 'TECHNICAL' | 'HUMAN' | 'BUSINESS' | 'FINANCIAL' | 'SECURITY' | 'DATA';
|
|
23
|
+
export interface Gate {
|
|
24
|
+
key: string;
|
|
25
|
+
category: GateCategory;
|
|
26
|
+
ready: boolean;
|
|
27
|
+
/** O que exatamente falta. Vazio quando `ready`. */
|
|
28
|
+
detail: string;
|
|
29
|
+
/** `true` quando só uma pessoa pode fechar. */
|
|
30
|
+
humanOnly: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface GoLiveChecklist {
|
|
33
|
+
gates: Gate[];
|
|
34
|
+
/** Tudo que o produto controla está pronto. */
|
|
35
|
+
technicalReady: boolean;
|
|
36
|
+
/** Só é `true` quando TUDO fecha, inclusive o que depende de pessoa. */
|
|
37
|
+
activationReady: boolean;
|
|
38
|
+
humanBlockers: string[];
|
|
39
|
+
}
|
|
40
|
+
export declare function goLiveChecklist(tx: Tx, env?: NodeJS.ProcessEnv): Promise<GoLiveChecklist>;
|
|
41
|
+
//# sourceMappingURL=go-live-checklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-live-checklist.d.ts","sourceRoot":"","sources":["../../src/pilot/go-live-checklist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAM1C;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAElG,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,+CAA+C;IAC/C,cAAc,EAAE,OAAO,CAAC;IACxB,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,EAAE,EACN,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,eAAe,CAAC,CAkO1B"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { catalogValidationSummary } from '../competence/catalog-validation.js';
|
|
2
|
+
import { readLiveRuntime } from '../billing/live-guard.js';
|
|
3
|
+
import { clearanceSummary } from '../collection/clearance-store.js';
|
|
4
|
+
import { getRealPilotStart } from './milestone.js';
|
|
5
|
+
export async function goLiveChecklist(tx, env = process.env) {
|
|
6
|
+
const gates = [];
|
|
7
|
+
const add = (g) => void gates.push(g);
|
|
8
|
+
// ── DATA ────────────────────────────────────────────────────────────────
|
|
9
|
+
const [clientes] = await tx `
|
|
10
|
+
SELECT count(*)::int AS total,
|
|
11
|
+
count(*) FILTER (WHERE email IS NULL)::int AS sem_email,
|
|
12
|
+
count(*) FILTER (WHERE responsible_user_id IS NULL)::int AS sem_resp
|
|
13
|
+
FROM client
|
|
14
|
+
WHERE deleted_at IS NULL AND status = 'active'
|
|
15
|
+
`;
|
|
16
|
+
const total = clientes?.total ?? 0;
|
|
17
|
+
add({
|
|
18
|
+
key: 'CLIENT_DATA_READY',
|
|
19
|
+
category: 'DATA',
|
|
20
|
+
ready: total > 0,
|
|
21
|
+
detail: total > 0
|
|
22
|
+
? `${total} cliente(s) ativos.`
|
|
23
|
+
: 'Nenhum cliente ativo — carteira real não importada.',
|
|
24
|
+
humanOnly: true,
|
|
25
|
+
});
|
|
26
|
+
add({
|
|
27
|
+
key: 'REAL_EMAIL_READY',
|
|
28
|
+
category: 'DATA',
|
|
29
|
+
ready: total > 0 && (clientes?.sem_email ?? 0) === 0,
|
|
30
|
+
detail: total === 0
|
|
31
|
+
? 'Sem carteira para avaliar.'
|
|
32
|
+
: (clientes?.sem_email ?? 0) === 0
|
|
33
|
+
? 'Todos os clientes ativos têm e-mail.'
|
|
34
|
+
: `${clientes?.sem_email} cliente(s) sem e-mail: cobrança e pedido de documento não os alcançam.`,
|
|
35
|
+
humanOnly: true,
|
|
36
|
+
});
|
|
37
|
+
add({
|
|
38
|
+
key: 'USERS_READY',
|
|
39
|
+
category: 'DATA',
|
|
40
|
+
ready: total > 0 && (clientes?.sem_resp ?? 0) === 0,
|
|
41
|
+
detail: total === 0
|
|
42
|
+
? 'Sem carteira para distribuir.'
|
|
43
|
+
: (clientes?.sem_resp ?? 0) === 0
|
|
44
|
+
? 'Carteira inteira com responsável.'
|
|
45
|
+
: `${clientes?.sem_resp} cliente(s) sem responsável.`,
|
|
46
|
+
humanOnly: true,
|
|
47
|
+
});
|
|
48
|
+
// ── COMUNICAÇÃO EXTERNA ─────────────────────────────────────────────────
|
|
49
|
+
//
|
|
50
|
+
// Este gate mede o que a Fase 6 encontrou rodando em produção: a régua
|
|
51
|
+
// enviava e-mail para todo cliente com endereço e recebível vencido, sem que
|
|
52
|
+
// nada perguntasse se alguém conferiu aquele endereço.
|
|
53
|
+
const clr = await clearanceSummary(tx);
|
|
54
|
+
add({
|
|
55
|
+
key: 'EMAIL_RECIPIENT_CONFIRMED',
|
|
56
|
+
category: 'HUMAN',
|
|
57
|
+
ready: total > 0 && clr.pendingWithEmail === 0,
|
|
58
|
+
detail: total === 0
|
|
59
|
+
? 'Sem carteira para conferir.'
|
|
60
|
+
: clr.pendingWithEmail === 0
|
|
61
|
+
? `${clr.cleared} cliente(s) liberados para comunicação externa.`
|
|
62
|
+
: `${clr.pendingWithEmail} cliente(s) com e-mail e SEM liberação — a régua não os alcança até alguém conferir.`,
|
|
63
|
+
humanOnly: true,
|
|
64
|
+
});
|
|
65
|
+
// ── FRONTEIRA ENSAIO × OPERAÇÃO ─────────────────────────────────────────
|
|
66
|
+
const marco = await getRealPilotStart(tx);
|
|
67
|
+
add({
|
|
68
|
+
key: 'REAL_PILOT_START_DECLARED',
|
|
69
|
+
category: 'BUSINESS',
|
|
70
|
+
ready: marco !== null,
|
|
71
|
+
detail: marco
|
|
72
|
+
? `Piloto real declarado em ${marco.occurredAt}. Dados anteriores são pré-produtivos por definição.`
|
|
73
|
+
: 'Marco não declarado: todo dado atual conta como pré-produtivo (QA, demo, App Review da Meta).',
|
|
74
|
+
humanOnly: true,
|
|
75
|
+
});
|
|
76
|
+
// ── IMPORTAÇÃO ──────────────────────────────────────────────────────────
|
|
77
|
+
const [lotes] = await tx `SELECT count(*)::int AS n FROM client_import_batch`;
|
|
78
|
+
add({
|
|
79
|
+
key: 'IMPORT_READY',
|
|
80
|
+
category: 'TECHNICAL',
|
|
81
|
+
ready: true,
|
|
82
|
+
detail: `Plano, digest, avisos, lote e desfazer disponíveis. ${lotes?.n ?? 0} importação(ões) registrada(s).`,
|
|
83
|
+
humanOnly: false,
|
|
84
|
+
});
|
|
85
|
+
add({
|
|
86
|
+
key: 'ROLLBACK_READY',
|
|
87
|
+
category: 'TECHNICAL',
|
|
88
|
+
ready: true,
|
|
89
|
+
detail: 'Desfazer é lógico e seletivo: cliente com honorário, obrigação, documento ou cobrança é preservado.',
|
|
90
|
+
humanOnly: false,
|
|
91
|
+
});
|
|
92
|
+
// ── CATÁLOGO ────────────────────────────────────────────────────────────
|
|
93
|
+
const cat = await catalogValidationSummary(tx);
|
|
94
|
+
add({
|
|
95
|
+
key: 'CATALOG_READY',
|
|
96
|
+
category: 'BUSINESS',
|
|
97
|
+
ready: cat.humanValidationComplete,
|
|
98
|
+
detail: cat.humanValidationComplete
|
|
99
|
+
? `${cat.validated} obrigação(ões) conferidas.`
|
|
100
|
+
: cat.total === 0
|
|
101
|
+
? 'Lista de conferência ainda não preparada.'
|
|
102
|
+
: `${cat.pending} item(ns) por conferir — a prévia não os propõe enquanto isso.`,
|
|
103
|
+
humanOnly: true,
|
|
104
|
+
});
|
|
105
|
+
// ── FINANCEIRO ──────────────────────────────────────────────────────────
|
|
106
|
+
// `payment_provider_account` não tem soft-delete: a conta ou está cadastrada
|
|
107
|
+
// ou não está. Filtrar por `deleted_at` aqui quebraria a consulta inteira.
|
|
108
|
+
const [contas] = await tx `
|
|
109
|
+
SELECT count(*) FILTER (WHERE environment = 'live')::int AS live
|
|
110
|
+
FROM payment_provider_account
|
|
111
|
+
`;
|
|
112
|
+
add({
|
|
113
|
+
key: 'FINANCE_READY',
|
|
114
|
+
category: 'FINANCIAL',
|
|
115
|
+
ready: true,
|
|
116
|
+
detail: 'Honorário → recebível → aging → régua operam sem provedor configurado (ASAAS_NOT_READY tolerado).',
|
|
117
|
+
humanOnly: false,
|
|
118
|
+
});
|
|
119
|
+
// **Este gate nunca fica verde sozinho, e é de propósito.**
|
|
120
|
+
//
|
|
121
|
+
// A primeira versão respondia `ready: (contas.live > 0)` — existe linha de
|
|
122
|
+
// conta em produção? Rodando contra o banco real, ela deu VERDE enquanto o
|
|
123
|
+
// KYC do Asaas estava REJEITADO. A linha existir não prova que a conta emite
|
|
124
|
+
// cobrança; prova só que alguém a cadastrou.
|
|
125
|
+
//
|
|
126
|
+
// A aprovação do KYC não é derivável do banco: ela vive no provedor. Um gate
|
|
127
|
+
// que afirma prontidão a partir de um substituto local é pior que gate
|
|
128
|
+
// nenhum, porque dá autorização com a aparência de verificação. Então ele
|
|
129
|
+
// declara o que sabe, diz o que não pode saber, e deixa a confirmação com
|
|
130
|
+
// quem consegue fazê-la.
|
|
131
|
+
const temContaLive = (contas?.live ?? 0) > 0;
|
|
132
|
+
add({
|
|
133
|
+
key: 'ASAAS_LIVE_ACTIVATION_AUTHORIZED_BY_HUMAN',
|
|
134
|
+
category: 'FINANCIAL',
|
|
135
|
+
ready: false,
|
|
136
|
+
detail: 'Segundo portão, independente do KYC: mesmo com o KYC aprovado, ligar a emissão em produção é uma autorização humana explícita e separada. Aprovação do provedor não é autorização do escritório.',
|
|
137
|
+
humanOnly: true,
|
|
138
|
+
});
|
|
139
|
+
add({
|
|
140
|
+
key: 'ASAAS_READY',
|
|
141
|
+
category: 'FINANCIAL',
|
|
142
|
+
ready: false,
|
|
143
|
+
detail: temContaLive
|
|
144
|
+
? 'Conta de produção cadastrada — mas isto NÃO prova que ela emite cobrança. A aprovação do KYC vive no provedor e não é verificável a partir do banco: confirme no painel do Asaas antes de ligar a emissão.'
|
|
145
|
+
: 'Sem conta de produção cadastrada, e o KYC do Asaas é dependência externa não contornável pelo produto.',
|
|
146
|
+
humanOnly: true,
|
|
147
|
+
});
|
|
148
|
+
const live = readLiveRuntime(env);
|
|
149
|
+
add({
|
|
150
|
+
key: 'LIVE_CHARGES_GATE',
|
|
151
|
+
category: 'SECURITY',
|
|
152
|
+
ready: true,
|
|
153
|
+
detail: live.liveChargesDisabled
|
|
154
|
+
? 'Emissão em produção PAUSADA — estado desejado até o KYC sair.'
|
|
155
|
+
: 'Emissão em produção liberada.',
|
|
156
|
+
humanOnly: false,
|
|
157
|
+
});
|
|
158
|
+
// ── SEGURANÇA ───────────────────────────────────────────────────────────
|
|
159
|
+
//
|
|
160
|
+
// Mede o ATRIBUTO no catálogo do Postgres, e não o comportamento: uma sonda
|
|
161
|
+
// comportamental passa quando a conexão de teste tem privilégio de mais.
|
|
162
|
+
const [rls] = await tx `
|
|
163
|
+
SELECT count(*)::int AS sem_force
|
|
164
|
+
FROM pg_class c
|
|
165
|
+
JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
166
|
+
WHERE n.nspname = 'public'
|
|
167
|
+
AND c.relname IN ('client','fee_agreement','receivable','recurring_instance',
|
|
168
|
+
'document_request','client_import_batch',
|
|
169
|
+
'recurring_item_type_validation','fee_agreement_obligation')
|
|
170
|
+
AND NOT (c.relrowsecurity AND c.relforcerowsecurity)
|
|
171
|
+
`;
|
|
172
|
+
add({
|
|
173
|
+
key: 'TENANT_SECURITY_READY',
|
|
174
|
+
category: 'SECURITY',
|
|
175
|
+
ready: (rls?.sem_force ?? 1) === 0,
|
|
176
|
+
detail: (rls?.sem_force ?? 1) === 0
|
|
177
|
+
? 'RLS FORCE ativo nas tabelas do ciclo, incluindo as criadas nesta fase.'
|
|
178
|
+
: `${rls?.sem_force} tabela(s) do ciclo sem RLS FORCE.`,
|
|
179
|
+
humanOnly: false,
|
|
180
|
+
});
|
|
181
|
+
add({
|
|
182
|
+
key: 'WHATSAPP_READY_OR_OPTIONAL',
|
|
183
|
+
category: 'TECHNICAL',
|
|
184
|
+
ready: true,
|
|
185
|
+
detail: 'Opcional para o piloto: o e-mail cobre cobrança, pedido de documento e portal. WhatsApp segue fora de escopo.',
|
|
186
|
+
humanOnly: false,
|
|
187
|
+
});
|
|
188
|
+
// ── MONITORAMENTO ───────────────────────────────────────────────────────
|
|
189
|
+
const [auditoria] = await tx `
|
|
190
|
+
SELECT count(*)::int AS n FROM audit_log WHERE occurred_at > now() - interval '30 days'
|
|
191
|
+
`;
|
|
192
|
+
add({
|
|
193
|
+
key: 'MONITORING_READY',
|
|
194
|
+
category: 'TECHNICAL',
|
|
195
|
+
ready: (auditoria?.n ?? 0) > 0,
|
|
196
|
+
detail: (auditoria?.n ?? 0) > 0
|
|
197
|
+
? `${auditoria?.n} evento(s) de auditoria nos últimos 30 dias.`
|
|
198
|
+
: 'Sem eventos de auditoria recentes — a trilha existe e não está sendo alimentada.',
|
|
199
|
+
humanOnly: false,
|
|
200
|
+
});
|
|
201
|
+
const technicalReady = gates.filter((g) => !g.humanOnly).every((g) => g.ready);
|
|
202
|
+
return {
|
|
203
|
+
gates,
|
|
204
|
+
technicalReady,
|
|
205
|
+
activationReady: gates.every((g) => g.ready),
|
|
206
|
+
humanBlockers: gates.filter((g) => g.humanOnly && !g.ready).map((g) => g.key),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=go-live-checklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-live-checklist.js","sourceRoot":"","sources":["../../src/pilot/go-live-checklist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
/**
|
|
3
|
+
* A fronteira entre o que era ensaio e o que é operação.
|
|
4
|
+
*
|
|
5
|
+
* ## Por que precisa ser um fato gravado
|
|
6
|
+
*
|
|
7
|
+
* O tenant da SC já tem registros: desenvolvimento, QA, homologação,
|
|
8
|
+
* demonstração e os artefatos do App Review da Meta. Nenhum é carteira real.
|
|
9
|
+
*
|
|
10
|
+
* Sem um marco explícito, daqui a três meses ninguém distingue "cliente de
|
|
11
|
+
* teste de agosto" de "cliente real de setembro" — e todo indicador do painel
|
|
12
|
+
* passa a somar os dois. Inadimplência, faturamento, produtividade: todos
|
|
13
|
+
* ficam sem significado, e o erro é irreversível porque a informação que os
|
|
14
|
+
* separava nunca existiu.
|
|
15
|
+
*
|
|
16
|
+
* O marco é uma linha no tempo com autor e data. Tudo antes dele é
|
|
17
|
+
* pré-produtivo por definição; tudo depois é operação.
|
|
18
|
+
*/
|
|
19
|
+
export interface PilotMilestone {
|
|
20
|
+
occurredAt: string;
|
|
21
|
+
declaredBy: string | null;
|
|
22
|
+
note: string | null;
|
|
23
|
+
}
|
|
24
|
+
export declare function getRealPilotStart(tx: Tx): Promise<PilotMilestone | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Declara o início do piloto real.
|
|
27
|
+
*
|
|
28
|
+
* **Idempotente e não sobrescreve.** Se o marco já existe, a chamada devolve o
|
|
29
|
+
* que está lá em vez de mover a linha: "quando começou de verdade" não admite
|
|
30
|
+
* duas respostas, e uma segunda declaração seria alguém reescrevendo a
|
|
31
|
+
* fronteira depois de os dados já terem cruzado.
|
|
32
|
+
*/
|
|
33
|
+
export declare function declareRealPilotStart(tx: Tx, input: {
|
|
34
|
+
actorId: string | null;
|
|
35
|
+
note?: string | null;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
milestone: PilotMilestone;
|
|
38
|
+
created: boolean;
|
|
39
|
+
}>;
|
|
40
|
+
export interface DataProvenance {
|
|
41
|
+
/** `null` enquanto o piloto real não foi declarado. */
|
|
42
|
+
realPilotStartedAt: string | null;
|
|
43
|
+
/** Clientes criados ANTES do marco — ou todos, se ele não existe. */
|
|
44
|
+
preProduction: number;
|
|
45
|
+
/** Clientes criados a partir do marco. */
|
|
46
|
+
realPilot: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Quantos clientes de cada lado da fronteira.
|
|
50
|
+
*
|
|
51
|
+
* Enquanto o marco não existe, **tudo** é pré-produtivo — e não "tudo é real",
|
|
52
|
+
* que seria o default otimista. Um sistema que assume produção antes de alguém
|
|
53
|
+
* declarar produção é o que produz o indicador sem significado.
|
|
54
|
+
*/
|
|
55
|
+
export declare function dataProvenance(tx: Tx): Promise<DataProvenance>;
|
|
56
|
+
//# sourceMappingURL=milestone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestone.d.ts","sourceRoot":"","sources":["../../src/pilot/milestone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAG1C;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAU9E;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACtD,OAAO,CAAC;IAAE,SAAS,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA0B1D;AAED,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAkBpE"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { uuidv7 } from '@baruk/shared';
|
|
2
|
+
export async function getRealPilotStart(tx) {
|
|
3
|
+
const rows = await tx `
|
|
4
|
+
SELECT occurred_at, declared_by, note
|
|
5
|
+
FROM tenant_pilot_milestone
|
|
6
|
+
WHERE milestone = 'real_pilot_start'
|
|
7
|
+
`;
|
|
8
|
+
const r = rows[0];
|
|
9
|
+
return r
|
|
10
|
+
? { occurredAt: r.occurred_at.toISOString(), declaredBy: r.declared_by, note: r.note }
|
|
11
|
+
: null;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Declara o início do piloto real.
|
|
15
|
+
*
|
|
16
|
+
* **Idempotente e não sobrescreve.** Se o marco já existe, a chamada devolve o
|
|
17
|
+
* que está lá em vez de mover a linha: "quando começou de verdade" não admite
|
|
18
|
+
* duas respostas, e uma segunda declaração seria alguém reescrevendo a
|
|
19
|
+
* fronteira depois de os dados já terem cruzado.
|
|
20
|
+
*/
|
|
21
|
+
export async function declareRealPilotStart(tx, input) {
|
|
22
|
+
const existente = await getRealPilotStart(tx);
|
|
23
|
+
if (existente)
|
|
24
|
+
return { milestone: existente, created: false };
|
|
25
|
+
const rows = await tx `
|
|
26
|
+
INSERT INTO tenant_pilot_milestone (id, tenant_id, milestone, declared_by, note)
|
|
27
|
+
VALUES (${uuidv7()}, current_setting('app.current_tenant')::uuid, 'real_pilot_start',
|
|
28
|
+
${input.actorId}, ${input.note ?? null})
|
|
29
|
+
ON CONFLICT DO NOTHING
|
|
30
|
+
RETURNING occurred_at, declared_by, note
|
|
31
|
+
`;
|
|
32
|
+
const r = rows[0];
|
|
33
|
+
if (!r) {
|
|
34
|
+
// Corrida: outra sessão declarou entre a consulta e o INSERT. A resposta
|
|
35
|
+
// certa é a linha que ficou, não um erro.
|
|
36
|
+
const agora = await getRealPilotStart(tx);
|
|
37
|
+
return { milestone: agora, created: false };
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
milestone: {
|
|
41
|
+
occurredAt: r.occurred_at.toISOString(),
|
|
42
|
+
declaredBy: r.declared_by,
|
|
43
|
+
note: r.note,
|
|
44
|
+
},
|
|
45
|
+
created: true,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Quantos clientes de cada lado da fronteira.
|
|
50
|
+
*
|
|
51
|
+
* Enquanto o marco não existe, **tudo** é pré-produtivo — e não "tudo é real",
|
|
52
|
+
* que seria o default otimista. Um sistema que assume produção antes de alguém
|
|
53
|
+
* declarar produção é o que produz o indicador sem significado.
|
|
54
|
+
*/
|
|
55
|
+
export async function dataProvenance(tx) {
|
|
56
|
+
const marco = await getRealPilotStart(tx);
|
|
57
|
+
if (!marco) {
|
|
58
|
+
const [r] = await tx `
|
|
59
|
+
SELECT count(*)::int AS n FROM client WHERE deleted_at IS NULL
|
|
60
|
+
`;
|
|
61
|
+
return { realPilotStartedAt: null, preProduction: r?.n ?? 0, realPilot: 0 };
|
|
62
|
+
}
|
|
63
|
+
const [r] = await tx `
|
|
64
|
+
SELECT count(*) FILTER (WHERE created_at < ${marco.occurredAt}::timestamptz)::int AS antes,
|
|
65
|
+
count(*) FILTER (WHERE created_at >= ${marco.occurredAt}::timestamptz)::int AS depois
|
|
66
|
+
FROM client WHERE deleted_at IS NULL
|
|
67
|
+
`;
|
|
68
|
+
return {
|
|
69
|
+
realPilotStartedAt: marco.occurredAt,
|
|
70
|
+
preProduction: r?.antes ?? 0,
|
|
71
|
+
realPilot: r?.depois ?? 0,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=milestone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestone.js","sourceRoot":"","sources":["../../src/pilot/milestone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AA0BvC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAM;IAC5C,MAAM,IAAI,GAAG,MAAM,EAAE,CAA0E;;;;GAI9F,CAAC;IACF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,CAAC;QACN,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACtF,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAM,EACN,KAAuD;IAEvD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC9C,IAAI,SAAS;QAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE/D,MAAM,IAAI,GAAG,MAAM,EAAE,CAA0E;;cAEnF,MAAM,EAAE;cACR,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI;;;GAG/C,CAAC;IACF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,yEAAyE;QACzE,0CAA0C;QAC1C,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,EAAE,SAAS,EAAE,KAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO;QACL,SAAS,EAAE;YACT,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE;YACvC,UAAU,EAAE,CAAC,CAAC,WAAW;YACzB,IAAI,EAAE,CAAC,CAAC,IAAI;SACb;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAM;IACzC,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAiB;;KAEpC,CAAC;QACF,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC;IACD,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAqC;kDACT,KAAK,CAAC,UAAU;kDAChB,KAAK,CAAC,UAAU;;GAE/D,CAAC;IACF,OAAO;QACL,kBAAkB,EAAE,KAAK,CAAC,UAAU;QACpC,aAAa,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;QAC5B,SAAS,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O contrato de CAPACIDADE entre a API e as telas que a consomem.
|
|
3
|
+
*
|
|
4
|
+
* ## O defeito que isto existe para fechar
|
|
5
|
+
*
|
|
6
|
+
* O console publica na Vercel no instante do merge. A API publica na Render
|
|
7
|
+
* depois — build da imagem, `db:predeploy`, health check. Entre um e outro
|
|
8
|
+
* existe uma janela de minutos em que o navegador carrega a tela NOVA e fala
|
|
9
|
+
* com a API VELHA. Na Onda A isso não foi hipótese: nove rotas
|
|
10
|
+
* (`/v1/tenant/profile`, `/v1/tenant/features`, `/v1/tenant/setup`,
|
|
11
|
+
* `/v1/fiscal/governance` e as irmãs) existiram na tela antes de existirem no
|
|
12
|
+
* servidor.
|
|
13
|
+
*
|
|
14
|
+
* O que a pessoa via nessa janela era a pior variante possível: um 404 da API
|
|
15
|
+
* que o Next transforma em tela genérica de erro, com `digest` e pedido de
|
|
16
|
+
* abrir chamado — o mesmo modo de falha que o `SemAcesso` corrigiu para RBAC.
|
|
17
|
+
* Não é erro do sistema: é uma versão que ainda não subiu.
|
|
18
|
+
*
|
|
19
|
+
* ## Por que capacidade, e não SHA
|
|
20
|
+
*
|
|
21
|
+
* Comparar o commit servido com o commit esperado acopla a tela ao processo de
|
|
22
|
+
* release: qualquer publicação — inclusive uma que não muda nada relevante —
|
|
23
|
+
* passa a poder derrubar a tela, e um hotfix na API com outro SHA reprovaria
|
|
24
|
+
* um frontend perfeitamente compatível. O que a tela precisa saber não é QUAL
|
|
25
|
+
* build está no ar, e sim se aquele build SABE responder o que ela vai pedir.
|
|
26
|
+
*
|
|
27
|
+
* Por isso o contrato é uma lista de nomes. A API declara o que serve; a tela
|
|
28
|
+
* declara o que exige. Compatibilidade é continência de conjunto, não
|
|
29
|
+
* igualdade de versão — e é isso que torna o backend-first possível: a API
|
|
30
|
+
* publica a capacidade ANTES da tela existir, e nada quebra porque ninguém
|
|
31
|
+
* ainda a exige.
|
|
32
|
+
*
|
|
33
|
+
* ## Regras de evolução
|
|
34
|
+
*
|
|
35
|
+
* - Uma chave é imutável. Mudança incompatível ganha `.v2`; a `.v1` só sai
|
|
36
|
+
* quando nenhum frontend em produção ainda a exigir.
|
|
37
|
+
* - A API nunca declara capacidade que não implementa — o guarda
|
|
38
|
+
* `capabilities.test.ts` confere cada rota declarada contra as rotas
|
|
39
|
+
* efetivamente montadas no Fastify. Declarar sem implementar seria o mesmo
|
|
40
|
+
* defeito de novo, com um passo a mais de indireção.
|
|
41
|
+
* - Ausência é resposta legítima. A tela degrada para "aguardando a API", não
|
|
42
|
+
* para erro.
|
|
43
|
+
*/
|
|
44
|
+
/**
|
|
45
|
+
* Versão do FORMATO da resposta de `/v1/capabilities` — não das capacidades.
|
|
46
|
+
*
|
|
47
|
+
* Muda apenas se a forma do documento mudar. Um cliente que não reconhece a
|
|
48
|
+
* versão trata tudo como indisponível: fail-closed é a única leitura segura de
|
|
49
|
+
* um contrato que não se sabe ler.
|
|
50
|
+
*/
|
|
51
|
+
export declare const CAPABILITY_CONTRACT_VERSION = 1;
|
|
52
|
+
export interface ApiCapabilityDef {
|
|
53
|
+
/** `<produto>.<recurso>.v<N>`. Imutável depois de publicada. */
|
|
54
|
+
key: string;
|
|
55
|
+
label: string;
|
|
56
|
+
/**
|
|
57
|
+
* Rotas que compõem a capacidade, no formato do Fastify (`/v1/x/:id`).
|
|
58
|
+
*
|
|
59
|
+
* Não é documentação: é o que o guarda executa. Uma capacidade cujas rotas
|
|
60
|
+
* não existem no app montado reprova o build.
|
|
61
|
+
*/
|
|
62
|
+
routes: readonly string[];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* O que ESTE build da API serve.
|
|
66
|
+
*
|
|
67
|
+
* A Onda A entra inteira porque foi ela quem sofreu o skew. Capacidades
|
|
68
|
+
* anteriores não estão aqui de propósito: uma tela que nunca conheceu janela
|
|
69
|
+
* de incompatibilidade não ganha um portão novo para atravessar.
|
|
70
|
+
*/
|
|
71
|
+
export declare const API_CAPABILITIES: readonly ApiCapabilityDef[];
|
|
72
|
+
export declare const API_CAPABILITY_KEYS: readonly string[];
|
|
73
|
+
/** Formato exigido de uma chave. O guarda usa isto; a revisão humana não basta. */
|
|
74
|
+
export declare const CAPABILITY_KEY_PATTERN: RegExp;
|
|
75
|
+
export interface CapabilityDocument {
|
|
76
|
+
contract: number;
|
|
77
|
+
capabilities: readonly string[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A API declarada satisfaz o que a tela exige?
|
|
81
|
+
*
|
|
82
|
+
* Fail-closed em três frentes, e todas já aconteceram em produção em algum
|
|
83
|
+
* produto: documento ausente (API velha, sem a rota), versão de contrato
|
|
84
|
+
* desconhecida (cliente novo demais ou velho demais) e capacidade faltando.
|
|
85
|
+
* Nenhuma delas devolve "sim por não saber".
|
|
86
|
+
*/
|
|
87
|
+
export declare function satisfiesCapability(doc: CapabilityDocument | null | undefined, required: string): boolean;
|
|
88
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/platform/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,gBAAgB,EAgEvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAuC,CAAC;AAEzF,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,QACgC,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,EAC1C,QAAQ,EAAE,MAAM,GACf,OAAO,CAIT"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O contrato de CAPACIDADE entre a API e as telas que a consomem.
|
|
3
|
+
*
|
|
4
|
+
* ## O defeito que isto existe para fechar
|
|
5
|
+
*
|
|
6
|
+
* O console publica na Vercel no instante do merge. A API publica na Render
|
|
7
|
+
* depois — build da imagem, `db:predeploy`, health check. Entre um e outro
|
|
8
|
+
* existe uma janela de minutos em que o navegador carrega a tela NOVA e fala
|
|
9
|
+
* com a API VELHA. Na Onda A isso não foi hipótese: nove rotas
|
|
10
|
+
* (`/v1/tenant/profile`, `/v1/tenant/features`, `/v1/tenant/setup`,
|
|
11
|
+
* `/v1/fiscal/governance` e as irmãs) existiram na tela antes de existirem no
|
|
12
|
+
* servidor.
|
|
13
|
+
*
|
|
14
|
+
* O que a pessoa via nessa janela era a pior variante possível: um 404 da API
|
|
15
|
+
* que o Next transforma em tela genérica de erro, com `digest` e pedido de
|
|
16
|
+
* abrir chamado — o mesmo modo de falha que o `SemAcesso` corrigiu para RBAC.
|
|
17
|
+
* Não é erro do sistema: é uma versão que ainda não subiu.
|
|
18
|
+
*
|
|
19
|
+
* ## Por que capacidade, e não SHA
|
|
20
|
+
*
|
|
21
|
+
* Comparar o commit servido com o commit esperado acopla a tela ao processo de
|
|
22
|
+
* release: qualquer publicação — inclusive uma que não muda nada relevante —
|
|
23
|
+
* passa a poder derrubar a tela, e um hotfix na API com outro SHA reprovaria
|
|
24
|
+
* um frontend perfeitamente compatível. O que a tela precisa saber não é QUAL
|
|
25
|
+
* build está no ar, e sim se aquele build SABE responder o que ela vai pedir.
|
|
26
|
+
*
|
|
27
|
+
* Por isso o contrato é uma lista de nomes. A API declara o que serve; a tela
|
|
28
|
+
* declara o que exige. Compatibilidade é continência de conjunto, não
|
|
29
|
+
* igualdade de versão — e é isso que torna o backend-first possível: a API
|
|
30
|
+
* publica a capacidade ANTES da tela existir, e nada quebra porque ninguém
|
|
31
|
+
* ainda a exige.
|
|
32
|
+
*
|
|
33
|
+
* ## Regras de evolução
|
|
34
|
+
*
|
|
35
|
+
* - Uma chave é imutável. Mudança incompatível ganha `.v2`; a `.v1` só sai
|
|
36
|
+
* quando nenhum frontend em produção ainda a exigir.
|
|
37
|
+
* - A API nunca declara capacidade que não implementa — o guarda
|
|
38
|
+
* `capabilities.test.ts` confere cada rota declarada contra as rotas
|
|
39
|
+
* efetivamente montadas no Fastify. Declarar sem implementar seria o mesmo
|
|
40
|
+
* defeito de novo, com um passo a mais de indireção.
|
|
41
|
+
* - Ausência é resposta legítima. A tela degrada para "aguardando a API", não
|
|
42
|
+
* para erro.
|
|
43
|
+
*/
|
|
44
|
+
/**
|
|
45
|
+
* Versão do FORMATO da resposta de `/v1/capabilities` — não das capacidades.
|
|
46
|
+
*
|
|
47
|
+
* Muda apenas se a forma do documento mudar. Um cliente que não reconhece a
|
|
48
|
+
* versão trata tudo como indisponível: fail-closed é a única leitura segura de
|
|
49
|
+
* um contrato que não se sabe ler.
|
|
50
|
+
*/
|
|
51
|
+
export const CAPABILITY_CONTRACT_VERSION = 1;
|
|
52
|
+
/**
|
|
53
|
+
* O que ESTE build da API serve.
|
|
54
|
+
*
|
|
55
|
+
* A Onda A entra inteira porque foi ela quem sofreu o skew. Capacidades
|
|
56
|
+
* anteriores não estão aqui de propósito: uma tela que nunca conheceu janela
|
|
57
|
+
* de incompatibilidade não ganha um portão novo para atravessar.
|
|
58
|
+
*/
|
|
59
|
+
export const API_CAPABILITIES = [
|
|
60
|
+
{
|
|
61
|
+
key: 'office.tenant-profile.v1',
|
|
62
|
+
label: 'Identificação do escritório (razão social, CNPJ, fuso)',
|
|
63
|
+
routes: ['GET /v1/tenant/profile', 'PUT /v1/tenant/profile'],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
key: 'office.tenant-branding.v1',
|
|
67
|
+
label: 'Marca do escritório',
|
|
68
|
+
routes: ['GET /v1/tenant/branding', 'PUT /v1/tenant/branding'],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
key: 'office.tenant-features.v1',
|
|
72
|
+
label: 'Módulos ligados e desligados pelo próprio escritório',
|
|
73
|
+
routes: ['GET /v1/tenant/features', 'PUT /v1/tenant/features'],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: 'office.tenant-setup.v1',
|
|
77
|
+
label: 'Progresso de configuração do escritório',
|
|
78
|
+
routes: ['GET /v1/tenant/setup'],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
key: 'office.fiscal-governance.v1',
|
|
82
|
+
label: 'Governança do catálogo fiscal (fonte oficial e conferência)',
|
|
83
|
+
routes: [
|
|
84
|
+
'GET /v1/fiscal/governance',
|
|
85
|
+
'PUT /v1/fiscal/rules/:id/source',
|
|
86
|
+
'POST /v1/fiscal/rules/:id/validate',
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
key: 'office.fiscal-documents.v1',
|
|
91
|
+
label: 'Documentos fiscais capturados e o estado da sincronização',
|
|
92
|
+
routes: [
|
|
93
|
+
'GET /v1/fiscal/documents',
|
|
94
|
+
'GET /v1/fiscal/documents/:id',
|
|
95
|
+
'GET /v1/fiscal/sync-state',
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
key: 'office.fiscal-operations.v1',
|
|
100
|
+
label: 'Motor operacional fiscal: estado por cliente, cobertura, fila humana e caixa de entrada',
|
|
101
|
+
routes: [
|
|
102
|
+
'GET /v1/fiscal/sync-clients',
|
|
103
|
+
'GET /v1/fiscal/coverage',
|
|
104
|
+
'GET /v1/fiscal/interventions',
|
|
105
|
+
'GET /v1/fiscal/metrics',
|
|
106
|
+
'GET /v1/fiscal/inbox',
|
|
107
|
+
'POST /v1/fiscal/inbox/:id/reprocess',
|
|
108
|
+
'GET /v1/fiscal/request-coverage',
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
// Separada de `fiscal-operations` de propósito: ela não descreve a carteira
|
|
113
|
+
// do escritório, e sim o CONTRATO com o provedor oficial. Um console que
|
|
114
|
+
// exiba "transporte real desativado" antes de a rota existir mostraria a
|
|
115
|
+
// tela genérica de erro em vez do estado — que é exatamente o modo de falha
|
|
116
|
+
// que o portão de capacidade existe para fechar.
|
|
117
|
+
key: 'office.fiscal-provider-contract.v1',
|
|
118
|
+
label: 'Contrato do provedor fiscal oficial: versão, fontes e por que o transporte real está fechado',
|
|
119
|
+
routes: ['GET /v1/fiscal/provider-contract'],
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
export const API_CAPABILITY_KEYS = API_CAPABILITIES.map((c) => c.key);
|
|
123
|
+
/** Formato exigido de uma chave. O guarda usa isto; a revisão humana não basta. */
|
|
124
|
+
export const CAPABILITY_KEY_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*(?:\.[a-z0-9]+(?:-[a-z0-9]+)*)+\.v\d+$/;
|
|
125
|
+
/**
|
|
126
|
+
* A API declarada satisfaz o que a tela exige?
|
|
127
|
+
*
|
|
128
|
+
* Fail-closed em três frentes, e todas já aconteceram em produção em algum
|
|
129
|
+
* produto: documento ausente (API velha, sem a rota), versão de contrato
|
|
130
|
+
* desconhecida (cliente novo demais ou velho demais) e capacidade faltando.
|
|
131
|
+
* Nenhuma delas devolve "sim por não saber".
|
|
132
|
+
*/
|
|
133
|
+
export function satisfiesCapability(doc, required) {
|
|
134
|
+
if (!doc)
|
|
135
|
+
return false;
|
|
136
|
+
if (doc.contract !== CAPABILITY_CONTRACT_VERSION)
|
|
137
|
+
return false;
|
|
138
|
+
return doc.capabilities.includes(required);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/platform/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAe7C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAgC;IAC3D;QACE,GAAG,EAAE,0BAA0B;QAC/B,KAAK,EAAE,wDAAwD;QAC/D,MAAM,EAAE,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;KAC7D;IACD;QACE,GAAG,EAAE,2BAA2B;QAChC,KAAK,EAAE,qBAAqB;QAC5B,MAAM,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;KAC/D;IACD;QACE,GAAG,EAAE,2BAA2B;QAChC,KAAK,EAAE,sDAAsD;QAC7D,MAAM,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;KAC/D;IACD;QACE,GAAG,EAAE,wBAAwB;QAC7B,KAAK,EAAE,yCAAyC;QAChD,MAAM,EAAE,CAAC,sBAAsB,CAAC;KACjC;IACD;QACE,GAAG,EAAE,6BAA6B;QAClC,KAAK,EAAE,6DAA6D;QACpE,MAAM,EAAE;YACN,2BAA2B;YAC3B,iCAAiC;YACjC,oCAAoC;SACrC;KACF;IACD;QACE,GAAG,EAAE,4BAA4B;QACjC,KAAK,EAAE,2DAA2D;QAClE,MAAM,EAAE;YACN,0BAA0B;YAC1B,8BAA8B;YAC9B,2BAA2B;SAC5B;KACF;IACD;QACE,GAAG,EAAE,6BAA6B;QAClC,KAAK,EACH,yFAAyF;QAC3F,MAAM,EAAE;YACN,6BAA6B;YAC7B,yBAAyB;YACzB,8BAA8B;YAC9B,wBAAwB;YACxB,sBAAsB;YACtB,qCAAqC;YACrC,iCAAiC;SAClC;KACF;IACD;QACE,4EAA4E;QAC5E,yEAAyE;QACzE,yEAAyE;QACzE,4EAA4E;QAC5E,iDAAiD;QACjD,GAAG,EAAE,oCAAoC;QACzC,KAAK,EACH,8FAA8F;QAChG,MAAM,EAAE,CAAC,kCAAkC,CAAC;KAC7C;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAsB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzF,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GACjC,iEAAiE,CAAC;AAOpE;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAA0C,EAC1C,QAAgB;IAEhB,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,GAAG,CAAC,QAAQ,KAAK,2BAA2B;QAAE,OAAO,KAAK,CAAC;IAC/D,OAAO,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC"}
|