Cotação

7 funções do TermoPortal para cotação.

// 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_cotacaoGET /cotacaoLista as cotações paginadas
criar_cotacaoPOST /cotacaoCria uma cotação (carrinho enviado)
buscar_auto_complete_cotacaoGET /cotacao/autocompleteLista básica de cotações para seleção
buscar_pelo_filtro_cotacaoGET /cotacao/filtroBusca cotações por filtro
buscar_pelo_id_cotacaoGET /cotacao/{id}Busca uma cotação pelo id
atualizar_pelo_id_cotacaoPATCH /cotacao/{id}Muda o status de uma cotação
deletar_pelo_id_cotacaoDELETE /cotacao/{id}Exclui uma cotação

buscar_paginador_cotacao

GET/cotacao Exige credencial

Lista as cotações paginadas

Exige a permissão ver no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Das mais novas para as mais antigas; status opcional. Quem não é colaborador interno precisa informar unidade_id de uma unidade da própria sessão; colaborador interno pode omitir e vê todas. Paginado com 50 itens por página (fixo); pagina começa em 1 (padrão 1). A resposta traz itens, total (registros que casam), pagina e tamanho.

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

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

Argumentos

Nome

Tipo

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

criar_cotacao

POST/cotacao Exige credencial

Cria uma cotação (carrinho enviado)

Exige a permissão criar no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Monta a cotação no servidor a partir dos itens (produto_id, quantidade acima de zero e até 9999, embalagem_fechada, preco_unitario visto pelo cliente), com 1 a 200 itens e sem produto repetido. Recalcula preços por faixa, confere total_esperado e grava com o status inicial. A unidade precisa ser da sessão (colaborador interno acessa todas) e, para quem não é colaborador interno, o autor é sempre quem chama. acima_do_limite indica que a cotação passa o limite de faturamento da unidade. Campos: unidade_id (uuid) é a unidade compradora, da sessão; autor_cliente_id é a pessoa autora (uuid; para quem não é colaborador interno vale sempre a própria pessoa); itens é a lista de 1 a 200 itens, cada um com produto_id, quantidade, embalagem_fechada e preco_unitario; economia_tier é a economia do grupo de cliente vista no carrinho (decimal, informativo).

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

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

Argumentos

Nome

Tipo

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

buscar_auto_complete_cotacao

GET/cotacao/autocomplete Exige credencial

Lista básica de cotações para seleção

Exige a permissão ver no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Devolve id e rotulo (unidade, autor e data), em ordem da razão social. busca procura na razão social e no autor. Quem não é colaborador interno precisa informar unidade_id de uma unidade da própria sessão; colaborador interno pode omitir e vê todas. tamanho tem padrão 10 e vai de 1 a 50; pagina começa em 1. A resposta traz itens, total, pagina e tamanho.

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

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

Argumentos

Nome

Tipo

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

buscar_pelo_filtro_cotacao

GET/cotacao/filtro Exige credencial

Busca cotações por filtro

Exige a permissão ver no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Devolve as cotações não excluídas que casam com o filtro, até 50 por página (pagina, a partir de 1, padrão 1), das mais novas para as mais antigas. Quem não é colaborador interno precisa informar unidade_id de uma unidade da própria sessão; colaborador interno pode omitir e vê todas. autor_cliente_id e status (rascunho, esperando_aprovacao, concluido, nao_aprovado, em_transporte) são exatos.

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

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

Argumentos

Nome

Tipo

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

buscar_pelo_id_cotacao

GET/cotacao/{id} Exige credencial

Busca uma cotação pelo id

Exige a permissão ver no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Cotação excluída, ou de unidade fora da sessão, responde 404. Traz itens e totais.

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

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_pelo_id_cotacao(credencial_de_acesso, id);

Argumentos

Nome

Tipo

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

atualizar_pelo_id_cotacao

PATCH/cotacao/{id} Exige credencial

Muda o status de uma cotação

Exige a permissão editar no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Muda status (rascunho, esperando_aprovacao, concluido, nao_aprovado, em_transporte). Só colaborador interno marca concluido ou em_transporte; aprovar cotação acima do limite de faturamento exige confirmar_acima_do_limite: true. Cotação de unidade fora da sessão responde 404. Atualização parcial: campo ausente mantém o valor atual. Campos: confirmar_acima_do_limite (booleano) confirma o aviso de limite de faturamento ao aprovar.

function atualizar_pelo_id_cotacao(
  credencial_de_acesso: CredencialDeAcesso,
  id: string,
  corpo_da_requisicao: tipos.CotacaoAtualizar,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.Cotacao>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { atualizar_pelo_id_cotacao } from "termo_core/portal";

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

Argumentos

Nome

Tipo

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

deletar_pelo_id_cotacao

DELETE/cotacao/{id} Exige credencial

Exclui uma cotação

Exige a permissão excluir no módulo Cotacoes do perfil de quem chama (administrador e master têm tudo). Cotação de unidade fora da sessão responde 404. A exclusão é lógica: o registro some das leituras, mas a linha não é apagada.

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

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
await deletar_pelo_id_cotacao(credencial_de_acesso, id);

Argumentos

Nome

Tipo

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

Tipos

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

Cotacao

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

export interface Cotacao {
  acima_do_limite: boolean;
  atualizado_em: string;
  autor_cliente_id: string;
  autor_nome: string;
  criado_em: string;
  desconto: number;
  economia_tier?: number | null;
  id: string;
  itens: Array<CotacaoItem>;
  quantidade_itens: number;
  status: string;
  subtotal: number;
  total: number;
  total_skus: number;
  unidade_id: string;
  unidade_razao_social: string;
  valor_frete: number;
}

CotacaoAtualizar

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

export interface CotacaoAtualizar {
  confirmar_acima_do_limite?: boolean | null;
  status?: string | null;
}

CotacaoCriar

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

export interface CotacaoCriar {
  autor_cliente_id: string;
  economia_tier?: number | null;
  itens: Array<CotacaoItemCriar>;
  total_esperado?: number | null;
  unidade_id: string;
}

CotacaoItem

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

export interface CotacaoItem {
  embalagem_fechada: boolean;
  imagem_url?: string | null;
  incremento_minimo: number;
  nome: string;
  preco_unitario: number;
  produto_id: string;
  quantidade: number;
  quantidade_minima: number;
  sku: string;
  unidade: string;
  unidade_medida: string;
}

CotacaoItemCriar

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

export interface CotacaoItemCriar {
  embalagem_fechada?: boolean | null;
  preco_unitario?: number | null;
  produto_id: string;
  quantidade: number;
}

PaginaCotacao

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

export interface PaginaCotacao {
  itens: Array<PaginaCotacaoItensItem>;
  pagina: number;
  tamanho: number;
  total: number;
}

PaginaCotacaoAutoComplete

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

export interface PaginaCotacaoAutoComplete {
  itens: Array<PaginaCotacaoAutoCompleteItensItem>;
  pagina: number;
  tamanho: number;
  total: number;
}

PaginaCotacaoAutoCompleteItensItem

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

export interface PaginaCotacaoAutoCompleteItensItem {
  id: string;
  rotulo: string;
}

PaginaCotacaoItensItem

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

export interface PaginaCotacaoItensItem {
  acima_do_limite: boolean;
  atualizado_em: string;
  autor_cliente_id: string;
  autor_nome: string;
  criado_em: string;
  desconto: number;
  economia_tier?: number | null;
  id: string;
  itens: Array<CotacaoItem>;
  quantidade_itens: number;
  status: string;
  subtotal: number;
  total: number;
  total_skus: number;
  unidade_id: string;
  unidade_razao_social: string;
  valor_frete: number;
}

Nesta página