Produto

7 funções do TermoPortal para produto.

// 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_produtoGET /produtoLista os produtos paginados
criar_produtoPOST /produtoCadastra um produto
buscar_auto_complete_produtoGET /produto/autocompleteLista básica de produtos para seleção
buscar_pelo_filtro_produtoGET /produto/filtroBusca produtos por filtro
buscar_pelo_id_produtoGET /produto/{id}Busca um produto pelo id
atualizar_pelo_id_produtoPATCH /produto/{id}Atualiza um produto
deletar_pelo_id_produtoDELETE /produto/{id}Exclui um produto

buscar_paginador_produto

GET/produto Exige credencial

Lista os produtos paginados

Exige só uma sessão válida (qualquer pessoa logada no portal). ordem aceita relevancia (padrão: relevância, depois nome), menor-preco/maior-preco (preço à vista, ou o preço base quando o à vista é zero), az/za (nome), mais-novo/mais-antigo (data de cadastro); o desempate é sempre nome e id; outro valor responde 400 Ordem inválida. Filtros opcionais (todos combinam com E): sku exato e skus vários separados por vírgula (sem diferenciar maiúsculas); nome procura o trecho no nome, no SKU e no nome comercial, sem diferenciar maiúsculas nem acentos; ativo, lancamento, importado_da_api, demonstracao e preco_definido_no_portal são exatos; tem_imagem (ao menos uma imagem), tem_estoque (estoque maior que zero), tem_descricao, tem_nome_comercial, tem_heuristica_pendente e enriquecido (já enriquecido pelo Tiny) aceitam true ou false; estoque_minimo/estoque_maximo e preco_minimo/preco_maximo são faixas inclusivas; unidade é exata e cor, material, diametro, categoria_tiny e marca_tiny procuram o trecho; criado_desde/criado_ate e atualizado_desde/atualizado_ate são datas AAAA-MM-DD inclusivas. Para quem não é colaborador interno, os dados do Tiny vêm vazios. 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. Para quem não é colaborador interno, estoque vem null (a quantidade nunca é mostrada ao cliente) e disponivel diz se há estoque.

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

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

Argumentos

Nome

Tipo

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

criar_produto

POST/produto Exige credencial

Cadastra um produto

Exige a permissão criar no módulo Configuracoes do perfil de quem chama (administrador e master têm tudo). Produto do catálogo. sku até 32 letras, números, ponto, hífen e _, único; nome de 2 a 200 caracteres; preco e preco_a_vista maiores que zero (à vista não maior que o base); unidade de venda obrigatória; estoque não negativo; incremento_minimo e quantidade_minima maiores que zero; até 15 imagens (URLs; a primeira é a principal). Campos: aplicacao é o texto de onde o produto é usado; embalagem é o texto da embalagem de venda; unidade_medida é a unidade das quantidades (ex.: m, un); embalagem_rotulo é o nome da embalagem fechada (ex.: caixa); embalagem_quantidade é quantas unidades vêm na embalagem fechada (não negativa); embalagem_preco é o preço da embalagem fechada (não negativo); diametro, material, cor e temperatura são atributos técnicos em texto; material é atributo técnico em texto; temperatura é atributo técnico em texto; lancamento (booleano) marca o produto como lançamento; relevancia (inteiro) ordena a vitrine, da maior para a menor; descricao é o texto longo da vitrine (até 5000 caracteres); especificacoes_texto é a ficha técnica em texto (até 5000 caracteres); outras_informacoes é texto livre extra (até 2000 caracteres); demonstracao (booleano) marca produto de demonstração; importado_da_api (booleano) marca produto vindo do Tiny; heuristica_pendente é a lista de campos que ainda precisam de revisão manual.

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

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

Argumentos

Nome

Tipo

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

buscar_auto_complete_produto

GET/produto/autocomplete Exige credencial

Lista básica de produtos para seleção

Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve id, SKU e nome, em ordem alfabética do nome. busca procura no nome e no SKU; ativo filtra. 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_produto(
  credencial_de_acesso: CredencialDeAcesso,
  parametros: ParametrosDeBuscarAutoCompleteProduto = {},
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.PaginaProdutoAutoComplete>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { buscar_auto_complete_produto } from "termo_core/portal";

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

Argumentos

Nome

Tipo

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

buscar_pelo_filtro_produto

GET/produto/filtro Exige credencial

Busca produtos por filtro

Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve os produtos não excluídos que casam com o filtro, até 50 por página (pagina, a partir de 1, padrão 1). ordem aceita relevancia (padrão: relevância, depois nome), menor-preco/maior-preco (preço à vista, ou o preço base quando o à vista é zero), az/za (nome), mais-novo/mais-antigo (data de cadastro); o desempate é sempre nome e id; outro valor responde 400 Ordem inválida. Filtros opcionais (todos combinam com E): sku exato e skus vários separados por vírgula (sem diferenciar maiúsculas); nome procura o trecho no nome, no SKU e no nome comercial, sem diferenciar maiúsculas nem acentos; ativo, lancamento, importado_da_api, demonstracao e preco_definido_no_portal são exatos; tem_imagem (ao menos uma imagem), tem_estoque (estoque maior que zero), tem_descricao, tem_nome_comercial, tem_heuristica_pendente e enriquecido (já enriquecido pelo Tiny) aceitam true ou false; estoque_minimo/estoque_maximo e preco_minimo/preco_maximo são faixas inclusivas; unidade é exata e cor, material, diametro, categoria_tiny e marca_tiny procuram o trecho; criado_desde/criado_ate e atualizado_desde/atualizado_ate são datas AAAA-MM-DD inclusivas. Para quem não é colaborador interno, os dados do Tiny vêm vazios. Para quem não é colaborador interno, estoque vem null (a quantidade nunca é mostrada ao cliente) e disponivel diz se há estoque.

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

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

Argumentos

Nome

Tipo

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

buscar_pelo_id_produto

GET/produto/{id} Exige credencial

Busca um produto pelo id

Exige só uma sessão válida (qualquer pessoa logada no portal). Produto excluído não é encontrado. Para quem não é colaborador interno, os dados do Tiny (preco_tiny, preco_a_vista_tiny, categoria_tiny, marca_tiny, enriquecido_em) vêm vazios. Para quem não é colaborador interno, estoque vem null (a quantidade nunca é mostrada ao cliente) e disponivel diz se há estoque.

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

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

Argumentos

Nome

Tipo

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

atualizar_pelo_id_produto

PATCH/produto/{id} Exige credencial

Atualiza um produto

Exige a permissão editar no módulo Configuracoes do perfil de quem chama (administrador e master têm tudo). Mesmas validações do cadastro (o SKU não muda). embalagem_quantidade e embalagem_preco aceitam null para apagar; preco_definido_no_portal protege o preço da sincronização com o Tiny. Atualização parcial: campo ausente mantém o valor atual. Campos: nome de 2 a 200 caracteres; aplicacao é o texto de onde o produto é usado; unidade é a unidade de venda (obrigatória quando enviada); embalagem é o texto da embalagem de venda; unidade_medida é a unidade das quantidades (ex.: m, un); embalagem_rotulo é o nome da embalagem fechada (ex.: caixa); incremento_minimo maior que zero; diametro, material, cor e temperatura são atributos técnicos em texto; material é atributo técnico em texto; temperatura é atributo técnico em texto; lancamento (booleano) marca o produto como lançamento; relevancia (inteiro) ordena a vitrine, da maior para a menor; imagens até 15 URLs, sem itens vazios; descricao é o texto longo da vitrine (até 5000 caracteres); especificacoes_texto é a ficha técnica em texto (até 5000 caracteres); outras_informacoes é texto livre extra (até 2000 caracteres); heuristica_pendente é a lista de campos que ainda precisam de revisão manual. nome_comercial é o nome mostrado ao cliente e resumo_caracteristicas a linha curta de características do card; os dois aceitam texto ou null para limpar (vazio também limpa).

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

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

Argumentos

Nome

Tipo

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

deletar_pelo_id_produto

DELETE/produto/{id} Exige credencial

Exclui um produto

Exige a permissão excluir no módulo Configuracoes do perfil de quem chama (administrador e master têm tudo). A exclusão é lógica: o registro some das leituras, mas a linha não é apagada.

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

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
await deletar_pelo_id_produto(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.

PaginaProduto

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

export interface PaginaProduto {
  itens: Array<PaginaProdutoItensItem>;
  pagina: number;
  tamanho: number;
  total: number;
}

PaginaProdutoAutoComplete

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

export interface PaginaProdutoAutoComplete {
  itens: Array<PaginaProdutoAutoCompleteItensItem>;
  pagina: number;
  tamanho: number;
  total: number;
}

PaginaProdutoAutoCompleteItensItem

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

export interface PaginaProdutoAutoCompleteItensItem {
  id: string;
  nome: string;
  sku: string;
}

PaginaProdutoItensItem

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

export interface PaginaProdutoItensItem {
  aplicacao?: string | null;
  ativo: boolean;
  atualizado_em: string;
  categoria_tiny?: string | null;
  cor?: string | null;
  criado_em: string;
  demonstracao: boolean;
  descricao?: string | null;
  diametro?: string | null;
  disponivel: boolean;
  embalagem?: string | null;
  embalagem_altura?: number | null;
  embalagem_comprimento?: number | null;
  embalagem_largura?: number | null;
  embalagem_preco?: number | null;
  embalagem_quantidade?: number | null;
  embalagem_rotulo?: string | null;
  enriquecido_em?: string | null;
  especificacoes_texto?: string | null;
  estoque?: number | null;
  garantia?: string | null;
  gtin?: string | null;
  gtin_embalagem?: string | null;
  heuristica_pendente: Array<string>;
  id: string;
  imagens: Array<string>;
  importado_da_api: boolean;
  incremento_minimo: number;
  lancamento: boolean;
  marca_tiny?: string | null;
  material?: string | null;
  ncm?: string | null;
  nome: string;
  nome_comercial?: string | null;
  nome_tiny?: string | null;
  origem_fiscal?: number | null;
  outras_informacoes?: string | null;
  peso_bruto?: number | null;
  peso_liquido?: number | null;
  preco: number;
  preco_a_vista: number;
  preco_a_vista_tiny?: number | null;
  preco_definido_no_portal: boolean;
  preco_tiny?: number | null;
  quantidade_minima: number;
  relevancia: number;
  resumo_caracteristicas?: string | null;
  sincronizado_em?: string | null;
  sku: string;
  temperatura?: string | null;
  tipo_tiny?: string | null;
  unidade: string;
  unidade_medida: string;
}

Produto

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

export interface Produto {
  aplicacao?: string | null;
  ativo: boolean;
  atualizado_em: string;
  categoria_tiny?: string | null;
  cor?: string | null;
  criado_em: string;
  demonstracao: boolean;
  descricao?: string | null;
  diametro?: string | null;
  disponivel: boolean;
  embalagem?: string | null;
  embalagem_altura?: number | null;
  embalagem_comprimento?: number | null;
  embalagem_largura?: number | null;
  embalagem_preco?: number | null;
  embalagem_quantidade?: number | null;
  embalagem_rotulo?: string | null;
  enriquecido_em?: string | null;
  especificacoes_texto?: string | null;
  estoque?: number | null;
  garantia?: string | null;
  gtin?: string | null;
  gtin_embalagem?: string | null;
  heuristica_pendente: Array<string>;
  id: string;
  imagens: Array<string>;
  importado_da_api: boolean;
  incremento_minimo: number;
  lancamento: boolean;
  marca_tiny?: string | null;
  material?: string | null;
  ncm?: string | null;
  nome: string;
  nome_comercial?: string | null;
  nome_tiny?: string | null;
  origem_fiscal?: number | null;
  outras_informacoes?: string | null;
  peso_bruto?: number | null;
  peso_liquido?: number | null;
  preco: number;
  preco_a_vista: number;
  preco_a_vista_tiny?: number | null;
  preco_definido_no_portal: boolean;
  preco_tiny?: number | null;
  quantidade_minima: number;
  relevancia: number;
  resumo_caracteristicas?: string | null;
  sincronizado_em?: string | null;
  sku: string;
  temperatura?: string | null;
  tipo_tiny?: string | null;
  unidade: string;
  unidade_medida: string;
}

ProdutoAtualizar

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

export interface ProdutoAtualizar {
  aplicacao?: string | null;
  ativo?: boolean | null;
  cor?: string | null;
  descricao?: string | null;
  diametro?: string | null;
  embalagem?: string | null;
  embalagem_preco?: number | null;
  embalagem_quantidade?: number | null;
  embalagem_rotulo?: string | null;
  especificacoes_texto?: string | null;
  estoque?: number | null;
  heuristica_pendente?: Array<string> | null;
  imagens?: Array<string> | null;
  incremento_minimo?: number | null;
  lancamento?: boolean | null;
  material?: string | null;
  nome?: string | null;
  nome_comercial?: string | null;
  outras_informacoes?: string | null;
  preco?: number | null;
  preco_a_vista?: number | null;
  preco_definido_no_portal?: boolean | null;
  quantidade_minima?: number | null;
  relevancia?: number | null;
  resumo_caracteristicas?: string | null;
  temperatura?: string | null;
  unidade?: string | null;
  unidade_medida?: string | null;
}

ProdutoCriar

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

export interface ProdutoCriar {
  aplicacao?: string | null;
  ativo?: boolean | null;
  cor?: string | null;
  demonstracao?: boolean | null;
  descricao?: string | null;
  diametro?: string | null;
  embalagem?: string | null;
  embalagem_preco?: number | null;
  embalagem_quantidade?: number | null;
  embalagem_rotulo?: string | null;
  especificacoes_texto?: string | null;
  estoque?: number | null;
  heuristica_pendente?: Array<string> | null;
  imagens?: Array<string> | null;
  importado_da_api?: boolean | null;
  incremento_minimo?: number | null;
  lancamento?: boolean | null;
  material?: string | null;
  nome: string;
  outras_informacoes?: string | null;
  preco: number;
  preco_a_vista: number;
  quantidade_minima?: number | null;
  relevancia?: number | null;
  sku: string;
  temperatura?: string | null;
  unidade: string;
  unidade_medida?: string | null;
}

Nesta página