termo_core 0.1.2 → 0.1.4

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.
@@ -790,7 +790,7 @@ export function deletar_pelo_id_contato(credencial_de_acesso, id, opcoes_da_cham
790
790
  /**
791
791
  * Lista uma página de cotações
792
792
  *
793
- * Exige a permissão `ver` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Devolve só o array da página, até 50 cotações, das mais novas para as mais antigas; o total, as páginas e as contagens por situação vêm de `GET /cotacao/paginador`, com os mesmos filtros. Quem não é colaborador interno precisa informar `unidade_id` de uma unidade da própria sessão; colaborador interno pode omitir e vê todas. Filtros opcionais: `status` (um dos 5 valores, senão 400 `Status inválido`); `busca` procura o número (C-1048 ou 1048), o SKU ou o nome de um item e a razão social da unidade; `inicio`/`fim` são datas AAAA-MM-DD do envio, em Brasília, inclusivas; `cursor` é o id da última cotação da página anterior.
793
+ * Exige a permissão `ver` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Devolve só o array da página, até 50 cotações, das mais novas para as mais antigas; o total, as páginas e as contagens por situação vêm de `GET /cotacao/paginador`, com os mesmos filtros. Quem não é colaborador interno precisa informar `unidade_id` de uma unidade da própria sessão; colaborador interno pode omitir e vê todas. Filtros opcionais: `status` (um dos 5 valores, senão 400 `Status inválido`); `busca` procura o número (C-1048 ou 1048), o SKU ou o nome de um item e a razão social da unidade; `inicio`/`fim` são datas AAAA-MM-DD do envio, em Brasília, inclusivas; `origem` (`carrinho`, `pedido_inteligente`) é exata; `cursor` é o id da última cotação da página anterior.
794
794
  *
795
795
  * `GET /cotacao`
796
796
  */
@@ -807,7 +807,7 @@ export function buscar_paginador_cotacao(credencial_de_acesso, parametros = {},
807
807
  /**
808
808
  * Cria uma cotação (carrinho enviado)
809
809
  *
810
- * Exige a permissão `criar` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Monta a cotação no servidor a partir dos itens (`produto_id`, `quantidade` acima de zero e até 9999, `embalagem_fechada`, `preco_unitario` visto pelo cliente), com 1 a 200 itens e sem produto repetido. Recalcula preços por faixa, confere `total_esperado` e grava com o status inicial. A unidade precisa ser da sessão (colaborador interno acessa todas) e, para quem não é colaborador interno, o autor é sempre quem chama. `acima_do_limite` indica que a cotação passa o limite de faturamento da unidade. Campos: `unidade_id` (uuid) é a unidade compradora, da sessão; `autor_cliente_id` é a pessoa autora (uuid; para quem não é colaborador interno vale sempre a própria pessoa); `itens` é a lista de 1 a 200 itens, cada um com `produto_id`, `quantidade`, `embalagem_fechada` e `preco_unitario`; `economia_tier` é a economia do grupo de cliente vista no carrinho (decimal, informativo); `carrinho_id` (opcional) é o carrinho aberto da unidade de onde os itens saíram: todo item precisa estar nele, o carrinho fecha junto com a cotação e os itens que não foram cotados seguem num carrinho novo; `endereco_id` (opcional) é um endereço de entrega da unidade, copiado para `endereco_entrega`; `observacao` (opcional) tem até 1000 caracteres. A cotação nasce com `numero` sequencial (exibido como C-1001) e `valida_ate` = hoje em Brasília + `cotacao_validade_dias` de Configurações (15 sem a chave).
810
+ * Exige a permissão `criar` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Monta a cotação no servidor a partir dos itens (`produto_id`, `quantidade` acima de zero e até 9999, `embalagem_fechada`, `preco_unitario` visto pelo cliente), com 1 a 200 itens e sem produto repetido. Recalcula preços por faixa, confere `total_esperado` e grava com o status inicial. A unidade precisa ser da sessão (colaborador interno acessa todas) e, para quem não é colaborador interno, o autor é sempre quem chama. `acima_do_limite` indica que a cotação passa o limite de faturamento da unidade. Campos: `unidade_id` (uuid) é a unidade compradora, da sessão, e o cliente da cotação é sempre o cliente dessa unidade (o nome dele fica em `autor_nome`); `itens` é a lista de 1 a 200 itens, cada um com `produto_id`, `quantidade`, `embalagem_fechada` e `preco_unitario`; `economia_tier` é a economia do grupo de cliente vista no carrinho (decimal, informativo); `carrinho_id` (opcional) é o carrinho aberto da unidade de onde os itens saíram: todo item precisa estar nele, o carrinho fecha junto com a cotação e os itens que não foram cotados seguem num carrinho novo; `pedido_inteligente_id` (opcional, nunca junto com `carrinho_id`) é o pedido inteligente revisado de onde os itens saíram: ele precisa estar `pronto`, todo item precisa ser um produto confirmado na revisão, a cotação sai com `origem` `pedido_inteligente` e o pedido vira `cotado`; sem ele, `origem` é `carrinho`; `endereco_id` (opcional) é um endereço de entrega da unidade, copiado para `endereco_entrega`; `observacao` (opcional) tem até 1000 caracteres. A cotação nasce com `numero` sequencial (exibido como C-1001) e `valida_ate` = hoje em Brasília + `cotacao_validade_dias` de Configurações (15 sem a chave).
811
811
  *
812
812
  * `POST /cotacao`
813
813
  */
@@ -841,7 +841,7 @@ export function buscar_auto_complete_cotacao(credencial_de_acesso, parametros =
841
841
  /**
842
842
  * Busca cotações por filtro
843
843
  *
844
- * Exige a permissão `ver` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Devolve as cotações não excluídas que casam com o filtro, até 50 por página (`pagina`, a partir de 1, padrão 1), das mais novas para as mais antigas. Quem não é colaborador interno precisa informar `unidade_id` de uma unidade da própria sessão; colaborador interno pode omitir e vê todas. `autor_cliente_id` e `status` (`rascunho`, `esperando_aprovacao`, `concluido`, `nao_aprovado`, `em_transporte`) são exatos.
844
+ * Exige a permissão `ver` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Devolve as cotações não excluídas que casam com o filtro, até 50 por página (`pagina`, a partir de 1, padrão 1), das mais novas para as mais antigas. Quem não é colaborador interno precisa informar `unidade_id` de uma unidade da própria sessão; colaborador interno pode omitir e vê todas. `origem` (`carrinho`, `pedido_inteligente`) e `status` (`rascunho`, `esperando_aprovacao`, `concluido`, `nao_aprovado`, `em_transporte`) são exatos.
845
845
  *
846
846
  * `GET /cotacao/filtro`
847
847
  */
@@ -1256,39 +1256,6 @@ export function buscar_pelo_filtro_indicador_venda(credencial_de_acesso, paramet
1256
1256
  formato_da_resposta: "json",
1257
1257
  }, opcoes_da_chamada);
1258
1258
  }
1259
- /**
1260
- * Gera um link de envio de imagem para o produto do SKU
1261
- *
1262
- * Exige colaborador interno com a permissão `editar` no módulo `Configuracoes`. Serve para enviar a imagem de um arquivo local (ex.: uma pasta do computador) sem passar o conteúdo pela ferramenta: gere um link por imagem e envie o arquivo direto para a `url_envio` com `curl -X PATCH -F "arquivo=@<caminho do arquivo>" <url_envio>` (sem token: o link já autoriza). O envio grava a imagem no TermoBucket e já a acrescenta ao fim das `imagens` do produto (a primeira continua a principal); a resposta traz a `url` da imagem e a lista de `imagens` do produto. O link é de uso único e vence em 15 minutos (`expira_em`). Campos: `sku` do produto, sem diferenciar maiúsculas. Na resposta, `imagens_no_produto` e `vagas_de_imagem` dizem quantas imagens ele já tem e quantas ainda cabem (até 15). Imagem PNG, JPG, WEBP ou GIF até 5 MB. Dica: com o nome do arquivo começando pelo SKU (`<SKU>.png`, `<SKU>_2.png`), dá para enviar uma pasta inteira descobrindo o produto pelo nome.
1263
- *
1264
- * `POST /link_envio_imagem`
1265
- */
1266
- export function criar_link_envio_imagem(credencial_de_acesso, corpo_da_requisicao, opcoes_da_chamada) {
1267
- return chamar_servico({
1268
- servico: SERVICO_DESTA_API,
1269
- metodo_http: "POST",
1270
- caminho_da_rota: "/link_envio_imagem",
1271
- credencial_de_acesso,
1272
- corpo_json: corpo_da_requisicao,
1273
- formato_da_resposta: "json",
1274
- }, opcoes_da_chamada);
1275
- }
1276
- /**
1277
- * Envia a imagem pelo link e a acrescenta ao produto
1278
- *
1279
- * Rota pública: quem autoriza é o próprio link (`id` de uso único gerado pelo `POST /link_envio_imagem`, válido por 15 minutos). Formulário `multipart/form-data` com o campo `arquivo` (PNG, JPG, WEBP ou GIF até 5 MB; o tipo sai dos bytes). Grava a imagem no TermoBucket e a acrescenta ao fim das `imagens` do produto. Se o envio falha (formato, tamanho, TermoBucket fora do ar), o link continua valendo até vencer.
1280
- *
1281
- * `PATCH /link_envio_imagem/{id}`
1282
- */
1283
- export function atualizar_pelo_id_link_envio_imagem(id, formulario, opcoes_da_chamada) {
1284
- return chamar_servico({
1285
- servico: SERVICO_DESTA_API,
1286
- metodo_http: "PATCH",
1287
- caminho_da_rota: `/link_envio_imagem/${codificar_parametro_de_caminho(id)}`,
1288
- formulario,
1289
- formato_da_resposta: "json",
1290
- }, opcoes_da_chamada);
1291
- }
1292
1259
  /**
1293
1260
  * Uma página das notas fiscais, por cursor
1294
1261
  *
@@ -1539,6 +1506,89 @@ export function deletar_pelo_id_pedido(credencial_de_acesso, id, opcoes_da_chama
1539
1506
  formato_da_resposta: "sem_conteudo",
1540
1507
  }, opcoes_da_chamada);
1541
1508
  }
1509
+ /**
1510
+ * Envia um pedido para a IA montar
1511
+ *
1512
+ * Exige a permissão `criar` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Formulário `multipart/form-data` com `unidade_id` (uma unidade da sessão), `texto` (opcional, até 4000 caracteres) e até 5 campos `arquivo` (áudio MP3, M4A, OGG, OPUS, WAV ou WEBM; PDF; foto PNG, JPG ou WEBP; planilha XLSX ou CSV), cada um com até 20 MB e o envio inteiro com até 25 MB; é preciso mandar o texto ou ao menos um anexo. Grava o pedido com `status` `analisando` e responde na hora; a análise roda no servidor: os anexos vão para o TermoBucket (privados), tudo vira texto (PDF e planilha no próprio Portal, foto, PDF escaneado e áudio pelo TermoAI) e a IA de texto escolhida em Provedores procura cada item no catálogo e no boletim técnico. Acompanhe por `GET /pedido_inteligente/{id}` até `status` virar `pronto` (com os `itens` para revisar) ou `erro` (com o motivo em `erro`). Cada unidade manda no máximo 20 pedidos por hora.
1513
+ *
1514
+ * `POST /pedido_inteligente`
1515
+ */
1516
+ export function criar_pedido_inteligente(credencial_de_acesso, formulario, opcoes_da_chamada) {
1517
+ return chamar_servico({
1518
+ servico: SERVICO_DESTA_API,
1519
+ metodo_http: "POST",
1520
+ caminho_da_rota: "/pedido_inteligente",
1521
+ credencial_de_acesso,
1522
+ formulario,
1523
+ formato_da_resposta: "json",
1524
+ }, opcoes_da_chamada);
1525
+ }
1526
+ /**
1527
+ * Busca pedidos inteligentes por filtro
1528
+ *
1529
+ * Exige a permissão `ver` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Devolve os pedidos não excluídos, até 50 por página (`pagina`, a partir de 1, padrão 1), dos mais novos para os mais antigos. Quem não é colaborador interno precisa informar `unidade_id` de uma unidade da própria sessão; colaborador interno pode omitir e vê todos. `status` (`analisando`, `pronto`, `cotado`, `erro`) é exato; uma análise parada há mais de 10 minutos conta como `erro`.
1530
+ *
1531
+ * `GET /pedido_inteligente/filtro`
1532
+ */
1533
+ export function buscar_pelo_filtro_pedido_inteligente(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
1534
+ return chamar_servico({
1535
+ servico: SERVICO_DESTA_API,
1536
+ metodo_http: "GET",
1537
+ caminho_da_rota: "/pedido_inteligente/filtro",
1538
+ credencial_de_acesso,
1539
+ parametros_de_consulta: parametros,
1540
+ formato_da_resposta: "json",
1541
+ }, opcoes_da_chamada);
1542
+ }
1543
+ /**
1544
+ * Busca um pedido inteligente pelo id
1545
+ *
1546
+ * Exige a permissão `ver` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Pedido de uma unidade fora da sessão responde 404, como se não existisse. Depois da análise, cada anexo guardado traz `url`, um link de download do TermoBucket que vale 15 minutos. Cada item traz `pedido_do_cliente` (o trecho que o cliente escreveu), `situacao` (`encontrado`, `escolher`, `indisponivel` ou `nao_encontrado`), `quantidade`, `escolhido`, `opcoes` e `observacao` (como a IA entendeu o item); `cotacao_id` aparece quando o pedido já virou cotação.
1547
+ *
1548
+ * `GET /pedido_inteligente/{id}`
1549
+ */
1550
+ export function buscar_pelo_id_pedido_inteligente(credencial_de_acesso, id, opcoes_da_chamada) {
1551
+ return chamar_servico({
1552
+ servico: SERVICO_DESTA_API,
1553
+ metodo_http: "GET",
1554
+ caminho_da_rota: `/pedido_inteligente/${codificar_parametro_de_caminho(id)}`,
1555
+ credencial_de_acesso,
1556
+ formato_da_resposta: "json",
1557
+ }, opcoes_da_chamada);
1558
+ }
1559
+ /**
1560
+ * Grava a revisão do cliente
1561
+ *
1562
+ * Exige a permissão `editar` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Só vale com `status` `pronto`. `itens` tem uma escolha por item do pedido, na mesma ordem: `produto_id` é o produto escolhido, entre o `escolhido` e as `opcoes` daquele item (nulo tira o item da cotação), e `quantidade` vai de 0 a 9999 (acima de zero).
1563
+ *
1564
+ * `PATCH /pedido_inteligente/{id}`
1565
+ */
1566
+ export function atualizar_pelo_id_pedido_inteligente(credencial_de_acesso, id, corpo_da_requisicao, opcoes_da_chamada) {
1567
+ return chamar_servico({
1568
+ servico: SERVICO_DESTA_API,
1569
+ metodo_http: "PATCH",
1570
+ caminho_da_rota: `/pedido_inteligente/${codificar_parametro_de_caminho(id)}`,
1571
+ credencial_de_acesso,
1572
+ corpo_json: corpo_da_requisicao,
1573
+ formato_da_resposta: "json",
1574
+ }, opcoes_da_chamada);
1575
+ }
1576
+ /**
1577
+ * Cancela um pedido inteligente
1578
+ *
1579
+ * Exige a permissão `excluir` no módulo `Cotacoes` do perfil de quem chama (administrador e master têm tudo). Exclusão lógica; uma análise em andamento para de gravar. O pedido que já virou cotação não sai (409).
1580
+ *
1581
+ * `DELETE /pedido_inteligente/{id}`
1582
+ */
1583
+ export function deletar_pelo_id_pedido_inteligente(credencial_de_acesso, id, opcoes_da_chamada) {
1584
+ return chamar_servico({
1585
+ servico: SERVICO_DESTA_API,
1586
+ metodo_http: "DELETE",
1587
+ caminho_da_rota: `/pedido_inteligente/${codificar_parametro_de_caminho(id)}`,
1588
+ credencial_de_acesso,
1589
+ formato_da_resposta: "sem_conteudo",
1590
+ }, opcoes_da_chamada);
1591
+ }
1542
1592
  /**
1543
1593
  * Lista os pedidos de venda do ERP
1544
1594
  *
@@ -1,3 +1,10 @@
1
+ export interface AnexoDoPedido {
2
+ arquivo_id?: string | null;
3
+ nome: string;
4
+ tamanho: number;
5
+ tipo: string;
6
+ url?: string | null;
7
+ }
1
8
  export interface Arquivo {
2
9
  url: string;
3
10
  }
@@ -93,7 +100,6 @@ export interface BuscaTermotubos {
93
100
  }
94
101
  export interface Carrinho {
95
102
  atualizado_em: string;
96
- cliente_id?: string | null;
97
103
  criado_em: string;
98
104
  id: string;
99
105
  itens: Array<CarrinhoItem>;
@@ -294,7 +300,6 @@ export interface ContatoCriar {
294
300
  export interface Cotacao {
295
301
  acima_do_limite: boolean;
296
302
  atualizado_em: string;
297
- autor_cliente_id: string;
298
303
  autor_nome: string;
299
304
  carrinho_id?: string | null;
300
305
  criado_em: string;
@@ -305,6 +310,8 @@ export interface Cotacao {
305
310
  itens: Array<CotacaoItem>;
306
311
  numero: number;
307
312
  observacao?: string | null;
313
+ origem: string;
314
+ pedido_inteligente_id?: string | null;
308
315
  quantidade_itens: number;
309
316
  status: string;
310
317
  subtotal: number;
@@ -324,12 +331,12 @@ export interface CotacaoAutoComplete {
324
331
  rotulo: string;
325
332
  }
326
333
  export interface CotacaoCriar {
327
- autor_cliente_id: string;
328
334
  carrinho_id?: string | null;
329
335
  economia_tier?: number | null;
330
336
  endereco_id?: string | null;
331
337
  itens: Array<CotacaoItemCriar>;
332
338
  observacao?: string | null;
339
+ pedido_inteligente_id?: string | null;
333
340
  total_esperado?: number | null;
334
341
  unidade_id: string;
335
342
  }
@@ -436,6 +443,10 @@ export interface EnderecoEntrega {
436
443
  logradouro: string;
437
444
  numero?: string | null;
438
445
  }
446
+ export interface EscolhaDoItem {
447
+ produto_id?: string | null;
448
+ quantidade: number;
449
+ }
439
450
  export interface ExpedicaoTermotubos {
440
451
  atualizado_em?: string | null;
441
452
  cep?: string | null;
@@ -513,15 +524,6 @@ export interface HistoricoPrecoTermotubos {
513
524
  preco?: number | null;
514
525
  preco_promocional?: number | null;
515
526
  }
516
- export interface ImagemDoLink {
517
- arquivo: string;
518
- }
519
- export interface ImagemEnviada {
520
- imagens: Array<string>;
521
- produto_id: string;
522
- sku: string;
523
- url: string;
524
- }
525
527
  export interface ImportacaoProdutos {
526
528
  atualizados: number;
527
529
  conflitos: number;
@@ -570,6 +572,14 @@ export interface ItemCatalogoTermotubos {
570
572
  tem_imagem: boolean;
571
573
  unidade?: string | null;
572
574
  }
575
+ export interface ItemDoPedido {
576
+ escolhido?: OpcaoDoItem | null;
577
+ observacao?: string | null;
578
+ opcoes: Array<OpcaoDoItem>;
579
+ pedido_do_cliente: string;
580
+ quantidade: number;
581
+ situacao: string;
582
+ }
573
583
  export interface ItemNotaFiscal {
574
584
  descricao?: string | null;
575
585
  preco_unitario?: number | null;
@@ -592,18 +602,6 @@ export interface ItemSincronizado {
592
602
  resultado: string;
593
603
  sku: string;
594
604
  }
595
- export interface LinkEnvioImagem {
596
- expira_em: string;
597
- id: string;
598
- imagens_no_produto: number;
599
- produto_id: string;
600
- sku: string;
601
- url_envio: string;
602
- vagas_de_imagem: number;
603
- }
604
- export interface LinkEnvioImagemCriar {
605
- sku: string;
606
- }
607
605
  export interface NotaFiscalParte2 {
608
606
  parcelas: Array<ParcelaNotaFiscal>;
609
607
  parcelas_lidas: boolean;
@@ -649,6 +647,15 @@ export interface OpcaoDeFiltro {
649
647
  rotulo: string;
650
648
  valor: string;
651
649
  }
650
+ export interface OpcaoDoItem {
651
+ disponivel: boolean;
652
+ imagem_url?: string | null;
653
+ nome: string;
654
+ preco_unitario: number;
655
+ produto_id: string;
656
+ sku: string;
657
+ unidade: string;
658
+ }
652
659
  export interface PaginaExpedicoes {
653
660
  contagens: ContagemExpedicoes;
654
661
  itens: Array<ExpedicaoTermotubos>;
@@ -1139,6 +1146,28 @@ export interface PedidoCriar {
1139
1146
  export interface PedidoDaEntrega {
1140
1147
  id: number;
1141
1148
  }
1149
+ export interface PedidoInteligente {
1150
+ anexos: Array<AnexoDoPedido>;
1151
+ atualizado_em: string;
1152
+ cotacao_id?: string | null;
1153
+ criado_em: string;
1154
+ erro?: string | null;
1155
+ id: string;
1156
+ itens: Array<ItemDoPedido>;
1157
+ provedor_ia?: string | null;
1158
+ status: string;
1159
+ texto_enviado?: string | null;
1160
+ texto_interpretado?: string | null;
1161
+ unidade_id: string;
1162
+ }
1163
+ export interface PedidoInteligenteAtualizar {
1164
+ itens: Array<EscolhaDoItem>;
1165
+ }
1166
+ export interface PedidoInteligenteEnvio {
1167
+ arquivo: Array<string>;
1168
+ texto?: string | null;
1169
+ unidade_id: string;
1170
+ }
1142
1171
  export interface PedidoItem {
1143
1172
  produto: string;
1144
1173
  quantidade: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termo_core",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
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>",