@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/clients/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/clients/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* ## O que ele garante
|
|
12
12
|
*
|
|
13
13
|
* - `user_type = 'service'` — reconhecível como não-humana em toda consulta;
|
|
14
|
-
* - papel `e2e_automation` e nada além:
|
|
14
|
+
* - papel `e2e_automation` e nada além: cinco permissões, tenant único;
|
|
15
15
|
* - idempotente: rodar de novo não duplica nem escala privilégio;
|
|
16
16
|
* - a senha vem do ambiente e **nunca** é impressa, ecoada ou gravada em log.
|
|
17
17
|
*
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
import { createDb } from './client.js';
|
|
29
29
|
import { withContext } from './context.js';
|
|
30
30
|
import { assignSystemRole, ensureMembership } from '../tenancy/provisioning.js';
|
|
31
|
+
import { SYSTEM_ROLES } from '../rbac/catalog.js';
|
|
31
32
|
import { upsertUserWithPassword } from '../auth/service.js';
|
|
32
33
|
const ROLE = 'e2e_automation';
|
|
33
34
|
function arg(nome, padrao) {
|
|
@@ -85,8 +86,12 @@ async function main() {
|
|
|
85
86
|
console.log(` papel: ${ROLE}`);
|
|
86
87
|
console.log(` permissões (${permissoes.length}): ${permissoes.join(', ')}`);
|
|
87
88
|
console.log(` senha definida nesta execução: ${user.passwordWasSet ? 'sim' : 'não (já existia)'}`);
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
// O número vem do catálogo, e não de um literal repetido aqui: duas cópias
|
|
90
|
+
// da mesma régua divergem, e a divergência aparece como um provisionamento
|
|
91
|
+
// que aborta sem motivo — ou, pior, que aceita uma permissão a mais.
|
|
92
|
+
const esperadas = SYSTEM_ROLES.find((r) => r.key === ROLE)?.permissions.length ?? 0;
|
|
93
|
+
if (permissoes.length !== esperadas) {
|
|
94
|
+
throw new Error(`Esperava ${esperadas} permissões e encontrei ${permissoes.length}. Abortando: uma identidade de automação com privilégio a mais não deve ficar de pé.`);
|
|
90
95
|
}
|
|
91
96
|
}
|
|
92
97
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provision-e2e-identity.js","sourceRoot":"","sources":["../../src/db/provision-e2e-identity.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provision-e2e-identity.js","sourceRoot":"","sources":["../../src/db/provision-e2e-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import type { Tx } from '../../db/client.js';
|
|
2
|
+
import type { FiscalCredentialKind, FiscalDocumentType, FiscalEnvironment } from '../eligibility.js';
|
|
3
|
+
import { type FiscalCompetence } from './competence.js';
|
|
4
|
+
/**
|
|
5
|
+
* O portão que se gasta.
|
|
6
|
+
*
|
|
7
|
+
* ## Por que os três desligamentos da Fase 2 não bastavam
|
|
8
|
+
*
|
|
9
|
+
* O motor fiscal já tem `FISCAL_SYNC_ENABLED`, elegibilidade por cliente e
|
|
10
|
+
* política de cadência. Todos são ESTADO: uma vez ligados, ficam ligados, e essa
|
|
11
|
+
* é a forma certa de autorizar um REGIME — "este escritório opera automação
|
|
12
|
+
* fiscal para estes clientes".
|
|
13
|
+
*
|
|
14
|
+
* A primeira consulta real a um ambiente oficial não é um regime. É um ato: o
|
|
15
|
+
* titular autorizou UMA leitura, de UM cliente, sobre UM período, e o que ele
|
|
16
|
+
* autorizou não deve sobreviver à própria execução. Um estado permanente aqui
|
|
17
|
+
* significaria que a segunda consulta — a que ninguém aprovou — acontece com a
|
|
18
|
+
* mesma bênção da primeira.
|
|
19
|
+
*
|
|
20
|
+
* ## As quatro propriedades, e onde cada uma mora
|
|
21
|
+
*
|
|
22
|
+
* uma execução `max_runs = 1`, CHECK na 0060. Não é configuração.
|
|
23
|
+
* somente leitura `operation = 'READ_ONLY'`, CHECK na 0060. Mutação é ingravável.
|
|
24
|
+
* prazo `expires_at`. Uma autorização esquecida morre sozinha.
|
|
25
|
+
* consumo `runs_consumed`, com o teto no CHECK e a corrida resolvida
|
|
26
|
+
* pelo `UPDATE ... WHERE consumed_at IS NULL`, no banco.
|
|
27
|
+
*
|
|
28
|
+
* O consumo é a parte que não pode viver no TypeScript. Dois workers lendo
|
|
29
|
+
* "ainda não consumida" e executando os dois é exatamente a segunda consulta não
|
|
30
|
+
* autorizada; quem decide é a linha, num único `UPDATE` condicional que devolve
|
|
31
|
+
* zero para o perdedor.
|
|
32
|
+
*/
|
|
33
|
+
export type FiscalRunOperation = 'READ_ONLY';
|
|
34
|
+
export interface FiscalRunAuthorization {
|
|
35
|
+
id: string;
|
|
36
|
+
clientId: string;
|
|
37
|
+
documentType: FiscalDocumentType;
|
|
38
|
+
environment: FiscalEnvironment;
|
|
39
|
+
source: string;
|
|
40
|
+
credentialKind: FiscalCredentialKind;
|
|
41
|
+
operation: FiscalRunOperation;
|
|
42
|
+
competence: FiscalCompetence;
|
|
43
|
+
maxRuns: number;
|
|
44
|
+
runsConsumed: number;
|
|
45
|
+
authorizedBy: string;
|
|
46
|
+
authorizedAt: string;
|
|
47
|
+
responsibleName: string | null;
|
|
48
|
+
expiresAt: string;
|
|
49
|
+
consumedAt: string | null;
|
|
50
|
+
revokedAt: string | null;
|
|
51
|
+
revokeReason: string | null;
|
|
52
|
+
/** Declara que a credencial ainda não fora aceita por nenhum ambiente. */
|
|
53
|
+
firstContact: boolean;
|
|
54
|
+
/** Quem disparou. Primeiro contato só aceita `manual`. */
|
|
55
|
+
triggerKind: 'manual' | 'scheduled';
|
|
56
|
+
/** O material aprovado. Trocar o certificado invalida esta autorização. */
|
|
57
|
+
credentialFingerprint: string | null;
|
|
58
|
+
/** O estado derivado, calculado contra o relógio de quem pergunta. */
|
|
59
|
+
state: FiscalAuthorizationState;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* `expired` é distinto de `consumed`, e ambos de `revoked`.
|
|
63
|
+
*
|
|
64
|
+
* Colapsá-los em "inválida" custaria a única informação útil na tela: uma
|
|
65
|
+
* autorização vencida pede que se emita outra; uma consumida diz que a execução
|
|
66
|
+
* já aconteceu e a pergunta certa é sobre o resultado dela; uma revogada diz que
|
|
67
|
+
* alguém decidiu parar, e o motivo está gravado.
|
|
68
|
+
*/
|
|
69
|
+
export type FiscalAuthorizationState = 'live' | 'consumed' | 'expired' | 'revoked';
|
|
70
|
+
export declare class AuthorizationConflictError extends Error {
|
|
71
|
+
readonly detail: string;
|
|
72
|
+
constructor(detail: string);
|
|
73
|
+
}
|
|
74
|
+
export interface GrantRunAuthorizationInput {
|
|
75
|
+
clientId: string;
|
|
76
|
+
documentType: FiscalDocumentType;
|
|
77
|
+
environment: FiscalEnvironment;
|
|
78
|
+
source: string;
|
|
79
|
+
credentialKind?: FiscalCredentialKind;
|
|
80
|
+
competenceYear: number;
|
|
81
|
+
competenceMonth: number;
|
|
82
|
+
/** Recorte manual dentro da competência. Ausente = a competência inteira. */
|
|
83
|
+
periodStart?: string;
|
|
84
|
+
periodEnd?: string;
|
|
85
|
+
responsibleName?: string | null;
|
|
86
|
+
authorizedBy: string;
|
|
87
|
+
/** Validade em horas. Curta de propósito: um portão aberto ontem não vale hoje. */
|
|
88
|
+
validForHours?: number;
|
|
89
|
+
/**
|
|
90
|
+
* PRIMEIRO CONTATO: quem autoriza declara saber que esta credencial ainda não
|
|
91
|
+
* foi aceita por nenhum ambiente oficial, e aceita que esta execução seja o
|
|
92
|
+
* ato que descobre. Sem isto, a autorização exige credencial já verificada — e
|
|
93
|
+
* a primeira nunca aconteceria. Ver `first-contact.ts`.
|
|
94
|
+
*/
|
|
95
|
+
firstContact?: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Quem disparou. `scheduled` NUNCA pode acompanhar `firstContact` — e é um
|
|
98
|
+
* CHECK da 0062 que garante, não este comentário.
|
|
99
|
+
*/
|
|
100
|
+
triggerKind?: 'manual' | 'scheduled';
|
|
101
|
+
/**
|
|
102
|
+
* Impressão digital do certificado vigente no momento da autorização.
|
|
103
|
+
*
|
|
104
|
+
* Autorizar é aprovar UM material. Trocar o certificado depois invalida a
|
|
105
|
+
* autorização, porque o que a pessoa aprovou deixou de existir.
|
|
106
|
+
*/
|
|
107
|
+
credentialFingerprint?: string | null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Emite a autorização.
|
|
111
|
+
*
|
|
112
|
+
* Recusa por CONFLITO quando já existe uma viva para o mesmo par
|
|
113
|
+
* (cliente, fonte, ambiente, competência) — não por capricho de unicidade, mas
|
|
114
|
+
* porque duas autorizações vivas somam duas execuções, e o produto teria
|
|
115
|
+
* prometido uma.
|
|
116
|
+
*
|
|
117
|
+
* A unicidade é do índice parcial da 0060; o `SELECT` prévio existe só para
|
|
118
|
+
* devolver um erro legível em vez de uma violação de constraint.
|
|
119
|
+
*/
|
|
120
|
+
export declare function grantRunAuthorization(tx: Tx, input: GrantRunAuthorizationInput): Promise<FiscalRunAuthorization>;
|
|
121
|
+
/**
|
|
122
|
+
* Consome a autorização — e é AQUI que a unicidade da execução acontece.
|
|
123
|
+
*
|
|
124
|
+
* Um `SELECT` seguido de `UPDATE` deixaria a janela em que dois processos leem
|
|
125
|
+
* "viva" e ambos executam. O `WHERE consumed_at IS NULL` dentro do próprio
|
|
126
|
+
* `UPDATE` fecha essa janela no banco: o segundo afeta zero linhas e recebe
|
|
127
|
+
* `null`, que é o sinal de "não execute".
|
|
128
|
+
*
|
|
129
|
+
* Devolve `null` — e não lança — para todo desfecho de recusa. Quem chama é o
|
|
130
|
+
* orquestrador no meio de uma carteira, e uma exceção aqui derrubaria o lote por
|
|
131
|
+
* causa de um portão fechado, que é estado normal.
|
|
132
|
+
*/
|
|
133
|
+
export declare function consumeRunAuthorization(tx: Tx, input: {
|
|
134
|
+
authorizationId: string;
|
|
135
|
+
runId: string;
|
|
136
|
+
}): Promise<FiscalRunAuthorization | null>;
|
|
137
|
+
/**
|
|
138
|
+
* Cancela antes da execução.
|
|
139
|
+
*
|
|
140
|
+
* O mecanismo de abortar (C1.34) não precisa de tabela nova: revogar a
|
|
141
|
+
* autorização é o cancelamento, porque sem ela não há execução real. Revogar uma
|
|
142
|
+
* já consumida é permitido e não desfaz nada — só registra a decisão, para o
|
|
143
|
+
* caso em que alguém descobre depois que não deveria ter autorizado.
|
|
144
|
+
*/
|
|
145
|
+
export declare function revokeRunAuthorization(tx: Tx, input: {
|
|
146
|
+
authorizationId: string;
|
|
147
|
+
revokedBy: string;
|
|
148
|
+
reason: string;
|
|
149
|
+
}): Promise<boolean>;
|
|
150
|
+
/** As autorizações de um cliente, mais recentes primeiro. Sem segredo por construção. */
|
|
151
|
+
export declare function listRunAuthorizations(tx: Tx, clientId: string): Promise<FiscalRunAuthorization[]>;
|
|
152
|
+
//# sourceMappingURL=authorization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../../../src/fiscal/collection/authorization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAgC,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAE7C,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC;IACjC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,oBAAoB,CAAC;IACrC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,0EAA0E;IAC1E,YAAY,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,WAAW,EAAE,QAAQ,GAAG,WAAW,CAAC;IACpC,2EAA2E;IAC3E,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,sEAAsE;IACtE,KAAK,EAAE,wBAAwB,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnF,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAIpC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC;IACjC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IACrC;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAKD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,sBAAsB,CAAC,CAgDjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAexC;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpE,OAAO,CAAC,OAAO,CAAC,CASlB;AAED,yFAAyF;AACzF,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,EAAE,CAAC,CASnC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { uuidv7 } from '@baruk/shared';
|
|
2
|
+
import { competenceOf, validateWindow } from './competence.js';
|
|
3
|
+
export class AuthorizationConflictError extends Error {
|
|
4
|
+
detail;
|
|
5
|
+
constructor(detail) {
|
|
6
|
+
super(`autorização recusada: ${detail}`);
|
|
7
|
+
this.detail = detail;
|
|
8
|
+
this.name = 'AuthorizationConflictError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const DEFAULT_VALIDITY_HOURS = 48;
|
|
12
|
+
const MAX_VALIDITY_HOURS = 168; // sete dias
|
|
13
|
+
/**
|
|
14
|
+
* Emite a autorização.
|
|
15
|
+
*
|
|
16
|
+
* Recusa por CONFLITO quando já existe uma viva para o mesmo par
|
|
17
|
+
* (cliente, fonte, ambiente, competência) — não por capricho de unicidade, mas
|
|
18
|
+
* porque duas autorizações vivas somam duas execuções, e o produto teria
|
|
19
|
+
* prometido uma.
|
|
20
|
+
*
|
|
21
|
+
* A unicidade é do índice parcial da 0060; o `SELECT` prévio existe só para
|
|
22
|
+
* devolver um erro legível em vez de uma violação de constraint.
|
|
23
|
+
*/
|
|
24
|
+
export async function grantRunAuthorization(tx, input) {
|
|
25
|
+
const competence = competenceOf(input.competenceYear, input.competenceMonth);
|
|
26
|
+
const periodStart = input.periodStart ?? competence.periodStart;
|
|
27
|
+
const periodEnd = input.periodEnd ?? competence.periodEnd;
|
|
28
|
+
validateWindow(competence, periodStart, periodEnd);
|
|
29
|
+
const hours = input.validForHours ?? DEFAULT_VALIDITY_HOURS;
|
|
30
|
+
if (!Number.isInteger(hours) || hours < 1 || hours > MAX_VALIDITY_HOURS) {
|
|
31
|
+
throw new AuthorizationConflictError(`validade deve estar entre 1 e ${MAX_VALIDITY_HOURS} horas`);
|
|
32
|
+
}
|
|
33
|
+
const live = await tx `
|
|
34
|
+
SELECT id FROM fiscal_run_authorization
|
|
35
|
+
WHERE client_id = ${input.clientId}
|
|
36
|
+
AND source = ${input.source}
|
|
37
|
+
AND environment = ${input.environment}
|
|
38
|
+
AND competence_year = ${competence.year}
|
|
39
|
+
AND competence_month = ${competence.month}
|
|
40
|
+
AND consumed_at IS NULL AND revoked_at IS NULL
|
|
41
|
+
LIMIT 1
|
|
42
|
+
`;
|
|
43
|
+
if (live[0]) {
|
|
44
|
+
throw new AuthorizationConflictError('já existe uma autorização viva para este cliente, fonte, ambiente e competência');
|
|
45
|
+
}
|
|
46
|
+
const rows = await tx `
|
|
47
|
+
INSERT INTO fiscal_run_authorization (
|
|
48
|
+
id, tenant_id, client_id, document_type, environment, source, credential_kind,
|
|
49
|
+
operation, competence_year, competence_month, period_start, period_end,
|
|
50
|
+
max_runs, runs_consumed, authorized_by, responsible_name, expires_at,
|
|
51
|
+
first_contact, trigger_kind, credential_fingerprint
|
|
52
|
+
) VALUES (
|
|
53
|
+
${uuidv7()}, current_setting('app.current_tenant')::uuid, ${input.clientId},
|
|
54
|
+
${input.documentType}, ${input.environment}, ${input.source},
|
|
55
|
+
${input.credentialKind ?? 'certificate_a1'},
|
|
56
|
+
'READ_ONLY', ${competence.year}, ${competence.month}, ${periodStart}, ${periodEnd},
|
|
57
|
+
1, 0, ${input.authorizedBy}, ${input.responsibleName ?? null},
|
|
58
|
+
now() + (${hours}::int * interval '1 hour'),
|
|
59
|
+
${input.firstContact ?? false}, ${input.triggerKind ?? 'manual'},
|
|
60
|
+
${input.credentialFingerprint ?? null}
|
|
61
|
+
)
|
|
62
|
+
RETURNING ${tx.unsafe(AUTHORIZATION_COLUMNS)}
|
|
63
|
+
`;
|
|
64
|
+
return mapAuthorization(rows[0]);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Consome a autorização — e é AQUI que a unicidade da execução acontece.
|
|
68
|
+
*
|
|
69
|
+
* Um `SELECT` seguido de `UPDATE` deixaria a janela em que dois processos leem
|
|
70
|
+
* "viva" e ambos executam. O `WHERE consumed_at IS NULL` dentro do próprio
|
|
71
|
+
* `UPDATE` fecha essa janela no banco: o segundo afeta zero linhas e recebe
|
|
72
|
+
* `null`, que é o sinal de "não execute".
|
|
73
|
+
*
|
|
74
|
+
* Devolve `null` — e não lança — para todo desfecho de recusa. Quem chama é o
|
|
75
|
+
* orquestrador no meio de uma carteira, e uma exceção aqui derrubaria o lote por
|
|
76
|
+
* causa de um portão fechado, que é estado normal.
|
|
77
|
+
*/
|
|
78
|
+
export async function consumeRunAuthorization(tx, input) {
|
|
79
|
+
const rows = await tx `
|
|
80
|
+
UPDATE fiscal_run_authorization SET
|
|
81
|
+
runs_consumed = runs_consumed + 1,
|
|
82
|
+
consumed_at = now(),
|
|
83
|
+
consumed_by_run_id = ${input.runId},
|
|
84
|
+
updated_at = now()
|
|
85
|
+
WHERE id = ${input.authorizationId}
|
|
86
|
+
AND consumed_at IS NULL
|
|
87
|
+
AND revoked_at IS NULL
|
|
88
|
+
AND expires_at > now()
|
|
89
|
+
AND runs_consumed < max_runs
|
|
90
|
+
RETURNING ${tx.unsafe(AUTHORIZATION_COLUMNS)}
|
|
91
|
+
`;
|
|
92
|
+
return rows[0] ? mapAuthorization(rows[0]) : null;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Cancela antes da execução.
|
|
96
|
+
*
|
|
97
|
+
* O mecanismo de abortar (C1.34) não precisa de tabela nova: revogar a
|
|
98
|
+
* autorização é o cancelamento, porque sem ela não há execução real. Revogar uma
|
|
99
|
+
* já consumida é permitido e não desfaz nada — só registra a decisão, para o
|
|
100
|
+
* caso em que alguém descobre depois que não deveria ter autorizado.
|
|
101
|
+
*/
|
|
102
|
+
export async function revokeRunAuthorization(tx, input) {
|
|
103
|
+
const rows = await tx `
|
|
104
|
+
UPDATE fiscal_run_authorization SET
|
|
105
|
+
revoked_at = now(), revoked_by = ${input.revokedBy},
|
|
106
|
+
revoke_reason = ${input.reason}, updated_at = now()
|
|
107
|
+
WHERE id = ${input.authorizationId} AND revoked_at IS NULL
|
|
108
|
+
RETURNING id
|
|
109
|
+
`;
|
|
110
|
+
return rows.count > 0;
|
|
111
|
+
}
|
|
112
|
+
/** As autorizações de um cliente, mais recentes primeiro. Sem segredo por construção. */
|
|
113
|
+
export async function listRunAuthorizations(tx, clientId) {
|
|
114
|
+
const rows = await tx `
|
|
115
|
+
SELECT ${tx.unsafe(AUTHORIZATION_COLUMNS)}
|
|
116
|
+
FROM fiscal_run_authorization
|
|
117
|
+
WHERE client_id = ${clientId}
|
|
118
|
+
ORDER BY authorized_at DESC
|
|
119
|
+
LIMIT 50
|
|
120
|
+
`;
|
|
121
|
+
return rows.map(mapAuthorization);
|
|
122
|
+
}
|
|
123
|
+
const AUTHORIZATION_COLUMNS = `
|
|
124
|
+
id, client_id, document_type, environment, source, credential_kind, operation,
|
|
125
|
+
competence_year, competence_month, period_start, period_end, max_runs, runs_consumed,
|
|
126
|
+
authorized_by, authorized_at, responsible_name, expires_at, consumed_at,
|
|
127
|
+
revoked_at, revoke_reason, first_contact, trigger_kind, credential_fingerprint
|
|
128
|
+
`;
|
|
129
|
+
function mapAuthorization(r) {
|
|
130
|
+
return {
|
|
131
|
+
id: r.id,
|
|
132
|
+
clientId: r.client_id,
|
|
133
|
+
documentType: r.document_type,
|
|
134
|
+
environment: r.environment,
|
|
135
|
+
source: r.source,
|
|
136
|
+
credentialKind: r.credential_kind,
|
|
137
|
+
operation: 'READ_ONLY',
|
|
138
|
+
competence: {
|
|
139
|
+
year: r.competence_year,
|
|
140
|
+
month: r.competence_month,
|
|
141
|
+
label: `${r.competence_year}-${String(r.competence_month).padStart(2, '0')}`,
|
|
142
|
+
periodStart: isoDate(r.period_start),
|
|
143
|
+
periodEnd: isoDate(r.period_end),
|
|
144
|
+
},
|
|
145
|
+
maxRuns: r.max_runs,
|
|
146
|
+
runsConsumed: r.runs_consumed,
|
|
147
|
+
authorizedBy: r.authorized_by,
|
|
148
|
+
authorizedAt: r.authorized_at.toISOString(),
|
|
149
|
+
responsibleName: r.responsible_name,
|
|
150
|
+
firstContact: r.first_contact ?? false,
|
|
151
|
+
triggerKind: r.trigger_kind ?? 'manual',
|
|
152
|
+
credentialFingerprint: r.credential_fingerprint ?? null,
|
|
153
|
+
expiresAt: r.expires_at.toISOString(),
|
|
154
|
+
consumedAt: r.consumed_at?.toISOString() ?? null,
|
|
155
|
+
revokedAt: r.revoked_at?.toISOString() ?? null,
|
|
156
|
+
revokeReason: r.revoke_reason,
|
|
157
|
+
state: stateOf(r),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* A ordem das perguntas importa: revogada vence consumida, que vence vencida.
|
|
162
|
+
*
|
|
163
|
+
* Uma autorização consumida e depois revogada deve aparecer como revogada — é a
|
|
164
|
+
* decisão mais recente, e é a que alguém precisa ver ao investigar.
|
|
165
|
+
*/
|
|
166
|
+
function stateOf(r) {
|
|
167
|
+
if (r.revoked_at)
|
|
168
|
+
return 'revoked';
|
|
169
|
+
if (r.consumed_at)
|
|
170
|
+
return 'consumed';
|
|
171
|
+
if (r.expires_at.getTime() <= Date.now())
|
|
172
|
+
return 'expired';
|
|
173
|
+
return 'live';
|
|
174
|
+
}
|
|
175
|
+
function isoDate(d) {
|
|
176
|
+
return d.toISOString().slice(0, 10);
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=authorization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization.js","sourceRoot":"","sources":["../../../src/fiscal/collection/authorization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A janela da coleta — dita por extenso, nunca deduzida.
|
|
3
|
+
*
|
|
4
|
+
* ## O relato que originou este módulo
|
|
5
|
+
*
|
|
6
|
+
* A equipe do escritório chama de "dar baixa nas notas" o trabalho de, na virada
|
|
7
|
+
* do mês, entrar nos portais e recolher os documentos do período. Ao descrever
|
|
8
|
+
* esse trabalho, o relato humano trouxe exemplos de datas que não fechavam entre
|
|
9
|
+
* si — o que é absolutamente normal em conversa, e absolutamente perigoso como
|
|
10
|
+
* fonte de regra.
|
|
11
|
+
*
|
|
12
|
+
* A tentação é transformar "mês anterior" em constante. O erro que isso produz é
|
|
13
|
+
* silencioso: uma coleta rodada em 01/11 sobre uma janela que ninguém confirmou
|
|
14
|
+
* traz documentos de um período que não é o que a pessoa tinha em mente, e a
|
|
15
|
+
* ausência do que faltava só aparece no fechamento.
|
|
16
|
+
*
|
|
17
|
+
* Aqui a competência é um par ano/mês, e o período é um par de DATAS derivado
|
|
18
|
+
* dele. A sugestão padrão existe — mês calendário anterior —, mas ela é uma
|
|
19
|
+
* SUGESTÃO exibida, não um valor implícito: a tela mostra "serão consultados
|
|
20
|
+
* documentos de DD/MM/AAAA a DD/MM/AAAA" antes de qualquer execução, e as duas
|
|
21
|
+
* datas são gravadas na autorização.
|
|
22
|
+
*/
|
|
23
|
+
export interface FiscalCompetence {
|
|
24
|
+
year: number;
|
|
25
|
+
month: number;
|
|
26
|
+
/** `YYYY-MM`, o mesmo vocabulário de `competence.label` (0026). */
|
|
27
|
+
label: string;
|
|
28
|
+
/** Primeiro dia da competência, `YYYY-MM-DD`. */
|
|
29
|
+
periodStart: string;
|
|
30
|
+
/** Último dia da competência, `YYYY-MM-DD`. Nunca "hoje", nunca 30 fixo. */
|
|
31
|
+
periodEnd: string;
|
|
32
|
+
}
|
|
33
|
+
export declare class InvalidCompetenceError extends Error {
|
|
34
|
+
readonly detail: string;
|
|
35
|
+
constructor(detail: string);
|
|
36
|
+
}
|
|
37
|
+
/** A política padrão desta fase, nomeada para poder ser citada e mudada. */
|
|
38
|
+
export declare const DEFAULT_COMPETENCE_POLICY: "PREVIOUS_CALENDAR_MONTH";
|
|
39
|
+
/**
|
|
40
|
+
* A competência de um par ano/mês.
|
|
41
|
+
*
|
|
42
|
+
* O último dia sai do calendário: `Date.UTC(ano, mês, 0)` — com o mês em base 1
|
|
43
|
+
* — devolve o último dia daquele mês. Fevereiro bissexto sai de graça, que é o
|
|
44
|
+
* ponto de não escrever `30`.
|
|
45
|
+
*/
|
|
46
|
+
export declare function competenceOf(year: number, month: number): FiscalCompetence;
|
|
47
|
+
/**
|
|
48
|
+
* A SUGESTÃO padrão para uma execução feita em `reference`: o mês calendário
|
|
49
|
+
* anterior.
|
|
50
|
+
*
|
|
51
|
+
* Chama-se `suggest` e não `default` de propósito. Uma função chamada
|
|
52
|
+
* `defaultCompetence()` acaba sendo usada como valor efetivo por quem não leu;
|
|
53
|
+
* `suggestCompetenceFor()` obriga quem chama a decidir o que fazer com a
|
|
54
|
+
* sugestão — que é exibi-la ao lado das duas datas.
|
|
55
|
+
*/
|
|
56
|
+
export declare function suggestCompetenceFor(reference: Date): FiscalCompetence;
|
|
57
|
+
/**
|
|
58
|
+
* Confere uma janela informada à mão contra a competência declarada.
|
|
59
|
+
*
|
|
60
|
+
* Permitir janela manual e conferi-la não são opostos: o operador pode querer um
|
|
61
|
+
* recorte menor dentro do mês — o que é legítimo —, mas uma janela que atravessa
|
|
62
|
+
* a competência declarada significa que um dos dois campos está errado, e gravar
|
|
63
|
+
* os dois deixaria a autorização dizendo duas coisas.
|
|
64
|
+
*/
|
|
65
|
+
export declare function validateWindow(competence: FiscalCompetence, periodStart: string, periodEnd: string): void;
|
|
66
|
+
//# sourceMappingURL=competence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"competence.d.ts","sourceRoot":"","sources":["../../../src/fiscal/collection/competence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAIpC;AAED,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAG,yBAAkC,CAAC;AAE5E;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAgB1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,IAAI,GAAG,gBAAgB,CAItE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,gBAAgB,EAC5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,IAAI,CAYN"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A janela da coleta — dita por extenso, nunca deduzida.
|
|
3
|
+
*
|
|
4
|
+
* ## O relato que originou este módulo
|
|
5
|
+
*
|
|
6
|
+
* A equipe do escritório chama de "dar baixa nas notas" o trabalho de, na virada
|
|
7
|
+
* do mês, entrar nos portais e recolher os documentos do período. Ao descrever
|
|
8
|
+
* esse trabalho, o relato humano trouxe exemplos de datas que não fechavam entre
|
|
9
|
+
* si — o que é absolutamente normal em conversa, e absolutamente perigoso como
|
|
10
|
+
* fonte de regra.
|
|
11
|
+
*
|
|
12
|
+
* A tentação é transformar "mês anterior" em constante. O erro que isso produz é
|
|
13
|
+
* silencioso: uma coleta rodada em 01/11 sobre uma janela que ninguém confirmou
|
|
14
|
+
* traz documentos de um período que não é o que a pessoa tinha em mente, e a
|
|
15
|
+
* ausência do que faltava só aparece no fechamento.
|
|
16
|
+
*
|
|
17
|
+
* Aqui a competência é um par ano/mês, e o período é um par de DATAS derivado
|
|
18
|
+
* dele. A sugestão padrão existe — mês calendário anterior —, mas ela é uma
|
|
19
|
+
* SUGESTÃO exibida, não um valor implícito: a tela mostra "serão consultados
|
|
20
|
+
* documentos de DD/MM/AAAA a DD/MM/AAAA" antes de qualquer execução, e as duas
|
|
21
|
+
* datas são gravadas na autorização.
|
|
22
|
+
*/
|
|
23
|
+
export class InvalidCompetenceError extends Error {
|
|
24
|
+
detail;
|
|
25
|
+
constructor(detail) {
|
|
26
|
+
super(`competência inválida: ${detail}`);
|
|
27
|
+
this.detail = detail;
|
|
28
|
+
this.name = 'InvalidCompetenceError';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** A política padrão desta fase, nomeada para poder ser citada e mudada. */
|
|
32
|
+
export const DEFAULT_COMPETENCE_POLICY = 'PREVIOUS_CALENDAR_MONTH';
|
|
33
|
+
/**
|
|
34
|
+
* A competência de um par ano/mês.
|
|
35
|
+
*
|
|
36
|
+
* O último dia sai do calendário: `Date.UTC(ano, mês, 0)` — com o mês em base 1
|
|
37
|
+
* — devolve o último dia daquele mês. Fevereiro bissexto sai de graça, que é o
|
|
38
|
+
* ponto de não escrever `30`.
|
|
39
|
+
*/
|
|
40
|
+
export function competenceOf(year, month) {
|
|
41
|
+
if (!Number.isInteger(year) || year < 2000 || year > 2100) {
|
|
42
|
+
throw new InvalidCompetenceError('ano fora de 2000–2100');
|
|
43
|
+
}
|
|
44
|
+
if (!Number.isInteger(month) || month < 1 || month > 12) {
|
|
45
|
+
throw new InvalidCompetenceError('mês fora de 1–12');
|
|
46
|
+
}
|
|
47
|
+
const mm = String(month).padStart(2, '0');
|
|
48
|
+
const lastDay = new Date(Date.UTC(year, month, 0)).getUTCDate();
|
|
49
|
+
return {
|
|
50
|
+
year,
|
|
51
|
+
month,
|
|
52
|
+
label: `${year}-${mm}`,
|
|
53
|
+
periodStart: `${year}-${mm}-01`,
|
|
54
|
+
periodEnd: `${year}-${mm}-${String(lastDay).padStart(2, '0')}`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A SUGESTÃO padrão para uma execução feita em `reference`: o mês calendário
|
|
59
|
+
* anterior.
|
|
60
|
+
*
|
|
61
|
+
* Chama-se `suggest` e não `default` de propósito. Uma função chamada
|
|
62
|
+
* `defaultCompetence()` acaba sendo usada como valor efetivo por quem não leu;
|
|
63
|
+
* `suggestCompetenceFor()` obriga quem chama a decidir o que fazer com a
|
|
64
|
+
* sugestão — que é exibi-la ao lado das duas datas.
|
|
65
|
+
*/
|
|
66
|
+
export function suggestCompetenceFor(reference) {
|
|
67
|
+
const year = reference.getUTCFullYear();
|
|
68
|
+
const month = reference.getUTCMonth() + 1; // base 1
|
|
69
|
+
return month === 1 ? competenceOf(year - 1, 12) : competenceOf(year, month - 1);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Confere uma janela informada à mão contra a competência declarada.
|
|
73
|
+
*
|
|
74
|
+
* Permitir janela manual e conferi-la não são opostos: o operador pode querer um
|
|
75
|
+
* recorte menor dentro do mês — o que é legítimo —, mas uma janela que atravessa
|
|
76
|
+
* a competência declarada significa que um dos dois campos está errado, e gravar
|
|
77
|
+
* os dois deixaria a autorização dizendo duas coisas.
|
|
78
|
+
*/
|
|
79
|
+
export function validateWindow(competence, periodStart, periodEnd) {
|
|
80
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(periodStart) || !/^\d{4}-\d{2}-\d{2}$/.test(periodEnd)) {
|
|
81
|
+
throw new InvalidCompetenceError('datas devem estar em YYYY-MM-DD');
|
|
82
|
+
}
|
|
83
|
+
if (periodEnd < periodStart) {
|
|
84
|
+
throw new InvalidCompetenceError('data final anterior à inicial');
|
|
85
|
+
}
|
|
86
|
+
if (periodStart < competence.periodStart || periodEnd > competence.periodEnd) {
|
|
87
|
+
throw new InvalidCompetenceError(`janela ${periodStart}..${periodEnd} sai da competência ${competence.label}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=competence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"competence.js","sourceRoot":"","sources":["../../../src/fiscal/collection/competence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAaH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC1B;IAArB,YAAqB,MAAc;QACjC,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;QADtB,WAAM,GAAN,MAAM,CAAQ;QAEjC,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAkC,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAa;IACtD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAChE,OAAO;QACL,IAAI;QACJ,KAAK;QACL,KAAK,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE;QACtB,WAAW,EAAE,GAAG,IAAI,IAAI,EAAE,KAAK;QAC/B,SAAS,EAAE,GAAG,IAAI,IAAI,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;KAC/D,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAe;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS;IACpD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAClF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,UAA4B,EAC5B,WAAmB,EACnB,SAAiB;IAEjB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACvF,MAAM,IAAI,sBAAsB,CAAC,iCAAiC,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,SAAS,GAAG,WAAW,EAAE,CAAC;QAC5B,MAAM,IAAI,sBAAsB,CAAC,+BAA+B,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QAC7E,MAAM,IAAI,sBAAsB,CAC9B,UAAU,WAAW,KAAK,SAAS,uBAAuB,UAAU,CAAC,KAAK,EAAE,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC"}
|