termo_core 0.1.10 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/rotas.d.ts +1 -1
- package/dist/ai/rotas.js +1 -1
- package/dist/ai/tipos.d.ts +7 -0
- package/dist/miro/rotas.d.ts +2 -2
- package/dist/miro/rotas.js +2 -2
- package/dist/portal/rotas.d.ts +12 -4
- package/dist/portal/rotas.js +20 -4
- package/dist/portal/tipos.d.ts +58 -0
- package/dist/support/rotas.d.ts +2 -2
- package/dist/support/rotas.js +2 -2
- package/dist/support/tipos.d.ts +0 -4
- package/package.json +1 -1
package/dist/ai/rotas.d.ts
CHANGED
|
@@ -243,7 +243,7 @@ export declare function chave_ia_buscar_catalogo(credencial_de_acesso: Credencia
|
|
|
243
243
|
/**
|
|
244
244
|
* Executa um pedido no gateway de IA
|
|
245
245
|
*
|
|
246
|
-
* Com token de usuário, exige a permissão `criar` da área `gateway`; com token de aplicativo (outro back-end, via `termo_core::CredencialDeAcesso::token_do_aplicativo()`), qualquer app válido do TermoAuth entra e a conversa nova grava o slug do app em `aplicativo`. Atende o pedido com as chaves de IA cadastradas, trocando de chave e de IA quando uma falha, até as regras da categoria (`/config_system_gateway`) mandarem parar. `categoria` é obrigatória. Nas categorias de entrada em texto, `texto` é obrigatório; nas de entrada em imagem, áudio ou vídeo, `arquivo` é obrigatório: `{ base64, tipo_mime }` (até 20 MB, aceita data URL) ou `{ url }` (baixada pelo TermoAI), e `texto` é a pergunta sobre o arquivo (sem ele vale uma pergunta padrão). `provedor` fixa uma IA que atenda a categoria (só ela, sem trocar de IA). `provedor_preferido` (um `provedor` de `GET /gateway/modelos`) tenta primeiro as chaves dessa IA e só troca para as outras, na ordem de sempre, quando ela falha ou não tem chave livre; sem ele, a escolha é a de sempre; com `provedor` junto, vale o `provedor`. `instrucao` é a instrução de sistema, `idioma` ajuda transcrição e fala, `voz` escolhe a voz da fala. `historico` (no máximo as 40 últimas mensagens com texto, `papel` `usuario` ou `assistente`) dá contexto; sem ele, com `conversa_id` (de uma conversa da mesma categoria), o contexto vem da própria conversa. A pergunta e a resposta são gravadas na conversa informada ou numa conversa nova de origem `api`, cujo id volta em `conversa_id`; os arquivos da pergunta e da resposta ficam no TermoBucket (privados, do app `termo-ai`). A resposta traz `texto` ou `arquivo` (base64 com o tipo), a IA, o modelo, o apelido da chave que atendeu, os tokens (quando a IA informa), as tentativas que falharam e a duração. Ferramentas (opcional, só em `texto_para_texto`): `ferramentas` lista até 128 funções (`nome` com até 64 letras, números, `_` ou `-`; `descricao`; `parametros` em JSON Schema) que a IA pode pedir para chamar; só entram as IAs que aceitam ferramentas (Gemini, Groq, Mistral, Cerebras, NVIDIA, Cohere, Z.ai e Ollama). Quando a IA quer uma ferramenta, a resposta traz `chamadas_de_ferramenta` (`id`, `nome`, `argumentos` em objeto e `assinatura`, que deve voltar igual) e, às vezes, `texto`. Quem chamou executa as ferramentas e pede de novo com o `historico` estendido: a mensagem `assistente` com as `chamadas_de_ferramenta` (e `texto`, vazio se não houver) e uma mensagem `ferramenta` por resultado, com `chamada_id` e o resultado em `texto`; quando o histórico termina num resultado, `texto` do pedido é opcional. Mensagens de ferramenta no histórico exigem `ferramentas` no pedido. A conversa gravada guarda as chamadas na mensagem do assistente, mas não os resultados.
|
|
246
|
+
* Com token de usuário, exige a permissão `criar` da área `gateway`; com token de aplicativo (outro back-end, via `termo_core::CredencialDeAcesso::token_do_aplicativo()`), qualquer app válido do TermoAuth entra e a conversa nova grava o slug do app em `aplicativo`. Atende o pedido com as chaves de IA cadastradas, trocando de chave e de IA quando uma falha, até as regras da categoria (`/config_system_gateway`) mandarem parar. `categoria` é obrigatória. Nas categorias de entrada em texto, `texto` é obrigatório; nas de entrada em imagem, áudio ou vídeo, `arquivo` é obrigatório: `{ base64, tipo_mime }` (até 20 MB, aceita data URL) ou `{ url }` (baixada pelo TermoAI), e `texto` é a pergunta sobre o arquivo (sem ele vale uma pergunta padrão). `provedor` fixa uma IA que atenda a categoria (só ela, sem trocar de IA). `provedor_preferido` (um `provedor` de `GET /gateway/modelos`) tenta primeiro as chaves dessa IA e só troca para as outras, na ordem de sempre, quando ela falha ou não tem chave livre; sem ele, a escolha é a de sempre; com `provedor` junto, vale o `provedor`. `instrucao` é a instrução de sistema, `idioma` ajuda transcrição e fala, `voz` escolhe a voz da fala. `historico` (no máximo as 40 últimas mensagens com texto, `papel` `usuario` ou `assistente`) dá contexto; sem ele, com `conversa_id` (de uma conversa da mesma categoria), o contexto vem da própria conversa. A pergunta e a resposta são gravadas na conversa informada ou numa conversa nova de origem `api`, cujo id volta em `conversa_id`; os arquivos da pergunta e da resposta ficam no TermoBucket (privados, do app `termo-ai`). A resposta traz `texto` ou `arquivo` (base64 com o tipo), a IA, o modelo, o apelido da chave que atendeu, os tokens (quando a IA informa), as tentativas que falharam e a duração. Ferramentas (opcional, só em `texto_para_texto`): `ferramentas` lista até 128 funções (`nome` com até 64 letras, números, `_` ou `-`; `descricao`; `parametros` em JSON Schema) que a IA pode pedir para chamar; só entram as IAs que aceitam ferramentas (Gemini, Groq, Mistral, Cerebras, NVIDIA, Cohere, Z.ai e Ollama). Quando a IA quer uma ferramenta, a resposta traz `chamadas_de_ferramenta` (`id`, `nome`, `argumentos` em objeto e `assinatura`, que deve voltar igual) e, às vezes, `texto`. Quem chamou executa as ferramentas e pede de novo com o `historico` estendido: a mensagem `assistente` com as `chamadas_de_ferramenta` (e `texto`, vazio se não houver) e uma mensagem `ferramenta` por resultado, com `chamada_id` e o resultado em `texto`; quando o histórico termina num resultado, `texto` do pedido é opcional. Mensagens de ferramenta no histórico exigem `ferramentas` no pedido. A conversa gravada guarda as chamadas na mensagem do assistente, mas não os resultados. `modelo` (até 200 caracteres, só junto de `provedor`) troca o modelo do catálogo por outro da mesma IA. Em `texto_para_imagem`, `referencias` (até 14 imagens no formato de `arquivo`, até 20 MB somadas) vão junto do texto, `proporcao` (`1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9` ou `21:9`) e `tamanho` (`1K`, `2K` ou `4K`) definem a imagem; em `texto_para_texto`, `esquema` (objeto JSON Schema, sem `ferramentas`) faz a resposta vir em `texto` como JSON nesse formato. Com qualquer um desses quatro, só entram as IAs que os entendem (hoje o Gemini), e a conversa gravada não guarda as referências. A resposta traz também `tokens_de_entrada` e `tokens_de_saida` separados, quando a IA informa.
|
|
247
247
|
*
|
|
248
248
|
* `POST /gateway`
|
|
249
249
|
*/
|
package/dist/ai/rotas.js
CHANGED
|
@@ -304,7 +304,7 @@ export function chave_ia_buscar_catalogo(credencial_de_acesso, opcoes_da_chamada
|
|
|
304
304
|
/**
|
|
305
305
|
* Executa um pedido no gateway de IA
|
|
306
306
|
*
|
|
307
|
-
* Com token de usuário, exige a permissão `criar` da área `gateway`; com token de aplicativo (outro back-end, via `termo_core::CredencialDeAcesso::token_do_aplicativo()`), qualquer app válido do TermoAuth entra e a conversa nova grava o slug do app em `aplicativo`. Atende o pedido com as chaves de IA cadastradas, trocando de chave e de IA quando uma falha, até as regras da categoria (`/config_system_gateway`) mandarem parar. `categoria` é obrigatória. Nas categorias de entrada em texto, `texto` é obrigatório; nas de entrada em imagem, áudio ou vídeo, `arquivo` é obrigatório: `{ base64, tipo_mime }` (até 20 MB, aceita data URL) ou `{ url }` (baixada pelo TermoAI), e `texto` é a pergunta sobre o arquivo (sem ele vale uma pergunta padrão). `provedor` fixa uma IA que atenda a categoria (só ela, sem trocar de IA). `provedor_preferido` (um `provedor` de `GET /gateway/modelos`) tenta primeiro as chaves dessa IA e só troca para as outras, na ordem de sempre, quando ela falha ou não tem chave livre; sem ele, a escolha é a de sempre; com `provedor` junto, vale o `provedor`. `instrucao` é a instrução de sistema, `idioma` ajuda transcrição e fala, `voz` escolhe a voz da fala. `historico` (no máximo as 40 últimas mensagens com texto, `papel` `usuario` ou `assistente`) dá contexto; sem ele, com `conversa_id` (de uma conversa da mesma categoria), o contexto vem da própria conversa. A pergunta e a resposta são gravadas na conversa informada ou numa conversa nova de origem `api`, cujo id volta em `conversa_id`; os arquivos da pergunta e da resposta ficam no TermoBucket (privados, do app `termo-ai`). A resposta traz `texto` ou `arquivo` (base64 com o tipo), a IA, o modelo, o apelido da chave que atendeu, os tokens (quando a IA informa), as tentativas que falharam e a duração. Ferramentas (opcional, só em `texto_para_texto`): `ferramentas` lista até 128 funções (`nome` com até 64 letras, números, `_` ou `-`; `descricao`; `parametros` em JSON Schema) que a IA pode pedir para chamar; só entram as IAs que aceitam ferramentas (Gemini, Groq, Mistral, Cerebras, NVIDIA, Cohere, Z.ai e Ollama). Quando a IA quer uma ferramenta, a resposta traz `chamadas_de_ferramenta` (`id`, `nome`, `argumentos` em objeto e `assinatura`, que deve voltar igual) e, às vezes, `texto`. Quem chamou executa as ferramentas e pede de novo com o `historico` estendido: a mensagem `assistente` com as `chamadas_de_ferramenta` (e `texto`, vazio se não houver) e uma mensagem `ferramenta` por resultado, com `chamada_id` e o resultado em `texto`; quando o histórico termina num resultado, `texto` do pedido é opcional. Mensagens de ferramenta no histórico exigem `ferramentas` no pedido. A conversa gravada guarda as chamadas na mensagem do assistente, mas não os resultados.
|
|
307
|
+
* Com token de usuário, exige a permissão `criar` da área `gateway`; com token de aplicativo (outro back-end, via `termo_core::CredencialDeAcesso::token_do_aplicativo()`), qualquer app válido do TermoAuth entra e a conversa nova grava o slug do app em `aplicativo`. Atende o pedido com as chaves de IA cadastradas, trocando de chave e de IA quando uma falha, até as regras da categoria (`/config_system_gateway`) mandarem parar. `categoria` é obrigatória. Nas categorias de entrada em texto, `texto` é obrigatório; nas de entrada em imagem, áudio ou vídeo, `arquivo` é obrigatório: `{ base64, tipo_mime }` (até 20 MB, aceita data URL) ou `{ url }` (baixada pelo TermoAI), e `texto` é a pergunta sobre o arquivo (sem ele vale uma pergunta padrão). `provedor` fixa uma IA que atenda a categoria (só ela, sem trocar de IA). `provedor_preferido` (um `provedor` de `GET /gateway/modelos`) tenta primeiro as chaves dessa IA e só troca para as outras, na ordem de sempre, quando ela falha ou não tem chave livre; sem ele, a escolha é a de sempre; com `provedor` junto, vale o `provedor`. `instrucao` é a instrução de sistema, `idioma` ajuda transcrição e fala, `voz` escolhe a voz da fala. `historico` (no máximo as 40 últimas mensagens com texto, `papel` `usuario` ou `assistente`) dá contexto; sem ele, com `conversa_id` (de uma conversa da mesma categoria), o contexto vem da própria conversa. A pergunta e a resposta são gravadas na conversa informada ou numa conversa nova de origem `api`, cujo id volta em `conversa_id`; os arquivos da pergunta e da resposta ficam no TermoBucket (privados, do app `termo-ai`). A resposta traz `texto` ou `arquivo` (base64 com o tipo), a IA, o modelo, o apelido da chave que atendeu, os tokens (quando a IA informa), as tentativas que falharam e a duração. Ferramentas (opcional, só em `texto_para_texto`): `ferramentas` lista até 128 funções (`nome` com até 64 letras, números, `_` ou `-`; `descricao`; `parametros` em JSON Schema) que a IA pode pedir para chamar; só entram as IAs que aceitam ferramentas (Gemini, Groq, Mistral, Cerebras, NVIDIA, Cohere, Z.ai e Ollama). Quando a IA quer uma ferramenta, a resposta traz `chamadas_de_ferramenta` (`id`, `nome`, `argumentos` em objeto e `assinatura`, que deve voltar igual) e, às vezes, `texto`. Quem chamou executa as ferramentas e pede de novo com o `historico` estendido: a mensagem `assistente` com as `chamadas_de_ferramenta` (e `texto`, vazio se não houver) e uma mensagem `ferramenta` por resultado, com `chamada_id` e o resultado em `texto`; quando o histórico termina num resultado, `texto` do pedido é opcional. Mensagens de ferramenta no histórico exigem `ferramentas` no pedido. A conversa gravada guarda as chamadas na mensagem do assistente, mas não os resultados. `modelo` (até 200 caracteres, só junto de `provedor`) troca o modelo do catálogo por outro da mesma IA. Em `texto_para_imagem`, `referencias` (até 14 imagens no formato de `arquivo`, até 20 MB somadas) vão junto do texto, `proporcao` (`1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9` ou `21:9`) e `tamanho` (`1K`, `2K` ou `4K`) definem a imagem; em `texto_para_texto`, `esquema` (objeto JSON Schema, sem `ferramentas`) faz a resposta vir em `texto` como JSON nesse formato. Com qualquer um desses quatro, só entram as IAs que os entendem (hoje o Gemini), e a conversa gravada não guarda as referências. A resposta traz também `tokens_de_entrada` e `tokens_de_saida` separados, quando a IA informa.
|
|
308
308
|
*
|
|
309
309
|
* `POST /gateway`
|
|
310
310
|
*/
|
package/dist/ai/tipos.d.ts
CHANGED
|
@@ -364,12 +364,17 @@ export interface PedidoGateway {
|
|
|
364
364
|
arquivo?: ArquivoDoPedido | null;
|
|
365
365
|
categoria: string;
|
|
366
366
|
conversa_id?: string | null;
|
|
367
|
+
esquema?: unknown;
|
|
367
368
|
ferramentas?: Array<Ferramenta> | null;
|
|
368
369
|
historico?: Array<MensagemDoHistorico> | null;
|
|
369
370
|
idioma?: string | null;
|
|
370
371
|
instrucao?: string | null;
|
|
372
|
+
modelo?: string | null;
|
|
373
|
+
proporcao?: string | null;
|
|
371
374
|
provedor?: string | null;
|
|
372
375
|
provedor_preferido?: string | null;
|
|
376
|
+
referencias?: Array<ArquivoDoPedido> | null;
|
|
377
|
+
tamanho?: string | null;
|
|
373
378
|
texto?: string | null;
|
|
374
379
|
voz?: string | null;
|
|
375
380
|
}
|
|
@@ -426,6 +431,8 @@ export interface RespostaDoGateway {
|
|
|
426
431
|
tentativas: Array<TentativaDaMensagem>;
|
|
427
432
|
texto?: string | null;
|
|
428
433
|
tokens?: number | null;
|
|
434
|
+
tokens_de_entrada?: number | null;
|
|
435
|
+
tokens_de_saida?: number | null;
|
|
429
436
|
}
|
|
430
437
|
export interface TentativaDaMensagem {
|
|
431
438
|
chave: string;
|
package/dist/miro/rotas.d.ts
CHANGED
|
@@ -78,7 +78,7 @@ export declare function buscar_pelo_filtro_board(credencial_de_acesso: Credencia
|
|
|
78
78
|
/**
|
|
79
79
|
* Baixa uma imagem do canvas guardada no banco
|
|
80
80
|
*
|
|
81
|
-
* Pública (o `<img>` do canvas não manda token): devolve os bytes
|
|
81
|
+
* Pública (o `<img>` do canvas não manda token): devolve os bytes das imagens antigas que ficaram no banco quando o TermoBucket falhava, com cache longo. Nenhuma imagem nova vai para o banco.
|
|
82
82
|
*
|
|
83
83
|
* `GET /board/imagem/{id}`
|
|
84
84
|
*/
|
|
@@ -171,7 +171,7 @@ export declare function elementos_organizar_board(credencial_de_acesso: Credenci
|
|
|
171
171
|
/**
|
|
172
172
|
* Envia uma imagem para o canvas
|
|
173
173
|
*
|
|
174
|
-
* Guarda uma imagem PNG, JPG, GIF ou WEBP de até 10 MB (`arquivo_base64`, cru com `tipo` ou como data URL) e devolve o endereço público para o elemento de imagem do canvas. A imagem vai ao TermoBucket como arquivo público
|
|
174
|
+
* Guarda uma imagem PNG, JPG, GIF ou WEBP de até 10 MB (`arquivo_base64`, cru com `tipo` ou como data URL) e devolve o endereço público para o elemento de imagem do canvas. A imagem vai ao TermoBucket como arquivo público e nunca fica no banco: se o bucket falhar, responde `503`.
|
|
175
175
|
*
|
|
176
176
|
* `POST /board/{id}/imagem`
|
|
177
177
|
*/
|
package/dist/miro/rotas.js
CHANGED
|
@@ -72,7 +72,7 @@ export function buscar_pelo_filtro_board(credencial_de_acesso, parametros = {},
|
|
|
72
72
|
/**
|
|
73
73
|
* Baixa uma imagem do canvas guardada no banco
|
|
74
74
|
*
|
|
75
|
-
* Pública (o `<img>` do canvas não manda token): devolve os bytes
|
|
75
|
+
* Pública (o `<img>` do canvas não manda token): devolve os bytes das imagens antigas que ficaram no banco quando o TermoBucket falhava, com cache longo. Nenhuma imagem nova vai para o banco.
|
|
76
76
|
*
|
|
77
77
|
* `GET /board/imagem/{id}`
|
|
78
78
|
*/
|
|
@@ -250,7 +250,7 @@ export function elementos_organizar_board(credencial_de_acesso, id, corpo_da_req
|
|
|
250
250
|
/**
|
|
251
251
|
* Envia uma imagem para o canvas
|
|
252
252
|
*
|
|
253
|
-
* Guarda uma imagem PNG, JPG, GIF ou WEBP de até 10 MB (`arquivo_base64`, cru com `tipo` ou como data URL) e devolve o endereço público para o elemento de imagem do canvas. A imagem vai ao TermoBucket como arquivo público
|
|
253
|
+
* Guarda uma imagem PNG, JPG, GIF ou WEBP de até 10 MB (`arquivo_base64`, cru com `tipo` ou como data URL) e devolve o endereço público para o elemento de imagem do canvas. A imagem vai ao TermoBucket como arquivo público e nunca fica no banco: se o bucket falhar, responde `503`.
|
|
254
254
|
*
|
|
255
255
|
* `POST /board/{id}/imagem`
|
|
256
256
|
*/
|
package/dist/portal/rotas.d.ts
CHANGED
|
@@ -1244,6 +1244,14 @@ export declare function buscar_informacoes_paginador_nota_fiscal(credencial_de_a
|
|
|
1244
1244
|
* `GET /nota_fiscal/{id}`
|
|
1245
1245
|
*/
|
|
1246
1246
|
export declare function buscar_pelo_id_nota_fiscal(credencial_de_acesso: CredencialDeAcesso, id: number, parametros?: ParametrosDeBuscarPeloIdNotaFiscal, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.NotaFiscal>;
|
|
1247
|
+
/**
|
|
1248
|
+
* Baixa a nota fiscal em PDF (DANFE), gerado na hora a partir do XML
|
|
1249
|
+
*
|
|
1250
|
+
* Exige a permissão `ver` no módulo `Financeiro` do perfil de quem chama (administrador e master têm tudo). Confere a nota na tabela `nota_fiscal`, busca o XML autorizado na hora na API da Termotubos e monta o DANFE (A4 retrato, com código de barras da chave de acesso e quantas folhas os itens pedirem) em memória: nada é gravado em disco nem no banco. Responde `application/pdf` como download `nota-{numero}.pdf`. Quem não é colaborador interno só baixa notas do CNPJ das próprias unidades (as outras respondem 404).
|
|
1251
|
+
*
|
|
1252
|
+
* `GET /nota_fiscal/{id}/pdf`
|
|
1253
|
+
*/
|
|
1254
|
+
export declare function baixar_nota_fiscal_via_xml_nota_fiscal(credencial_de_acesso: CredencialDeAcesso, id: number, opcoes_da_chamada?: OpcoesDaChamada): Promise<Uint8Array>;
|
|
1247
1255
|
/**
|
|
1248
1256
|
* Lista os pedidos paginados
|
|
1249
1257
|
*
|
|
@@ -1399,7 +1407,7 @@ export declare function buscar_pelo_id_pedido_venda_tiny(credencial_de_acesso: C
|
|
|
1399
1407
|
/**
|
|
1400
1408
|
* Lista os produtos paginados
|
|
1401
1409
|
*
|
|
1402
|
-
* 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` são exatos; `tem_preco_portal_b2b` (`true` só os que têm Preço Portal B2B); `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`, `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.
|
|
1410
|
+
* 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` são exatos; `tem_preco_portal_b2b` (`true` só os que têm Preço Portal B2B); `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` (preço à vista, ou o preço base quando o à vista é zero, o mesmo da ordem) são faixas inclusivas; `unidade` é exata e `cor`, `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 de conferência (`nome_tiny`, `preco_tiny`, `preco_a_vista_tiny`, `preco_portal_b2b`, `preco_portal_b2b_a_prazo`, `precos_por_unidade`, `enriquecido_em`) vêm vazios; `categoria_tiny` e `marca_tiny` vêm preenchidos. 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.
|
|
1403
1411
|
*
|
|
1404
1412
|
* `GET /produto`
|
|
1405
1413
|
*/
|
|
@@ -1423,7 +1431,7 @@ export declare function buscar_auto_complete_produto(credencial_de_acesso: Crede
|
|
|
1423
1431
|
/**
|
|
1424
1432
|
* Busca produtos por filtro
|
|
1425
1433
|
*
|
|
1426
|
-
* 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` são exatos; `tem_preco_portal_b2b` (`true` só os que têm Preço Portal B2B); `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`, `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.
|
|
1434
|
+
* 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` são exatos; `tem_preco_portal_b2b` (`true` só os que têm Preço Portal B2B); `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` (preço à vista, ou o preço base quando o à vista é zero, o mesmo da ordem) são faixas inclusivas; `unidade` é exata e `cor`, `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 de conferência (`nome_tiny`, `preco_tiny`, `preco_a_vista_tiny`, `preco_portal_b2b`, `preco_portal_b2b_a_prazo`, `precos_por_unidade`, `enriquecido_em`) vêm vazios; `categoria_tiny` e `marca_tiny` vêm preenchidos. Para quem não é colaborador interno, `estoque` vem `null` (a quantidade nunca é mostrada ao cliente) e `disponivel` diz se há estoque.
|
|
1427
1435
|
*
|
|
1428
1436
|
* `GET /produto/filtro`
|
|
1429
1437
|
*/
|
|
@@ -1431,7 +1439,7 @@ export declare function buscar_pelo_filtro_produto(credencial_de_acesso: Credenc
|
|
|
1431
1439
|
/**
|
|
1432
1440
|
* Busca um produto pelo id
|
|
1433
1441
|
*
|
|
1434
|
-
* 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`, `
|
|
1442
|
+
* 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 de conferência (`nome_tiny`, `preco_tiny`, `preco_a_vista_tiny`, `preco_portal_b2b`, `preco_portal_b2b_a_prazo`, `precos_por_unidade`, `enriquecido_em`) vêm vazios; `categoria_tiny` e `marca_tiny` vêm preenchidos. Para quem não é colaborador interno, `estoque` vem `null` (a quantidade nunca é mostrada ao cliente) e `disponivel` diz se há estoque.
|
|
1435
1443
|
*
|
|
1436
1444
|
* `GET /produto/{id}`
|
|
1437
1445
|
*/
|
|
@@ -1439,7 +1447,7 @@ export declare function buscar_pelo_id_produto(credencial_de_acesso: CredencialD
|
|
|
1439
1447
|
/**
|
|
1440
1448
|
* Atualiza um produto
|
|
1441
1449
|
*
|
|
1442
|
-
* 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. Produto do Tiny não aceita `preco` nem `preco_a_vista` (400): o preço próprio do portal vai em `preco_portal_b2b`,
|
|
1450
|
+
* 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. Produto do Tiny não aceita `preco` nem `preco_a_vista` (400): o preço próprio do portal vai em `preco_portal_b2b` (à vista) e `preco_portal_b2b_a_prazo`, maiores que zero e com o à vista até o a prazo, e viram o `preco_a_vista` e o `preco` usados no portal; `null` apaga e o preço volta ao do Tiny. A sincronização com o Tiny nunca muda os dois. Produto que não veio do Tiny não aceita os dois (400). `precos_por_unidade` troca a lista das unidades: cada uma com `variacao_a_vista` e `variacao_a_prazo` em % (de -100 a 100; negativo é desconto, positivo é acréscimo) sobre o preço de referência (o Preço Portal B2B ou, sem ele, o do Tiny), `ativo` (padrão `true`) e `quantidade` (opcional, maior que zero: a quantidade que vai em cada embalagem dessa unidade). No produto do Tiny, a variação da unidade do produto entra no `preco_a_vista` e no `preco` usados no portal. Atualização parcial: campo ausente mantém o valor atual. Campos: `nome` de 2 a 200 caracteres; `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; `cor` é atributo 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).
|
|
1443
1451
|
*
|
|
1444
1452
|
* `PATCH /produto/{id}`
|
|
1445
1453
|
*/
|
package/dist/portal/rotas.js
CHANGED
|
@@ -1290,6 +1290,22 @@ export function buscar_pelo_id_nota_fiscal(credencial_de_acesso, id, parametros
|
|
|
1290
1290
|
formato_da_resposta: "json",
|
|
1291
1291
|
}, opcoes_da_chamada);
|
|
1292
1292
|
}
|
|
1293
|
+
/**
|
|
1294
|
+
* Baixa a nota fiscal em PDF (DANFE), gerado na hora a partir do XML
|
|
1295
|
+
*
|
|
1296
|
+
* Exige a permissão `ver` no módulo `Financeiro` do perfil de quem chama (administrador e master têm tudo). Confere a nota na tabela `nota_fiscal`, busca o XML autorizado na hora na API da Termotubos e monta o DANFE (A4 retrato, com código de barras da chave de acesso e quantas folhas os itens pedirem) em memória: nada é gravado em disco nem no banco. Responde `application/pdf` como download `nota-{numero}.pdf`. Quem não é colaborador interno só baixa notas do CNPJ das próprias unidades (as outras respondem 404).
|
|
1297
|
+
*
|
|
1298
|
+
* `GET /nota_fiscal/{id}/pdf`
|
|
1299
|
+
*/
|
|
1300
|
+
export function baixar_nota_fiscal_via_xml_nota_fiscal(credencial_de_acesso, id, opcoes_da_chamada) {
|
|
1301
|
+
return chamar_servico({
|
|
1302
|
+
servico: SERVICO_DESTA_API,
|
|
1303
|
+
metodo_http: "GET",
|
|
1304
|
+
caminho_da_rota: `/nota_fiscal/${codificar_parametro_de_caminho(id)}/pdf`,
|
|
1305
|
+
credencial_de_acesso,
|
|
1306
|
+
formato_da_resposta: "bytes",
|
|
1307
|
+
}, opcoes_da_chamada);
|
|
1308
|
+
}
|
|
1293
1309
|
/**
|
|
1294
1310
|
* Lista os pedidos paginados
|
|
1295
1311
|
*
|
|
@@ -1611,7 +1627,7 @@ export function buscar_pelo_id_pedido_venda_tiny(credencial_de_acesso, id, param
|
|
|
1611
1627
|
/**
|
|
1612
1628
|
* Lista os produtos paginados
|
|
1613
1629
|
*
|
|
1614
|
-
* 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` são exatos; `tem_preco_portal_b2b` (`true` só os que têm Preço Portal B2B); `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`, `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.
|
|
1630
|
+
* 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` são exatos; `tem_preco_portal_b2b` (`true` só os que têm Preço Portal B2B); `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` (preço à vista, ou o preço base quando o à vista é zero, o mesmo da ordem) são faixas inclusivas; `unidade` é exata e `cor`, `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 de conferência (`nome_tiny`, `preco_tiny`, `preco_a_vista_tiny`, `preco_portal_b2b`, `preco_portal_b2b_a_prazo`, `precos_por_unidade`, `enriquecido_em`) vêm vazios; `categoria_tiny` e `marca_tiny` vêm preenchidos. 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.
|
|
1615
1631
|
*
|
|
1616
1632
|
* `GET /produto`
|
|
1617
1633
|
*/
|
|
@@ -1662,7 +1678,7 @@ export function buscar_auto_complete_produto(credencial_de_acesso, parametros =
|
|
|
1662
1678
|
/**
|
|
1663
1679
|
* Busca produtos por filtro
|
|
1664
1680
|
*
|
|
1665
|
-
* 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` são exatos; `tem_preco_portal_b2b` (`true` só os que têm Preço Portal B2B); `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`, `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.
|
|
1681
|
+
* 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` são exatos; `tem_preco_portal_b2b` (`true` só os que têm Preço Portal B2B); `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` (preço à vista, ou o preço base quando o à vista é zero, o mesmo da ordem) são faixas inclusivas; `unidade` é exata e `cor`, `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 de conferência (`nome_tiny`, `preco_tiny`, `preco_a_vista_tiny`, `preco_portal_b2b`, `preco_portal_b2b_a_prazo`, `precos_por_unidade`, `enriquecido_em`) vêm vazios; `categoria_tiny` e `marca_tiny` vêm preenchidos. Para quem não é colaborador interno, `estoque` vem `null` (a quantidade nunca é mostrada ao cliente) e `disponivel` diz se há estoque.
|
|
1666
1682
|
*
|
|
1667
1683
|
* `GET /produto/filtro`
|
|
1668
1684
|
*/
|
|
@@ -1679,7 +1695,7 @@ export function buscar_pelo_filtro_produto(credencial_de_acesso, parametros = {}
|
|
|
1679
1695
|
/**
|
|
1680
1696
|
* Busca um produto pelo id
|
|
1681
1697
|
*
|
|
1682
|
-
* 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`, `
|
|
1698
|
+
* 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 de conferência (`nome_tiny`, `preco_tiny`, `preco_a_vista_tiny`, `preco_portal_b2b`, `preco_portal_b2b_a_prazo`, `precos_por_unidade`, `enriquecido_em`) vêm vazios; `categoria_tiny` e `marca_tiny` vêm preenchidos. Para quem não é colaborador interno, `estoque` vem `null` (a quantidade nunca é mostrada ao cliente) e `disponivel` diz se há estoque.
|
|
1683
1699
|
*
|
|
1684
1700
|
* `GET /produto/{id}`
|
|
1685
1701
|
*/
|
|
@@ -1695,7 +1711,7 @@ export function buscar_pelo_id_produto(credencial_de_acesso, id, opcoes_da_chama
|
|
|
1695
1711
|
/**
|
|
1696
1712
|
* Atualiza um produto
|
|
1697
1713
|
*
|
|
1698
|
-
* 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. Produto do Tiny não aceita `preco` nem `preco_a_vista` (400): o preço próprio do portal vai em `preco_portal_b2b`,
|
|
1714
|
+
* 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. Produto do Tiny não aceita `preco` nem `preco_a_vista` (400): o preço próprio do portal vai em `preco_portal_b2b` (à vista) e `preco_portal_b2b_a_prazo`, maiores que zero e com o à vista até o a prazo, e viram o `preco_a_vista` e o `preco` usados no portal; `null` apaga e o preço volta ao do Tiny. A sincronização com o Tiny nunca muda os dois. Produto que não veio do Tiny não aceita os dois (400). `precos_por_unidade` troca a lista das unidades: cada uma com `variacao_a_vista` e `variacao_a_prazo` em % (de -100 a 100; negativo é desconto, positivo é acréscimo) sobre o preço de referência (o Preço Portal B2B ou, sem ele, o do Tiny), `ativo` (padrão `true`) e `quantidade` (opcional, maior que zero: a quantidade que vai em cada embalagem dessa unidade). No produto do Tiny, a variação da unidade do produto entra no `preco_a_vista` e no `preco` usados no portal. Atualização parcial: campo ausente mantém o valor atual. Campos: `nome` de 2 a 200 caracteres; `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; `cor` é atributo 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).
|
|
1699
1715
|
*
|
|
1700
1716
|
* `PATCH /produto/{id}`
|
|
1701
1717
|
*/
|
package/dist/portal/tipos.d.ts
CHANGED
|
@@ -382,20 +382,50 @@ export interface CustoNaoConformidade {
|
|
|
382
382
|
}
|
|
383
383
|
export interface DadosInternosProdutoTermotubos {
|
|
384
384
|
alterado_no_tiny?: string | null;
|
|
385
|
+
atualizado_na_intranet?: string | null;
|
|
385
386
|
categoria_completa?: string | null;
|
|
387
|
+
codigo_de_servico?: string | null;
|
|
388
|
+
controla_estoque?: string | null;
|
|
386
389
|
criado_no_tiny?: string | null;
|
|
387
390
|
custo?: number | null;
|
|
388
391
|
custo_medio?: number | null;
|
|
392
|
+
descricao_complementar?: string | null;
|
|
393
|
+
dias_de_preparacao?: number | null;
|
|
389
394
|
disponivel?: number | null;
|
|
395
|
+
embalagem_altura?: number | null;
|
|
396
|
+
embalagem_comprimento?: number | null;
|
|
397
|
+
embalagem_descricao?: string | null;
|
|
398
|
+
embalagem_diametro?: number | null;
|
|
399
|
+
embalagem_largura?: number | null;
|
|
400
|
+
embalagem_tipo?: string | null;
|
|
401
|
+
embalagem_volumes?: number | null;
|
|
390
402
|
estoque_atualizado_em?: string | null;
|
|
403
|
+
estoque_maximo?: number | null;
|
|
404
|
+
estoque_minimo?: number | null;
|
|
405
|
+
garantia?: string | null;
|
|
406
|
+
gtin_embalagem?: string | null;
|
|
391
407
|
id_api: number;
|
|
408
|
+
ipi_classe?: string | null;
|
|
409
|
+
ipi_valor_fixo?: number | null;
|
|
392
410
|
localizacao?: string | null;
|
|
411
|
+
marca?: string | null;
|
|
393
412
|
observacoes?: string | null;
|
|
394
413
|
preco?: number | null;
|
|
414
|
+
produto_pai_tiny_id?: number | null;
|
|
395
415
|
reservado?: number | null;
|
|
396
416
|
saldo?: number | null;
|
|
417
|
+
seo_descricao?: string | null;
|
|
418
|
+
seo_endereco?: string | null;
|
|
419
|
+
seo_palavras_chave?: string | null;
|
|
420
|
+
seo_titulo?: string | null;
|
|
421
|
+
seo_video?: string | null;
|
|
397
422
|
sincronizado_na_api?: string | null;
|
|
423
|
+
situacao?: string | null;
|
|
424
|
+
sob_encomenda?: string | null;
|
|
398
425
|
tiny_id?: number | null;
|
|
426
|
+
unidade?: string | null;
|
|
427
|
+
unidades_por_caixa?: number | null;
|
|
428
|
+
variacao?: string | null;
|
|
399
429
|
}
|
|
400
430
|
export interface DepositoProdutoTermotubos {
|
|
401
431
|
atualizado_em?: string | null;
|
|
@@ -588,10 +618,13 @@ export interface IndicadoresDeVenda {
|
|
|
588
618
|
}
|
|
589
619
|
export interface ItemDoPedido {
|
|
590
620
|
adicionais?: Array<AdicionalDoItem>;
|
|
621
|
+
atributos_escolhidos_pela_ia?: Array<string>;
|
|
622
|
+
atributos_faltando?: Array<string>;
|
|
591
623
|
escolhido?: OpcaoDoItem | null;
|
|
592
624
|
observacao?: string | null;
|
|
593
625
|
opcoes: Array<OpcaoDoItem>;
|
|
594
626
|
pedido_do_cliente: string;
|
|
627
|
+
produto_sem_estoque?: OpcaoDoItem | null;
|
|
595
628
|
quantidade: number;
|
|
596
629
|
situacao: string;
|
|
597
630
|
}
|
|
@@ -705,8 +738,11 @@ export interface OpcaoDeFiltro {
|
|
|
705
738
|
valor: string;
|
|
706
739
|
}
|
|
707
740
|
export interface OpcaoDoItem {
|
|
741
|
+
cor?: string | null;
|
|
708
742
|
disponivel: boolean;
|
|
709
743
|
imagem_url?: string | null;
|
|
744
|
+
medida?: string | null;
|
|
745
|
+
modelo?: string | null;
|
|
710
746
|
nome: string;
|
|
711
747
|
preco_unitario: number;
|
|
712
748
|
produto_id: string;
|
|
@@ -925,8 +961,11 @@ export interface PaginaPedidoAutoComplete {
|
|
|
925
961
|
export interface PaginaProdutoItensItem {
|
|
926
962
|
ativo: boolean;
|
|
927
963
|
atualizado_em: string;
|
|
964
|
+
calcular_polegada: boolean;
|
|
965
|
+
campos_revisados: Array<string>;
|
|
928
966
|
categoria_tiny?: string | null;
|
|
929
967
|
comprimento?: string | null;
|
|
968
|
+
comprimento_polegada?: string | null;
|
|
930
969
|
comprimento_unidade?: string | null;
|
|
931
970
|
cor?: string | null;
|
|
932
971
|
criado_em: string;
|
|
@@ -954,6 +993,7 @@ export interface PaginaProdutoItensItem {
|
|
|
954
993
|
lancamento: boolean;
|
|
955
994
|
marca_tiny?: string | null;
|
|
956
995
|
medida?: string | null;
|
|
996
|
+
medida_polegada?: string | null;
|
|
957
997
|
medida_unidade?: string | null;
|
|
958
998
|
ncm?: string | null;
|
|
959
999
|
nome: string;
|
|
@@ -967,7 +1007,9 @@ export interface PaginaProdutoItensItem {
|
|
|
967
1007
|
preco_a_vista: number;
|
|
968
1008
|
preco_a_vista_tiny?: number | null;
|
|
969
1009
|
preco_portal_b2b?: number | null;
|
|
1010
|
+
preco_portal_b2b_a_prazo?: number | null;
|
|
970
1011
|
preco_tiny?: number | null;
|
|
1012
|
+
precos_por_unidade: Array<PrecoPorUnidade>;
|
|
971
1013
|
quantidade_minima: number;
|
|
972
1014
|
relevancia: number;
|
|
973
1015
|
resumo_caracteristicas?: string | null;
|
|
@@ -1195,6 +1237,13 @@ export interface PedidoVendaTinyAutoComplete {
|
|
|
1195
1237
|
id: number;
|
|
1196
1238
|
rotulo: string;
|
|
1197
1239
|
}
|
|
1240
|
+
export interface PrecoPorUnidade {
|
|
1241
|
+
ativo?: boolean;
|
|
1242
|
+
quantidade?: number | null;
|
|
1243
|
+
unidade: string;
|
|
1244
|
+
variacao_a_prazo?: number | null;
|
|
1245
|
+
variacao_a_vista?: number | null;
|
|
1246
|
+
}
|
|
1198
1247
|
export interface ProblemaFrequente {
|
|
1199
1248
|
problema: string;
|
|
1200
1249
|
quantidade: number;
|
|
@@ -1202,8 +1251,11 @@ export interface ProblemaFrequente {
|
|
|
1202
1251
|
export interface Produto {
|
|
1203
1252
|
ativo: boolean;
|
|
1204
1253
|
atualizado_em: string;
|
|
1254
|
+
calcular_polegada: boolean;
|
|
1255
|
+
campos_revisados: Array<string>;
|
|
1205
1256
|
categoria_tiny?: string | null;
|
|
1206
1257
|
comprimento?: string | null;
|
|
1258
|
+
comprimento_polegada?: string | null;
|
|
1207
1259
|
comprimento_unidade?: string | null;
|
|
1208
1260
|
cor?: string | null;
|
|
1209
1261
|
criado_em: string;
|
|
@@ -1231,6 +1283,7 @@ export interface Produto {
|
|
|
1231
1283
|
lancamento: boolean;
|
|
1232
1284
|
marca_tiny?: string | null;
|
|
1233
1285
|
medida?: string | null;
|
|
1286
|
+
medida_polegada?: string | null;
|
|
1234
1287
|
medida_unidade?: string | null;
|
|
1235
1288
|
ncm?: string | null;
|
|
1236
1289
|
nome: string;
|
|
@@ -1244,7 +1297,9 @@ export interface Produto {
|
|
|
1244
1297
|
preco_a_vista: number;
|
|
1245
1298
|
preco_a_vista_tiny?: number | null;
|
|
1246
1299
|
preco_portal_b2b?: number | null;
|
|
1300
|
+
preco_portal_b2b_a_prazo?: number | null;
|
|
1247
1301
|
preco_tiny?: number | null;
|
|
1302
|
+
precos_por_unidade: Array<PrecoPorUnidade>;
|
|
1248
1303
|
quantidade_minima: number;
|
|
1249
1304
|
relevancia: number;
|
|
1250
1305
|
resumo_caracteristicas?: string | null;
|
|
@@ -1256,6 +1311,7 @@ export interface Produto {
|
|
|
1256
1311
|
}
|
|
1257
1312
|
export interface ProdutoAtualizar {
|
|
1258
1313
|
ativo?: boolean | null;
|
|
1314
|
+
calcular_polegada?: boolean | null;
|
|
1259
1315
|
comprimento?: string | null;
|
|
1260
1316
|
comprimento_unidade?: string | null;
|
|
1261
1317
|
cor?: string | null;
|
|
@@ -1278,6 +1334,8 @@ export interface ProdutoAtualizar {
|
|
|
1278
1334
|
preco?: number | null;
|
|
1279
1335
|
preco_a_vista?: number | null;
|
|
1280
1336
|
preco_portal_b2b?: number | null;
|
|
1337
|
+
preco_portal_b2b_a_prazo?: number | null;
|
|
1338
|
+
precos_por_unidade?: Array<PrecoPorUnidade> | null;
|
|
1281
1339
|
quantidade_minima?: number | null;
|
|
1282
1340
|
relevancia?: number | null;
|
|
1283
1341
|
resumo_caracteristicas?: string | null;
|
package/dist/support/rotas.d.ts
CHANGED
|
@@ -313,7 +313,7 @@ export interface ParametrosDeBuscarPeloFiltroTicket {
|
|
|
313
313
|
/**
|
|
314
314
|
* Anexa um arquivo ou link
|
|
315
315
|
*
|
|
316
|
-
* Exige a permissão `criar` na área `projetos` ou `tickets`. Anexa a uma tarefa (`tarefa_id`) ou ticket (`ticket_id`), nunca aos dois. Mande o arquivo em `arquivo_base64` (com ou sem o prefixo `data:...;base64,`, até 10 MB, `tipo_mime` informa o formato) ou um link em `url` (`http://` ou `https://`, até 1000 caracteres). Com `importar_url: true`, o servidor baixa a imagem de `url` e guarda o arquivo no lugar do link (é o caminho para anexar imagens pelo MCP): só `https://`, sem redirecionamento, servidor de IP público, resposta `image/*` de até 10 MB; o `tipo_mime` vem da resposta. `nome` é obrigatório (até 200). O arquivo vai para o TermoBucket (privado, app `termo-suporte`); se o bucket falhar,
|
|
316
|
+
* Exige a permissão `criar` na área `projetos` ou `tickets`. Anexa a uma tarefa (`tarefa_id`) ou ticket (`ticket_id`), nunca aos dois. Mande o arquivo em `arquivo_base64` (com ou sem o prefixo `data:...;base64,`, até 10 MB, `tipo_mime` informa o formato) ou um link em `url` (`http://` ou `https://`, até 1000 caracteres). Com `importar_url: true`, o servidor baixa a imagem de `url` e guarda o arquivo no lugar do link (é o caminho para anexar imagens pelo MCP): só `https://`, sem redirecionamento, servidor de IP público, resposta `image/*` de até 10 MB; o `tipo_mime` vem da resposta. `nome` é obrigatório (até 200). O arquivo vai para o TermoBucket (privado, app `termo-suporte`); se o bucket falhar, responde `502` e nada é gravado (o arquivo nunca fica no banco). O corpo aceita até 16 MiB. A atividade da tarefa ou do ticket ganha a linha do anexo.
|
|
317
317
|
*
|
|
318
318
|
* `POST /anexo`
|
|
319
319
|
*/
|
|
@@ -329,7 +329,7 @@ export declare function buscar_pelo_filtro_anexo(credencial_de_acesso: Credencia
|
|
|
329
329
|
/**
|
|
330
330
|
* Baixa um anexo pelo id
|
|
331
331
|
*
|
|
332
|
-
* Exige a permissão de leitura na área `projetos` ou `tickets` (qualquer das ações `ler`, `criar`, `editar` ou `deletar` libera a leitura). Devolve os dados do anexo e, quando é arquivo, `url_download`: endereço de download assinado do TermoBucket (arquivo privado do app `termo-suporte`), válido por 15 minutos. `
|
|
332
|
+
* Exige a permissão de leitura na área `projetos` ou `tickets` (qualquer das ações `ler`, `criar`, `editar` ou `deletar` libera a leitura). Devolve os dados do anexo e, quando é arquivo, `url_download`: endereço de download assinado do TermoBucket (arquivo privado do app `termo-suporte`), válido por 15 minutos. `url_download` fica vazia quando o anexo é um link.
|
|
333
333
|
*
|
|
334
334
|
* `GET /anexo/{id}`
|
|
335
335
|
*/
|
package/dist/support/rotas.js
CHANGED
|
@@ -4,7 +4,7 @@ import { TERMO_SUPPORT as SERVICO_DESTA_API } from "../base/servicos.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* Anexa um arquivo ou link
|
|
6
6
|
*
|
|
7
|
-
* Exige a permissão `criar` na área `projetos` ou `tickets`. Anexa a uma tarefa (`tarefa_id`) ou ticket (`ticket_id`), nunca aos dois. Mande o arquivo em `arquivo_base64` (com ou sem o prefixo `data:...;base64,`, até 10 MB, `tipo_mime` informa o formato) ou um link em `url` (`http://` ou `https://`, até 1000 caracteres). Com `importar_url: true`, o servidor baixa a imagem de `url` e guarda o arquivo no lugar do link (é o caminho para anexar imagens pelo MCP): só `https://`, sem redirecionamento, servidor de IP público, resposta `image/*` de até 10 MB; o `tipo_mime` vem da resposta. `nome` é obrigatório (até 200). O arquivo vai para o TermoBucket (privado, app `termo-suporte`); se o bucket falhar,
|
|
7
|
+
* Exige a permissão `criar` na área `projetos` ou `tickets`. Anexa a uma tarefa (`tarefa_id`) ou ticket (`ticket_id`), nunca aos dois. Mande o arquivo em `arquivo_base64` (com ou sem o prefixo `data:...;base64,`, até 10 MB, `tipo_mime` informa o formato) ou um link em `url` (`http://` ou `https://`, até 1000 caracteres). Com `importar_url: true`, o servidor baixa a imagem de `url` e guarda o arquivo no lugar do link (é o caminho para anexar imagens pelo MCP): só `https://`, sem redirecionamento, servidor de IP público, resposta `image/*` de até 10 MB; o `tipo_mime` vem da resposta. `nome` é obrigatório (até 200). O arquivo vai para o TermoBucket (privado, app `termo-suporte`); se o bucket falhar, responde `502` e nada é gravado (o arquivo nunca fica no banco). O corpo aceita até 16 MiB. A atividade da tarefa ou do ticket ganha a linha do anexo.
|
|
8
8
|
*
|
|
9
9
|
* `POST /anexo`
|
|
10
10
|
*/
|
|
@@ -38,7 +38,7 @@ export function buscar_pelo_filtro_anexo(credencial_de_acesso, parametros = {},
|
|
|
38
38
|
/**
|
|
39
39
|
* Baixa um anexo pelo id
|
|
40
40
|
*
|
|
41
|
-
* Exige a permissão de leitura na área `projetos` ou `tickets` (qualquer das ações `ler`, `criar`, `editar` ou `deletar` libera a leitura). Devolve os dados do anexo e, quando é arquivo, `url_download`: endereço de download assinado do TermoBucket (arquivo privado do app `termo-suporte`), válido por 15 minutos. `
|
|
41
|
+
* Exige a permissão de leitura na área `projetos` ou `tickets` (qualquer das ações `ler`, `criar`, `editar` ou `deletar` libera a leitura). Devolve os dados do anexo e, quando é arquivo, `url_download`: endereço de download assinado do TermoBucket (arquivo privado do app `termo-suporte`), válido por 15 minutos. `url_download` fica vazia quando o anexo é um link.
|
|
42
42
|
*
|
|
43
43
|
* `GET /anexo/{id}`
|
|
44
44
|
*/
|
package/dist/support/tipos.d.ts
CHANGED
|
@@ -18,10 +18,6 @@ export interface AnexoAtualizar {
|
|
|
18
18
|
nome: string;
|
|
19
19
|
}
|
|
20
20
|
export interface AnexoComConteudoParte2 {
|
|
21
|
-
/**
|
|
22
|
-
* O arquivo em base64, só enquanto ele ainda não foi levado ao TermoBucket.
|
|
23
|
-
*/
|
|
24
|
-
conteudo_base64?: string | null;
|
|
25
21
|
/**
|
|
26
22
|
* URL de download do arquivo no TermoBucket, assinada por 15 minutos (vazia quando o anexo é um link).
|
|
27
23
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "termo_core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"description": "Todos os clientes da Termotubos num pacote só: um módulo por serviço e cada rota da API como uma função com fetch, com o endereço resolvido pelo ambiente atual.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "TI Termotubos <ti@termotubos.com.br>",
|