termo_core 0.1.1 → 0.1.2

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.
@@ -156,53 +156,6 @@ export interface ParametrosDeBuscarInformacoesPaginadorCliente {
156
156
  unidade_id?: string;
157
157
  cursor?: string;
158
158
  }
159
- /**
160
- * Parâmetros de consulta e de cabeçalho de `/colaborador`.
161
- */
162
- export interface ParametrosDeBuscarPaginadorColaborador {
163
- pagina?: number;
164
- }
165
- /**
166
- * Parâmetros de consulta e de cabeçalho de `/colaborador/autocomplete`.
167
- */
168
- export interface ParametrosDeBuscarAutoCompleteColaborador {
169
- busca?: string;
170
- status?: string;
171
- pagina?: number;
172
- tamanho?: number;
173
- }
174
- /**
175
- * Parâmetros de consulta e de cabeçalho de `/colaborador/filtro`.
176
- */
177
- export interface ParametrosDeBuscarPeloFiltroColaborador {
178
- nome?: string;
179
- email?: string;
180
- status?: string;
181
- perfil_id?: string;
182
- pagina?: number;
183
- }
184
- /**
185
- * Parâmetros de consulta e de cabeçalho de `/configuracao`.
186
- */
187
- export interface ParametrosDeBuscarPaginadorConfiguracao {
188
- pagina?: number;
189
- }
190
- /**
191
- * Parâmetros de consulta e de cabeçalho de `/configuracao/autocomplete`.
192
- */
193
- export interface ParametrosDeBuscarAutoCompleteConfiguracao {
194
- busca?: string;
195
- pagina?: number;
196
- tamanho?: number;
197
- }
198
- /**
199
- * Parâmetros de consulta e de cabeçalho de `/configuracao/filtro`.
200
- */
201
- export interface ParametrosDeBuscarPeloFiltroConfiguracao {
202
- chave?: string;
203
- prefixo?: string;
204
- pagina?: number;
205
- }
206
159
  /**
207
160
  * Parâmetros de consulta e de cabeçalho de `/contato`.
208
161
  */
@@ -586,8 +539,6 @@ export interface ParametrosDeBuscarPaginadorProduto {
586
539
  enriquecido?: boolean;
587
540
  unidade?: string;
588
541
  cor?: string;
589
- material?: string;
590
- diametro?: string;
591
542
  categoria_tiny?: string;
592
543
  marca_tiny?: string;
593
544
  criado_desde?: string;
@@ -630,8 +581,6 @@ export interface ParametrosDeBuscarPeloFiltroProduto {
630
581
  enriquecido?: boolean;
631
582
  unidade?: string;
632
583
  cor?: string;
633
- material?: string;
634
- diametro?: string;
635
584
  categoria_tiny?: string;
636
585
  marca_tiny?: string;
637
586
  criado_desde?: string;
@@ -788,14 +737,6 @@ export interface ParametrosDeBuscarPeloFiltroUnidade {
788
737
  cliente_id?: string;
789
738
  pagina?: number;
790
739
  }
791
- /**
792
- * Versão da API
793
- *
794
- * Rota pública: não exige sessão. Confere se a API está no ar e devolve a versão publicada do backend.
795
- *
796
- * `GET /`
797
- */
798
- export declare function buscar_pelo_id_versao(opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.VersaoDaApi>;
799
740
  /**
800
741
  * Envia um arquivo (imagem ou PDF de boletim)
801
742
  *
@@ -1116,134 +1057,6 @@ export declare function atualizar_pelo_id_cliente(credencial_de_acesso: Credenci
1116
1057
  * `DELETE /cliente/{id}`
1117
1058
  */
1118
1059
  export declare function deletar_pelo_id_cliente(credencial_de_acesso: CredencialDeAcesso, id: string, opcoes_da_chamada?: OpcoesDaChamada): Promise<void>;
1119
- /**
1120
- * Lista colaboradores paginados
1121
- *
1122
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno.
1123
- *
1124
- * `GET /colaborador`
1125
- */
1126
- export declare function buscar_paginador_colaborador(credencial_de_acesso: CredencialDeAcesso, parametros?: ParametrosDeBuscarPaginadorColaborador, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.PaginaColaborador>;
1127
- /**
1128
- * Cadastra o colaborador
1129
- *
1130
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno com `usuarios.gerenciar`. `perfil_id` de colaborador (sem ele vale o perfil `acesso-inicial`, só leitura); só administrador atribui perfil de administrador.
1131
- *
1132
- * `POST /colaborador`
1133
- */
1134
- export declare function criar_colaborador(credencial_de_acesso: CredencialDeAcesso, corpo_da_requisicao: tipos.ColaboradorCriar, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.Colaborador>;
1135
- /**
1136
- * Lista básica de colaboradores para seleção
1137
- *
1138
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno. Devolve id, nome e e-mail em ordem alfabética; `busca` procura no nome e no e-mail; `tamanho` de 1 a 50 (padrão 10).
1139
- *
1140
- * `GET /colaborador/autocomplete`
1141
- */
1142
- export declare function buscar_auto_complete_colaborador(credencial_de_acesso: CredencialDeAcesso, parametros?: ParametrosDeBuscarAutoCompleteColaborador, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.PaginaColaboradorAutoComplete>;
1143
- /**
1144
- * Busca colaboradores por filtro
1145
- *
1146
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno. Até 50 por página (`pagina`, a partir de 1, padrão 1), em ordem alfabética; `nome` e `email` procuram o trecho, os demais são exatos.
1147
- *
1148
- * `GET /colaborador/filtro`
1149
- */
1150
- export declare function buscar_pelo_filtro_colaborador(credencial_de_acesso: CredencialDeAcesso, parametros?: ParametrosDeBuscarPeloFiltroColaborador, opcoes_da_chamada?: OpcoesDaChamada): Promise<Array<tipos.Colaborador>>;
1151
- /**
1152
- * Busca o colaborador pelo id
1153
- *
1154
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno.
1155
- *
1156
- * `GET /colaborador/{id}`
1157
- */
1158
- export declare function buscar_pelo_id_colaborador(credencial_de_acesso: CredencialDeAcesso, id: string, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.Colaborador>;
1159
- /**
1160
- * Atualiza o colaborador
1161
- *
1162
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Atualização parcial. Exige colaborador interno com `usuarios.gerenciar`; o próprio colaborador só altera nome, telefone, cargo e `presente` (heartbeat que grava `ultimo_acesso_em`).
1163
- *
1164
- * `PATCH /colaborador/{id}`
1165
- */
1166
- export declare function atualizar_pelo_id_colaborador(credencial_de_acesso: CredencialDeAcesso, id: string, corpo_da_requisicao: tipos.ColaboradorAtualizar, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.Colaborador>;
1167
- /**
1168
- * Exclui o colaborador
1169
- *
1170
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno com `usuarios.gerenciar`. Exclusão lógica.
1171
- *
1172
- * `DELETE /colaborador/{id}`
1173
- */
1174
- export declare function deletar_pelo_id_colaborador(credencial_de_acesso: CredencialDeAcesso, id: string, opcoes_da_chamada?: OpcoesDaChamada): Promise<void>;
1175
- /**
1176
- * Lista as configurações paginadas
1177
- *
1178
- * Exige só uma sessão válida (qualquer pessoa logada no portal). Ordem de chave. 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`.
1179
- *
1180
- * `GET /configuracao`
1181
- */
1182
- export declare function buscar_paginador_configuracao(credencial_de_acesso: CredencialDeAcesso, parametros?: ParametrosDeBuscarPaginadorConfiguracao, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.PaginaConfiguracao>;
1183
- /**
1184
- * Grava uma configuração do portal
1185
- *
1186
- * Exige a permissão `criar` no módulo `Configuracoes` do perfil de quem chama (administrador e master têm tudo). Configuração chave/valor do portal (vitrine). `chave` precisa ser uma das chaves conhecidas (ex.: `produtos_mostrar_preco`) e `valor` (texto) segue o tipo da chave: booleano `true`/`false`, hora `HH:MM`, decimal ou texto com limite. Cada chave existe uma vez só.
1187
- *
1188
- * `POST /configuracao`
1189
- */
1190
- export declare function criar_configuracao(credencial_de_acesso: CredencialDeAcesso, corpo_da_requisicao: tipos.ConfiguracaoCriar, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.Configuracao>;
1191
- /**
1192
- * Lista básica de configurações para seleção
1193
- *
1194
- * Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve só id e chave, em ordem de chave. `busca` procura o trecho na chave. `tamanho` tem padrão 10 e vai de 1 a 50; `pagina` começa em 1. A resposta traz `itens`, `total`, `pagina` e `tamanho`.
1195
- *
1196
- * `GET /configuracao/autocomplete`
1197
- */
1198
- export declare function buscar_auto_complete_configuracao(credencial_de_acesso: CredencialDeAcesso, parametros?: ParametrosDeBuscarAutoCompleteConfiguracao, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.PaginaConfiguracaoAutoComplete>;
1199
- /**
1200
- * Busca configurações por filtro
1201
- *
1202
- * Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve as configurações não excluídas que casam com o filtro, até 50 por página (`pagina`, a partir de 1, padrão 1), em ordem de chave. `chave` é exata; `prefixo` pega as chaves que começam com o texto (ex.: `produtos_`).
1203
- *
1204
- * `GET /configuracao/filtro`
1205
- */
1206
- export declare function buscar_pelo_filtro_configuracao(credencial_de_acesso: CredencialDeAcesso, parametros?: ParametrosDeBuscarPeloFiltroConfiguracao, opcoes_da_chamada?: OpcoesDaChamada): Promise<Array<tipos.Configuracao>>;
1207
- /**
1208
- * Busca uma configuração pelo id
1209
- *
1210
- * Exige só uma sessão válida (qualquer pessoa logada no portal). Configuração excluída não é encontrada.
1211
- *
1212
- * `GET /configuracao/{id}`
1213
- */
1214
- export declare function buscar_pelo_id_configuracao(credencial_de_acesso: CredencialDeAcesso, id: string, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.Configuracao>;
1215
- /**
1216
- * Atualiza o valor de uma configuração
1217
- *
1218
- * Exige a permissão `editar` no módulo `Configuracoes` do perfil de quem chama (administrador e master têm tudo). Troca o `valor`, validado pelo tipo da chave.
1219
- *
1220
- * `PATCH /configuracao/{id}`
1221
- */
1222
- export declare function atualizar_pelo_id_configuracao(credencial_de_acesso: CredencialDeAcesso, id: string, corpo_da_requisicao: tipos.ConfiguracaoAtualizar, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.Configuracao>;
1223
- /**
1224
- * Exclui uma configuração
1225
- *
1226
- * 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.
1227
- *
1228
- * `DELETE /configuracao/{id}`
1229
- */
1230
- export declare function deletar_pelo_id_configuracao(credencial_de_acesso: CredencialDeAcesso, id: string, opcoes_da_chamada?: OpcoesDaChamada): Promise<void>;
1231
- /**
1232
- * Mostra a situação do segredo do app gerado no TermoAuth
1233
- *
1234
- * Só um master do TermoAuth (e-mail `@termotubos.com.br`) lê. Nunca devolve o valor: `segredo_do_app_gerado_no_termo_auth` traz só `configurado` e o final mascarado (`final_visivel`). `criptografia_disponivel` é falso quando o servidor está sem a `GLOBAL_SECRET_CRIPTOGRAFIA`; nesse caso o segredo aparece como não configurado.
1235
- *
1236
- * `GET /configuracao_provedor`
1237
- */
1238
- export declare function buscar_pelo_id_configuracao_provedor(credencial_de_acesso: CredencialDeAcesso, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.ConfiguracaoProvedor>;
1239
- /**
1240
- * Grava ou limpa o segredo do app gerado no TermoAuth
1241
- *
1242
- * Só um master do TermoAuth (e-mail `@termotubos.com.br`) grava. O segredo do app `portal-b2b` é guardado cifrado (AES-256-GCM com a `GLOBAL_SECRET_CRIPTOGRAFIA`) e entregue na hora ao `termo_core`, sem deploy. Campo ausente não muda nada, texto troca o segredo e `null` (ou texto vazio) limpa. No máximo 2.000 caracteres, sem quebra de linha.
1243
- *
1244
- * `PATCH /configuracao_provedor`
1245
- */
1246
- export declare function atualizar_pelo_id_configuracao_provedor(credencial_de_acesso: CredencialDeAcesso, corpo_da_requisicao: tipos.ConfiguracaoProvedorAtualizar, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.ConfiguracaoProvedor>;
1247
1060
  /**
1248
1061
  * Lista os contatos paginados
1249
1062
  *
@@ -1524,6 +1337,22 @@ export declare function buscar_pelo_filtro_indicador_compra(credencial_de_acesso
1524
1337
  * `GET /indicador_venda/filtro`
1525
1338
  */
1526
1339
  export declare function buscar_pelo_filtro_indicador_venda(credencial_de_acesso: CredencialDeAcesso, parametros?: ParametrosDeBuscarPeloFiltroIndicadorVenda, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.IndicadoresDeVenda>;
1340
+ /**
1341
+ * Gera um link de envio de imagem para o produto do SKU
1342
+ *
1343
+ * 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.
1344
+ *
1345
+ * `POST /link_envio_imagem`
1346
+ */
1347
+ export declare function criar_link_envio_imagem(credencial_de_acesso: CredencialDeAcesso, corpo_da_requisicao: tipos.LinkEnvioImagemCriar, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.LinkEnvioImagem>;
1348
+ /**
1349
+ * Envia a imagem pelo link e a acrescenta ao produto
1350
+ *
1351
+ * 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.
1352
+ *
1353
+ * `PATCH /link_envio_imagem/{id}`
1354
+ */
1355
+ export declare function atualizar_pelo_id_link_envio_imagem(id: string, formulario: FormData, opcoes_da_chamada?: OpcoesDaChamada): Promise<tipos.ImagemEnviada>;
1527
1356
  /**
1528
1357
  * Uma página das notas fiscais, por cursor
1529
1358
  *
@@ -1767,7 +1596,7 @@ export declare function deletar_pelo_id_perfil(credencial_de_acesso: CredencialD
1767
1596
  /**
1768
1597
  * Lista os produtos paginados
1769
1598
  *
1770
- * 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`, `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.
1599
+ * 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.
1771
1600
  *
1772
1601
  * `GET /produto`
1773
1602
  */
@@ -1775,7 +1604,7 @@ export declare function buscar_paginador_produto(credencial_de_acesso: Credencia
1775
1604
  /**
1776
1605
  * Cadastra um produto
1777
1606
  *
1778
- * 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.
1607
+ * 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: `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); `cor` é atributo 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.
1779
1608
  *
1780
1609
  * `POST /produto`
1781
1610
  */
@@ -1791,7 +1620,7 @@ export declare function buscar_auto_complete_produto(credencial_de_acesso: Crede
1791
1620
  /**
1792
1621
  * Busca produtos por filtro
1793
1622
  *
1794
- * 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`, `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.
1623
+ * 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.
1795
1624
  *
1796
1625
  * `GET /produto/filtro`
1797
1626
  */
@@ -1807,7 +1636,7 @@ export declare function buscar_pelo_id_produto(credencial_de_acesso: CredencialD
1807
1636
  /**
1808
1637
  * Atualiza um produto
1809
1638
  *
1810
- * 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`, maior que zero e até o preço a prazo do Tiny, e vira o preço à vista usado no portal; `null` apaga e o preço à vista volta ao do Tiny. A sincronização com o Tiny nunca muda o `preco_portal_b2b`. Produto que não veio do Tiny não aceita `preco_portal_b2b` (400). 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).
1639
+ * 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`, maior que zero e até o preço a prazo do Tiny, e vira o preço à vista usado no portal; `null` apaga e o preço à vista volta ao do Tiny. A sincronização com o Tiny nunca muda o `preco_portal_b2b`. Produto que não veio do Tiny não aceita `preco_portal_b2b` (400). 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).
1811
1640
  *
1812
1641
  * `PATCH /produto/{id}`
1813
1642
  */
@@ -1,21 +1,6 @@
1
1
  // Gerado pelo gerador do TermoCore (`cargo run -p gerador`). Não edite à mão: a próxima geração sobrescreve.
2
2
  import { chamar_servico, codificar_parametro_de_caminho } from "../base/requisicao.js";
3
3
  import { TERMO_PORTAL as SERVICO_DESTA_API } from "../base/servicos.js";
4
- /**
5
- * Versão da API
6
- *
7
- * Rota pública: não exige sessão. Confere se a API está no ar e devolve a versão publicada do backend.
8
- *
9
- * `GET /`
10
- */
11
- export function buscar_pelo_id_versao(opcoes_da_chamada) {
12
- return chamar_servico({
13
- servico: SERVICO_DESTA_API,
14
- metodo_http: "GET",
15
- caminho_da_rota: "/",
16
- formato_da_resposta: "json",
17
- }, opcoes_da_chamada);
18
- }
19
4
  /**
20
5
  * Envia um arquivo (imagem ou PDF de boletim)
21
6
  *
@@ -685,273 +670,6 @@ export function deletar_pelo_id_cliente(credencial_de_acesso, id, opcoes_da_cham
685
670
  formato_da_resposta: "sem_conteudo",
686
671
  }, opcoes_da_chamada);
687
672
  }
688
- /**
689
- * Lista colaboradores paginados
690
- *
691
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno.
692
- *
693
- * `GET /colaborador`
694
- */
695
- export function buscar_paginador_colaborador(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
696
- return chamar_servico({
697
- servico: SERVICO_DESTA_API,
698
- metodo_http: "GET",
699
- caminho_da_rota: "/colaborador",
700
- credencial_de_acesso,
701
- parametros_de_consulta: parametros,
702
- formato_da_resposta: "json",
703
- }, opcoes_da_chamada);
704
- }
705
- /**
706
- * Cadastra o colaborador
707
- *
708
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno com `usuarios.gerenciar`. `perfil_id` de colaborador (sem ele vale o perfil `acesso-inicial`, só leitura); só administrador atribui perfil de administrador.
709
- *
710
- * `POST /colaborador`
711
- */
712
- export function criar_colaborador(credencial_de_acesso, corpo_da_requisicao, opcoes_da_chamada) {
713
- return chamar_servico({
714
- servico: SERVICO_DESTA_API,
715
- metodo_http: "POST",
716
- caminho_da_rota: "/colaborador",
717
- credencial_de_acesso,
718
- corpo_json: corpo_da_requisicao,
719
- formato_da_resposta: "json",
720
- }, opcoes_da_chamada);
721
- }
722
- /**
723
- * Lista básica de colaboradores para seleção
724
- *
725
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno. Devolve id, nome e e-mail em ordem alfabética; `busca` procura no nome e no e-mail; `tamanho` de 1 a 50 (padrão 10).
726
- *
727
- * `GET /colaborador/autocomplete`
728
- */
729
- export function buscar_auto_complete_colaborador(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
730
- return chamar_servico({
731
- servico: SERVICO_DESTA_API,
732
- metodo_http: "GET",
733
- caminho_da_rota: "/colaborador/autocomplete",
734
- credencial_de_acesso,
735
- parametros_de_consulta: parametros,
736
- formato_da_resposta: "json",
737
- }, opcoes_da_chamada);
738
- }
739
- /**
740
- * Busca colaboradores por filtro
741
- *
742
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno. Até 50 por página (`pagina`, a partir de 1, padrão 1), em ordem alfabética; `nome` e `email` procuram o trecho, os demais são exatos.
743
- *
744
- * `GET /colaborador/filtro`
745
- */
746
- export function buscar_pelo_filtro_colaborador(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
747
- return chamar_servico({
748
- servico: SERVICO_DESTA_API,
749
- metodo_http: "GET",
750
- caminho_da_rota: "/colaborador/filtro",
751
- credencial_de_acesso,
752
- parametros_de_consulta: parametros,
753
- formato_da_resposta: "json",
754
- }, opcoes_da_chamada);
755
- }
756
- /**
757
- * Busca o colaborador pelo id
758
- *
759
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno.
760
- *
761
- * `GET /colaborador/{id}`
762
- */
763
- export function buscar_pelo_id_colaborador(credencial_de_acesso, id, opcoes_da_chamada) {
764
- return chamar_servico({
765
- servico: SERVICO_DESTA_API,
766
- metodo_http: "GET",
767
- caminho_da_rota: `/colaborador/${codificar_parametro_de_caminho(id)}`,
768
- credencial_de_acesso,
769
- formato_da_resposta: "json",
770
- }, opcoes_da_chamada);
771
- }
772
- /**
773
- * Atualiza o colaborador
774
- *
775
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Atualização parcial. Exige colaborador interno com `usuarios.gerenciar`; o próprio colaborador só altera nome, telefone, cargo e `presente` (heartbeat que grava `ultimo_acesso_em`).
776
- *
777
- * `PATCH /colaborador/{id}`
778
- */
779
- export function atualizar_pelo_id_colaborador(credencial_de_acesso, id, corpo_da_requisicao, opcoes_da_chamada) {
780
- return chamar_servico({
781
- servico: SERVICO_DESTA_API,
782
- metodo_http: "PATCH",
783
- caminho_da_rota: `/colaborador/${codificar_parametro_de_caminho(id)}`,
784
- credencial_de_acesso,
785
- corpo_json: corpo_da_requisicao,
786
- formato_da_resposta: "json",
787
- }, opcoes_da_chamada);
788
- }
789
- /**
790
- * Exclui o colaborador
791
- *
792
- * Colaborador é o usuário da Termotubos: entra pela área `/painel` e também pode abrir o `/app`. Exige colaborador interno com `usuarios.gerenciar`. Exclusão lógica.
793
- *
794
- * `DELETE /colaborador/{id}`
795
- */
796
- export function deletar_pelo_id_colaborador(credencial_de_acesso, id, opcoes_da_chamada) {
797
- return chamar_servico({
798
- servico: SERVICO_DESTA_API,
799
- metodo_http: "DELETE",
800
- caminho_da_rota: `/colaborador/${codificar_parametro_de_caminho(id)}`,
801
- credencial_de_acesso,
802
- formato_da_resposta: "sem_conteudo",
803
- }, opcoes_da_chamada);
804
- }
805
- /**
806
- * Lista as configurações paginadas
807
- *
808
- * Exige só uma sessão válida (qualquer pessoa logada no portal). Ordem de chave. 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`.
809
- *
810
- * `GET /configuracao`
811
- */
812
- export function buscar_paginador_configuracao(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
813
- return chamar_servico({
814
- servico: SERVICO_DESTA_API,
815
- metodo_http: "GET",
816
- caminho_da_rota: "/configuracao",
817
- credencial_de_acesso,
818
- parametros_de_consulta: parametros,
819
- formato_da_resposta: "json",
820
- }, opcoes_da_chamada);
821
- }
822
- /**
823
- * Grava uma configuração do portal
824
- *
825
- * Exige a permissão `criar` no módulo `Configuracoes` do perfil de quem chama (administrador e master têm tudo). Configuração chave/valor do portal (vitrine). `chave` precisa ser uma das chaves conhecidas (ex.: `produtos_mostrar_preco`) e `valor` (texto) segue o tipo da chave: booleano `true`/`false`, hora `HH:MM`, decimal ou texto com limite. Cada chave existe uma vez só.
826
- *
827
- * `POST /configuracao`
828
- */
829
- export function criar_configuracao(credencial_de_acesso, corpo_da_requisicao, opcoes_da_chamada) {
830
- return chamar_servico({
831
- servico: SERVICO_DESTA_API,
832
- metodo_http: "POST",
833
- caminho_da_rota: "/configuracao",
834
- credencial_de_acesso,
835
- corpo_json: corpo_da_requisicao,
836
- formato_da_resposta: "json",
837
- }, opcoes_da_chamada);
838
- }
839
- /**
840
- * Lista básica de configurações para seleção
841
- *
842
- * Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve só id e chave, em ordem de chave. `busca` procura o trecho na chave. `tamanho` tem padrão 10 e vai de 1 a 50; `pagina` começa em 1. A resposta traz `itens`, `total`, `pagina` e `tamanho`.
843
- *
844
- * `GET /configuracao/autocomplete`
845
- */
846
- export function buscar_auto_complete_configuracao(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
847
- return chamar_servico({
848
- servico: SERVICO_DESTA_API,
849
- metodo_http: "GET",
850
- caminho_da_rota: "/configuracao/autocomplete",
851
- credencial_de_acesso,
852
- parametros_de_consulta: parametros,
853
- formato_da_resposta: "json",
854
- }, opcoes_da_chamada);
855
- }
856
- /**
857
- * Busca configurações por filtro
858
- *
859
- * Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve as configurações não excluídas que casam com o filtro, até 50 por página (`pagina`, a partir de 1, padrão 1), em ordem de chave. `chave` é exata; `prefixo` pega as chaves que começam com o texto (ex.: `produtos_`).
860
- *
861
- * `GET /configuracao/filtro`
862
- */
863
- export function buscar_pelo_filtro_configuracao(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
864
- return chamar_servico({
865
- servico: SERVICO_DESTA_API,
866
- metodo_http: "GET",
867
- caminho_da_rota: "/configuracao/filtro",
868
- credencial_de_acesso,
869
- parametros_de_consulta: parametros,
870
- formato_da_resposta: "json",
871
- }, opcoes_da_chamada);
872
- }
873
- /**
874
- * Busca uma configuração pelo id
875
- *
876
- * Exige só uma sessão válida (qualquer pessoa logada no portal). Configuração excluída não é encontrada.
877
- *
878
- * `GET /configuracao/{id}`
879
- */
880
- export function buscar_pelo_id_configuracao(credencial_de_acesso, id, opcoes_da_chamada) {
881
- return chamar_servico({
882
- servico: SERVICO_DESTA_API,
883
- metodo_http: "GET",
884
- caminho_da_rota: `/configuracao/${codificar_parametro_de_caminho(id)}`,
885
- credencial_de_acesso,
886
- formato_da_resposta: "json",
887
- }, opcoes_da_chamada);
888
- }
889
- /**
890
- * Atualiza o valor de uma configuração
891
- *
892
- * Exige a permissão `editar` no módulo `Configuracoes` do perfil de quem chama (administrador e master têm tudo). Troca o `valor`, validado pelo tipo da chave.
893
- *
894
- * `PATCH /configuracao/{id}`
895
- */
896
- export function atualizar_pelo_id_configuracao(credencial_de_acesso, id, corpo_da_requisicao, opcoes_da_chamada) {
897
- return chamar_servico({
898
- servico: SERVICO_DESTA_API,
899
- metodo_http: "PATCH",
900
- caminho_da_rota: `/configuracao/${codificar_parametro_de_caminho(id)}`,
901
- credencial_de_acesso,
902
- corpo_json: corpo_da_requisicao,
903
- formato_da_resposta: "json",
904
- }, opcoes_da_chamada);
905
- }
906
- /**
907
- * Exclui uma configuração
908
- *
909
- * 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.
910
- *
911
- * `DELETE /configuracao/{id}`
912
- */
913
- export function deletar_pelo_id_configuracao(credencial_de_acesso, id, opcoes_da_chamada) {
914
- return chamar_servico({
915
- servico: SERVICO_DESTA_API,
916
- metodo_http: "DELETE",
917
- caminho_da_rota: `/configuracao/${codificar_parametro_de_caminho(id)}`,
918
- credencial_de_acesso,
919
- formato_da_resposta: "sem_conteudo",
920
- }, opcoes_da_chamada);
921
- }
922
- /**
923
- * Mostra a situação do segredo do app gerado no TermoAuth
924
- *
925
- * Só um master do TermoAuth (e-mail `@termotubos.com.br`) lê. Nunca devolve o valor: `segredo_do_app_gerado_no_termo_auth` traz só `configurado` e o final mascarado (`final_visivel`). `criptografia_disponivel` é falso quando o servidor está sem a `GLOBAL_SECRET_CRIPTOGRAFIA`; nesse caso o segredo aparece como não configurado.
926
- *
927
- * `GET /configuracao_provedor`
928
- */
929
- export function buscar_pelo_id_configuracao_provedor(credencial_de_acesso, opcoes_da_chamada) {
930
- return chamar_servico({
931
- servico: SERVICO_DESTA_API,
932
- metodo_http: "GET",
933
- caminho_da_rota: "/configuracao_provedor",
934
- credencial_de_acesso,
935
- formato_da_resposta: "json",
936
- }, opcoes_da_chamada);
937
- }
938
- /**
939
- * Grava ou limpa o segredo do app gerado no TermoAuth
940
- *
941
- * Só um master do TermoAuth (e-mail `@termotubos.com.br`) grava. O segredo do app `portal-b2b` é guardado cifrado (AES-256-GCM com a `GLOBAL_SECRET_CRIPTOGRAFIA`) e entregue na hora ao `termo_core`, sem deploy. Campo ausente não muda nada, texto troca o segredo e `null` (ou texto vazio) limpa. No máximo 2.000 caracteres, sem quebra de linha.
942
- *
943
- * `PATCH /configuracao_provedor`
944
- */
945
- export function atualizar_pelo_id_configuracao_provedor(credencial_de_acesso, corpo_da_requisicao, opcoes_da_chamada) {
946
- return chamar_servico({
947
- servico: SERVICO_DESTA_API,
948
- metodo_http: "PATCH",
949
- caminho_da_rota: "/configuracao_provedor",
950
- credencial_de_acesso,
951
- corpo_json: corpo_da_requisicao,
952
- formato_da_resposta: "json",
953
- }, opcoes_da_chamada);
954
- }
955
673
  /**
956
674
  * Lista os contatos paginados
957
675
  *
@@ -1538,6 +1256,39 @@ export function buscar_pelo_filtro_indicador_venda(credencial_de_acesso, paramet
1538
1256
  formato_da_resposta: "json",
1539
1257
  }, opcoes_da_chamada);
1540
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
+ }
1541
1292
  /**
1542
1293
  * Uma página das notas fiscais, por cursor
1543
1294
  *
@@ -2043,7 +1794,7 @@ export function deletar_pelo_id_perfil(credencial_de_acesso, id, opcoes_da_chama
2043
1794
  /**
2044
1795
  * Lista os produtos paginados
2045
1796
  *
2046
- * 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`, `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.
1797
+ * 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.
2047
1798
  *
2048
1799
  * `GET /produto`
2049
1800
  */
@@ -2060,7 +1811,7 @@ export function buscar_paginador_produto(credencial_de_acesso, parametros = {},
2060
1811
  /**
2061
1812
  * Cadastra um produto
2062
1813
  *
2063
- * 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.
1814
+ * 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: `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); `cor` é atributo 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.
2064
1815
  *
2065
1816
  * `POST /produto`
2066
1817
  */
@@ -2094,7 +1845,7 @@ export function buscar_auto_complete_produto(credencial_de_acesso, parametros =
2094
1845
  /**
2095
1846
  * Busca produtos por filtro
2096
1847
  *
2097
- * 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`, `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.
1848
+ * 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.
2098
1849
  *
2099
1850
  * `GET /produto/filtro`
2100
1851
  */
@@ -2127,7 +1878,7 @@ export function buscar_pelo_id_produto(credencial_de_acesso, id, opcoes_da_chama
2127
1878
  /**
2128
1879
  * Atualiza um produto
2129
1880
  *
2130
- * 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`, maior que zero e até o preço a prazo do Tiny, e vira o preço à vista usado no portal; `null` apaga e o preço à vista volta ao do Tiny. A sincronização com o Tiny nunca muda o `preco_portal_b2b`. Produto que não veio do Tiny não aceita `preco_portal_b2b` (400). 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).
1881
+ * 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`, maior que zero e até o preço a prazo do Tiny, e vira o preço à vista usado no portal; `null` apaga e o preço à vista volta ao do Tiny. A sincronização com o Tiny nunca muda o `preco_portal_b2b`. Produto que não veio do Tiny não aceita `preco_portal_b2b` (400). 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).
2131
1882
  *
2132
1883
  * `PATCH /produto/{id}`
2133
1884
  */
@@ -213,41 +213,6 @@ export interface ClientePaginador {
213
213
  export interface ClienteSincronizar {
214
214
  cursor?: number | null;
215
215
  }
216
- export interface Colaborador {
217
- atualizado_em: string;
218
- cargo?: string | null;
219
- criado_em: string;
220
- email: string;
221
- foto_url?: string | null;
222
- id: string;
223
- nome: string;
224
- perfil_id: string;
225
- perfil_nome: string;
226
- status: string;
227
- telefone?: string | null;
228
- ultimo_acesso_em?: string | null;
229
- }
230
- export interface ColaboradorAtualizar {
231
- cargo?: string | null;
232
- nome?: string | null;
233
- perfil_id?: string | null;
234
- presente?: boolean | null;
235
- status?: string | null;
236
- telefone?: string | null;
237
- }
238
- export interface ColaboradorAutoComplete {
239
- email: string;
240
- id: string;
241
- nome: string;
242
- }
243
- export interface ColaboradorCriar {
244
- cargo?: string | null;
245
- email: string;
246
- nome: string;
247
- perfil_id?: string | null;
248
- status?: string | null;
249
- telefone?: string | null;
250
- }
251
216
  export interface CompraDoMes {
252
217
  comprado: number;
253
218
  mes: string;
@@ -257,33 +222,6 @@ export interface CompraPorTipo {
257
222
  comprado: number;
258
223
  tipo: string;
259
224
  }
260
- export interface Configuracao {
261
- atualizado_em: string;
262
- chave: string;
263
- criado_em: string;
264
- id: string;
265
- valor: string;
266
- }
267
- export interface ConfiguracaoAtualizar {
268
- valor: string;
269
- }
270
- export interface ConfiguracaoAutoComplete {
271
- chave: string;
272
- id: string;
273
- }
274
- export interface ConfiguracaoCriar {
275
- chave: string;
276
- valor: string;
277
- }
278
- export interface ConfiguracaoProvedor {
279
- atualizado_em: string;
280
- atualizado_por?: string | null;
281
- criptografia_disponivel: boolean;
282
- segredo_do_app_gerado_no_termo_auth: ValorProtegido;
283
- }
284
- export interface ConfiguracaoProvedorAtualizar {
285
- segredo_do_app_gerado_no_termo_auth?: string | null;
286
- }
287
225
  export interface ContagemClientes {
288
226
  com_acesso: number;
289
227
  sem_acesso: number;
@@ -575,6 +513,15 @@ export interface HistoricoPrecoTermotubos {
575
513
  preco?: number | null;
576
514
  preco_promocional?: number | null;
577
515
  }
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
+ }
578
525
  export interface ImportacaoProdutos {
579
526
  atualizados: number;
580
527
  conflitos: number;
@@ -645,6 +592,18 @@ export interface ItemSincronizado {
645
592
  resultado: string;
646
593
  sku: string;
647
594
  }
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
+ }
648
607
  export interface NotaFiscalParte2 {
649
608
  parcelas: Array<ParcelaNotaFiscal>;
650
609
  parcelas_lidas: boolean;
@@ -769,60 +728,6 @@ export interface PaginaClienteAutoComplete {
769
728
  tamanho: number;
770
729
  total: number;
771
730
  }
772
- export interface PaginaColaboradorItensItem {
773
- atualizado_em: string;
774
- cargo?: string | null;
775
- criado_em: string;
776
- email: string;
777
- foto_url?: string | null;
778
- id: string;
779
- nome: string;
780
- perfil_id: string;
781
- perfil_nome: string;
782
- status: string;
783
- telefone?: string | null;
784
- ultimo_acesso_em?: string | null;
785
- }
786
- export interface PaginaColaborador {
787
- itens: Array<PaginaColaboradorItensItem>;
788
- pagina: number;
789
- tamanho: number;
790
- total: number;
791
- }
792
- export interface PaginaColaboradorAutoCompleteItensItem {
793
- email: string;
794
- id: string;
795
- nome: string;
796
- }
797
- export interface PaginaColaboradorAutoComplete {
798
- itens: Array<PaginaColaboradorAutoCompleteItensItem>;
799
- pagina: number;
800
- tamanho: number;
801
- total: number;
802
- }
803
- export interface PaginaConfiguracaoItensItem {
804
- atualizado_em: string;
805
- chave: string;
806
- criado_em: string;
807
- id: string;
808
- valor: string;
809
- }
810
- export interface PaginaConfiguracao {
811
- itens: Array<PaginaConfiguracaoItensItem>;
812
- pagina: number;
813
- tamanho: number;
814
- total: number;
815
- }
816
- export interface PaginaConfiguracaoAutoCompleteItensItem {
817
- chave: string;
818
- id: string;
819
- }
820
- export interface PaginaConfiguracaoAutoComplete {
821
- itens: Array<PaginaConfiguracaoAutoCompleteItensItem>;
822
- pagina: number;
823
- tamanho: number;
824
- total: number;
825
- }
826
731
  export interface PaginaContatoItensItem {
827
732
  atualizado_em: string;
828
733
  cargo?: string | null;
@@ -983,7 +888,6 @@ export interface PaginaPerfilAutoComplete {
983
888
  total: number;
984
889
  }
985
890
  export interface PaginaProdutoItensItem {
986
- aplicacao?: string | null;
987
891
  ativo: boolean;
988
892
  atualizado_em: string;
989
893
  categoria_tiny?: string | null;
@@ -991,7 +895,6 @@ export interface PaginaProdutoItensItem {
991
895
  criado_em: string;
992
896
  demonstracao: boolean;
993
897
  descricao?: string | null;
994
- diametro?: string | null;
995
898
  disponivel: boolean;
996
899
  embalagem?: string | null;
997
900
  embalagem_altura?: number | null;
@@ -1013,7 +916,6 @@ export interface PaginaProdutoItensItem {
1013
916
  incremento_minimo: number;
1014
917
  lancamento: boolean;
1015
918
  marca_tiny?: string | null;
1016
- material?: string | null;
1017
919
  ncm?: string | null;
1018
920
  nome: string;
1019
921
  nome_comercial?: string | null;
@@ -1032,7 +934,6 @@ export interface PaginaProdutoItensItem {
1032
934
  resumo_caracteristicas?: string | null;
1033
935
  sincronizado_em?: string | null;
1034
936
  sku: string;
1035
- temperatura?: string | null;
1036
937
  tipo_tiny?: string | null;
1037
938
  unidade: string;
1038
939
  unidade_medida: string;
@@ -1363,7 +1264,6 @@ export interface PerfilPermissaoEntrada {
1363
1264
  ver: boolean;
1364
1265
  }
1365
1266
  export interface Produto {
1366
- aplicacao?: string | null;
1367
1267
  ativo: boolean;
1368
1268
  atualizado_em: string;
1369
1269
  categoria_tiny?: string | null;
@@ -1371,7 +1271,6 @@ export interface Produto {
1371
1271
  criado_em: string;
1372
1272
  demonstracao: boolean;
1373
1273
  descricao?: string | null;
1374
- diametro?: string | null;
1375
1274
  disponivel: boolean;
1376
1275
  embalagem?: string | null;
1377
1276
  embalagem_altura?: number | null;
@@ -1393,7 +1292,6 @@ export interface Produto {
1393
1292
  incremento_minimo: number;
1394
1293
  lancamento: boolean;
1395
1294
  marca_tiny?: string | null;
1396
- material?: string | null;
1397
1295
  ncm?: string | null;
1398
1296
  nome: string;
1399
1297
  nome_comercial?: string | null;
@@ -1412,17 +1310,14 @@ export interface Produto {
1412
1310
  resumo_caracteristicas?: string | null;
1413
1311
  sincronizado_em?: string | null;
1414
1312
  sku: string;
1415
- temperatura?: string | null;
1416
1313
  tipo_tiny?: string | null;
1417
1314
  unidade: string;
1418
1315
  unidade_medida: string;
1419
1316
  }
1420
1317
  export interface ProdutoAtualizar {
1421
- aplicacao?: string | null;
1422
1318
  ativo?: boolean | null;
1423
1319
  cor?: string | null;
1424
1320
  descricao?: string | null;
1425
- diametro?: string | null;
1426
1321
  embalagem?: string | null;
1427
1322
  embalagem_preco?: number | null;
1428
1323
  embalagem_quantidade?: number | null;
@@ -1433,7 +1328,6 @@ export interface ProdutoAtualizar {
1433
1328
  imagens?: Array<string> | null;
1434
1329
  incremento_minimo?: number | null;
1435
1330
  lancamento?: boolean | null;
1436
- material?: string | null;
1437
1331
  nome?: string | null;
1438
1332
  nome_comercial?: string | null;
1439
1333
  outras_informacoes?: string | null;
@@ -1443,7 +1337,6 @@ export interface ProdutoAtualizar {
1443
1337
  quantidade_minima?: number | null;
1444
1338
  relevancia?: number | null;
1445
1339
  resumo_caracteristicas?: string | null;
1446
- temperatura?: string | null;
1447
1340
  unidade?: string | null;
1448
1341
  unidade_medida?: string | null;
1449
1342
  }
@@ -1490,12 +1383,10 @@ export interface ProdutoConflitoSincronizacaoCriar {
1490
1383
  valor_local: string;
1491
1384
  }
1492
1385
  export interface ProdutoCriar {
1493
- aplicacao?: string | null;
1494
1386
  ativo?: boolean | null;
1495
1387
  cor?: string | null;
1496
1388
  demonstracao?: boolean | null;
1497
1389
  descricao?: string | null;
1498
- diametro?: string | null;
1499
1390
  embalagem?: string | null;
1500
1391
  embalagem_preco?: number | null;
1501
1392
  embalagem_quantidade?: number | null;
@@ -1507,7 +1398,6 @@ export interface ProdutoCriar {
1507
1398
  importado_da_api?: boolean | null;
1508
1399
  incremento_minimo?: number | null;
1509
1400
  lancamento?: boolean | null;
1510
- material?: string | null;
1511
1401
  nome: string;
1512
1402
  outras_informacoes?: string | null;
1513
1403
  preco: number;
@@ -1515,7 +1405,6 @@ export interface ProdutoCriar {
1515
1405
  quantidade_minima?: number | null;
1516
1406
  relevancia?: number | null;
1517
1407
  sku: string;
1518
- temperatura?: string | null;
1519
1408
  unidade: string;
1520
1409
  unidade_medida?: string | null;
1521
1410
  }
@@ -1784,10 +1673,6 @@ export interface UnidadeReferencia {
1784
1673
  id: string;
1785
1674
  razao_social: string;
1786
1675
  }
1787
- export interface ValorProtegido {
1788
- configurado: boolean;
1789
- final_visivel?: string | null;
1790
- }
1791
1676
  export interface VendaAgrupada {
1792
1677
  chave?: string | null;
1793
1678
  pedidos: number;
@@ -1799,7 +1684,3 @@ export interface VendaDoDia {
1799
1684
  pedidos: number;
1800
1685
  vendido: number;
1801
1686
  }
1802
- export interface VersaoDaApi {
1803
- sucesso: boolean;
1804
- versao: string;
1805
- }
@@ -198,6 +198,12 @@ export interface ParametrosDeBuscarAutoCompleteRobo {
198
198
  pagina?: number;
199
199
  tamanho?: number;
200
200
  }
201
+ /**
202
+ * Parâmetros de consulta e de cabeçalho de `/robo/equipes`.
203
+ */
204
+ export interface ParametrosDeBuscarEquipesRobo {
205
+ robo_id?: string;
206
+ }
201
207
  /**
202
208
  * Parâmetros de consulta e de cabeçalho de `/robo/filtro`.
203
209
  */
@@ -391,7 +397,7 @@ export declare function buscar_sincronizacao_cliente(credencial_de_acesso: Crede
391
397
  /**
392
398
  * Inicia a sincronização dos clientes com o TermoIntranetAPI em segundo plano
393
399
  *
394
- * Só para o master do TermoAuth. Percorre toda a lista de clientes do TermoIntranetAPI (`GET /cliente`, paginada por cursor) usando o próprio token de quem chamou e grava aqui: entra todo cliente, pessoa física ou jurídica, com ou sem documento (`cnpj` guarda só os dígitos do CPF ou CNPJ, ou fica vazio); `ignorados` conta só o id repetido na mesma página. Cliente que já existe com o mesmo CNPJ e ainda sem vínculo recebe o `intranet_cliente_id`; cliente já vinculado tem razão social, nome fantasia, telefone (celular, ou telefone fixo na falta dele, só dígitos), e-mail, cidade e estado sobrescritos pela intranet; cliente novo é criado com `atendente_ativo` desligado. Os campos do TermoSell (`ativo`, `atendente_ativo`, `chatwoot_contato_id`) nunca são tocados. Roda em segundo plano no servidor e grava cada página no banco assim que chega: a tela pode ser fechada. Responde 202 com o status inicial; acompanhe por `GET /cliente/sincronizar`. Sem corpo.
400
+ * Só para o master do TermoAuth. Percorre toda a lista de clientes do TermoIntranetAPI (`GET /cliente`, paginada por cursor) usando o próprio token de quem chamou e grava aqui: entra todo cliente, pessoa física ou jurídica, com ou sem documento (`cnpj` guarda só os dígitos do CPF ou CNPJ, ou fica vazio); `ignorados` conta só o id repetido na mesma página. Cliente que já existe com o mesmo CNPJ e ainda sem vínculo recebe o `intranet_cliente_id`; cliente já vinculado tem razão social, nome fantasia, telefone (celular, ou telefone fixo na falta dele, só dígitos), e-mail, cidade e estado sobrescritos pela intranet; cliente novo é criado com `atendente_ativo` desligado. Os campos do TermoSell (`ativo` e `atendente_ativo`) nunca são tocados. Roda em segundo plano no servidor e grava cada página no banco assim que chega: a tela pode ser fechada. Responde 202 com o status inicial; acompanhe por `GET /cliente/sincronizar`. Sem corpo.
395
401
  *
396
402
  * `POST /cliente/sincronizar`
397
403
  */
@@ -479,7 +485,7 @@ export declare function buscar_paginador_config_system_chatwoot(credencial_de_ac
479
485
  /**
480
486
  * Conecta a conta do Chatwoot
481
487
  *
482
- * Exige a permissão `criar` da área `configuracoes`. O TermoSell usa uma única conta do Chatwoot: com uma configuração já cadastrada, responde `409` (edite a existente). `nome` (até 100 caracteres), `endereco` do Chatwoot (`http://` ou `https://`, até 200), `conta_id` (maior que zero), `token_acesso` (de 8 a 200 caracteres) e `endereco_publico` (o endereço `https://` deste backend que o Chatwoot vai chamar, até 200) são obrigatórios. Antes de gravar, cria no Chatwoot o robô de atendimento que avisa o TermoSell das mensagens; se o Chatwoot recusar, responde `400` com o motivo. A configuração nasce ativa. O token de acesso nunca volta: as respostas trazem só `token_acesso_mascarado`.
488
+ * Exige a permissão `criar` da área `configuracoes`. Aceita quantas contas do Chatwoot forem precisas; o `nome` e o par `endereco` + `conta_id` não se repetem (`409`). `nome` (até 100 caracteres), `endereco` do Chatwoot (`http://` ou `https://`, até 200), `conta_id` (maior que zero), `token_acesso` (de 8 a 200 caracteres) e `endereco_publico` (o endereço `https://` deste backend que o Chatwoot vai chamar, até 200) são obrigatórios. Antes de gravar, cria no Chatwoot o robô de atendimento que avisa o TermoSell das mensagens; se o Chatwoot recusar, responde `400` com o motivo. A configuração nasce ativa. O token de acesso nunca volta: as respostas trazem só `token_acesso_mascarado`.
483
489
  *
484
490
  * `POST /config_system_chatwoot`
485
491
  */
@@ -727,11 +733,11 @@ export declare function buscar_auto_complete_robo(credencial_de_acesso: Credenci
727
733
  /**
728
734
  * Lista as equipes do Chatwoot
729
735
  *
730
- * Exige qualquer permissão da área `configuracoes` (qualquer ação liberada na área já libera a leitura). Consulta na hora a conta do Chatwoot ativa e devolve as equipes dela (id e nome), para escolher a `equipe_id` da etapa `atendimento` ou do `gatilho` do fluxo.
736
+ * Exige qualquer permissão da área `configuracoes` (qualquer ação liberada na área já libera a leitura). Consulta na hora as equipes (id e nome) de uma conta do Chatwoot ativa, para escolher a `equipe_id` da etapa `atendimento` ou do `gatilho` do fluxo. Com `robo_id`, usa a conta do Chatwoot dos números de WhatsApp (Z-API ou QR Code) ligados a esse robô; sem `robo_id` ou sem número ligado, usa a primeira conta ativa.
731
737
  *
732
738
  * `GET /robo/equipes`
733
739
  */
734
- export declare function buscar_equipes_robo(credencial_de_acesso: CredencialDeAcesso, opcoes_da_chamada?: OpcoesDaChamada): Promise<Array<tipos.EquipeChatwoot>>;
740
+ export declare function buscar_equipes_robo(credencial_de_acesso: CredencialDeAcesso, parametros?: ParametrosDeBuscarEquipesRobo, opcoes_da_chamada?: OpcoesDaChamada): Promise<Array<tipos.EquipeChatwoot>>;
735
741
  /**
736
742
  * Busca robôs por filtro
737
743
  *
@@ -236,7 +236,7 @@ export function buscar_sincronizacao_cliente(credencial_de_acesso, opcoes_da_cha
236
236
  /**
237
237
  * Inicia a sincronização dos clientes com o TermoIntranetAPI em segundo plano
238
238
  *
239
- * Só para o master do TermoAuth. Percorre toda a lista de clientes do TermoIntranetAPI (`GET /cliente`, paginada por cursor) usando o próprio token de quem chamou e grava aqui: entra todo cliente, pessoa física ou jurídica, com ou sem documento (`cnpj` guarda só os dígitos do CPF ou CNPJ, ou fica vazio); `ignorados` conta só o id repetido na mesma página. Cliente que já existe com o mesmo CNPJ e ainda sem vínculo recebe o `intranet_cliente_id`; cliente já vinculado tem razão social, nome fantasia, telefone (celular, ou telefone fixo na falta dele, só dígitos), e-mail, cidade e estado sobrescritos pela intranet; cliente novo é criado com `atendente_ativo` desligado. Os campos do TermoSell (`ativo`, `atendente_ativo`, `chatwoot_contato_id`) nunca são tocados. Roda em segundo plano no servidor e grava cada página no banco assim que chega: a tela pode ser fechada. Responde 202 com o status inicial; acompanhe por `GET /cliente/sincronizar`. Sem corpo.
239
+ * Só para o master do TermoAuth. Percorre toda a lista de clientes do TermoIntranetAPI (`GET /cliente`, paginada por cursor) usando o próprio token de quem chamou e grava aqui: entra todo cliente, pessoa física ou jurídica, com ou sem documento (`cnpj` guarda só os dígitos do CPF ou CNPJ, ou fica vazio); `ignorados` conta só o id repetido na mesma página. Cliente que já existe com o mesmo CNPJ e ainda sem vínculo recebe o `intranet_cliente_id`; cliente já vinculado tem razão social, nome fantasia, telefone (celular, ou telefone fixo na falta dele, só dígitos), e-mail, cidade e estado sobrescritos pela intranet; cliente novo é criado com `atendente_ativo` desligado. Os campos do TermoSell (`ativo` e `atendente_ativo`) nunca são tocados. Roda em segundo plano no servidor e grava cada página no banco assim que chega: a tela pode ser fechada. Responde 202 com o status inicial; acompanhe por `GET /cliente/sincronizar`. Sem corpo.
240
240
  *
241
241
  * `POST /cliente/sincronizar`
242
242
  */
@@ -418,7 +418,7 @@ export function buscar_paginador_config_system_chatwoot(credencial_de_acesso, pa
418
418
  /**
419
419
  * Conecta a conta do Chatwoot
420
420
  *
421
- * Exige a permissão `criar` da área `configuracoes`. O TermoSell usa uma única conta do Chatwoot: com uma configuração já cadastrada, responde `409` (edite a existente). `nome` (até 100 caracteres), `endereco` do Chatwoot (`http://` ou `https://`, até 200), `conta_id` (maior que zero), `token_acesso` (de 8 a 200 caracteres) e `endereco_publico` (o endereço `https://` deste backend que o Chatwoot vai chamar, até 200) são obrigatórios. Antes de gravar, cria no Chatwoot o robô de atendimento que avisa o TermoSell das mensagens; se o Chatwoot recusar, responde `400` com o motivo. A configuração nasce ativa. O token de acesso nunca volta: as respostas trazem só `token_acesso_mascarado`.
421
+ * Exige a permissão `criar` da área `configuracoes`. Aceita quantas contas do Chatwoot forem precisas; o `nome` e o par `endereco` + `conta_id` não se repetem (`409`). `nome` (até 100 caracteres), `endereco` do Chatwoot (`http://` ou `https://`, até 200), `conta_id` (maior que zero), `token_acesso` (de 8 a 200 caracteres) e `endereco_publico` (o endereço `https://` deste backend que o Chatwoot vai chamar, até 200) são obrigatórios. Antes de gravar, cria no Chatwoot o robô de atendimento que avisa o TermoSell das mensagens; se o Chatwoot recusar, responde `400` com o motivo. A configuração nasce ativa. O token de acesso nunca volta: as respostas trazem só `token_acesso_mascarado`.
422
422
  *
423
423
  * `POST /config_system_chatwoot`
424
424
  */
@@ -934,16 +934,17 @@ export function buscar_auto_complete_robo(credencial_de_acesso, parametros = {},
934
934
  /**
935
935
  * Lista as equipes do Chatwoot
936
936
  *
937
- * Exige qualquer permissão da área `configuracoes` (qualquer ação liberada na área já libera a leitura). Consulta na hora a conta do Chatwoot ativa e devolve as equipes dela (id e nome), para escolher a `equipe_id` da etapa `atendimento` ou do `gatilho` do fluxo.
937
+ * Exige qualquer permissão da área `configuracoes` (qualquer ação liberada na área já libera a leitura). Consulta na hora as equipes (id e nome) de uma conta do Chatwoot ativa, para escolher a `equipe_id` da etapa `atendimento` ou do `gatilho` do fluxo. Com `robo_id`, usa a conta do Chatwoot dos números de WhatsApp (Z-API ou QR Code) ligados a esse robô; sem `robo_id` ou sem número ligado, usa a primeira conta ativa.
938
938
  *
939
939
  * `GET /robo/equipes`
940
940
  */
941
- export function buscar_equipes_robo(credencial_de_acesso, opcoes_da_chamada) {
941
+ export function buscar_equipes_robo(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
942
942
  return chamar_servico({
943
943
  servico: SERVICO_DESTA_API,
944
944
  metodo_http: "GET",
945
945
  caminho_da_rota: "/robo/equipes",
946
946
  credencial_de_acesso,
947
+ parametros_de_consulta: parametros,
947
948
  formato_da_resposta: "json",
948
949
  }, opcoes_da_chamada);
949
950
  }
@@ -54,7 +54,6 @@ export interface Cliente {
54
54
  atendente_ativo: boolean;
55
55
  ativo: boolean;
56
56
  atualizado_em: string;
57
- chatwoot_contato_id?: number | null;
58
57
  cidade?: string | null;
59
58
  cnpj: string;
60
59
  criado_em: string;
@@ -352,7 +351,6 @@ export interface PaginaClienteItensItem {
352
351
  atendente_ativo: boolean;
353
352
  ativo: boolean;
354
353
  atualizado_em: string;
355
- chatwoot_contato_id?: number | null;
356
354
  cidade?: string | null;
357
355
  cnpj: string;
358
356
  criado_em: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termo_core",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
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>",