Importar

8 funções do TermoLeads para importar.

// npm install termo_core --save-exact
import * as leads from "termo_core/leads";
// ou: import { leads } from "termo_core";
FunçãoRotaO que faz
cancelar_importarPOST /api/importar/cancelarCancela a importação em andamento
iniciar_importarPOST /api/importar/iniciarInicia a importação da base CNPJ da Receita Federal
relatorios_importarGET /api/importar/relatoriosLista o histórico das importações
sincronizar_importarPOST /api/importar/sincronizarEnvia a base CNPJ local para sandbox ou production
sincronizar_cancelar_importarPOST /api/importar/sincronizar/cancelarCancela a sincronização em andamento
sincronizar_pontos_importarGET /api/importar/sincronizar/pontosLista os pontos de retomada salvos
sincronizar_status_importarGET /api/importar/sincronizar/statusMostra o progresso da sincronização
status_importarGET /api/importar/statusMostra o progresso da importação

cancelar_importar

POST/api/importar/cancelar Exige credencial

Cancela a importação em andamento

Exige o usuário master (token do TermoAuth com isMaster) e só roda no localhost (APP_ENV=development); em sandbox e production responde 403. Pede o cancelamento da importação em andamento; ela para no próximo ponto seguro e a base em uso não é alterada. Não tem corpo. Sem importação em andamento, ou com o cancelamento já pedido, não faz nada. Devolve o progresso atual, com cancelando em true quando o pedido foi aceito.

function cancelar_importar(
  credencial_de_acesso: CredencialDeAcesso,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.ImportProgress>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { cancelar_importar } from "termo_core/leads";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await cancelar_importar(credencial_de_acesso);

Argumentos

Nome

Tipo

Retorno: Promise<tipos.ImportProgress> · Rust: Result<tipos::ImportProgress, ErroAoChamarServico> · veja ImportProgress.

iniciar_importar

POST/api/importar/iniciar Exige credencial

Inicia a importação da base CNPJ da Receita Federal

Exige o usuário master (token do TermoAuth com isMaster) e só roda no localhost (APP_ENV=development); em sandbox e production responde 403. Dispara em segundo plano a importação completa da base CNPJ: baixa o mês mais recente publicado pela Receita, monta a base nova e só no fim troca a base em uso, que continua respondendo durante todo o processo. Operação pesada, que leva horas. Não tem corpo. Se já houver uma importação em andamento, não começa outra e devolve o progresso dela. A resposta é o progresso no momento do pedido; o andamento se acompanha em GET /api/importar/status.

function iniciar_importar(
  credencial_de_acesso: CredencialDeAcesso,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.ImportProgress>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { iniciar_importar } from "termo_core/leads";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await iniciar_importar(credencial_de_acesso);

Argumentos

Nome

Tipo

Retorno: Promise<tipos.ImportProgress> · Rust: Result<tipos::ImportProgress, ErroAoChamarServico> · veja ImportProgress.

relatorios_importar

GET/api/importar/relatorios Exige credencial

Lista o histórico das importações

Exige o usuário master (token do TermoAuth com isMaster) e só roda no localhost (APP_ENV=development); em sandbox e production responde 403. Devolve as últimas 50 importações registradas, da mais recente para a mais antiga, sem paginação: mês importado, status (executando, concluido, concluido_com_falhas, erro ou cancelado), início e fim (data e hora em RFC 3339), arquivos processados, total de linhas e o erro, se houve. Se o banco falhar, devolve a lista vazia.

function relatorios_importar(
  credencial_de_acesso: CredencialDeAcesso,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<Array<tipos.ImportResumo>>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { relatorios_importar } from "termo_core/leads";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await relatorios_importar(credencial_de_acesso);

Argumentos

Nome

Tipo

Retorno: Promise<Array<tipos.ImportResumo>> · Rust: Result<Vec<tipos::ImportResumo>, ErroAoChamarServico>

sincronizar_importar

POST/api/importar/sincronizar Exige credencial

Envia a base CNPJ local para sandbox ou production

Exige o usuário master e só roda no localhost (APP_ENV=development). Lê a tabela cnpj local em lotes (padrão 1.000 linhas, SINCRONIZAR_LOTE) e manda cada um, um por vez, para POST /api/micro_servico/cnpj/lote do ambiente escolhido, com a chave GLOBAL_SECRET_API_MICRO_SERVICE do .env local. Falha de rede ou 5xx tenta de novo até 6 vezes. Com retomarDe (14 dígitos), continua depois daquele CNPJ. Cada lote confirmado grava o último CNPJ no banco local (GET /api/importar/sincronizar/pontos), que é apagado quando a sincronização termina com sucesso. Não começa durante uma importação; se já houver uma sincronização em andamento, devolve o progresso dela.

function sincronizar_importar(
  credencial_de_acesso: CredencialDeAcesso,
  corpo_da_requisicao: tipos.SincronizarCnpjInput,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.SincronizacaoProgress>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { sincronizar_importar } from "termo_core/leads";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await sincronizar_importar(credencial_de_acesso, corpo_da_requisicao);

Argumentos

Nome

Tipo

Retorno: Promise<tipos.SincronizacaoProgress> · Rust: Result<tipos::SincronizacaoProgress, ErroAoChamarServico> · veja SincronizacaoProgress.

sincronizar_cancelar_importar

POST/api/importar/sincronizar/cancelar Exige credencial

Cancela a sincronização em andamento

Exige o usuário master e só roda no localhost. Para depois do lote que está sendo enviado; ultimoCnpj fica como ponto de retomada. Não tem corpo.

function sincronizar_cancelar_importar(
  credencial_de_acesso: CredencialDeAcesso,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.SincronizacaoProgress>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { sincronizar_cancelar_importar } from "termo_core/leads";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await sincronizar_cancelar_importar(credencial_de_acesso);

Argumentos

Nome

Tipo

Retorno: Promise<tipos.SincronizacaoProgress> · Rust: Result<tipos::SincronizacaoProgress, ErroAoChamarServico> · veja SincronizacaoProgress.

sincronizar_pontos_importar

GET/api/importar/sincronizar/pontos Exige credencial

Lista os pontos de retomada salvos

Exige o usuário master e só roda no localhost. Devolve, por ambiente, o último CNPJ confirmado pelo destino, gravado no banco local a cada lote. Sobrevive a um reinício do backend local; some quando a sincronização daquele ambiente termina com sucesso.

function sincronizar_pontos_importar(
  credencial_de_acesso: CredencialDeAcesso,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<Array<tipos.PontoSincronizacao>>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { sincronizar_pontos_importar } from "termo_core/leads";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await sincronizar_pontos_importar(credencial_de_acesso);

Argumentos

Nome

Tipo

Retorno: Promise<Array<tipos.PontoSincronizacao>> · Rust: Result<Vec<tipos::PontoSincronizacao>, ErroAoChamarServico>

sincronizar_status_importar

GET/api/importar/sincronizar/status Exige credencial

Mostra o progresso da sincronização

Exige o usuário master e só roda no localhost. Devolve o destino, as linhas enviadas e gravadas, os lotes, o último CNPJ confirmado, o erro e as últimas 200 linhas do log.

function sincronizar_status_importar(
  credencial_de_acesso: CredencialDeAcesso,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.SincronizacaoProgress>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { sincronizar_status_importar } from "termo_core/leads";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await sincronizar_status_importar(credencial_de_acesso);

Argumentos

Nome

Tipo

Retorno: Promise<tipos.SincronizacaoProgress> · Rust: Result<tipos::SincronizacaoProgress, ErroAoChamarServico> · veja SincronizacaoProgress.

status_importar

GET/api/importar/status Exige credencial

Mostra o progresso da importação

Exige o usuário master (token do TermoAuth com isMaster) e só roda no localhost (APP_ENV=development); em sandbox e production responde 403. Devolve o progresso da importação da execução atual do servidor: etapa (vazia antes da primeira importação, depois preparando, baixando, importando, montagem, indices ou concluido), running, finalizado, cancelando, o mês importado em mes (AAAA-MM), o download dos arquivos, os arquivos processados com linhas lidas e descartadas, a montagem por faixas, as falhas, o erro final e as últimas 200 linhas do log. Sem importação desde que o servidor subiu, os campos vêm vazios ou zerados.

function status_importar(
  credencial_de_acesso: CredencialDeAcesso,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.ImportProgress>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { status_importar } from "termo_core/leads";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await status_importar(credencial_de_acesso);

Argumentos

Nome

Tipo

Retorno: Promise<tipos.ImportProgress> · Rust: Result<tipos::ImportProgress, ErroAoChamarServico> · veja ImportProgress.

Tipos

Tipos usados pelas funções desta página. O nome é o mesmo nos dois pacotes.

ArquivoStatus

Estado de um arquivo individual no lote.

import type { ArquivoStatus } from "termo_core/leads";

export interface ArquivoStatus {
  /**
   * Bytes baixados
   */
  bytes: number;
  /**
   * `pendente`, `baixando`, `concluido` ou `falha`
   */
  estado: string;
  /**
   * Nome do arquivo
   */
  nome: string;
  /**
   * Tamanho do arquivo em bytes, quando conhecido
   */
  total?: number | null;
}

DownloadProgress

Progresso do download, serializado para o frontend dentro do progresso da importação.

import type { DownloadProgress } from "termo_core/leads";

export interface DownloadProgress {
  /**
   * Situação do download de cada arquivo
   */
  arquivos: Array<ArquivoStatus>;
  /**
   * Quantidade de arquivos já baixados
   */
  arquivosConcluidos: number;
  /**
   * Total de bytes baixados
   */
  bytesBaixados: number;
  /**
   * Total de bytes a baixar, quando conhecido
   */
  bytesTotal?: number | null;
  /**
   * Mensagens dos arquivos cujo download falhou
   */
  falhas: Array<string>;
  /**
   * Quantidade de arquivos a baixar
   */
  totalArquivos: number;
}

ImportArquivo

Estado de um arquivo individual no lote de importação.

import type { ImportArquivo } from "termo_core/leads";

export interface ImportArquivo {
  /**
   * Bytes já lidos
   */
  bytesLidos: number;
  /**
   * Tamanho do arquivo descompactado, em bytes
   */
  bytesTotal: number;
  /**
   * Registros malformados descartados
   */
  descartadas: number;
  /**
   * Erro do arquivo, quando falhou
   */
  erro?: string | null;
  /**
   * `pendente`, `importando`, `concluido` ou `falha`
   */
  estado: string;
  /**
   * Linhas lidas
   */
  linhas: number;
  /**
   * Nome do arquivo
   */
  nome: string;
  /**
   * Destino dos dados do arquivo
   */
  tabela: string;
}

ImportProgress

Estado global da importação, serializado para o frontend.

import type { ImportProgress } from "termo_core/leads";

export interface ImportProgress {
  /**
   * Situação de cada arquivo processado
   */
  arquivos: Array<ImportArquivo>;
  /**
   * Quantidade de arquivos já processados
   */
  arquivosConcluidos: number;
  /**
   * `true` depois que o cancelamento foi pedido
   */
  cancelando: boolean;
  /**
   * Progresso do download dos arquivos da Receita
   */
  download: DownloadProgress;
  /**
   * Erro que interrompeu a importação, quando houve
   */
  erro?: string | null;
  /**
   * Etapa atual: vazia antes da primeira importação, depois `preparando`, `baixando`, `importando`, `montagem`, `indices` ou `concluido`
   */
  etapa: string;
  /**
   * Faixa em montagem
   */
  faixaAtual: number;
  /**
   * Quantidade de faixas da montagem da base
   */
  faixasTotal: number;
  /**
   * Mensagens dos arquivos que falharam
   */
  falhas: Array<string>;
  /**
   * `true` quando a última importação terminou, com sucesso, erro ou cancelamento
   */
  finalizado: boolean;
  /**
   * Total de registros malformados descartados
   */
  linhasDescartadasTotal: number;
  /**
   * Total de linhas lidas
   */
  linhasTotal: number;
  /**
   * Últimas 200 linhas do log da importação
   */
  log: Array<string>;
  /**
   * Mês da base importada, no formato AAAA-MM, conhecido depois do download
   */
  mes?: string | null;
  /**
   * Quantidade de estabelecimentos já montados
   */
  montagemFeitas: number;
  /**
   * Quantidade de estabelecimentos a montar
   */
  montagemTotal: number;
  /**
   * `true` enquanto a importação está em andamento
   */
  running: boolean;
  /**
   * Quantidade de arquivos a processar
   */
  totalArquivos: number;
}

ImportResumo

Resumo de uma execução de importação para o relatório no frontend.

import type { ImportResumo } from "termo_core/leads";

export interface ImportResumo {
  /**
   * Quantidade de arquivos processados sem falha
   */
  arquivosOk: number;
  /**
   * Erro da execução, quando houve
   */
  erro?: string | null;
  /**
   * Fim da execução, data e hora em RFC 3339; nulo enquanto executa
   */
  finalizadoEm?: string | null;
  /**
   * Id da execução (UUID)
   */
  id: string;
  /**
   * Início da execução, data e hora em RFC 3339
   */
  iniciadoEm?: string | null;
  /**
   * Total de linhas lidas
   */
  linhasTotal: number;
  /**
   * Mês da base importada, no formato AAAA-MM
   */
  mes?: string | null;
  /**
   * `executando`, `concluido`, `concluido_com_falhas`, `erro` ou `cancelado`
   */
  status: string;
  /**
   * Quantidade de arquivos da importação
   */
  totalArquivos: number;
}

PontoSincronizacao

Ponto de retomada salvo de um ambiente.

import type { PontoSincronizacao } from "termo_core/leads";

export interface PontoSincronizacao {
  /**
   * Destino: `sandbox` ou `production`
   */
  ambiente: string;
  /**
   * Quando o ponto foi gravado, data e hora em RFC 3339
   */
  atualizadoEm: string;
  /**
   * Último CNPJ confirmado pelo destino, salvo no banco local
   */
  ultimoCnpj: string;
}

SincronizacaoProgress

import type { SincronizacaoProgress } from "termo_core/leads";

export interface SincronizacaoProgress {
  /**
   * Destino: `sandbox` ou `production`
   */
  ambiente: string;
  /**
   * `true` depois que o cancelamento foi pedido
   */
  cancelando: boolean;
  /**
   * URL base do backend de destino
   */
  destino: string;
  /**
   * Linhas enviadas e confirmadas pelo destino nesta execução
   */
  enviados: number;
  /**
   * Erro que interrompeu a sincronização, quando houve
   */
  erro?: string | null;
  /**
   * `true` quando a última sincronização terminou, com sucesso, erro ou cancelamento
   */
  finalizado: boolean;
  /**
   * Linhas que o destino inseriu ou alterou
   */
  gravados: number;
  /**
   * Linhas da tabela local até o CNPJ de retomada, enviadas numa execução anterior; zero quando começa do início
   */
  jaSincronizados: number;
  /**
   * Últimas 200 linhas do log da sincronização
   */
  log: Array<string>;
  /**
   * Lotes enviados
   */
  lotes: number;
  /**
   * `true` enquanto a sincronização está em andamento
   */
  running: boolean;
  /**
   * Total aproximado de linhas da tabela `cnpj` local
   */
  totalEstimado: number;
  /**
   * Último CNPJ confirmado pelo destino, ponto de retomada
   */
  ultimoCnpj?: string | null;
}

SincronizarCnpjInput

import type { SincronizarCnpjInput } from "termo_core/leads";

export interface SincronizarCnpjInput {
  /**
   * Destino da sincronização: `sandbox` ou `production`
   */
  ambiente: string;
  /**
   * Continua depois deste CNPJ (retomada de uma sincronização interrompida); vazio começa do início
   */
  retomarDe?: string | null;
}

Nesta página