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ção | Rota | O que faz |
|---|---|---|
buscar_paginador_produto | GET /produto | Lista os produtos paginados |
criar_produto | POST /produto | Cadastra um produto |
buscar_auto_complete_produto | GET /produto/autocomplete | Lista básica de produtos para seleção |
buscar_pelo_filtro_produto | GET /produto/filtro | Busca produtos por filtro |
buscar_pelo_id_produto | GET /produto/{id} | Busca um produto pelo id |
atualizar_pelo_id_produto | PATCH /produto/{id} | Atualiza um produto |
deletar_pelo_id_produto | DELETE /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>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>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>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>>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>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>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>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;
}