termo_core 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/rotas.d.ts +0 -263
- package/dist/ai/rotas.js +0 -397
- package/dist/ai/tipos.d.ts +0 -202
- package/dist/auth/rotas.d.ts +0 -8
- package/dist/auth/rotas.js +0 -16
- package/dist/auth/tipos.d.ts +0 -8
- package/dist/bucket/rotas.d.ts +3 -3
- package/dist/bucket/rotas.js +3 -3
- package/dist/intranet/rotas.d.ts +0 -335
- package/dist/intranet/rotas.js +0 -463
- package/dist/intranet/tipos.d.ts +0 -210
- package/dist/leads/rotas.d.ts +0 -334
- package/dist/leads/rotas.js +0 -440
- package/dist/leads/tipos.d.ts +0 -653
- package/dist/portal/rotas.d.ts +47 -454
- package/dist/portal/rotas.js +37 -635
- package/dist/portal/tipos.d.ts +125 -314
- package/dist/support/rotas.d.ts +0 -306
- package/dist/support/rotas.js +0 -420
- package/dist/support/tipos.d.ts +0 -216
- package/dist/tracing/rotas.d.ts +0 -305
- package/dist/tracing/rotas.js +0 -415
- package/dist/tracing/tipos.d.ts +0 -250
- package/dist/webhook/rotas.d.ts +0 -333
- package/dist/webhook/rotas.js +0 -458
- package/dist/webhook/tipos.d.ts +0 -255
- package/package.json +1 -1
package/dist/portal/rotas.js
CHANGED
|
@@ -1,60 +1,10 @@
|
|
|
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
|
-
* Envia um arquivo (imagem ou PDF de boletim)
|
|
6
|
-
*
|
|
7
|
-
* Exige uma sessão válida; as pastas (`produtos` e `boletins`) exigem a permissão `criar` ou `editar` no módulo `Configuracoes`. Formulário `multipart/form-data` com os campos `pasta` e `arquivo`. Imagem de produto (`produtos`, até 5 MB, PNG, JPG, WEBP ou GIF) vai para o TermoBucket (bucket público, app `portal-b2b`, pelo token do próprio app) e a `url` devolvida é o endereço público permanente dela, que vai nas `imagens` do produto (até 15). PDF de boletim (`boletins`, até 20 MB) fica no disco da API e a `url` é relativa (`/arquivo/boletins/<uuid>.pdf`).
|
|
8
|
-
*
|
|
9
|
-
* `POST /arquivo`
|
|
10
|
-
*/
|
|
11
|
-
export function criar_arquivo(credencial_de_acesso, formulario, opcoes_da_chamada) {
|
|
12
|
-
return chamar_servico({
|
|
13
|
-
servico: SERVICO_DESTA_API,
|
|
14
|
-
metodo_http: "POST",
|
|
15
|
-
caminho_da_rota: "/arquivo",
|
|
16
|
-
credencial_de_acesso,
|
|
17
|
-
formulario,
|
|
18
|
-
formato_da_resposta: "json",
|
|
19
|
-
}, opcoes_da_chamada);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Lê um arquivo enviado
|
|
23
|
-
*
|
|
24
|
-
* Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve o conteúdo do arquivo com o `Content-Type` dele (imagem ou PDF). `caminho` é o que vem depois de `/arquivo/` na `url` devolvida pelo envio (ex.: `produtos/<uuid>.png`). Campos: `baixar` com o valor `1` força o download (Content-Disposition attachment); `nome` é o nome sugerido para o download (só letras, números, ponto, hífen e `_`).
|
|
25
|
-
*
|
|
26
|
-
* `GET /arquivo/{caminho}`
|
|
27
|
-
*/
|
|
28
|
-
export function buscar_pelo_id_arquivo(credencial_de_acesso, caminho, parametros = {}, opcoes_da_chamada) {
|
|
29
|
-
return chamar_servico({
|
|
30
|
-
servico: SERVICO_DESTA_API,
|
|
31
|
-
metodo_http: "GET",
|
|
32
|
-
caminho_da_rota: `/arquivo/${codificar_parametro_de_caminho(caminho)}`,
|
|
33
|
-
credencial_de_acesso,
|
|
34
|
-
parametros_de_consulta: parametros,
|
|
35
|
-
formato_da_resposta: "bytes",
|
|
36
|
-
}, opcoes_da_chamada);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Apaga um arquivo enviado
|
|
40
|
-
*
|
|
41
|
-
* Exige a permissão `excluir` no módulo `Configuracoes` do perfil de quem chama (administrador e master têm tudo). Apaga o arquivo do disco de verdade (não há exclusão lógica para arquivos). `caminho` é o que vem depois de `/arquivo/` na `url`.
|
|
42
|
-
*
|
|
43
|
-
* `DELETE /arquivo/{caminho}`
|
|
44
|
-
*/
|
|
45
|
-
export function deletar_pelo_id_arquivo(credencial_de_acesso, caminho, opcoes_da_chamada) {
|
|
46
|
-
return chamar_servico({
|
|
47
|
-
servico: SERVICO_DESTA_API,
|
|
48
|
-
metodo_http: "DELETE",
|
|
49
|
-
caminho_da_rota: `/arquivo/${codificar_parametro_de_caminho(caminho)}`,
|
|
50
|
-
credencial_de_acesso,
|
|
51
|
-
formato_da_resposta: "sem_conteudo",
|
|
52
|
-
}, opcoes_da_chamada);
|
|
53
|
-
}
|
|
54
4
|
/**
|
|
55
5
|
* Lista as categorias com a situação do boletim
|
|
56
6
|
*
|
|
57
|
-
* Exige sessão. Uma linha por categoria do SKU (`sku_categoria` da tabela auxiliar, mais as que já têm boletim), tenha ela boletim ou não: `boletim_tecnico_id` e `atualizado_em` vêm nulos quando ainda não tem. `total_medidas` junta as medidas dos produtos da categoria e as já descritas; `situacao` é `vazio` (sem
|
|
7
|
+
* Exige sessão. Uma linha por categoria do SKU (`sku_categoria` da tabela auxiliar, mais as que já têm boletim), tenha ela boletim ou não: `boletim_tecnico_id` e `atualizado_em` vêm nulos quando ainda não tem. `total_medidas` junta as medidas dos produtos da categoria e as já descritas; `situacao` é `vazio` (sem nome e sem descrição), `completo` (com nome e descrição) ou `incompleto` (só um dos dois); as medidas não contam. `busca` procura no código e na descrição; `situacao` filtra. Ordem pelo código, 50 por página, por cursor: `cursor` é o `sku_categoria` da última linha recebida. As categorias saem de um cache em memória, descartado a cada gravação em boletim, medida, tabela auxiliar ou produto (e recarregado do banco no máximo a cada 10 minutos).
|
|
58
8
|
*
|
|
59
9
|
* `GET /boletim_tecnico`
|
|
60
10
|
*/
|
|
@@ -604,23 +554,6 @@ export function buscar_informacoes_paginador_cliente(credencial_de_acesso, param
|
|
|
604
554
|
formato_da_resposta: "json",
|
|
605
555
|
}, opcoes_da_chamada);
|
|
606
556
|
}
|
|
607
|
-
/**
|
|
608
|
-
* Sincroniza um lote de clientes do Tiny
|
|
609
|
-
*
|
|
610
|
-
* Só colaborador interno com `editar` no módulo `Configuracoes`. Traz 10 páginas (500 clientes) do TermoIntranetAPI pelo `termo_core` (token do próprio app no TermoAuth) e grava na tabela `cliente`: cliente que já entra no portal é casado pelo CNPJ da unidade dele e só recebe os campos do Tiny (`id_api`, `codigo`, `id_tiny`, `cpf_cnpj`, `tipo_pessoa`, `nome_fantasia`, `email_tiny`, `telefone_tiny`, `celular`, `cidade`, `uf`, `vendedor`, `situacao_tiny`); os demais entram sem login (`email` nulo, `status` `inativo`). A listagem de lá é por cursor: a primeira chamada vai sem `cursor` e a seguinte manda o `proximo_cursor` recebido (nulo no fim). `total` é o total de clientes ativos na intranet. O backend também sincroniza sozinho (`SINCRONIZACAO_CLIENTE_MINUTOS`, `_PAGINAS` e `_COMPLETA_HORAS`).
|
|
611
|
-
*
|
|
612
|
-
* `POST /cliente/sincronizar`
|
|
613
|
-
*/
|
|
614
|
-
export function sincronizar_cliente(credencial_de_acesso, corpo_da_requisicao, opcoes_da_chamada) {
|
|
615
|
-
return chamar_servico({
|
|
616
|
-
servico: SERVICO_DESTA_API,
|
|
617
|
-
metodo_http: "POST",
|
|
618
|
-
caminho_da_rota: "/cliente/sincronizar",
|
|
619
|
-
credencial_de_acesso,
|
|
620
|
-
corpo_json: corpo_da_requisicao,
|
|
621
|
-
formato_da_resposta: "json",
|
|
622
|
-
}, opcoes_da_chamada);
|
|
623
|
-
}
|
|
624
557
|
/**
|
|
625
558
|
* Busca o cliente pelo id
|
|
626
559
|
*
|
|
@@ -1225,7 +1158,7 @@ export function deletar_pelo_id_fatura(credencial_de_acesso, id, opcoes_da_chama
|
|
|
1225
1158
|
/**
|
|
1226
1159
|
* Indicadores de compra de uma unidade
|
|
1227
1160
|
*
|
|
1228
|
-
* Exige a permissão `ver` no módulo `Dashboard` do perfil de quem chama (administrador e master têm tudo). Soma na hora as compras (notas emitidas pelo Tiny) do CNPJ da unidade `unidade_id`: total comprado, comparação com o período anterior (períodos de até 731 dias), notas, produtos diferentes, última compra, compras por mês, por tipo e os produtos mais comprados (até
|
|
1161
|
+
* Exige a permissão `ver` no módulo `Dashboard` do perfil de quem chama (administrador e master têm tudo). Soma na hora as compras (notas emitidas pelo Tiny) do CNPJ da unidade `unidade_id`: total comprado, comparação com o período anterior (períodos de até 731 dias), notas, produtos diferentes, última compra, compras por mês, por tipo e os produtos mais comprados (até 10). `unidade_id` é obrigatório e precisa ser uma unidade da sessão (colaborador interno acessa todas). `inicio` e `fim` em AAAA-MM-DD (padrão: últimos 365 dias). `amostra: true` indica soma parcial. Até 30 chamadas por minuto por pessoa.
|
|
1229
1162
|
*
|
|
1230
1163
|
* `GET /indicador_compra/filtro`
|
|
1231
1164
|
*/
|
|
@@ -1257,133 +1190,101 @@ export function buscar_pelo_filtro_indicador_venda(credencial_de_acesso, paramet
|
|
|
1257
1190
|
}, opcoes_da_chamada);
|
|
1258
1191
|
}
|
|
1259
1192
|
/**
|
|
1260
|
-
*
|
|
1193
|
+
* Lista as RNCs e ocorrências da qualidade de uma unidade
|
|
1261
1194
|
*
|
|
1262
|
-
*
|
|
1195
|
+
* Só colaborador interno. Consulta na hora a API de qualidade da Termotubos (intranet) pelo CNPJ da unidade (`unidade_id`, obrigatório), da mais recente para a mais antiga. Filtros: `situacao` (`todas`, `abertas`, `fechadas`, `rascunho`; padrão `todas`), `tipo` (`todos`, `rnc`, `ocorrencia`; padrão `todos`) e `busca` (número, nota fiscal, documento, código do produto, lote, problema, motivo, objetivo, responsável ou emitente). 50 por página; `pagina` começa em 1. Totais e contagens em `GET /nao_conformidade/paginador`.
|
|
1263
1196
|
*
|
|
1264
|
-
* `GET /
|
|
1197
|
+
* `GET /nao_conformidade`
|
|
1265
1198
|
*/
|
|
1266
|
-
export function
|
|
1199
|
+
export function buscar_paginador_nao_conformidade(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
1267
1200
|
return chamar_servico({
|
|
1268
1201
|
servico: SERVICO_DESTA_API,
|
|
1269
1202
|
metodo_http: "GET",
|
|
1270
|
-
caminho_da_rota: "/
|
|
1203
|
+
caminho_da_rota: "/nao_conformidade",
|
|
1271
1204
|
credencial_de_acesso,
|
|
1272
1205
|
parametros_de_consulta: parametros,
|
|
1273
1206
|
formato_da_resposta: "json",
|
|
1274
1207
|
}, opcoes_da_chamada);
|
|
1275
1208
|
}
|
|
1276
1209
|
/**
|
|
1277
|
-
*
|
|
1210
|
+
* Totais, contagens e resumo das RNCs de uma unidade
|
|
1278
1211
|
*
|
|
1279
|
-
*
|
|
1212
|
+
* Só colaborador interno. Mesmos filtros de `GET /nao_conformidade`. `total` e `paginas` seguem todos os filtros; `contagens` (todas, abertas, fechadas, rascunho, rnc, ocorrencias) seguem só a `busca`; o `resumo` (custo total, abertas com gravidade alta, abertura mais antiga ainda aberta, última abertura, média de dias para fechar e até 3 problemas que se repetem) olha todas as não conformidades da unidade.
|
|
1280
1213
|
*
|
|
1281
|
-
* `GET /
|
|
1214
|
+
* `GET /nao_conformidade/paginador`
|
|
1282
1215
|
*/
|
|
1283
|
-
export function
|
|
1216
|
+
export function buscar_informacoes_paginador_nao_conformidade(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
1284
1217
|
return chamar_servico({
|
|
1285
1218
|
servico: SERVICO_DESTA_API,
|
|
1286
1219
|
metodo_http: "GET",
|
|
1287
|
-
caminho_da_rota: "/
|
|
1220
|
+
caminho_da_rota: "/nao_conformidade/paginador",
|
|
1288
1221
|
credencial_de_acesso,
|
|
1289
1222
|
parametros_de_consulta: parametros,
|
|
1290
1223
|
formato_da_resposta: "json",
|
|
1291
1224
|
}, opcoes_da_chamada);
|
|
1292
1225
|
}
|
|
1293
1226
|
/**
|
|
1294
|
-
*
|
|
1227
|
+
* Busca uma RNC ou ocorrência completa pelo id da intranet
|
|
1295
1228
|
*
|
|
1296
|
-
* Só colaborador interno
|
|
1229
|
+
* Só colaborador interno. Traz os dados da lista e mais as etapas do tratamento (descrição, ação imediata, análise da causa raiz, ação corretiva, evidência, eficácia, justificativa e observação geral), cada uma com os responsáveis e as mensagens em texto (o HTML da intranet é convertido e as imagens coladas como link vêm em `imagens`), além dos custos e anexos.
|
|
1297
1230
|
*
|
|
1298
|
-
* `GET /
|
|
1231
|
+
* `GET /nao_conformidade/{id}`
|
|
1299
1232
|
*/
|
|
1300
|
-
export function
|
|
1233
|
+
export function buscar_pelo_id_nao_conformidade(credencial_de_acesso, id, opcoes_da_chamada) {
|
|
1301
1234
|
return chamar_servico({
|
|
1302
1235
|
servico: SERVICO_DESTA_API,
|
|
1303
1236
|
metodo_http: "GET",
|
|
1304
|
-
caminho_da_rota:
|
|
1237
|
+
caminho_da_rota: `/nao_conformidade/${codificar_parametro_de_caminho(id)}`,
|
|
1305
1238
|
credencial_de_acesso,
|
|
1306
1239
|
formato_da_resposta: "json",
|
|
1307
1240
|
}, opcoes_da_chamada);
|
|
1308
1241
|
}
|
|
1309
1242
|
/**
|
|
1310
|
-
*
|
|
1311
|
-
*
|
|
1312
|
-
* Só colaborador interno com `ver` no módulo `Financeiro`. Traz as notas fiscais emitidas no Tiny (pela API de notas fiscais da Termotubos) para a tabela `nota_fiscal`, com as parcelas lidas do XML das notas válidas que ainda não as têm, sem filtro de data (histórico inteiro), lote por lote, em segundo plano no servidor: a tela pode ser fechada. Responde 202 com o status inicial; acompanhe por `GET /nota_fiscal/sincronizacao`. O status fica em memória e se perde se o servidor reiniciar.
|
|
1313
|
-
*
|
|
1314
|
-
* `POST /nota_fiscal/sincronizacao`
|
|
1315
|
-
*/
|
|
1316
|
-
export function iniciar_sincronizacao_nota_fiscal(credencial_de_acesso, opcoes_da_chamada) {
|
|
1317
|
-
return chamar_servico({
|
|
1318
|
-
servico: SERVICO_DESTA_API,
|
|
1319
|
-
metodo_http: "POST",
|
|
1320
|
-
caminho_da_rota: "/nota_fiscal/sincronizacao",
|
|
1321
|
-
credencial_de_acesso,
|
|
1322
|
-
formato_da_resposta: "json",
|
|
1323
|
-
}, opcoes_da_chamada);
|
|
1324
|
-
}
|
|
1325
|
-
/**
|
|
1326
|
-
* Cancela a sincronização das notas fiscais em andamento
|
|
1327
|
-
*
|
|
1328
|
-
* Só colaborador interno com `ver` no módulo `Financeiro`. Para antes do próximo lote; o que já foi gravado fica.
|
|
1329
|
-
*
|
|
1330
|
-
* `DELETE /nota_fiscal/sincronizacao`
|
|
1331
|
-
*/
|
|
1332
|
-
export function cancelar_sincronizacao_nota_fiscal(credencial_de_acesso, opcoes_da_chamada) {
|
|
1333
|
-
return chamar_servico({
|
|
1334
|
-
servico: SERVICO_DESTA_API,
|
|
1335
|
-
metodo_http: "DELETE",
|
|
1336
|
-
caminho_da_rota: "/nota_fiscal/sincronizacao",
|
|
1337
|
-
credencial_de_acesso,
|
|
1338
|
-
formato_da_resposta: "sem_conteudo",
|
|
1339
|
-
}, opcoes_da_chamada);
|
|
1340
|
-
}
|
|
1341
|
-
/**
|
|
1342
|
-
* Busca uma nota fiscal pelo id do Tiny
|
|
1243
|
+
* Uma página das notas fiscais, por cursor
|
|
1343
1244
|
*
|
|
1344
|
-
* Exige a permissão `ver` no módulo `Financeiro` do perfil de quem chama (administrador e master têm tudo). Lê a
|
|
1245
|
+
* Exige a permissão `ver` no módulo `Financeiro` do perfil de quem chama (administrador e master têm tudo). Lê a tabela `nota_fiscal`, que o backend sincroniza sozinho com as notas emitidas no Tiny (pela API da Termotubos), com parcelas e situação financeira; a emissão mais recente vem primeiro e a resposta é só o array das 50 notas da página. Quem não é colaborador interno precisa informar `unidade_id` de uma unidade da sessão e só vê as notas do CNPJ dela; colaborador interno pode omitir e ver todas. Filtros: `filtro` (`todas`, `hoje`, `mes`; padrão `todas`; `hoje` e `mes` trocam o período), `busca` (CPF/CNPJ, número da nota ou nome do cliente), `inicio` e `fim` (AAAA-MM-DD) e `vendedor` (id no Tiny, só colaborador). A paginação é por cursor: a primeira página vai sem `cursor` e a seguinte manda em `cursor` o `id` da última nota recebida. Total, páginas e contagens vêm de `GET /nota_fiscal/paginador`, com o mesmo filtro.
|
|
1345
1246
|
*
|
|
1346
|
-
* `GET /nota_fiscal
|
|
1247
|
+
* `GET /nota_fiscal`
|
|
1347
1248
|
*/
|
|
1348
|
-
export function
|
|
1249
|
+
export function buscar_paginador_nota_fiscal(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
1349
1250
|
return chamar_servico({
|
|
1350
1251
|
servico: SERVICO_DESTA_API,
|
|
1351
1252
|
metodo_http: "GET",
|
|
1352
|
-
caminho_da_rota:
|
|
1253
|
+
caminho_da_rota: "/nota_fiscal",
|
|
1353
1254
|
credencial_de_acesso,
|
|
1354
1255
|
parametros_de_consulta: parametros,
|
|
1355
1256
|
formato_da_resposta: "json",
|
|
1356
1257
|
}, opcoes_da_chamada);
|
|
1357
1258
|
}
|
|
1358
1259
|
/**
|
|
1359
|
-
*
|
|
1260
|
+
* Total, páginas e contagens das notas fiscais
|
|
1360
1261
|
*
|
|
1361
|
-
*
|
|
1262
|
+
* Mesma permissão, mesmos filtros e mesma regra de unidade de `GET /nota_fiscal` (o `cursor` é ignorado). Devolve `total` e `paginas` com o filtro escolhido, `tamanho` (50), `sincronizado_em` (a última sincronização; nulo se nunca houve) e `contagens` (`todas`, `hoje`, `mes`), que usam os outros filtros e trocam o período pelo do bloco.
|
|
1362
1263
|
*
|
|
1363
|
-
* `GET /
|
|
1264
|
+
* `GET /nota_fiscal/paginador`
|
|
1364
1265
|
*/
|
|
1365
|
-
export function
|
|
1266
|
+
export function buscar_informacoes_paginador_nota_fiscal(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
1366
1267
|
return chamar_servico({
|
|
1367
1268
|
servico: SERVICO_DESTA_API,
|
|
1368
1269
|
metodo_http: "GET",
|
|
1369
|
-
caminho_da_rota: "/
|
|
1270
|
+
caminho_da_rota: "/nota_fiscal/paginador",
|
|
1370
1271
|
credencial_de_acesso,
|
|
1371
1272
|
parametros_de_consulta: parametros,
|
|
1372
1273
|
formato_da_resposta: "json",
|
|
1373
1274
|
}, opcoes_da_chamada);
|
|
1374
1275
|
}
|
|
1375
1276
|
/**
|
|
1376
|
-
*
|
|
1277
|
+
* Busca uma nota fiscal pelo id do Tiny
|
|
1377
1278
|
*
|
|
1378
|
-
*
|
|
1279
|
+
* Exige a permissão `ver` no módulo `Financeiro` do perfil de quem chama (administrador e master têm tudo). Lê a nota da tabela `nota_fiscal` com itens, parcelas (vencimento, valor, situação) e situação financeira. Com `xml=1`, devolve o XML da nota como download (`application/xml`), buscado na hora na API da Termotubos. Quem não é colaborador interno só abre notas do CNPJ das próprias unidades (as outras respondem 404).
|
|
1379
1280
|
*
|
|
1380
|
-
* `GET /
|
|
1281
|
+
* `GET /nota_fiscal/{id}`
|
|
1381
1282
|
*/
|
|
1382
|
-
export function
|
|
1283
|
+
export function buscar_pelo_id_nota_fiscal(credencial_de_acesso, id, parametros = {}, opcoes_da_chamada) {
|
|
1383
1284
|
return chamar_servico({
|
|
1384
1285
|
servico: SERVICO_DESTA_API,
|
|
1385
1286
|
metodo_http: "GET",
|
|
1386
|
-
caminho_da_rota:
|
|
1287
|
+
caminho_da_rota: `/nota_fiscal/${codificar_parametro_de_caminho(id)}`,
|
|
1387
1288
|
credencial_de_acesso,
|
|
1388
1289
|
parametros_de_consulta: parametros,
|
|
1389
1290
|
formato_da_resposta: "json",
|
|
@@ -1509,7 +1410,7 @@ export function deletar_pelo_id_pedido(credencial_de_acesso, id, opcoes_da_chama
|
|
|
1509
1410
|
/**
|
|
1510
1411
|
* Envia um pedido para a IA montar
|
|
1511
1412
|
*
|
|
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.
|
|
1413
|
+
* 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. Os nomes que a unidade já vinculou na revisão (veja o `PATCH`) vão para a IA e fecham os itens com o mesmo nome. Se a IA falhar ou não achar nenhum item, cada linha do texto vira um item `nao_encontrado` para o cliente vincular, e `aviso` explica isso. 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
1414
|
*
|
|
1514
1415
|
* `POST /pedido_inteligente`
|
|
1515
1416
|
*/
|
|
@@ -1543,7 +1444,7 @@ export function buscar_pelo_filtro_pedido_inteligente(credencial_de_acesso, para
|
|
|
1543
1444
|
/**
|
|
1544
1445
|
* Busca um pedido inteligente pelo id
|
|
1545
1446
|
*
|
|
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.
|
|
1447
|
+
* 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); `aviso` aparece quando o pedido foi montado sem a IA; `cotacao_id` aparece quando o pedido já virou cotação.
|
|
1547
1448
|
*
|
|
1548
1449
|
* `GET /pedido_inteligente/{id}`
|
|
1549
1450
|
*/
|
|
@@ -1559,7 +1460,7 @@ export function buscar_pelo_id_pedido_inteligente(credencial_de_acesso, id, opco
|
|
|
1559
1460
|
/**
|
|
1560
1461
|
* Grava a revisão do cliente
|
|
1561
1462
|
*
|
|
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
|
|
1463
|
+
* 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`. Mande `itens`, `incluir_pedido_id` ou os dois. `itens` tem uma escolha por item do pedido, na mesma ordem: `produto_id` é o produto escolhido (nulo tira o item da cotação), `quantidade` vai de 0 a 9999 (acima de zero), `remover` (opcional, padrão `false`) tira o item do pedido e `adicionais` (opcional) são outros produtos para o mesmo item, cada um com `produto_id` e `quantidade`, que entram na cotação junto com o escolhido (exigem `produto_id` e não podem repetir produto). O produto pode ser o `escolhido`, uma das `opcoes` ou qualquer produto ativo do catálogo; neste último caso, com um produto só no item, a unidade guarda o vínculo entre o nome que o cliente escreveu e o produto, e os próximos pedidos com o mesmo nome já chegam com ele. `incluir_pedido_id` é outro pedido `pronto` da mesma unidade (mandado pelo `POST` com os itens a acrescentar): os itens dele entram no fim deste, o texto e os anexos se somam aos deste e ele sai da lista (até 100 itens no pedido).
|
|
1563
1464
|
*
|
|
1564
1465
|
* `PATCH /pedido_inteligente/{id}`
|
|
1565
1466
|
*/
|
|
@@ -1642,7 +1543,7 @@ export function buscar_pelo_id_pedido_venda(credencial_de_acesso, id, opcoes_da_
|
|
|
1642
1543
|
/**
|
|
1643
1544
|
* Paginador dos pedidos de venda salvos no portal
|
|
1644
1545
|
*
|
|
1645
|
-
* Exige a permissão `ver` no módulo `Pedidos` do perfil de quem chama (administrador e master têm tudo). Quem não é colaborador interno precisa informar `unidade_id` de uma unidade da sessão e só recebe os pedidos do CNPJ dela, sem vendedor, canal e marcadores; colaborador interno pode omitir e ver todos. Lê a cópia dos pedidos de venda da Intranet salva no banco do portal (atualizada
|
|
1546
|
+
* Exige a permissão `ver` no módulo `Pedidos` do perfil de quem chama (administrador e master têm tudo). Quem não é colaborador interno precisa informar `unidade_id` de uma unidade da sessão e só recebe os pedidos do CNPJ dela, sem vendedor, canal e marcadores; colaborador interno pode omitir e ver todos. Lê a cópia dos pedidos de venda da Intranet salva no banco do portal (atualizada pela sincronização do backend) e devolve só a paginação, sem os itens (eles vêm de `GET /pedido_venda_tiny/filtro`): `pagina`, `por_pagina` (sempre 50), `total_paginas`, `total_registros` da situação pedida, a contagem por situação e `sincronizado_em` (a última sincronização). Filtros iguais aos da lista: `situacao` (`todos`, `aberto`, `aprovado`, `faturado`, `pronto`, `enviado`, `entregue`, `cancelado`; padrão `todos`), `busca` (CNPJ/CPF, número do pedido ou nome do cliente), `inicio` e `fim` (AAAA-MM-DD, data do pedido) e `vendedor` (id do vendedor no Tiny, só para colaborador interno).
|
|
1646
1547
|
*
|
|
1647
1548
|
* `GET /pedido_venda_tiny`
|
|
1648
1549
|
*/
|
|
@@ -1656,23 +1557,6 @@ export function buscar_paginador_pedido_venda_tiny(credencial_de_acesso, paramet
|
|
|
1656
1557
|
formato_da_resposta: "json",
|
|
1657
1558
|
}, opcoes_da_chamada);
|
|
1658
1559
|
}
|
|
1659
|
-
/**
|
|
1660
|
-
* Sincroniza um lote de pedidos de venda com a Intranet
|
|
1661
|
-
*
|
|
1662
|
-
* Só colaborador interno com a permissão `ver` no módulo `Pedidos`. Lê 10 páginas (500 pedidos) da Intranet a partir de `pagina` (começa em 1) e grava no banco do portal, criando ou atualizando pelo id da Intranet. `modo`: `recentes` (padrão, os pedidos dos últimos 90 dias) ou `tudo` (todos os pedidos). Para sincronizar tudo, chame de novo com `proxima_pagina` até ela vir `null`. O backend também sincroniza sozinho: os últimos dias a cada 15 min e os últimos 90 dias a cada 6 h (`SINCRONIZACAO_*` no `.env`). Até 120 chamadas por minuto por pessoa.
|
|
1663
|
-
*
|
|
1664
|
-
* `POST /pedido_venda_tiny`
|
|
1665
|
-
*/
|
|
1666
|
-
export function criar_pedido_venda_tiny(credencial_de_acesso, corpo_da_requisicao, opcoes_da_chamada) {
|
|
1667
|
-
return chamar_servico({
|
|
1668
|
-
servico: SERVICO_DESTA_API,
|
|
1669
|
-
metodo_http: "POST",
|
|
1670
|
-
caminho_da_rota: "/pedido_venda_tiny",
|
|
1671
|
-
credencial_de_acesso,
|
|
1672
|
-
corpo_json: corpo_da_requisicao,
|
|
1673
|
-
formato_da_resposta: "json",
|
|
1674
|
-
}, opcoes_da_chamada);
|
|
1675
|
-
}
|
|
1676
1560
|
/**
|
|
1677
1561
|
* Autocomplete dos pedidos de venda salvos no portal
|
|
1678
1562
|
*
|
|
@@ -1724,123 +1608,6 @@ export function buscar_pelo_id_pedido_venda_tiny(credencial_de_acesso, id, param
|
|
|
1724
1608
|
formato_da_resposta: "json",
|
|
1725
1609
|
}, opcoes_da_chamada);
|
|
1726
1610
|
}
|
|
1727
|
-
/**
|
|
1728
|
-
* Lista os perfis paginados
|
|
1729
|
-
*
|
|
1730
|
-
* Exige só uma sessão válida (qualquer pessoa logada no portal). Ordem alfabética. 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`.
|
|
1731
|
-
*
|
|
1732
|
-
* `GET /perfil`
|
|
1733
|
-
*/
|
|
1734
|
-
export function buscar_paginador_perfil(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
1735
|
-
return chamar_servico({
|
|
1736
|
-
servico: SERVICO_DESTA_API,
|
|
1737
|
-
metodo_http: "GET",
|
|
1738
|
-
caminho_da_rota: "/perfil",
|
|
1739
|
-
credencial_de_acesso,
|
|
1740
|
-
parametros_de_consulta: parametros,
|
|
1741
|
-
formato_da_resposta: "json",
|
|
1742
|
-
}, opcoes_da_chamada);
|
|
1743
|
-
}
|
|
1744
|
-
/**
|
|
1745
|
-
* Cadastra um perfil de acesso
|
|
1746
|
-
*
|
|
1747
|
-
* Exige perfil administrador ou master. Perfil de acesso (RBAC) das pessoas do portal. `nome` obrigatório, até 120 caracteres e único (o `slug` sai do nome); `resumo` até 500; `tipo` é `termotubos` ou `cliente`; `base: true` marca o perfil dado ao cliente novo (só um, só de cliente, nunca administrador); `permissoes` por módulo (`Dashboard`, `Pedidos`, `Financeiro`, `Catalogo`, `Cotacoes`, `Assistente`, `Configuracoes`) com `ver`, `criar`, `editar`, `excluir` e a exibição no menu; `permissoes_administrativas` entre `contexto_administrativo.entrar`, `unidades.ler`, `pedidos.ler_todos`, `cotacoes.ler_todas`, `financeiro.ler_todos` e `usuarios.gerenciar`. Cada item de `permissoes` tem `modulo`, `pagina` (página do módulo; `*` vale para o módulo inteiro, padrão), `ver`, `criar`, `editar`, `excluir` (booleanos) e `mostrar_na_sidebar` e `mostrar_nas_configuracoes` (booleanos, exibição no menu). Campos: `base` (booleano) marca o perfil dado ao cliente novo (só um, só de cliente).
|
|
1748
|
-
*
|
|
1749
|
-
* `POST /perfil`
|
|
1750
|
-
*/
|
|
1751
|
-
export function criar_perfil(credencial_de_acesso, corpo_da_requisicao, opcoes_da_chamada) {
|
|
1752
|
-
return chamar_servico({
|
|
1753
|
-
servico: SERVICO_DESTA_API,
|
|
1754
|
-
metodo_http: "POST",
|
|
1755
|
-
caminho_da_rota: "/perfil",
|
|
1756
|
-
credencial_de_acesso,
|
|
1757
|
-
corpo_json: corpo_da_requisicao,
|
|
1758
|
-
formato_da_resposta: "json",
|
|
1759
|
-
}, opcoes_da_chamada);
|
|
1760
|
-
}
|
|
1761
|
-
/**
|
|
1762
|
-
* Lista básica de perfis para seleção
|
|
1763
|
-
*
|
|
1764
|
-
* Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve só id e nome, em ordem alfabética. `busca` procura no nome. `tamanho` tem padrão 10 e vai de 1 a 50; `pagina` começa em 1. A resposta traz `itens`, `total`, `pagina` e `tamanho`.
|
|
1765
|
-
*
|
|
1766
|
-
* `GET /perfil/autocomplete`
|
|
1767
|
-
*/
|
|
1768
|
-
export function buscar_auto_complete_perfil(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
1769
|
-
return chamar_servico({
|
|
1770
|
-
servico: SERVICO_DESTA_API,
|
|
1771
|
-
metodo_http: "GET",
|
|
1772
|
-
caminho_da_rota: "/perfil/autocomplete",
|
|
1773
|
-
credencial_de_acesso,
|
|
1774
|
-
parametros_de_consulta: parametros,
|
|
1775
|
-
formato_da_resposta: "json",
|
|
1776
|
-
}, opcoes_da_chamada);
|
|
1777
|
-
}
|
|
1778
|
-
/**
|
|
1779
|
-
* Busca perfis por filtro
|
|
1780
|
-
*
|
|
1781
|
-
* Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve os perfis não excluídos que casam com o filtro, até 50 por página (`pagina`, a partir de 1, padrão 1), em ordem alfabética. `nome` procura o trecho; `slug`, `base` e `tipo` são exatos.
|
|
1782
|
-
*
|
|
1783
|
-
* `GET /perfil/filtro`
|
|
1784
|
-
*/
|
|
1785
|
-
export function buscar_pelo_filtro_perfil(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
1786
|
-
return chamar_servico({
|
|
1787
|
-
servico: SERVICO_DESTA_API,
|
|
1788
|
-
metodo_http: "GET",
|
|
1789
|
-
caminho_da_rota: "/perfil/filtro",
|
|
1790
|
-
credencial_de_acesso,
|
|
1791
|
-
parametros_de_consulta: parametros,
|
|
1792
|
-
formato_da_resposta: "json",
|
|
1793
|
-
}, opcoes_da_chamada);
|
|
1794
|
-
}
|
|
1795
|
-
/**
|
|
1796
|
-
* Busca um perfil pelo id
|
|
1797
|
-
*
|
|
1798
|
-
* Exige só uma sessão válida (qualquer pessoa logada no portal). Perfil excluído não é encontrado. Traz permissões e quantidade de pessoas.
|
|
1799
|
-
*
|
|
1800
|
-
* `GET /perfil/{id}`
|
|
1801
|
-
*/
|
|
1802
|
-
export function buscar_pelo_id_perfil(credencial_de_acesso, id, opcoes_da_chamada) {
|
|
1803
|
-
return chamar_servico({
|
|
1804
|
-
servico: SERVICO_DESTA_API,
|
|
1805
|
-
metodo_http: "GET",
|
|
1806
|
-
caminho_da_rota: `/perfil/${codificar_parametro_de_caminho(id)}`,
|
|
1807
|
-
credencial_de_acesso,
|
|
1808
|
-
formato_da_resposta: "json",
|
|
1809
|
-
}, opcoes_da_chamada);
|
|
1810
|
-
}
|
|
1811
|
-
/**
|
|
1812
|
-
* Atualiza um perfil de acesso
|
|
1813
|
-
*
|
|
1814
|
-
* Exige perfil administrador ou master. Mesmas regras do cadastro; o tipo não muda. `permissoes` e `permissoes_administrativas`, quando enviados, substituem as anteriores. Cada item de `permissoes` tem `modulo`, `pagina` (página do módulo; `*` vale para o módulo inteiro, padrão), `ver`, `criar`, `editar`, `excluir` (booleanos) e `mostrar_na_sidebar` e `mostrar_nas_configuracoes` (booleanos, exibição no menu). Atualização parcial: campo ausente mantém o valor atual. Campos: `nome` é obrigatório quando enviado (mesmo limite do cadastro); `resumo` até 500 caracteres; `base` (booleano) marca o perfil dado ao cliente novo (só um, só de cliente).
|
|
1815
|
-
*
|
|
1816
|
-
* `PATCH /perfil/{id}`
|
|
1817
|
-
*/
|
|
1818
|
-
export function atualizar_pelo_id_perfil(credencial_de_acesso, id, corpo_da_requisicao, opcoes_da_chamada) {
|
|
1819
|
-
return chamar_servico({
|
|
1820
|
-
servico: SERVICO_DESTA_API,
|
|
1821
|
-
metodo_http: "PATCH",
|
|
1822
|
-
caminho_da_rota: `/perfil/${codificar_parametro_de_caminho(id)}`,
|
|
1823
|
-
credencial_de_acesso,
|
|
1824
|
-
corpo_json: corpo_da_requisicao,
|
|
1825
|
-
formato_da_resposta: "json",
|
|
1826
|
-
}, opcoes_da_chamada);
|
|
1827
|
-
}
|
|
1828
|
-
/**
|
|
1829
|
-
* Exclui um perfil de acesso
|
|
1830
|
-
*
|
|
1831
|
-
* Exige perfil administrador ou master. Recusa o perfil base e perfis com pessoas vinculadas. A exclusão é lógica: o registro some das leituras, mas a linha não é apagada.
|
|
1832
|
-
*
|
|
1833
|
-
* `DELETE /perfil/{id}`
|
|
1834
|
-
*/
|
|
1835
|
-
export function deletar_pelo_id_perfil(credencial_de_acesso, id, opcoes_da_chamada) {
|
|
1836
|
-
return chamar_servico({
|
|
1837
|
-
servico: SERVICO_DESTA_API,
|
|
1838
|
-
metodo_http: "DELETE",
|
|
1839
|
-
caminho_da_rota: `/perfil/${codificar_parametro_de_caminho(id)}`,
|
|
1840
|
-
credencial_de_acesso,
|
|
1841
|
-
formato_da_resposta: "sem_conteudo",
|
|
1842
|
-
}, opcoes_da_chamada);
|
|
1843
|
-
}
|
|
1844
1611
|
/**
|
|
1845
1612
|
* Lista os produtos paginados
|
|
1846
1613
|
*
|
|
@@ -1958,123 +1725,6 @@ export function deletar_pelo_id_produto(credencial_de_acesso, id, opcoes_da_cham
|
|
|
1958
1725
|
formato_da_resposta: "sem_conteudo",
|
|
1959
1726
|
}, opcoes_da_chamada);
|
|
1960
1727
|
}
|
|
1961
|
-
/**
|
|
1962
|
-
* Lista os conflitos de sincronização paginados
|
|
1963
|
-
*
|
|
1964
|
-
* Exige só uma sessão válida (qualquer pessoa logada no portal). Dos mais novos para os mais antigos; `resolvido` opcional filtra. 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`.
|
|
1965
|
-
*
|
|
1966
|
-
* `GET /produto_conflito_sincronizacao`
|
|
1967
|
-
*/
|
|
1968
|
-
export function buscar_paginador_produto_conflito_sincronizacao(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
1969
|
-
return chamar_servico({
|
|
1970
|
-
servico: SERVICO_DESTA_API,
|
|
1971
|
-
metodo_http: "GET",
|
|
1972
|
-
caminho_da_rota: "/produto_conflito_sincronizacao",
|
|
1973
|
-
credencial_de_acesso,
|
|
1974
|
-
parametros_de_consulta: parametros,
|
|
1975
|
-
formato_da_resposta: "json",
|
|
1976
|
-
}, opcoes_da_chamada);
|
|
1977
|
-
}
|
|
1978
|
-
/**
|
|
1979
|
-
* Registra um conflito de sincronização de produto
|
|
1980
|
-
*
|
|
1981
|
-
* Exige a permissão `criar` no módulo `Configuracoes` do perfil de quem chama (administrador e master têm tudo). Conflito entre o valor do portal e o da API da Termotubos (Tiny) num campo monitorado do produto. `campo` é `preco`, `preco_a_vista` ou `estoque`; `valor_local` e `valor_api` em texto (o da API precisa ser numérico). Campos: `produto_id` (uuid) é o produto do conflito.
|
|
1982
|
-
*
|
|
1983
|
-
* `POST /produto_conflito_sincronizacao`
|
|
1984
|
-
*/
|
|
1985
|
-
export function criar_produto_conflito_sincronizacao(credencial_de_acesso, corpo_da_requisicao, opcoes_da_chamada) {
|
|
1986
|
-
return chamar_servico({
|
|
1987
|
-
servico: SERVICO_DESTA_API,
|
|
1988
|
-
metodo_http: "POST",
|
|
1989
|
-
caminho_da_rota: "/produto_conflito_sincronizacao",
|
|
1990
|
-
credencial_de_acesso,
|
|
1991
|
-
corpo_json: corpo_da_requisicao,
|
|
1992
|
-
formato_da_resposta: "json",
|
|
1993
|
-
}, opcoes_da_chamada);
|
|
1994
|
-
}
|
|
1995
|
-
/**
|
|
1996
|
-
* Lista básica de conflitos de sincronização para seleção
|
|
1997
|
-
*
|
|
1998
|
-
* Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve id e `rotulo` (`SKU - campo`), em ordem alfabética. `busca` procura no SKU e no campo; `resolvido` filtra. `tamanho` tem padrão 10 e vai de 1 a 50; `pagina` começa em 1. A resposta traz `itens`, `total`, `pagina` e `tamanho`.
|
|
1999
|
-
*
|
|
2000
|
-
* `GET /produto_conflito_sincronizacao/autocomplete`
|
|
2001
|
-
*/
|
|
2002
|
-
export function buscar_auto_complete_produto_conflito_sincronizacao(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
2003
|
-
return chamar_servico({
|
|
2004
|
-
servico: SERVICO_DESTA_API,
|
|
2005
|
-
metodo_http: "GET",
|
|
2006
|
-
caminho_da_rota: "/produto_conflito_sincronizacao/autocomplete",
|
|
2007
|
-
credencial_de_acesso,
|
|
2008
|
-
parametros_de_consulta: parametros,
|
|
2009
|
-
formato_da_resposta: "json",
|
|
2010
|
-
}, opcoes_da_chamada);
|
|
2011
|
-
}
|
|
2012
|
-
/**
|
|
2013
|
-
* Busca conflitos de sincronização por filtro
|
|
2014
|
-
*
|
|
2015
|
-
* Exige só uma sessão válida (qualquer pessoa logada no portal). Devolve os conflitos não excluídos que casam com o filtro, até 50 por página (`pagina`, a partir de 1, padrão 1), dos mais novos para os mais antigos. `produto_id` e `campo` são exatos; `resolvido` separa pendentes (`false`) e resolvidos (`true`).
|
|
2016
|
-
*
|
|
2017
|
-
* `GET /produto_conflito_sincronizacao/filtro`
|
|
2018
|
-
*/
|
|
2019
|
-
export function buscar_pelo_filtro_produto_conflito_sincronizacao(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
2020
|
-
return chamar_servico({
|
|
2021
|
-
servico: SERVICO_DESTA_API,
|
|
2022
|
-
metodo_http: "GET",
|
|
2023
|
-
caminho_da_rota: "/produto_conflito_sincronizacao/filtro",
|
|
2024
|
-
credencial_de_acesso,
|
|
2025
|
-
parametros_de_consulta: parametros,
|
|
2026
|
-
formato_da_resposta: "json",
|
|
2027
|
-
}, opcoes_da_chamada);
|
|
2028
|
-
}
|
|
2029
|
-
/**
|
|
2030
|
-
* Busca um conflito de sincronização pelo id
|
|
2031
|
-
*
|
|
2032
|
-
* Exige só uma sessão válida (qualquer pessoa logada no portal). Conflito excluído não é encontrado. Traz SKU e nome do produto.
|
|
2033
|
-
*
|
|
2034
|
-
* `GET /produto_conflito_sincronizacao/{id}`
|
|
2035
|
-
*/
|
|
2036
|
-
export function buscar_pelo_id_produto_conflito_sincronizacao(credencial_de_acesso, id, opcoes_da_chamada) {
|
|
2037
|
-
return chamar_servico({
|
|
2038
|
-
servico: SERVICO_DESTA_API,
|
|
2039
|
-
metodo_http: "GET",
|
|
2040
|
-
caminho_da_rota: `/produto_conflito_sincronizacao/${codificar_parametro_de_caminho(id)}`,
|
|
2041
|
-
credencial_de_acesso,
|
|
2042
|
-
formato_da_resposta: "json",
|
|
2043
|
-
}, opcoes_da_chamada);
|
|
2044
|
-
}
|
|
2045
|
-
/**
|
|
2046
|
-
* Resolve um conflito de sincronização
|
|
2047
|
-
*
|
|
2048
|
-
* Exige a permissão `editar` no módulo `Configuracoes` do perfil de quem chama (administrador e master têm tudo). Resolve um conflito pendente: `resolucao` `local` mantém o valor do portal e `api` aplica o valor da API no produto.
|
|
2049
|
-
*
|
|
2050
|
-
* `PATCH /produto_conflito_sincronizacao/{id}`
|
|
2051
|
-
*/
|
|
2052
|
-
export function atualizar_pelo_id_produto_conflito_sincronizacao(credencial_de_acesso, id, corpo_da_requisicao, opcoes_da_chamada) {
|
|
2053
|
-
return chamar_servico({
|
|
2054
|
-
servico: SERVICO_DESTA_API,
|
|
2055
|
-
metodo_http: "PATCH",
|
|
2056
|
-
caminho_da_rota: `/produto_conflito_sincronizacao/${codificar_parametro_de_caminho(id)}`,
|
|
2057
|
-
credencial_de_acesso,
|
|
2058
|
-
corpo_json: corpo_da_requisicao,
|
|
2059
|
-
formato_da_resposta: "json",
|
|
2060
|
-
}, opcoes_da_chamada);
|
|
2061
|
-
}
|
|
2062
|
-
/**
|
|
2063
|
-
* Exclui um conflito de sincronização
|
|
2064
|
-
*
|
|
2065
|
-
* 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.
|
|
2066
|
-
*
|
|
2067
|
-
* `DELETE /produto_conflito_sincronizacao/{id}`
|
|
2068
|
-
*/
|
|
2069
|
-
export function deletar_pelo_id_produto_conflito_sincronizacao(credencial_de_acesso, id, opcoes_da_chamada) {
|
|
2070
|
-
return chamar_servico({
|
|
2071
|
-
servico: SERVICO_DESTA_API,
|
|
2072
|
-
metodo_http: "DELETE",
|
|
2073
|
-
caminho_da_rota: `/produto_conflito_sincronizacao/${codificar_parametro_de_caminho(id)}`,
|
|
2074
|
-
credencial_de_acesso,
|
|
2075
|
-
formato_da_resposta: "sem_conteudo",
|
|
2076
|
-
}, opcoes_da_chamada);
|
|
2077
|
-
}
|
|
2078
1728
|
/**
|
|
2079
1729
|
* Busca as embalagens e os componentes de um produto
|
|
2080
1730
|
*
|
|
@@ -2092,89 +1742,6 @@ export function buscar_pelo_filtro_produto_estrutura(credencial_de_acesso, param
|
|
|
2092
1742
|
formato_da_resposta: "json",
|
|
2093
1743
|
}, opcoes_da_chamada);
|
|
2094
1744
|
}
|
|
2095
|
-
/**
|
|
2096
|
-
* Importa ou sincroniza produtos do Tiny pelo SKU
|
|
2097
|
-
*
|
|
2098
|
-
* Exige a permissão `criar` no módulo `Configuracoes` do perfil de quem chama (administrador e master têm tudo). Importa no portal os produtos do Tiny pelos `skus` (1 a 100 por vez; vazios e repetidos são descartados). Produto novo é criado; produto que já existe é atualizado, e diferença de preço ou estoque em produto com preço definido no portal vira conflito de sincronização. Responde 200 com o resultado de cada SKU (`criado`, `atualizado`, `conflito` ou `falha`) e os totais. Até 10 chamadas por minuto por pessoa.
|
|
2099
|
-
*
|
|
2100
|
-
* `POST /produto_termotubos`
|
|
2101
|
-
*/
|
|
2102
|
-
export function criar_produto_termotubos(credencial_de_acesso, corpo_da_requisicao, opcoes_da_chamada) {
|
|
2103
|
-
return chamar_servico({
|
|
2104
|
-
servico: SERVICO_DESTA_API,
|
|
2105
|
-
metodo_http: "POST",
|
|
2106
|
-
caminho_da_rota: "/produto_termotubos",
|
|
2107
|
-
credencial_de_acesso,
|
|
2108
|
-
corpo_json: corpo_da_requisicao,
|
|
2109
|
-
formato_da_resposta: "json",
|
|
2110
|
-
}, opcoes_da_chamada);
|
|
2111
|
-
}
|
|
2112
|
-
/**
|
|
2113
|
-
* Busca produtos no catálogo da Termotubos (Tiny)
|
|
2114
|
-
*
|
|
2115
|
-
* Exige a permissão `ver` no módulo `Configuracoes` do perfil de quem chama (administrador e master têm tudo). Consulta o catálogo do Tiny pela API da Termotubos para importar produtos no portal. `busca` aceita SKUs separados por vírgula, ponto e vírgula ou espaço; termo terminado em `*` busca pelo prefixo (ex.: `B68*`). `apenas_ativos` filtra; `pagina` começa em 1 e `por_pagina` tem padrão 20 e vai de 1 a 50 (vale também para a busca por termos, paginada no servidor com `tem_mais`, `total_paginas` e `total_registros`). Cada item diz se já existe no portal (`ja_existe`). Termos inválidos voltam em `termos_invalidos`; `truncado: true` indica que a busca por prefixo foi cortada. Até 30 chamadas por minuto por pessoa.
|
|
2116
|
-
*
|
|
2117
|
-
* `GET /produto_termotubos/filtro`
|
|
2118
|
-
*/
|
|
2119
|
-
export function buscar_pelo_filtro_produto_termotubos(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
2120
|
-
return chamar_servico({
|
|
2121
|
-
servico: SERVICO_DESTA_API,
|
|
2122
|
-
metodo_http: "GET",
|
|
2123
|
-
caminho_da_rota: "/produto_termotubos/filtro",
|
|
2124
|
-
credencial_de_acesso,
|
|
2125
|
-
parametros_de_consulta: parametros,
|
|
2126
|
-
formato_da_resposta: "json",
|
|
2127
|
-
}, opcoes_da_chamada);
|
|
2128
|
-
}
|
|
2129
|
-
/**
|
|
2130
|
-
* Status da sincronização do catálogo com o Tiny
|
|
2131
|
-
*
|
|
2132
|
-
* Exige a permissão `ver` no módulo `Configuracoes`. Devolve a sincronização em andamento ou a última que terminou: `etapa` (`lendo` ou `gravando`), `gravados` de `total`, `cancelada`, `erro` e o `resumo` (conferidos, criados, atualizados, conflitos e falhas).
|
|
2133
|
-
*
|
|
2134
|
-
* `GET /produto_termotubos/sincronizacao`
|
|
2135
|
-
*/
|
|
2136
|
-
export function buscar_sincronizacao_produto_termotubos(credencial_de_acesso, opcoes_da_chamada) {
|
|
2137
|
-
return chamar_servico({
|
|
2138
|
-
servico: SERVICO_DESTA_API,
|
|
2139
|
-
metodo_http: "GET",
|
|
2140
|
-
caminho_da_rota: "/produto_termotubos/sincronizacao",
|
|
2141
|
-
credencial_de_acesso,
|
|
2142
|
-
formato_da_resposta: "json",
|
|
2143
|
-
}, opcoes_da_chamada);
|
|
2144
|
-
}
|
|
2145
|
-
/**
|
|
2146
|
-
* Inicia a sincronização do catálogo com o Tiny em segundo plano
|
|
2147
|
-
*
|
|
2148
|
-
* Exige a permissão `criar` no módulo `Configuracoes`. Lê o catálogo do Tiny e grava no portal o que é novo ou mudou, em segundo plano no servidor: a tela pode ser fechada. `apenas_ativos` lê só os produtos ativos. Responde 202 com o status inicial; acompanhe por `GET /produto_termotubos/sincronizacao`. O status fica em memória e se perde se o servidor reiniciar.
|
|
2149
|
-
*
|
|
2150
|
-
* `POST /produto_termotubos/sincronizacao`
|
|
2151
|
-
*/
|
|
2152
|
-
export function iniciar_sincronizacao_produto_termotubos(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
2153
|
-
return chamar_servico({
|
|
2154
|
-
servico: SERVICO_DESTA_API,
|
|
2155
|
-
metodo_http: "POST",
|
|
2156
|
-
caminho_da_rota: "/produto_termotubos/sincronizacao",
|
|
2157
|
-
credencial_de_acesso,
|
|
2158
|
-
parametros_de_consulta: parametros,
|
|
2159
|
-
formato_da_resposta: "json",
|
|
2160
|
-
}, opcoes_da_chamada);
|
|
2161
|
-
}
|
|
2162
|
-
/**
|
|
2163
|
-
* Cancela a sincronização do catálogo em andamento
|
|
2164
|
-
*
|
|
2165
|
-
* Exige a permissão `excluir` no módulo `Configuracoes`. Para depois do lote em gravação; o que já foi gravado fica.
|
|
2166
|
-
*
|
|
2167
|
-
* `DELETE /produto_termotubos/sincronizacao`
|
|
2168
|
-
*/
|
|
2169
|
-
export function cancelar_sincronizacao_produto_termotubos(credencial_de_acesso, opcoes_da_chamada) {
|
|
2170
|
-
return chamar_servico({
|
|
2171
|
-
servico: SERVICO_DESTA_API,
|
|
2172
|
-
metodo_http: "DELETE",
|
|
2173
|
-
caminho_da_rota: "/produto_termotubos/sincronizacao",
|
|
2174
|
-
credencial_de_acesso,
|
|
2175
|
-
formato_da_resposta: "sem_conteudo",
|
|
2176
|
-
}, opcoes_da_chamada);
|
|
2177
|
-
}
|
|
2178
1745
|
/**
|
|
2179
1746
|
* Busca os dados internos de um produto no Tiny
|
|
2180
1747
|
*
|
|
@@ -2243,54 +1810,6 @@ export function buscar_informacoes_paginador_rastreamento(credencial_de_acesso,
|
|
|
2243
1810
|
formato_da_resposta: "json",
|
|
2244
1811
|
}, opcoes_da_chamada);
|
|
2245
1812
|
}
|
|
2246
|
-
/**
|
|
2247
|
-
* Status da sincronização das entregas
|
|
2248
|
-
*
|
|
2249
|
-
* Só colaborador interno com `ver` no módulo `Pedidos`. Devolve a sincronização em andamento ou a última que terminou: `rodando`, `pagina` de `total_paginas` (páginas da API), `progresso` (percentual), `gravados`, `cancelada`, `concluida`, `erro`, `iniciada_em` e `terminada_em`.
|
|
2250
|
-
*
|
|
2251
|
-
* `GET /rastreamento/sincronizacao`
|
|
2252
|
-
*/
|
|
2253
|
-
export function buscar_sincronizacao_rastreamento(credencial_de_acesso, opcoes_da_chamada) {
|
|
2254
|
-
return chamar_servico({
|
|
2255
|
-
servico: SERVICO_DESTA_API,
|
|
2256
|
-
metodo_http: "GET",
|
|
2257
|
-
caminho_da_rota: "/rastreamento/sincronizacao",
|
|
2258
|
-
credencial_de_acesso,
|
|
2259
|
-
formato_da_resposta: "json",
|
|
2260
|
-
}, opcoes_da_chamada);
|
|
2261
|
-
}
|
|
2262
|
-
/**
|
|
2263
|
-
* Inicia a sincronização das entregas em segundo plano
|
|
2264
|
-
*
|
|
2265
|
-
* Só colaborador interno com `ver` no módulo `Pedidos`. Traz as entregas (expedições) da API de logística da Termotubos para a tabela `rastreamento`, sem filtro de data (histórico inteiro), lote por lote, em segundo plano no servidor: a tela pode ser fechada. Responde 202 com o status inicial; acompanhe por `GET /rastreamento/sincronizacao`. O status fica em memória e se perde se o servidor reiniciar.
|
|
2266
|
-
*
|
|
2267
|
-
* `POST /rastreamento/sincronizacao`
|
|
2268
|
-
*/
|
|
2269
|
-
export function iniciar_sincronizacao_rastreamento(credencial_de_acesso, opcoes_da_chamada) {
|
|
2270
|
-
return chamar_servico({
|
|
2271
|
-
servico: SERVICO_DESTA_API,
|
|
2272
|
-
metodo_http: "POST",
|
|
2273
|
-
caminho_da_rota: "/rastreamento/sincronizacao",
|
|
2274
|
-
credencial_de_acesso,
|
|
2275
|
-
formato_da_resposta: "json",
|
|
2276
|
-
}, opcoes_da_chamada);
|
|
2277
|
-
}
|
|
2278
|
-
/**
|
|
2279
|
-
* Cancela a sincronização das entregas em andamento
|
|
2280
|
-
*
|
|
2281
|
-
* Só colaborador interno com `ver` no módulo `Pedidos`. Para antes do próximo lote; o que já foi gravado fica.
|
|
2282
|
-
*
|
|
2283
|
-
* `DELETE /rastreamento/sincronizacao`
|
|
2284
|
-
*/
|
|
2285
|
-
export function cancelar_sincronizacao_rastreamento(credencial_de_acesso, opcoes_da_chamada) {
|
|
2286
|
-
return chamar_servico({
|
|
2287
|
-
servico: SERVICO_DESTA_API,
|
|
2288
|
-
metodo_http: "DELETE",
|
|
2289
|
-
caminho_da_rota: "/rastreamento/sincronizacao",
|
|
2290
|
-
credencial_de_acesso,
|
|
2291
|
-
formato_da_resposta: "sem_conteudo",
|
|
2292
|
-
}, opcoes_da_chamada);
|
|
2293
|
-
}
|
|
2294
1813
|
/**
|
|
2295
1814
|
* Busca uma entrega pelo id da logística
|
|
2296
1815
|
*
|
|
@@ -2307,123 +1826,6 @@ export function buscar_pelo_id_rastreamento(credencial_de_acesso, id, opcoes_da_
|
|
|
2307
1826
|
formato_da_resposta: "json",
|
|
2308
1827
|
}, opcoes_da_chamada);
|
|
2309
1828
|
}
|
|
2310
|
-
/**
|
|
2311
|
-
* Lista os valores auxiliares paginados
|
|
2312
|
-
*
|
|
2313
|
-
* Exige sessão. Ordenado por tabela, campo e label. `tabela` e `campo` filtram (opcionais). Paginado com 50 itens por página (fixo); `pagina` começa em 1. A resposta traz `itens`, `total`, `pagina` e `tamanho`.
|
|
2314
|
-
*
|
|
2315
|
-
* `GET /tabela_auxiliar`
|
|
2316
|
-
*/
|
|
2317
|
-
export function buscar_paginador_tabela_auxiliar(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
2318
|
-
return chamar_servico({
|
|
2319
|
-
servico: SERVICO_DESTA_API,
|
|
2320
|
-
metodo_http: "GET",
|
|
2321
|
-
caminho_da_rota: "/tabela_auxiliar",
|
|
2322
|
-
credencial_de_acesso,
|
|
2323
|
-
parametros_de_consulta: parametros,
|
|
2324
|
-
formato_da_resposta: "json",
|
|
2325
|
-
}, opcoes_da_chamada);
|
|
2326
|
-
}
|
|
2327
|
-
/**
|
|
2328
|
-
* Cadastra um valor auxiliar
|
|
2329
|
-
*
|
|
2330
|
-
* Exige o módulo `Configuracoes` (criar). Valor de um campo que chega das integrações sem cadastro próprio (ex.: `tabela=produto`, `campo=marca_tiny`). `tabela`, `campo` e `label` obrigatórios; o trio é único. A sincronização do catálogo preenche a tabela sozinha.
|
|
2331
|
-
*
|
|
2332
|
-
* `POST /tabela_auxiliar`
|
|
2333
|
-
*/
|
|
2334
|
-
export function criar_tabela_auxiliar(credencial_de_acesso, corpo_da_requisicao, opcoes_da_chamada) {
|
|
2335
|
-
return chamar_servico({
|
|
2336
|
-
servico: SERVICO_DESTA_API,
|
|
2337
|
-
metodo_http: "POST",
|
|
2338
|
-
caminho_da_rota: "/tabela_auxiliar",
|
|
2339
|
-
credencial_de_acesso,
|
|
2340
|
-
corpo_json: corpo_da_requisicao,
|
|
2341
|
-
formato_da_resposta: "json",
|
|
2342
|
-
}, opcoes_da_chamada);
|
|
2343
|
-
}
|
|
2344
|
-
/**
|
|
2345
|
-
* Lista básica de valores de um campo para seleção
|
|
2346
|
-
*
|
|
2347
|
-
* Exige sessão. `tabela` e `campo` obrigatórios (ex.: `produto` e `marca_tiny`). Devolve só id e label, em ordem alfabética. `busca` procura no label. `tamanho` tem padrão 10 e vai de 1 a 50; `pagina` começa em 1. A resposta traz `itens`, `total`, `pagina` e `tamanho`.
|
|
2348
|
-
*
|
|
2349
|
-
* `GET /tabela_auxiliar/autocomplete`
|
|
2350
|
-
*/
|
|
2351
|
-
export function buscar_auto_complete_tabela_auxiliar(credencial_de_acesso, parametros, opcoes_da_chamada) {
|
|
2352
|
-
return chamar_servico({
|
|
2353
|
-
servico: SERVICO_DESTA_API,
|
|
2354
|
-
metodo_http: "GET",
|
|
2355
|
-
caminho_da_rota: "/tabela_auxiliar/autocomplete",
|
|
2356
|
-
credencial_de_acesso,
|
|
2357
|
-
parametros_de_consulta: parametros,
|
|
2358
|
-
formato_da_resposta: "json",
|
|
2359
|
-
}, opcoes_da_chamada);
|
|
2360
|
-
}
|
|
2361
|
-
/**
|
|
2362
|
-
* Busca valores auxiliares por filtro
|
|
2363
|
-
*
|
|
2364
|
-
* Exige sessão. Até 50 por página (`pagina`, a partir de 1, padrão 1). `tabela` e `campo` são exatos; `label` procura o trecho.
|
|
2365
|
-
*
|
|
2366
|
-
* `GET /tabela_auxiliar/filtro`
|
|
2367
|
-
*/
|
|
2368
|
-
export function buscar_pelo_filtro_tabela_auxiliar(credencial_de_acesso, parametros = {}, opcoes_da_chamada) {
|
|
2369
|
-
return chamar_servico({
|
|
2370
|
-
servico: SERVICO_DESTA_API,
|
|
2371
|
-
metodo_http: "GET",
|
|
2372
|
-
caminho_da_rota: "/tabela_auxiliar/filtro",
|
|
2373
|
-
credencial_de_acesso,
|
|
2374
|
-
parametros_de_consulta: parametros,
|
|
2375
|
-
formato_da_resposta: "json",
|
|
2376
|
-
}, opcoes_da_chamada);
|
|
2377
|
-
}
|
|
2378
|
-
/**
|
|
2379
|
-
* Busca um valor auxiliar pelo id
|
|
2380
|
-
*
|
|
2381
|
-
* Exige sessão. Registro excluído não é encontrado.
|
|
2382
|
-
*
|
|
2383
|
-
* `GET /tabela_auxiliar/{id}`
|
|
2384
|
-
*/
|
|
2385
|
-
export function buscar_pelo_id_tabela_auxiliar(credencial_de_acesso, id, opcoes_da_chamada) {
|
|
2386
|
-
return chamar_servico({
|
|
2387
|
-
servico: SERVICO_DESTA_API,
|
|
2388
|
-
metodo_http: "GET",
|
|
2389
|
-
caminho_da_rota: `/tabela_auxiliar/${codificar_parametro_de_caminho(id)}`,
|
|
2390
|
-
credencial_de_acesso,
|
|
2391
|
-
formato_da_resposta: "json",
|
|
2392
|
-
}, opcoes_da_chamada);
|
|
2393
|
-
}
|
|
2394
|
-
/**
|
|
2395
|
-
* Atualiza o label de um valor auxiliar
|
|
2396
|
-
*
|
|
2397
|
-
* Exige o módulo `Configuracoes` (editar). Muda só o `label`; campo ausente mantém o valor atual.
|
|
2398
|
-
*
|
|
2399
|
-
* `PATCH /tabela_auxiliar/{id}`
|
|
2400
|
-
*/
|
|
2401
|
-
export function atualizar_pelo_id_tabela_auxiliar(credencial_de_acesso, id, corpo_da_requisicao, opcoes_da_chamada) {
|
|
2402
|
-
return chamar_servico({
|
|
2403
|
-
servico: SERVICO_DESTA_API,
|
|
2404
|
-
metodo_http: "PATCH",
|
|
2405
|
-
caminho_da_rota: `/tabela_auxiliar/${codificar_parametro_de_caminho(id)}`,
|
|
2406
|
-
credencial_de_acesso,
|
|
2407
|
-
corpo_json: corpo_da_requisicao,
|
|
2408
|
-
formato_da_resposta: "json",
|
|
2409
|
-
}, opcoes_da_chamada);
|
|
2410
|
-
}
|
|
2411
|
-
/**
|
|
2412
|
-
* Exclui um valor auxiliar
|
|
2413
|
-
*
|
|
2414
|
-
* Exige o módulo `Configuracoes` (excluir). A exclusão é lógica: o registro some das leituras, mas a linha não é apagada.
|
|
2415
|
-
*
|
|
2416
|
-
* `DELETE /tabela_auxiliar/{id}`
|
|
2417
|
-
*/
|
|
2418
|
-
export function deletar_pelo_id_tabela_auxiliar(credencial_de_acesso, id, opcoes_da_chamada) {
|
|
2419
|
-
return chamar_servico({
|
|
2420
|
-
servico: SERVICO_DESTA_API,
|
|
2421
|
-
metodo_http: "DELETE",
|
|
2422
|
-
caminho_da_rota: `/tabela_auxiliar/${codificar_parametro_de_caminho(id)}`,
|
|
2423
|
-
credencial_de_acesso,
|
|
2424
|
-
formato_da_resposta: "sem_conteudo",
|
|
2425
|
-
}, opcoes_da_chamada);
|
|
2426
|
-
}
|
|
2427
1829
|
/**
|
|
2428
1830
|
* Lista as unidades paginadas
|
|
2429
1831
|
*
|
|
@@ -2511,7 +1913,7 @@ export function buscar_pelo_id_unidade(credencial_de_acesso, id, opcoes_da_chama
|
|
|
2511
1913
|
/**
|
|
2512
1914
|
* Atualiza uma unidade
|
|
2513
1915
|
*
|
|
2514
|
-
* Exige só uma sessão válida (qualquer pessoa logada no portal). Exige também a permissão `editar` no módulo `Configuracoes`. Só colaborador interno muda `matriz_id`, `status`, `limite_faturamento`, `aviso_limite_percentual` e `cliente_id` (envie `null` em `matriz_id`, `limite_faturamento` ou `cliente_id` para apagar). `cliente_id` vincula a unidade a um cliente, que passa a ver a unidade no portal. Uma unidade com filiais não vira filial e não pode ser matriz de si mesma. Unidade fora da sessão responde 404; o CNPJ não muda. Atualização parcial: campo ausente mantém o valor atual. Campos: `razao_social` até 150 caracteres; `nome_fantasia` até 150 caracteres; `inscricao_estadual` até 30 caracteres; `inscricao_municipal` até 30 caracteres; `telefone_comercial` com 10 ou 11 dígitos; `email_comercial` precisa ser válido; `site` é o endereço do site (URL válida); `responsavel_principal` até 150 caracteres; `contato_financeiro` até 150 caracteres; `contato_compras` até 150 caracteres.
|
|
1916
|
+
* Exige só uma sessão válida (qualquer pessoa logada no portal). Exige também a permissão `editar` no módulo `Configuracoes`. Só colaborador interno muda `matriz_id`, `status`, `limite_faturamento`, `aviso_limite_percentual` e `cliente_id` (envie `null` em `matriz_id`, `limite_faturamento` ou `cliente_id` para apagar). `cliente_id` vincula a unidade a um cliente, que passa a ver a unidade no portal. `imagem` é a logo da unidade: o endereço público devolvido por `POST /arquivo` com `pasta=unidades` (TermoBucket); envie `null` para tirar a imagem, e a anterior sai do TermoBucket quando nenhuma outra unidade a usa. Uma unidade com filiais não vira filial e não pode ser matriz de si mesma. Unidade fora da sessão responde 404; o CNPJ não muda. Atualização parcial: campo ausente mantém o valor atual. Campos: `razao_social` até 150 caracteres; `nome_fantasia` até 150 caracteres; `inscricao_estadual` até 30 caracteres; `inscricao_municipal` até 30 caracteres; `telefone_comercial` com 10 ou 11 dígitos; `email_comercial` precisa ser válido; `site` é o endereço do site (URL válida); `responsavel_principal` até 150 caracteres; `contato_financeiro` até 150 caracteres; `contato_compras` até 150 caracteres.
|
|
2515
1917
|
*
|
|
2516
1918
|
* `PATCH /unidade/{id}`
|
|
2517
1919
|
*/
|