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ção | Rota | O que faz |
|---|---|---|
buscar_paginador_nota_fiscal | GET /nota_fiscal | Uma página das notas fiscais, por cursor |
buscar_informacoes_paginador_nota_fiscal | GET /nota_fiscal/paginador | Total, páginas e contagens das notas fiscais |
buscar_sincronizacao_nota_fiscal | GET /nota_fiscal/sincronizacao | Status da sincronização das notas fiscais |
iniciar_sincronizacao_nota_fiscal | POST /nota_fiscal/sincronizacao | Inicia a sincronização das notas fiscais em segundo plano |
cancelar_sincronizacao_nota_fiscal | DELETE /nota_fiscal/sincronizacao | Cancela a sincronização das notas fiscais em andamento |
buscar_pelo_id_nota_fiscal | GET /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>>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>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>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>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>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>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;
}