Nota fiscal

6 funções do TermoPortal para nota fiscal.

// npm install termo_core --save-exact
import * as portal from "termo_core/portal";
// ou: import { portal } from "termo_core";
FunçãoRotaO que faz
buscar_paginador_nota_fiscalGET /nota_fiscalUma página das notas fiscais, por cursor
buscar_informacoes_paginador_nota_fiscalGET /nota_fiscal/paginadorTotal, páginas e contagens das notas fiscais
buscar_sincronizacao_nota_fiscalGET /nota_fiscal/sincronizacaoStatus da sincronização das notas fiscais
iniciar_sincronizacao_nota_fiscalPOST /nota_fiscal/sincronizacaoInicia a sincronização das notas fiscais em segundo plano
cancelar_sincronizacao_nota_fiscalDELETE /nota_fiscal/sincronizacaoCancela a sincronização das notas fiscais em andamento
buscar_pelo_id_nota_fiscalGET /nota_fiscal/{id}Busca uma nota fiscal pelo id do Tiny

buscar_paginador_nota_fiscal

GET/nota_fiscal Exige credencial

Uma página das notas fiscais, por cursor

Exige a permissão ver no módulo Financeiro do perfil de quem chama (administrador e master têm tudo). Lê a tabela nota_fiscal, que o backend sincroniza sozinho com as notas emitidas no Tiny (pela API da Termotubos), com parcelas e situação financeira; a emissão mais recente vem primeiro e a resposta é só o array das 50 notas da página. Quem não é colaborador interno precisa informar unidade_id de uma unidade da sessão e só vê as notas do CNPJ dela; colaborador interno pode omitir e ver todas. Filtros: filtro (todas, hoje, mes; padrão todas; hoje e mes trocam o período), busca (CPF/CNPJ, número da nota ou nome do cliente), inicio e fim (AAAA-MM-DD) e vendedor (id no Tiny, só colaborador). A paginação é por cursor: a primeira página vai sem cursor e a seguinte manda em cursor o id da última nota recebida. Total, páginas e contagens vêm de GET /nota_fiscal/paginador, com o mesmo filtro.

function buscar_paginador_nota_fiscal(
  credencial_de_acesso: CredencialDeAcesso,
  parametros: ParametrosDeBuscarPaginadorNotaFiscal = {},
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<Array<tipos.NotaFiscal>>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { buscar_paginador_nota_fiscal } from "termo_core/portal";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_paginador_nota_fiscal(credencial_de_acesso, { filtro: "..." });

Argumentos

Nome

Tipo

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

buscar_informacoes_paginador_nota_fiscal

GET/nota_fiscal/paginador Exige credencial

Total, páginas e contagens das notas fiscais

Mesma permissão, mesmos filtros e mesma regra de unidade de GET /nota_fiscal (o cursor é ignorado). Devolve total e paginas com o filtro escolhido, tamanho (50), sincronizado_em (a última sincronização; nulo se nunca houve) e contagens (todas, hoje, mes), que usam os outros filtros e trocam o período pelo do bloco.

function buscar_informacoes_paginador_nota_fiscal(
  credencial_de_acesso: CredencialDeAcesso,
  parametros: ParametrosDeBuscarInformacoesPaginadorNotaFiscal = {},
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.NotaFiscalPaginador>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { buscar_informacoes_paginador_nota_fiscal } from "termo_core/portal";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_informacoes_paginador_nota_fiscal(credencial_de_acesso, { filtro: "..." });

Argumentos

Nome

Tipo

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

buscar_sincronizacao_nota_fiscal

GET/nota_fiscal/sincronizacao Exige credencial

Status da sincronização das notas fiscais

Só colaborador interno com ver no módulo Financeiro. Devolve a sincronização em andamento ou a última que terminou: rodando, pagina de total_paginas (páginas da API), progresso (percentual), gravados, cancelada, concluida, erro, iniciada_em e terminada_em.

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

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

Argumentos

Nome

Tipo

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

iniciar_sincronizacao_nota_fiscal

POST/nota_fiscal/sincronizacao Exige credencial

Inicia a sincronização das notas fiscais em segundo plano

Só colaborador interno com ver no módulo Financeiro. Traz as notas fiscais emitidas no Tiny (pela API de notas fiscais da Termotubos) para a tabela nota_fiscal, com as parcelas lidas do XML das notas válidas que ainda não as têm, sem filtro de data (histórico inteiro), lote por lote, em segundo plano no servidor: a tela pode ser fechada. Responde 202 com o status inicial; acompanhe por GET /nota_fiscal/sincronizacao. O status fica em memória e se perde se o servidor reiniciar.

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

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

Argumentos

Nome

Tipo

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

cancelar_sincronizacao_nota_fiscal

DELETE/nota_fiscal/sincronizacao Exige credencial

Cancela a sincronização das notas fiscais em andamento

Só colaborador interno com ver no módulo Financeiro. Para antes do próximo lote; o que já foi gravado fica.

function cancelar_sincronizacao_nota_fiscal(
  credencial_de_acesso: CredencialDeAcesso,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<void>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { cancelar_sincronizacao_nota_fiscal } from "termo_core/portal";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
await cancelar_sincronizacao_nota_fiscal(credencial_de_acesso);

Argumentos

Nome

Tipo

Retorno: Promise<void> · Rust: Result<(), ErroAoChamarServico> · sem corpo na resposta.

buscar_pelo_id_nota_fiscal

GET/nota_fiscal/{id} Exige credencial

Busca uma nota fiscal pelo id do Tiny

Exige a permissão ver no módulo Financeiro do perfil de quem chama (administrador e master têm tudo). Lê a nota da tabela nota_fiscal com itens, parcelas (vencimento, valor, situação) e situação financeira. Com xml=1, devolve o XML da nota como download (application/xml), buscado na hora na API da Termotubos. Quem não é colaborador interno só abre notas do CNPJ das próprias unidades (as outras respondem 404).

function buscar_pelo_id_nota_fiscal(
  credencial_de_acesso: CredencialDeAcesso,
  id: number,
  parametros: ParametrosDeBuscarPeloIdNotaFiscal = {},
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.NotaFiscal>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { buscar_pelo_id_nota_fiscal } from "termo_core/portal";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_pelo_id_nota_fiscal(credencial_de_acesso, id, { xml: "..." });

Argumentos

Nome

Tipo

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

Tipos

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

ContagemNotasFiscais

import type { ContagemNotasFiscais } from "termo_core/portal";

export interface ContagemNotasFiscais {
  hoje: number;
  mes: number;
  todas: number;
}

ItemNotaFiscal

import type { ItemNotaFiscal } from "termo_core/portal";

export interface ItemNotaFiscal {
  descricao?: string | null;
  preco_unitario?: number | null;
  quantidade?: number | null;
  sku?: string | null;
  total?: number | null;
  unidade?: string | null;
}

NotaFiscal

import type { NotaFiscal } from "termo_core/portal";

export type NotaFiscal = NotaFiscalTermotubos & NotaFiscalParte2;

NotaFiscalPaginador

import type { NotaFiscalPaginador } from "termo_core/portal";

export interface NotaFiscalPaginador {
  contagens: ContagemNotasFiscais;
  paginas: number;
  sincronizado_em?: string | null;
  tamanho: number;
  total: number;
}

NotaFiscalParte2

import type { NotaFiscalParte2 } from "termo_core/portal";

export interface NotaFiscalParte2 {
  parcelas: Array<ParcelaNotaFiscal>;
  parcelas_lidas: boolean;
  proximo_vencimento?: string | null;
  sincronizado_em?: string | null;
  situacao_financeira: string;
  tom: string;
}

NotaFiscalTermotubos

import type { NotaFiscalTermotubos } from "termo_core/portal";

export interface NotaFiscalTermotubos {
  chave_acesso?: string | null;
  cliente?: string | null;
  cliente_documento?: string | null;
  cliente_tiny_id?: number | null;
  condicao_pagamento?: string | null;
  emissao?: string | null;
  frete?: number | null;
  id: number;
  itens: Array<ItemNotaFiscal>;
  natureza?: string | null;
  nota_tiny_id?: number | null;
  numero?: number | null;
  outros?: number | null;
  pedido_numero?: number | null;
  serie?: string | null;
  situacao?: string | null;
  situacao_id?: number | null;
  transportadora?: string | null;
  valor_produtos?: number | null;
  valor_total?: number | null;
  vendedor?: string | null;
  vendedor_tiny_id?: number | null;
}

ParcelaNotaFiscal

import type { ParcelaNotaFiscal } from "termo_core/portal";

export interface ParcelaNotaFiscal {
  forma_pagamento?: string | null;
  numero: string;
  parcela: number;
  parcelas: number;
  situacao: string;
  tom: string;
  valor: number;
  vencimento: string;
}

StatusSincronizacaoNotasFiscais

import type { StatusSincronizacaoNotasFiscais } from "termo_core/portal";

export interface StatusSincronizacaoNotasFiscais {
  cancelada: boolean;
  concluida: boolean;
  erro?: string | null;
  gravados: number;
  iniciada_em?: string | null;
  pagina: number;
  progresso: number;
  rodando: boolean;
  terminada_em?: string | null;
  total_paginas: number;
}

Nesta página