@baruk/core 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.baruk-provenance.json +4 -4
- package/dist/cjs/clients/ibge.js +14 -0
- package/dist/cjs/clients/ibge.js.map +1 -1
- package/dist/cjs/clients/registry/http.js +157 -0
- package/dist/cjs/clients/registry/http.js.map +1 -0
- package/dist/cjs/clients/registry/ibge-municipios.js +28 -0
- package/dist/cjs/clients/registry/ibge-municipios.js.map +1 -0
- package/dist/cjs/clients/registry/ibge.js +63 -0
- package/dist/cjs/clients/registry/ibge.js.map +1 -0
- package/dist/cjs/clients/registry/lookup.js +191 -0
- package/dist/cjs/clients/registry/lookup.js.map +1 -0
- package/dist/cjs/clients/registry/provider.js +34 -0
- package/dist/cjs/clients/registry/provider.js.map +1 -0
- package/dist/cjs/clients/registry/resolve.js +47 -0
- package/dist/cjs/clients/registry/resolve.js.map +1 -0
- package/dist/cjs/clients/registry/serpro.js +149 -0
- package/dist/cjs/clients/registry/serpro.js.map +1 -0
- package/dist/cjs/clients/registry/service.js +230 -0
- package/dist/cjs/clients/registry/service.js.map +1 -0
- package/dist/cjs/clients/registry/synthetic.js +165 -0
- package/dist/cjs/clients/registry/synthetic.js.map +1 -0
- package/dist/cjs/clients/repository.js +6 -2
- package/dist/cjs/clients/repository.js.map +1 -1
- package/dist/cjs/db/provision-e2e-identity.js +8 -3
- package/dist/cjs/db/provision-e2e-identity.js.map +1 -1
- package/dist/cjs/fiscal/collection/authorization.js +186 -0
- package/dist/cjs/fiscal/collection/authorization.js.map +1 -0
- package/dist/cjs/fiscal/collection/competence.js +97 -0
- package/dist/cjs/fiscal/collection/competence.js.map +1 -0
- package/dist/cjs/fiscal/collection/first-contact.js +204 -0
- package/dist/cjs/fiscal/collection/first-contact.js.map +1 -0
- package/dist/cjs/fiscal/collection/plan.js +122 -0
- package/dist/cjs/fiscal/collection/plan.js.map +1 -0
- package/dist/cjs/fiscal/coverage/model.js +11 -1
- package/dist/cjs/fiscal/coverage/model.js.map +1 -1
- package/dist/cjs/fiscal/credentials/inspect.js +182 -0
- package/dist/cjs/fiscal/credentials/inspect.js.map +1 -0
- package/dist/cjs/fiscal/credentials/material.js +1 -1
- package/dist/cjs/fiscal/credentials/material.js.map +1 -1
- package/dist/cjs/fiscal/credentials/onboarding.js +266 -0
- package/dist/cjs/fiscal/credentials/onboarding.js.map +1 -0
- package/dist/cjs/fiscal/credentials/readiness.js +29 -2
- package/dist/cjs/fiscal/credentials/readiness.js.map +1 -1
- package/dist/cjs/fiscal/enrollment.js +134 -0
- package/dist/cjs/fiscal/enrollment.js.map +1 -0
- package/dist/cjs/fiscal/transport/synthetic-tls.js +52 -0
- package/dist/cjs/fiscal/transport/synthetic-tls.js.map +1 -1
- package/dist/cjs/index.js +196 -113
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/documents.js +64 -4
- package/dist/cjs/legal/documents.js.map +1 -1
- package/dist/cjs/legal/types.js.map +1 -1
- package/dist/cjs/platform/capabilities.js +29 -0
- package/dist/cjs/platform/capabilities.js.map +1 -1
- package/dist/cjs/rbac/catalog.js +78 -2
- package/dist/cjs/rbac/catalog.js.map +1 -1
- package/dist/cjs/subscription-billing/index.js +8 -1
- package/dist/cjs/subscription-billing/index.js.map +1 -1
- package/dist/cjs/subscription-billing/platform-exemption.js +121 -0
- package/dist/cjs/subscription-billing/platform-exemption.js.map +1 -0
- package/dist/cjs/subscription-billing/service.js +93 -1
- package/dist/cjs/subscription-billing/service.js.map +1 -1
- package/dist/cjs/vault/repository.js +92 -5
- package/dist/cjs/vault/repository.js.map +1 -1
- package/dist/clients/ibge.d.ts.map +1 -1
- package/dist/clients/ibge.js +14 -0
- package/dist/clients/ibge.js.map +1 -1
- package/dist/clients/registry/http.d.ts +61 -0
- package/dist/clients/registry/http.d.ts.map +1 -0
- package/dist/clients/registry/http.js +151 -0
- package/dist/clients/registry/http.js.map +1 -0
- package/dist/clients/registry/ibge-municipios.d.ts +25 -0
- package/dist/clients/registry/ibge-municipios.d.ts.map +1 -0
- package/dist/clients/registry/ibge-municipios.js +25 -0
- package/dist/clients/registry/ibge-municipios.js.map +1 -0
- package/dist/clients/registry/ibge.d.ts +62 -0
- package/dist/clients/registry/ibge.d.ts.map +1 -0
- package/dist/clients/registry/ibge.js +57 -0
- package/dist/clients/registry/ibge.js.map +1 -0
- package/dist/clients/registry/lookup.d.ts +94 -0
- package/dist/clients/registry/lookup.d.ts.map +1 -0
- package/dist/clients/registry/lookup.js +184 -0
- package/dist/clients/registry/lookup.js.map +1 -0
- package/dist/clients/registry/provider.d.ts +124 -0
- package/dist/clients/registry/provider.d.ts.map +1 -0
- package/dist/clients/registry/provider.js +39 -0
- package/dist/clients/registry/provider.js.map +1 -0
- package/dist/clients/registry/resolve.d.ts +36 -0
- package/dist/clients/registry/resolve.d.ts.map +1 -0
- package/dist/clients/registry/resolve.js +44 -0
- package/dist/clients/registry/resolve.js.map +1 -0
- package/dist/clients/registry/serpro.d.ts +57 -0
- package/dist/clients/registry/serpro.d.ts.map +1 -0
- package/dist/clients/registry/serpro.js +143 -0
- package/dist/clients/registry/serpro.js.map +1 -0
- package/dist/clients/registry/service.d.ts +59 -0
- package/dist/clients/registry/service.d.ts.map +1 -0
- package/dist/clients/registry/service.js +225 -0
- package/dist/clients/registry/service.js.map +1 -0
- package/dist/clients/registry/synthetic.d.ts +30 -0
- package/dist/clients/registry/synthetic.d.ts.map +1 -0
- package/dist/clients/registry/synthetic.js +161 -0
- package/dist/clients/registry/synthetic.js.map +1 -0
- package/dist/clients/repository.d.ts +4 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +6 -2
- package/dist/clients/repository.js.map +1 -1
- package/dist/db/provision-e2e-identity.js +8 -3
- package/dist/db/provision-e2e-identity.js.map +1 -1
- package/dist/fiscal/collection/authorization.d.ts +152 -0
- package/dist/fiscal/collection/authorization.d.ts.map +1 -0
- package/dist/fiscal/collection/authorization.js +178 -0
- package/dist/fiscal/collection/authorization.js.map +1 -0
- package/dist/fiscal/collection/competence.d.ts +66 -0
- package/dist/fiscal/collection/competence.d.ts.map +1 -0
- package/dist/fiscal/collection/competence.js +90 -0
- package/dist/fiscal/collection/competence.js.map +1 -0
- package/dist/fiscal/collection/first-contact.d.ts +103 -0
- package/dist/fiscal/collection/first-contact.d.ts.map +1 -0
- package/dist/fiscal/collection/first-contact.js +201 -0
- package/dist/fiscal/collection/first-contact.js.map +1 -0
- package/dist/fiscal/collection/plan.d.ts +74 -0
- package/dist/fiscal/collection/plan.d.ts.map +1 -0
- package/dist/fiscal/collection/plan.js +119 -0
- package/dist/fiscal/collection/plan.js.map +1 -0
- package/dist/fiscal/coverage/model.d.ts +28 -0
- package/dist/fiscal/coverage/model.d.ts.map +1 -1
- package/dist/fiscal/coverage/model.js +11 -1
- package/dist/fiscal/coverage/model.js.map +1 -1
- package/dist/fiscal/credentials/inspect.d.ts +114 -0
- package/dist/fiscal/credentials/inspect.d.ts.map +1 -0
- package/dist/fiscal/credentials/inspect.js +178 -0
- package/dist/fiscal/credentials/inspect.js.map +1 -0
- package/dist/fiscal/credentials/material.js +2 -2
- package/dist/fiscal/credentials/material.js.map +1 -1
- package/dist/fiscal/credentials/onboarding.d.ts +119 -0
- package/dist/fiscal/credentials/onboarding.d.ts.map +1 -0
- package/dist/fiscal/credentials/onboarding.js +259 -0
- package/dist/fiscal/credentials/onboarding.js.map +1 -0
- package/dist/fiscal/credentials/readiness.d.ts +30 -3
- package/dist/fiscal/credentials/readiness.d.ts.map +1 -1
- package/dist/fiscal/credentials/readiness.js +29 -2
- package/dist/fiscal/credentials/readiness.js.map +1 -1
- package/dist/fiscal/enrollment.d.ts +91 -0
- package/dist/fiscal/enrollment.d.ts.map +1 -0
- package/dist/fiscal/enrollment.js +126 -0
- package/dist/fiscal/enrollment.js.map +1 -0
- package/dist/fiscal/transport/synthetic-tls.d.ts +19 -0
- package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -1
- package/dist/fiscal/transport/synthetic-tls.js +51 -0
- package/dist/fiscal/transport/synthetic-tls.js.map +1 -1
- package/dist/index.d.ts +32 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -2
- package/dist/index.js.map +1 -1
- package/dist/legal/documents.d.ts.map +1 -1
- package/dist/legal/documents.js +64 -4
- 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 +77 -0
- package/dist/legal/types.d.ts.map +1 -1
- package/dist/legal/types.js.map +1 -1
- package/dist/platform/capabilities.d.ts.map +1 -1
- package/dist/platform/capabilities.js +29 -0
- package/dist/platform/capabilities.js.map +1 -1
- package/dist/rbac/catalog.d.ts.map +1 -1
- package/dist/rbac/catalog.js +78 -2
- package/dist/rbac/catalog.js.map +1 -1
- package/dist/subscription-billing/index.d.ts +3 -1
- package/dist/subscription-billing/index.d.ts.map +1 -1
- package/dist/subscription-billing/index.js +2 -1
- package/dist/subscription-billing/index.js.map +1 -1
- package/dist/subscription-billing/platform-exemption.d.ts +89 -0
- package/dist/subscription-billing/platform-exemption.d.ts.map +1 -0
- package/dist/subscription-billing/platform-exemption.js +113 -0
- package/dist/subscription-billing/platform-exemption.js.map +1 -0
- package/dist/subscription-billing/service.d.ts +53 -0
- package/dist/subscription-billing/service.d.ts.map +1 -1
- package/dist/subscription-billing/service.js +92 -1
- package/dist/subscription-billing/service.js.map +1 -1
- package/dist/vault/repository.d.ts +69 -1
- package/dist/vault/repository.d.ts.map +1 -1
- package/dist/vault/repository.js +88 -5
- package/dist/vault/repository.js.map +1 -1
- package/package.json +3 -2
- package/src/db/migrations/0060_fiscal_credential_vault_and_run_authorization.sql +321 -0
- package/src/db/migrations/0061_client_official_registry_provenance.sql +193 -0
- package/src/db/migrations/0062_first_contact_and_capability_truth.sql +119 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serpro.js","sourceRoot":"","sources":["../../../src/clients/registry/serpro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Tx } from '../../db/client.js';
|
|
2
|
+
import { type OfficialField, type RegistryLookupOutcome } from './lookup.js';
|
|
3
|
+
import { type CompanyLookupFailure, type CompanyRegistryProvider } from './provider.js';
|
|
4
|
+
/**
|
|
5
|
+
* A consulta com as três defesas que o provedor não dá.
|
|
6
|
+
*
|
|
7
|
+
* Nenhuma delas é sobre a rede estar lenta. As três são sobre o que uma
|
|
8
|
+
* consulta barata e repetível permite fazer:
|
|
9
|
+
*
|
|
10
|
+
* **Cota** — um CNPJ tem 14 dígitos e o dígito verificador reduz o espaço a
|
|
11
|
+
* ~10^12, mas uma varredura por faixa é perfeitamente viável. Sem teto, a
|
|
12
|
+
* primeira conta comprometida vira um raspador do cadastro nacional financiado
|
|
13
|
+
* pelo contrato do escritório. O teto é por TENANT, não por usuário: quem varre
|
|
14
|
+
* cria usuários.
|
|
15
|
+
*
|
|
16
|
+
* **Cache** — a mesma tela consultada duas vezes em cinco minutos não pode
|
|
17
|
+
* gastar duas requisições de um contrato pago. E o cache é só de SUCESSO:
|
|
18
|
+
* cachear uma indisponibilidade de um minuto a deixaria colada no CNPJ pelo
|
|
19
|
+
* resto do TTL, e o operador veria "provedor fora do ar" com o provedor no ar.
|
|
20
|
+
*
|
|
21
|
+
* **Disjuntor** — mesma política do motor fiscal (três falhas seguidas, espera
|
|
22
|
+
* que dobra), mas em memória de processo, e é uma escolha, não um esquecimento:
|
|
23
|
+
* a consulta de CNPJ é interativa. Alguém está olhando a tela. Persistir o
|
|
24
|
+
* estado faria uma queda de dez minutos do provedor manter a tela recusando
|
|
25
|
+
* depois que ele voltou, e o operador não tem como saber que a recusa é nossa.
|
|
26
|
+
*/
|
|
27
|
+
/** Teto de consultas por tenant na janela. */
|
|
28
|
+
export declare const LOOKUP_QUOTA_LIMIT = 120;
|
|
29
|
+
export declare const LOOKUP_QUOTA_WINDOW_MS: number;
|
|
30
|
+
/** Quanto tempo um retrato bem-sucedido responde sem tocar a rede. */
|
|
31
|
+
export declare const LOOKUP_CACHE_TTL_MS: number;
|
|
32
|
+
/** Falhas seguidas que abrem o disjuntor — mesma régua do motor fiscal. */
|
|
33
|
+
export declare const LOOKUP_CIRCUIT_THRESHOLD = 3;
|
|
34
|
+
export declare const LOOKUP_CIRCUIT_OPEN_MS: number;
|
|
35
|
+
export type LookupRefusal = CompanyLookupFailure | 'quota_exceeded' | 'circuit_open' | 'not_permitted';
|
|
36
|
+
export interface RegistryLookupResponse extends RegistryLookupOutcome {
|
|
37
|
+
/** De onde veio a resposta: `network` tocou o provedor, `cache` não tocou. */
|
|
38
|
+
served: 'network' | 'cache';
|
|
39
|
+
reason?: LookupRefusal;
|
|
40
|
+
}
|
|
41
|
+
/** Só para os testes: um disjuntor herdado entre casos esconderia o defeito. */
|
|
42
|
+
export declare function resetLookupCircuits(): void;
|
|
43
|
+
export interface LookupRequest {
|
|
44
|
+
tenantId: string;
|
|
45
|
+
actorId: string | null;
|
|
46
|
+
cnpj: string;
|
|
47
|
+
/** O cadastro atual, quando a consulta é de atualização de um cliente. */
|
|
48
|
+
current?: Partial<Record<OfficialField, string | null>>;
|
|
49
|
+
now?: Date;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Consulta o CNPJ com cota, cache, disjuntor e trilha — e NÃO grava cadastro.
|
|
53
|
+
*
|
|
54
|
+
* O que ela devolve são propostas. Aplicá-las é outro ato, com outra assinatura
|
|
55
|
+
* e outra permissão: quem pode consultar não necessariamente pode alterar o
|
|
56
|
+
* cadastro de um cliente.
|
|
57
|
+
*/
|
|
58
|
+
export declare function lookupCompanyRegistry(tx: Tx, provider: CompanyRegistryProvider, req: LookupRequest): Promise<RegistryLookupResponse>;
|
|
59
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/clients/registry/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC7F,OAAO,EAGL,KAAK,oBAAoB,EAEzB,KAAK,uBAAuB,EAE7B,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,sBAAsB,QAAc,CAAC;AAElD,sEAAsE;AACtE,eAAO,MAAM,mBAAmB,QAAc,CAAC;AAE/C,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,sBAAsB,QAAa,CAAC;AAEjD,MAAM,MAAM,aAAa,GACvB,oBAAoB,GAAG,gBAAgB,GAAG,cAAc,GAAG,eAAe,CAAC;AAE7E,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,8EAA8E;IAC9E,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAcD,gFAAgF;AAChF,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAkCD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACxD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAmED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,uBAAuB,EACjC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,sBAAsB,CAAC,CA6GjC"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { uuidv7 } from '@baruk/shared';
|
|
2
|
+
import { appendAudit } from '../../audit/audit.js';
|
|
3
|
+
import { resolveMunicipality } from './ibge.js';
|
|
4
|
+
import { buildProposals } from './lookup.js';
|
|
5
|
+
import { cnpjDigits, isValidCnpj, } from './provider.js';
|
|
6
|
+
/**
|
|
7
|
+
* A consulta com as três defesas que o provedor não dá.
|
|
8
|
+
*
|
|
9
|
+
* Nenhuma delas é sobre a rede estar lenta. As três são sobre o que uma
|
|
10
|
+
* consulta barata e repetível permite fazer:
|
|
11
|
+
*
|
|
12
|
+
* **Cota** — um CNPJ tem 14 dígitos e o dígito verificador reduz o espaço a
|
|
13
|
+
* ~10^12, mas uma varredura por faixa é perfeitamente viável. Sem teto, a
|
|
14
|
+
* primeira conta comprometida vira um raspador do cadastro nacional financiado
|
|
15
|
+
* pelo contrato do escritório. O teto é por TENANT, não por usuário: quem varre
|
|
16
|
+
* cria usuários.
|
|
17
|
+
*
|
|
18
|
+
* **Cache** — a mesma tela consultada duas vezes em cinco minutos não pode
|
|
19
|
+
* gastar duas requisições de um contrato pago. E o cache é só de SUCESSO:
|
|
20
|
+
* cachear uma indisponibilidade de um minuto a deixaria colada no CNPJ pelo
|
|
21
|
+
* resto do TTL, e o operador veria "provedor fora do ar" com o provedor no ar.
|
|
22
|
+
*
|
|
23
|
+
* **Disjuntor** — mesma política do motor fiscal (três falhas seguidas, espera
|
|
24
|
+
* que dobra), mas em memória de processo, e é uma escolha, não um esquecimento:
|
|
25
|
+
* a consulta de CNPJ é interativa. Alguém está olhando a tela. Persistir o
|
|
26
|
+
* estado faria uma queda de dez minutos do provedor manter a tela recusando
|
|
27
|
+
* depois que ele voltou, e o operador não tem como saber que a recusa é nossa.
|
|
28
|
+
*/
|
|
29
|
+
/** Teto de consultas por tenant na janela. */
|
|
30
|
+
export const LOOKUP_QUOTA_LIMIT = 120;
|
|
31
|
+
export const LOOKUP_QUOTA_WINDOW_MS = 60 * 60_000;
|
|
32
|
+
/** Quanto tempo um retrato bem-sucedido responde sem tocar a rede. */
|
|
33
|
+
export const LOOKUP_CACHE_TTL_MS = 15 * 60_000;
|
|
34
|
+
/** Falhas seguidas que abrem o disjuntor — mesma régua do motor fiscal. */
|
|
35
|
+
export const LOOKUP_CIRCUIT_THRESHOLD = 3;
|
|
36
|
+
export const LOOKUP_CIRCUIT_OPEN_MS = 2 * 60_000;
|
|
37
|
+
/**
|
|
38
|
+
* Estado por (processo, provedor). Um `Map` de módulo, e não um campo de
|
|
39
|
+
* instância: o serviço é chamado por função, sem objeto de longa vida onde
|
|
40
|
+
* pendurar isso.
|
|
41
|
+
*/
|
|
42
|
+
const circuits = new Map();
|
|
43
|
+
/** Só para os testes: um disjuntor herdado entre casos esconderia o defeito. */
|
|
44
|
+
export function resetLookupCircuits() {
|
|
45
|
+
circuits.clear();
|
|
46
|
+
}
|
|
47
|
+
function circuitAllows(provider, now) {
|
|
48
|
+
const c = circuits.get(provider);
|
|
49
|
+
return !c || c.openUntil <= now;
|
|
50
|
+
}
|
|
51
|
+
function circuitRecord(provider, ok, now) {
|
|
52
|
+
if (ok) {
|
|
53
|
+
circuits.delete(provider);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const c = circuits.get(provider) ?? { failures: 0, openUntil: 0 };
|
|
57
|
+
c.failures += 1;
|
|
58
|
+
if (c.failures >= LOOKUP_CIRCUIT_THRESHOLD) {
|
|
59
|
+
// O expoente conta as falhas ALÉM do limite, como no motor fiscal: sem
|
|
60
|
+
// isso a terceira falha já pediria a espera de uma décima segunda.
|
|
61
|
+
const excedente = Math.min(c.failures - LOOKUP_CIRCUIT_THRESHOLD, 4);
|
|
62
|
+
c.openUntil = now + LOOKUP_CIRCUIT_OPEN_MS * 2 ** excedente;
|
|
63
|
+
}
|
|
64
|
+
circuits.set(provider, c);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Falhas que contam contra o PROVEDOR.
|
|
68
|
+
*
|
|
69
|
+
* Um CNPJ que não existe é resposta correta de um provedor saudável — contá-la
|
|
70
|
+
* abriria o disjuntor para o escritório inteiro porque alguém digitou errado
|
|
71
|
+
* três vezes. `invalid_document` sequer chega à rede.
|
|
72
|
+
*/
|
|
73
|
+
function countsAgainstProvider(reason) {
|
|
74
|
+
return reason === 'provider_unavailable' || reason === 'unexpected_payload';
|
|
75
|
+
}
|
|
76
|
+
async function quotaUsed(tx, since) {
|
|
77
|
+
const [row] = await tx `
|
|
78
|
+
SELECT count(*)::text AS n FROM client_registry_lookup
|
|
79
|
+
WHERE created_at >= ${since}
|
|
80
|
+
`;
|
|
81
|
+
return Number(row?.n ?? '0');
|
|
82
|
+
}
|
|
83
|
+
async function cached(tx, documento, provider, since) {
|
|
84
|
+
const [row] = await tx `
|
|
85
|
+
SELECT payload FROM client_registry_lookup
|
|
86
|
+
WHERE document_digits = ${documento} AND provider = ${provider}
|
|
87
|
+
AND outcome = 'ok' AND created_at >= ${since}
|
|
88
|
+
ORDER BY created_at DESC
|
|
89
|
+
LIMIT 1
|
|
90
|
+
`;
|
|
91
|
+
return row?.payload ?? null;
|
|
92
|
+
}
|
|
93
|
+
async function recordLookup(tx, input) {
|
|
94
|
+
await tx `
|
|
95
|
+
INSERT INTO client_registry_lookup (
|
|
96
|
+
id, tenant_id, document_digits, provider, outcome, failure_reason, payload, requested_by
|
|
97
|
+
) VALUES (
|
|
98
|
+
${uuidv7()}, ${input.tenantId}, ${input.documento}, ${input.provider},
|
|
99
|
+
${input.outcome}, ${input.reason ?? null},
|
|
100
|
+
${input.payload ? tx.json(input.payload) : null}, ${input.actorId}
|
|
101
|
+
)
|
|
102
|
+
`;
|
|
103
|
+
}
|
|
104
|
+
function montar(record, provider, current, served) {
|
|
105
|
+
const ibge = resolveMunicipality(record.address.municipality ?? '', record.address.uf);
|
|
106
|
+
return {
|
|
107
|
+
status: 'ok',
|
|
108
|
+
provider: provider.name,
|
|
109
|
+
official: provider.official,
|
|
110
|
+
record,
|
|
111
|
+
ibge,
|
|
112
|
+
proposals: buildProposals(record, current, ibge),
|
|
113
|
+
served,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Consulta o CNPJ com cota, cache, disjuntor e trilha — e NÃO grava cadastro.
|
|
118
|
+
*
|
|
119
|
+
* O que ela devolve são propostas. Aplicá-las é outro ato, com outra assinatura
|
|
120
|
+
* e outra permissão: quem pode consultar não necessariamente pode alterar o
|
|
121
|
+
* cadastro de um cliente.
|
|
122
|
+
*/
|
|
123
|
+
export async function lookupCompanyRegistry(tx, provider, req) {
|
|
124
|
+
const agora = req.now ?? new Date();
|
|
125
|
+
const ms = agora.getTime();
|
|
126
|
+
const documento = cnpjDigits(req.cnpj);
|
|
127
|
+
const current = req.current ?? {};
|
|
128
|
+
const recusar = async (reason, opts = { registra: true }) => {
|
|
129
|
+
if (opts.registra) {
|
|
130
|
+
await recordLookup(tx, {
|
|
131
|
+
tenantId: req.tenantId,
|
|
132
|
+
documento,
|
|
133
|
+
provider: provider.name,
|
|
134
|
+
outcome: 'failed',
|
|
135
|
+
reason,
|
|
136
|
+
actorId: req.actorId,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
await appendAudit(tx, {
|
|
140
|
+
actorId: req.actorId,
|
|
141
|
+
action: 'cnpj_lookup_failed',
|
|
142
|
+
resourceType: 'client_registry_lookup',
|
|
143
|
+
resourceId: null,
|
|
144
|
+
// O documento inteiro NÃO entra na trilha: ele identifica uma empresa, e
|
|
145
|
+
// a trilha é lida por gente que não precisa saber por quem se perguntou.
|
|
146
|
+
// O sufixo basta para casar dois eventos da mesma consulta.
|
|
147
|
+
metadata: { provider: provider.name, reason, documentTail: documento.slice(-6) },
|
|
148
|
+
});
|
|
149
|
+
return {
|
|
150
|
+
status: 'failed',
|
|
151
|
+
provider: provider.name,
|
|
152
|
+
official: provider.official,
|
|
153
|
+
reason,
|
|
154
|
+
proposals: [],
|
|
155
|
+
served: 'network',
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
// Documento inválido nem chega à contagem: reprovar aqui não gasta cota nem
|
|
159
|
+
// toca o provedor, e um dígito errado não pode consumir o orçamento de quem
|
|
160
|
+
// digitou certo depois.
|
|
161
|
+
if (!isValidCnpj(documento))
|
|
162
|
+
return recusar('invalid_document', { registra: false });
|
|
163
|
+
const usadas = await quotaUsed(tx, new Date(ms - LOOKUP_QUOTA_WINDOW_MS));
|
|
164
|
+
if (usadas >= LOOKUP_QUOTA_LIMIT)
|
|
165
|
+
return recusar('quota_exceeded', { registra: false });
|
|
166
|
+
const doCache = await cached(tx, documento, provider.name, new Date(ms - LOOKUP_CACHE_TTL_MS));
|
|
167
|
+
if (doCache) {
|
|
168
|
+
await appendAudit(tx, {
|
|
169
|
+
actorId: req.actorId,
|
|
170
|
+
action: 'cnpj_lookup_success',
|
|
171
|
+
resourceType: 'client_registry_lookup',
|
|
172
|
+
resourceId: null,
|
|
173
|
+
metadata: { provider: provider.name, served: 'cache', documentTail: documento.slice(-6) },
|
|
174
|
+
});
|
|
175
|
+
return montar(doCache, provider, current, 'cache');
|
|
176
|
+
}
|
|
177
|
+
if (!circuitAllows(provider.name, ms))
|
|
178
|
+
return recusar('circuit_open', { registra: false });
|
|
179
|
+
await appendAudit(tx, {
|
|
180
|
+
actorId: req.actorId,
|
|
181
|
+
action: 'cnpj_lookup_requested',
|
|
182
|
+
resourceType: 'client_registry_lookup',
|
|
183
|
+
resourceId: null,
|
|
184
|
+
metadata: { provider: provider.name, documentTail: documento.slice(-6) },
|
|
185
|
+
});
|
|
186
|
+
let resultado;
|
|
187
|
+
try {
|
|
188
|
+
resultado = await provider.lookup(documento);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Nenhuma exceção de provedor atravessa com a sua mensagem: um cliente HTTP
|
|
192
|
+
// cita a URL, e URL de provedor pode carregar credencial no query string.
|
|
193
|
+
circuitRecord(provider.name, false, ms);
|
|
194
|
+
return recusar('provider_unavailable');
|
|
195
|
+
}
|
|
196
|
+
if (resultado.status === 'failed') {
|
|
197
|
+
if (countsAgainstProvider(resultado.reason))
|
|
198
|
+
circuitRecord(provider.name, false, ms);
|
|
199
|
+
return recusar(resultado.reason);
|
|
200
|
+
}
|
|
201
|
+
circuitRecord(provider.name, true, ms);
|
|
202
|
+
await recordLookup(tx, {
|
|
203
|
+
tenantId: req.tenantId,
|
|
204
|
+
documento,
|
|
205
|
+
provider: provider.name,
|
|
206
|
+
outcome: 'ok',
|
|
207
|
+
payload: resultado.record,
|
|
208
|
+
actorId: req.actorId,
|
|
209
|
+
});
|
|
210
|
+
await appendAudit(tx, {
|
|
211
|
+
actorId: req.actorId,
|
|
212
|
+
action: 'cnpj_lookup_success',
|
|
213
|
+
resourceType: 'client_registry_lookup',
|
|
214
|
+
resourceId: null,
|
|
215
|
+
metadata: {
|
|
216
|
+
provider: provider.name,
|
|
217
|
+
official: provider.official,
|
|
218
|
+
served: 'network',
|
|
219
|
+
registrationStatus: resultado.record.registrationStatus,
|
|
220
|
+
documentTail: documento.slice(-6),
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
return montar(resultado.record, provider, current, 'network');
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/clients/registry/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type CompanyRegistryProvider, type CompanyLookupFailure } from './provider.js';
|
|
2
|
+
export interface SyntheticOptions {
|
|
3
|
+
/** Quando dado, toda consulta devolve este desfecho — útil para um caso só. */
|
|
4
|
+
force?: CompanyLookupFailure;
|
|
5
|
+
/** Contador de chamadas, para provar que o cache evitou a rede. */
|
|
6
|
+
onCall?: (cnpj: string) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function syntheticCompanyRegistry(options?: SyntheticOptions): CompanyRegistryProvider;
|
|
9
|
+
/** Os CNPJs sintéticos, nomeados — para o teste citar o caso, não o número. */
|
|
10
|
+
export declare const SYNTHETIC_CNPJ: {
|
|
11
|
+
readonly ativaCompleta: "11222333000181";
|
|
12
|
+
readonly ativaSemCache: "30000000000152";
|
|
13
|
+
readonly ativaSemCache2: "30000000000233";
|
|
14
|
+
readonly semNomeFantasia: "11444777000161";
|
|
15
|
+
readonly semContato: "19131243000197";
|
|
16
|
+
readonly baixada: "34028316000103";
|
|
17
|
+
readonly inapta: "33000167000101";
|
|
18
|
+
readonly variosCnae: "60746948000112";
|
|
19
|
+
readonly mei: "45283163000167";
|
|
20
|
+
readonly naoOptanteSimples: "47960950000121";
|
|
21
|
+
readonly regimeNaoInformado: "07526557000100";
|
|
22
|
+
readonly municipioDesconhecido: "02558157000162";
|
|
23
|
+
readonly municipioAmbiguo: "61695227000193";
|
|
24
|
+
readonly naoEncontrada: "00000000000191";
|
|
25
|
+
readonly limiteExcedido: "15436940000103";
|
|
26
|
+
readonly provedorForaDoAr: "92660406000119";
|
|
27
|
+
readonly tempoEsgotado: "76535764000143";
|
|
28
|
+
readonly respostaIlegivel: "05570714000159";
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=synthetic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthetic.d.ts","sourceRoot":"","sources":["../../../src/clients/registry/synthetic.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,uBAAuB,EAE5B,KAAK,oBAAoB,EAC1B,MAAM,eAAe,CAAC;AAmHvB,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,mEAAmE;IACnE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,gBAAqB,GAAG,uBAAuB,CAsChG;AAED,+EAA+E;AAC/E,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;CAmBjB,CAAC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { cnpjDigits, isValidCnpj, } from './provider.js';
|
|
2
|
+
/**
|
|
3
|
+
* Um provedor de mentira, para provar o produto sem contrato.
|
|
4
|
+
*
|
|
5
|
+
* ## Por que ele é `official: false`, e por que isso importa
|
|
6
|
+
*
|
|
7
|
+
* Todo retrato que ele devolve entra no banco carimbado como NÃO oficial. Sem
|
|
8
|
+
* esse carimbo, um dado sintético usado num ambiente de demonstração ficaria
|
|
9
|
+
* indistinguível de um dado da Receita — e a etiqueta de proveniência, que
|
|
10
|
+
* existe justamente para dizer o quanto se confia num campo, viraria decoração.
|
|
11
|
+
*
|
|
12
|
+
* ## Os cenários vivem no número
|
|
13
|
+
*
|
|
14
|
+
* Cada CNPJ da tabela abaixo É um caso de teste: empresa baixada, sem nome
|
|
15
|
+
* fantasia, sem e-mail, Simples que a fonte não informou, município que o IBGE
|
|
16
|
+
* não conhece. Espalhar isso por mocks locais faria cada teste inventar a sua
|
|
17
|
+
* própria versão de "empresa inapta" — e duas versões divergentes de um mesmo
|
|
18
|
+
* conceito é como um bug passa entre elas.
|
|
19
|
+
*/
|
|
20
|
+
const BASE = {
|
|
21
|
+
cnpj: '',
|
|
22
|
+
legalName: 'EMPRESA SINTETICA LTDA',
|
|
23
|
+
tradeName: 'SINTETICA',
|
|
24
|
+
registrationStatus: 'ATIVA',
|
|
25
|
+
openedOn: '2015-03-10',
|
|
26
|
+
legalNature: '206-2 - Sociedade Empresária Limitada',
|
|
27
|
+
size: 'ME',
|
|
28
|
+
primaryActivity: { code: '4712100', description: 'Comércio varejista de mercadorias em geral' },
|
|
29
|
+
secondaryActivities: [],
|
|
30
|
+
address: {
|
|
31
|
+
street: 'Rua das Provas',
|
|
32
|
+
number: '100',
|
|
33
|
+
complement: null,
|
|
34
|
+
district: 'Setor Central',
|
|
35
|
+
zipCode: '74000-000',
|
|
36
|
+
municipality: 'Goiânia',
|
|
37
|
+
uf: 'GO',
|
|
38
|
+
},
|
|
39
|
+
phone: '(62) 3000-0000',
|
|
40
|
+
email: 'contato@sintetica.example',
|
|
41
|
+
shareCapital: 50000,
|
|
42
|
+
simplesOptant: true,
|
|
43
|
+
meiOptant: false,
|
|
44
|
+
};
|
|
45
|
+
/** Cenários felizes: o CNPJ escolhe qual retrato volta. */
|
|
46
|
+
const RETRATOS = {
|
|
47
|
+
// Ativa, completa, optante do Simples — o caso comum.
|
|
48
|
+
'11222333000181': {},
|
|
49
|
+
// Gêmeas da anterior, e existem por uma razão de teste: o cache é por
|
|
50
|
+
// (tenant, documento), então um caso que precisa MESMO tocar a rede não pode
|
|
51
|
+
// reusar um CNPJ que outro caso já consultou.
|
|
52
|
+
'30000000000152': { tradeName: 'SINTETICA II' },
|
|
53
|
+
'30000000000233': { tradeName: 'SINTETICA III' },
|
|
54
|
+
// Sem nome fantasia: a tela não pode mostrar "undefined" nem cair para a
|
|
55
|
+
// razão social sem dizer que caiu.
|
|
56
|
+
'11444777000161': { tradeName: null, legalName: 'COMERCIO SEM FANTASIA LTDA' },
|
|
57
|
+
// Sem e-mail e sem telefone: os dois campos que o escritório mais preenche à
|
|
58
|
+
// mão, e que a fonte oficial mais frequentemente não tem.
|
|
59
|
+
'19131243000197': { email: null, phone: null },
|
|
60
|
+
// Baixada — não é erro de consulta. A empresa existe e está encerrada, e o
|
|
61
|
+
// cadastro não pode tratar isso como "não encontrado".
|
|
62
|
+
'34028316000103': { registrationStatus: 'BAIXADA', tradeName: 'ENCERRADA' },
|
|
63
|
+
// Inapta: opera, mas com pendência. Distinta de baixada.
|
|
64
|
+
'33000167000101': { registrationStatus: 'INAPTA' },
|
|
65
|
+
// Vários CNAEs secundários: a tela precisa caber mais de um.
|
|
66
|
+
'60746948000112': {
|
|
67
|
+
secondaryActivities: [
|
|
68
|
+
{ code: '4711302', description: 'Comércio varejista de mercadorias em geral' },
|
|
69
|
+
{ code: '5620104', description: 'Fornecimento de alimentos preparados' },
|
|
70
|
+
{ code: '8299799', description: 'Outras atividades de serviços prestados' },
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
// MEI. `simplesOptant` também é true: todo MEI é do Simples, e uma fonte que
|
|
74
|
+
// dissesse MEI sem dizer Simples estaria incompleta, não negando.
|
|
75
|
+
'45283163000167': { meiOptant: true, simplesOptant: true, size: 'MEI' },
|
|
76
|
+
// NÃO optante do Simples. Isto é a fonte DIZENDO "não" — e continua não
|
|
77
|
+
// dizendo nada sobre Real ou Presumido. Ver `NON_SIMPLES_TAX_REGIME_NOT_INFERRED`.
|
|
78
|
+
'47960950000121': { simplesOptant: false, size: 'DEMAIS' },
|
|
79
|
+
// A fonte SILENCIOU sobre o regime. `null` não é `false`: aqui o produto tem
|
|
80
|
+
// de dizer "não informado", nunca "não é do Simples".
|
|
81
|
+
'07526557000100': { simplesOptant: null, meiOptant: null },
|
|
82
|
+
// Município que o IBGE não resolve pelo nome que a fonte usou. O código não
|
|
83
|
+
// pode ser adivinhado — a tela pergunta.
|
|
84
|
+
'02558157000162': {
|
|
85
|
+
address: { ...BASE.address, municipality: 'Vila Que Nao Existe', uf: 'GO' },
|
|
86
|
+
},
|
|
87
|
+
// Município ambíguo sem UF confiável: "Bom Jesus" existe em cinco estados.
|
|
88
|
+
'61695227000193': {
|
|
89
|
+
address: { ...BASE.address, municipality: 'Bom Jesus', uf: null },
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
/** Cenários de falha: o CNPJ escolhe qual defeito o provedor apresenta. */
|
|
93
|
+
const FALHAS = {
|
|
94
|
+
'00000000000191': 'not_found',
|
|
95
|
+
'15436940000103': 'rate_limited',
|
|
96
|
+
'92660406000119': 'provider_unavailable',
|
|
97
|
+
'76535764000143': 'timeout',
|
|
98
|
+
'05570714000159': 'garbage',
|
|
99
|
+
};
|
|
100
|
+
export function syntheticCompanyRegistry(options = {}) {
|
|
101
|
+
return {
|
|
102
|
+
name: 'synthetic',
|
|
103
|
+
official: false,
|
|
104
|
+
async lookup(input) {
|
|
105
|
+
const cnpj = cnpjDigits(input);
|
|
106
|
+
const source = 'synthetic';
|
|
107
|
+
const recusa = (reason) => ({
|
|
108
|
+
status: 'failed',
|
|
109
|
+
reason,
|
|
110
|
+
source,
|
|
111
|
+
});
|
|
112
|
+
options.onCall?.(cnpj);
|
|
113
|
+
if (options.force)
|
|
114
|
+
return recusa(options.force);
|
|
115
|
+
if (!isValidCnpj(cnpj))
|
|
116
|
+
return recusa('invalid_document');
|
|
117
|
+
const falha = FALHAS[cnpj];
|
|
118
|
+
if (falha === 'timeout') {
|
|
119
|
+
// Uma exceção CRUA, como a rede produz. O serviço tem de classificá-la
|
|
120
|
+
// sozinho: um provedor real não devolve `{status:'failed'}` educado
|
|
121
|
+
// quando o socket morre.
|
|
122
|
+
throw new Error('ETIMEDOUT synthetic://registry');
|
|
123
|
+
}
|
|
124
|
+
if (falha === 'garbage')
|
|
125
|
+
return recusa('unexpected_payload');
|
|
126
|
+
if (falha)
|
|
127
|
+
return recusa(falha);
|
|
128
|
+
const patch = RETRATOS[cnpj];
|
|
129
|
+
if (!patch)
|
|
130
|
+
return recusa('not_found');
|
|
131
|
+
return {
|
|
132
|
+
status: 'ok',
|
|
133
|
+
record: { ...BASE, ...patch, cnpj },
|
|
134
|
+
source,
|
|
135
|
+
fetchedAt: new Date().toISOString(),
|
|
136
|
+
};
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/** Os CNPJs sintéticos, nomeados — para o teste citar o caso, não o número. */
|
|
141
|
+
export const SYNTHETIC_CNPJ = {
|
|
142
|
+
ativaCompleta: '11222333000181',
|
|
143
|
+
ativaSemCache: '30000000000152',
|
|
144
|
+
ativaSemCache2: '30000000000233',
|
|
145
|
+
semNomeFantasia: '11444777000161',
|
|
146
|
+
semContato: '19131243000197',
|
|
147
|
+
baixada: '34028316000103',
|
|
148
|
+
inapta: '33000167000101',
|
|
149
|
+
variosCnae: '60746948000112',
|
|
150
|
+
mei: '45283163000167',
|
|
151
|
+
naoOptanteSimples: '47960950000121',
|
|
152
|
+
regimeNaoInformado: '07526557000100',
|
|
153
|
+
municipioDesconhecido: '02558157000162',
|
|
154
|
+
municipioAmbiguo: '61695227000193',
|
|
155
|
+
naoEncontrada: '00000000000191',
|
|
156
|
+
limiteExcedido: '15436940000103',
|
|
157
|
+
provedorForaDoAr: '92660406000119',
|
|
158
|
+
tempoEsgotado: '76535764000143',
|
|
159
|
+
respostaIlegivel: '05570714000159',
|
|
160
|
+
};
|
|
161
|
+
//# sourceMappingURL=synthetic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthetic.js","sourceRoot":"","sources":["../../../src/clients/registry/synthetic.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,8 @@ export interface ClientRecord {
|
|
|
20
20
|
municipality: string | null;
|
|
21
21
|
stateUf: string | null;
|
|
22
22
|
legalName: string | null;
|
|
23
|
+
/** Nome fantasia. É por ele que a equipe chama o cliente no telefone. */
|
|
24
|
+
tradeName: string | null;
|
|
23
25
|
addressLine: string | null;
|
|
24
26
|
postalCode: string | null;
|
|
25
27
|
notes: string | null;
|
|
@@ -107,6 +109,7 @@ export interface CreateClientInput {
|
|
|
107
109
|
createdBy?: string | null;
|
|
108
110
|
/** Razão social, quando difere do nome pelo qual o escritório chama o cliente. */
|
|
109
111
|
legalName?: string | null;
|
|
112
|
+
tradeName?: string | null;
|
|
110
113
|
addressLine?: string | null;
|
|
111
114
|
municipality?: string | null;
|
|
112
115
|
/** UF em duas maiúsculas — o CHECK do banco recusa qualquer outra forma. */
|
|
@@ -177,6 +180,7 @@ type Erasable<T> = T | null | undefined;
|
|
|
177
180
|
export interface UpdateClientInput {
|
|
178
181
|
displayName?: string;
|
|
179
182
|
legalName?: string | null;
|
|
183
|
+
tradeName?: string | null;
|
|
180
184
|
email?: string | null;
|
|
181
185
|
phone?: string | null;
|
|
182
186
|
status?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/clients/repository.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/clients/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,6 +71,7 @@ function mapRow(r, channels = {}) {
|
|
|
71
71
|
municipality: r.municipality ?? null,
|
|
72
72
|
stateUf: r.state_uf ?? null,
|
|
73
73
|
legalName: r.legal_name ?? null,
|
|
74
|
+
tradeName: r.trade_name ?? null,
|
|
74
75
|
addressLine: r.address_line ?? null,
|
|
75
76
|
postalCode: r.postal_code ?? null,
|
|
76
77
|
notes: r.notes ?? null,
|
|
@@ -101,7 +102,8 @@ export async function createClient(tx, input) {
|
|
|
101
102
|
// tentativa de gravar fora do tenant corrente.
|
|
102
103
|
try {
|
|
103
104
|
const rows = await tx `
|
|
104
|
-
INSERT INTO client (id, tenant_id, client_type, display_name, legal_name,
|
|
105
|
+
INSERT INTO client (id, tenant_id, client_type, display_name, legal_name, trade_name,
|
|
106
|
+
document_number,
|
|
105
107
|
email, phone, phone_e164, address_line, municipality, state_uf,
|
|
106
108
|
municipality_ibge_code,
|
|
107
109
|
postal_code, notes, responsible_user_id, contract_started_on,
|
|
@@ -112,6 +114,7 @@ export async function createClient(tx, input) {
|
|
|
112
114
|
${input.clientType ?? 'pj'},
|
|
113
115
|
${input.displayName},
|
|
114
116
|
${input.legalName?.trim() || null},
|
|
117
|
+
${input.tradeName?.trim() || null},
|
|
115
118
|
${input.documentNumber ?? null},
|
|
116
119
|
${normalizeEmail(input.email)},
|
|
117
120
|
${normalizePhone(input.phone)},
|
|
@@ -148,7 +151,7 @@ export async function listClients(tx) {
|
|
|
148
151
|
}
|
|
149
152
|
export async function getClient(tx, id) {
|
|
150
153
|
const rows = await tx `
|
|
151
|
-
SELECT id, tenant_id, client_type, display_name, legal_name, document_number, email, phone,
|
|
154
|
+
SELECT id, tenant_id, client_type, display_name, legal_name, trade_name, document_number, email, phone,
|
|
152
155
|
status, created_at, responsible_user_id, address_line, municipality, state_uf,
|
|
153
156
|
municipality_ibge_code, postal_code, notes
|
|
154
157
|
FROM client
|
|
@@ -242,6 +245,7 @@ export async function updateClient(tx, id, input) {
|
|
|
242
245
|
UPDATE client SET
|
|
243
246
|
display_name = COALESCE(${input.displayName ?? null}::text, display_name),
|
|
244
247
|
legal_name = CASE WHEN ${'legalName' in input} THEN ${input.legalName?.trim() || null}::text ELSE legal_name END,
|
|
248
|
+
trade_name = CASE WHEN ${'tradeName' in input} THEN ${input.tradeName?.trim() || null}::text ELSE trade_name END,
|
|
245
249
|
document_number = COALESCE(${input.documentNumber ?? null}::text, document_number),
|
|
246
250
|
email = COALESCE(${normalizeEmail(input.email)}::citext, email),
|
|
247
251
|
phone = COALESCE(${normalizePhone(input.phone)}::text, phone),
|