From 806b6241ed10e9a0f4d916fe28b72842cc8d3afe Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Thu, 30 Apr 2026 12:38:30 -0300 Subject: [PATCH 01/21] =?UTF-8?q?Atualiza=C3=A7=C3=B5es=20necess=C3=A1rios?= =?UTF-8?q?=20para=20funcionamento=20do=20Flash=20de=20Perdas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash_perdas/flash_perdas.module.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/flash_perdas/flash_perdas.module.ts b/src/flash_perdas/flash_perdas.module.ts index d1cb257..e009167 100644 --- a/src/flash_perdas/flash_perdas.module.ts +++ b/src/flash_perdas/flash_perdas.module.ts @@ -9,7 +9,7 @@ export default moduleFactory label: "Flash de Perdas", icon: "bar-chart", queries: { - flash: { + flashPerdas: { name: "Flash de Perdas", display: { type: "flash", @@ -79,11 +79,11 @@ export default moduleFactory params: ["data_perda"], }, }, - entrypoint: "flash", + entrypoint: "flashPerdas", }) .withImplementations({ C5: { - flash: (args) => { + flashPerdas: (args) => { return { sql: /*sql*/ ` select @@ -114,7 +114,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, }; }, }, - C5_big: {flash: (args) => { + C5_big: {flashPerdas: (args) => { return { sql: /*sql*/ ` SELECT @@ -193,9 +193,9 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, `,}; }, }, - C5_mambo: {flash: (args) => { + C5_mambo: {flashPerdas: (args) => { return { sql: /*sql*/ ``,}; }, }, - }) \ No newline at end of file + }) From 45dcef08d9fd90ebc4aecf556048977501d4c063 Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Thu, 30 Apr 2026 12:56:18 -0300 Subject: [PATCH 02/21] =?UTF-8?q?Desfazendo=20altera=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash_perdas/flash_perdas.module.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/flash_perdas/flash_perdas.module.ts b/src/flash_perdas/flash_perdas.module.ts index e009167..90733dd 100644 --- a/src/flash_perdas/flash_perdas.module.ts +++ b/src/flash_perdas/flash_perdas.module.ts @@ -9,7 +9,7 @@ export default moduleFactory label: "Flash de Perdas", icon: "bar-chart", queries: { - flashPerdas: { + flash: { name: "Flash de Perdas", display: { type: "flash", @@ -79,11 +79,11 @@ export default moduleFactory params: ["data_perda"], }, }, - entrypoint: "flashPerdas", + entrypoint: "flash", }) .withImplementations({ C5: { - flashPerdas: (args) => { + flash: (args) => { return { sql: /*sql*/ ` select @@ -114,7 +114,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, }; }, }, - C5_big: {flashPerdas: (args) => { + C5_big: {flash: (args) => { return { sql: /*sql*/ ` SELECT @@ -193,7 +193,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, `,}; }, }, - C5_mambo: {flashPerdas: (args) => { + C5_mambo: {flash: (args) => { return { sql: /*sql*/ ``,}; }, From f570c43f0ccf77ec73fc29e67f217c38df69d4f0 Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Thu, 30 Apr 2026 13:00:17 -0300 Subject: [PATCH 03/21] =?UTF-8?q?Separa=C3=A7=C3=A3o=20do=20flash=20de=20v?= =?UTF-8?q?endas=20e=20do=20de=20Perdas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash_perdas/flash_perdas.module.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/flash_perdas/flash_perdas.module.ts b/src/flash_perdas/flash_perdas.module.ts index 90733dd..e009167 100644 --- a/src/flash_perdas/flash_perdas.module.ts +++ b/src/flash_perdas/flash_perdas.module.ts @@ -9,7 +9,7 @@ export default moduleFactory label: "Flash de Perdas", icon: "bar-chart", queries: { - flash: { + flashPerdas: { name: "Flash de Perdas", display: { type: "flash", @@ -79,11 +79,11 @@ export default moduleFactory params: ["data_perda"], }, }, - entrypoint: "flash", + entrypoint: "flashPerdas", }) .withImplementations({ C5: { - flash: (args) => { + flashPerdas: (args) => { return { sql: /*sql*/ ` select @@ -114,7 +114,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, }; }, }, - C5_big: {flash: (args) => { + C5_big: {flashPerdas: (args) => { return { sql: /*sql*/ ` SELECT @@ -193,7 +193,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, `,}; }, }, - C5_mambo: {flash: (args) => { + C5_mambo: {flashPerdas: (args) => { return { sql: /*sql*/ ``,}; }, From 024f840410d66a8df33e40593dc478e1642f6a08 Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Tue, 5 May 2026 09:15:13 -0300 Subject: [PATCH 04/21] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20de=20procedure=20?= =?UTF-8?q?do=20Flash=20de=20vendas.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20260430000014_prc_flash_atualiza_venda_dono.sql} | 12 ++++++------ src/flash/flash.module.ts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) rename migrations/C5_big/{20260430000014_prc_flash_atualiza_venda.sql => 20260430000014_prc_flash_atualiza_venda_dono.sql} (82%) diff --git a/migrations/C5_big/20260430000014_prc_flash_atualiza_venda.sql b/migrations/C5_big/20260430000014_prc_flash_atualiza_venda_dono.sql similarity index 82% rename from migrations/C5_big/20260430000014_prc_flash_atualiza_venda.sql rename to migrations/C5_big/20260430000014_prc_flash_atualiza_venda_dono.sql index 7eef246..3bb8289 100644 --- a/migrations/C5_big/20260430000014_prc_flash_atualiza_venda.sql +++ b/migrations/C5_big/20260430000014_prc_flash_atualiza_venda_dono.sql @@ -1,6 +1,6 @@ -- +goose Up -- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA ( +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO_DONO ( p_data_inicial IN DATE, p_data_final IN DATE, p_empresa_ini IN NUMBER DEFAULT NULL, @@ -8,7 +8,7 @@ CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA ( ) AS v_inicio_execucao DATE := SYSDATE; BEGIN - DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_VENDA em ' || TO_CHAR(v_inicio_execucao, 'DD/MM/YYYY HH24:MI:SS')); + DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_VENDA_DONO_DONO em ' || TO_CHAR(v_inicio_execucao, 'DD/MM/YYYY HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE('Período: ' || TO_CHAR(p_data_inicial, 'DD/MM/YYYY') || ' até ' || TO_CHAR(p_data_final, 'DD/MM/YYYY')); FOR r IN ( @@ -58,12 +58,12 @@ BEGIN p_data_final => p_data_final ); - DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_VENDA finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); + DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_VENDA_DONO finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE('Tempo em segundos: ' || ROUND((SYSDATE - v_inicio_execucao) * 86400, 2)); EXCEPTION WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_VENDA: ' || SQLERRM); + DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_VENDA_DONO: ' || SQLERRM); RAISE; END; -- +goose StatementEnd @@ -73,9 +73,9 @@ END; DECLARE v_count NUMBER; BEGIN - SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_VENDA' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; + SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_VENDA_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA'; + EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO'; END IF; END; -- +goose StatementEnd diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index fdd54fb..7f11751 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -212,7 +212,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, { name: "Procedure que atualiza os dados do flash", command: /*sql*/ `BEGIN - PRC_FLASH_ATUALIZA_VENDA( + PRC_FLASH_ATUALIZA_VENDA_DONO( p_data_inicial => TRUNC(SYSDATE) - 30, p_data_final => TRUNC(SYSDATE), p_empresa_ini => 1, From 1eb47ec0b8f330ec21e2b8e8229bc065685696fb Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Wed, 6 May 2026 14:27:23 -0300 Subject: [PATCH 05/21] =?UTF-8?q?Altera=C3=A7=C3=A3o=20na=20query=20de=20V?= =?UTF-8?q?endas=20para=20ter=20o=20c=C3=B3digo=20da=20loja?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash/flash.module.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 7f11751..d53eac4 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -119,6 +119,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, sql: /*sql*/ ` SELECT 'Lojas' AS canalapp, + x.nomeempresaapp AS nomeempresaapp, CASE WHEN GROUPING(x.nomeempresaapp) = 1 THEN 1 @@ -189,7 +190,10 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, ) ) x GROUP BY - ROLLUP(x.nomeempresaapp) + GROUPING SETS ( + (x.codigo, x.nomeempresaapp), + () + ) `,}; }, }, From ac36ea310d494f5dd4599ce55385d0b655d15481 Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Wed, 6 May 2026 14:29:36 -0300 Subject: [PATCH 06/21] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20de=20query?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash/flash.module.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index d53eac4..8d5f819 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -119,10 +119,10 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, sql: /*sql*/ ` SELECT 'Lojas' AS canalapp, - + x.codigo AS cod_empresa, x.nomeempresaapp AS nomeempresaapp, CASE - WHEN GROUPING(x.nomeempresaapp) = 1 THEN 1 + WHEN GROUPING(x.codigo) = 1 THEN 1 ELSE 0 END AS is_total, SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes, From c1c8475ab1a5c610cc6049edb192ae9a8599f740 Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Wed, 6 May 2026 16:36:19 -0300 Subject: [PATCH 07/21] Query para retornar categorias em detalhes. --- src/flash/flash.module.ts | 269 +++++++++++++++++++++++++++++++++++++- 1 file changed, 268 insertions(+), 1 deletion(-) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 8d5f819..5e2a5d2 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -78,8 +78,77 @@ export default moduleFactory }, params: ["data_venda"], }, + flash_categorias: { + name: "Flash de Vendas por Categorias", + display: { + type: "flash", + settings: { + group_column: "categoriaapp", + total_indicator_column: "is_total", + null_label_key: "Geral", + }, + header: { + title_column: "categoriaapp", + value_column: "venda_dia", + value_format: "currency", + }, + rows: [ + { + label: "Meta Mês", + column: "meta_mes", + format: "currency_short", + }, + { + label: "Mês Atual", + column: "mes_atual", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_mes_atual", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_atual", + format: "percentage", + }, + { + label: "Mês Anterior", + column: "mes_anterior", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_mes_anterior", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_mes_anterior", + format: "percentage", + }, + { + label: "Ano Anterior", + column: "ano_anterior", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_ano_anterior", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_ano_anterior", + format: "percentage", + }, + ], + }, + params: ["data_venda", "codigo_categoria_pai", "cod_empresa"], + }, }, - entrypoint: "flash", + entrypoint: "flash" as "flash" | "flash_categorias", }) .withImplementations({ C5: { @@ -113,6 +182,27 @@ group by rollup(canalapp, nomeempresaapp) order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, }; }, + flash_categorias: (args) => { + return { + sql: /*sql*/ ` +select + 'Categorias' as categoriaapp, + 1 as is_total, + 0 as venda_dia, + 0 as meta_mes, + 0 as mes_atual, + 0 as dif_mes_atual, + 0 as variacao_atual, + 0 as mes_anterior, + 0 as dif_mes_anterior, + 0 as variacao_mes_anterior, + 0 as ano_anterior, + 0 as dif_ano_anterior, + 0 as variacao_ano_anterior +from dual +where 1 = 0`, + }; + }, }, C5_big: {flash: (args) => { return { @@ -196,8 +286,185 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, ) `,}; }, + flash_categorias: (args) => { + return { + sql: /*sql*/ ` + WITH params AS ( + SELECT + TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS data_venda, + ${args.codigo_categoria_pai} AS codigo_categoria_pai, + ${args.cod_empresa} AS cod_empresa + FROM dual + ), + nodo_pai_param AS ( + SELECT n.* + FROM tb_flash_nodo n + CROSS JOIN params p + WHERE p.codigo_categoria_pai IS NOT NULL + AND n.tipo_nodo = 'CATEGORIA' + AND n.codigo = p.codigo_categoria_pai + AND ( + p.cod_empresa IS NULL + OR n.cod_empresa = p.cod_empresa + ) + ), + nodos_filtrados AS ( + SELECT filho.* + FROM tb_flash_nodo filho + JOIN nodo_pai_param pai_param + ON pai_param.id_nodo = filho.id_nodo_pai + CROSS JOIN params p + WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO') + AND filho.ativo = 'S' + AND ( + p.cod_empresa IS NULL + OR filho.cod_empresa = p.cod_empresa + ) + + UNION ALL + + SELECT n.* + FROM tb_flash_nodo n + CROSS JOIN params p + WHERE p.codigo_categoria_pai IS NULL + AND n.tipo_nodo = 'CATEGORIA' + AND n.ativo = 'S' + AND ( + p.cod_empresa IS NULL + OR n.cod_empresa = p.cod_empresa + ) + AND n.nivel = ( + SELECT MIN(n2.nivel) + FROM tb_flash_nodo n2 + WHERE n2.tipo_nodo = 'CATEGORIA' + AND n2.ativo = 'S' + AND ( + p.cod_empresa IS NULL + OR n2.cod_empresa = p.cod_empresa + ) + ) + ) + SELECT + 'Categorias' AS canalapp, + + x.codigo AS cod_empresa, + + x.nomeempresaapp AS nomeempresaapp, + + CASE + WHEN GROUPING(x.codigo) = 1 THEN 1 + ELSE 0 + END AS is_total, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual, + + CASE + WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ( + ( + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) + / + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) + ) * 100 + ) - 100 + , 2) + END AS variacao_atual, + + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior, + + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior, + + CASE + WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ( + ( + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) + / + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) + ) * 100 + ) - 100 + , 2) + END AS variacao_mes_anterior, + + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior, + + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior, + + CASE + WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ( + ( + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) + / + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) + ) * 100 + ) - 100 + , 2) + END AS variacao_ano_anterior + + FROM ( + SELECT + cat.codigo AS codigo, + cat.nome AS nomeempresaapp, + r.valor_meta_efetiva, + r.valor_venda, + CASE + WHEN r.data_referencia BETWEEN TRUNC(p.data_venda, 'MM') AND p.data_venda + THEN 'ATUAL' + + WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -1) + AND ADD_MONTHS(p.data_venda, -1) + THEN 'MES_ANTERIOR' + + WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -12) + AND ADD_MONTHS(p.data_venda, -12) + THEN 'ANO_ANTERIOR' + END AS periodo + FROM tb_flash_nodo_resumo_venda r + JOIN nodos_filtrados cat + ON cat.id_nodo = r.id_nodo + CROSS JOIN params p + WHERE ( + r.data_referencia BETWEEN TRUNC(p.data_venda, 'MM') AND p.data_venda + + OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -1) + AND ADD_MONTHS(p.data_venda, -1) + + OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -12) + AND ADD_MONTHS(p.data_venda, -12) + ) + ) x + + GROUP BY + GROUPING SETS ( + (x.codigo, x.nomeempresaapp), + () + ) + + ORDER BY + is_total, + nomeempresaapp; + `,}; + }, }, C5_mambo: {flash: (args) => { + return { + sql: /*sql*/ ``,}; + }, + flash_categorias: (args) => { return { sql: /*sql*/ ``,}; }, From 10f6b5f022f677faf6520263017c3b2d49f0e372 Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Wed, 6 May 2026 16:58:13 -0300 Subject: [PATCH 08/21] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20da=20query=20de?= =?UTF-8?q?=20Venda=20para=20permitir=20apenas=20as=20empresas=20seleciona?= =?UTF-8?q?dos=20no=20App=20do=20Dono.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash/flash.module.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 5e2a5d2..164d673 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -271,6 +271,7 @@ where 1 = 0`, n.id_nodo = r.id_nodo WHERE n.tipo_nodo = 'EMPRESA' + and (n.cod_empresa in (${args.ctx_user_companies_for_module})) AND ( r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD') OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) @@ -303,6 +304,7 @@ where 1 = 0`, WHERE p.codigo_categoria_pai IS NOT NULL AND n.tipo_nodo = 'CATEGORIA' AND n.codigo = p.codigo_categoria_pai + and (n.cod_empresa in (${args.ctx_user_companies_for_module})) AND ( p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa @@ -329,6 +331,7 @@ where 1 = 0`, WHERE p.codigo_categoria_pai IS NULL AND n.tipo_nodo = 'CATEGORIA' AND n.ativo = 'S' + and (n.cod_empresa in (${args.ctx_user_companies_for_module})) AND ( p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa From f7900ca8f5b557264e1c757ca3cf41475c5e38aa Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Wed, 6 May 2026 17:52:57 -0300 Subject: [PATCH 09/21] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20da=20query=20do?= =?UTF-8?q?=20flash=20de=20perdas=20para=20a=20estrutura=20de=20empresas.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash_perdas/flash_perdas.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/flash_perdas/flash_perdas.module.ts b/src/flash_perdas/flash_perdas.module.ts index e009167..3f00857 100644 --- a/src/flash_perdas/flash_perdas.module.ts +++ b/src/flash_perdas/flash_perdas.module.ts @@ -174,7 +174,7 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, THEN 'ANO_ANTERIOR' END AS periodo FROM - tb_flash_nodo_resumo_venda r + tb_flash_nodo_resumo_perda r JOIN tb_flash_nodo n ON n.id_nodo = r.id_nodo From 2a1055708c5252c0f9bd06217326830e6150e979 Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Thu, 7 May 2026 10:55:03 -0300 Subject: [PATCH 10/21] =?UTF-8?q?Altera=C3=A7=C3=A3o=20na=20query=20do=20F?= =?UTF-8?q?lash=20categorias.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20260430000004_tb_flash_fato_venda.sql | 2 +- src/flash/flash.module.ts | 2 +- src/flash_perdas/flash_perdas.module.ts | 34 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/migrations/C5_big/20260430000004_tb_flash_fato_venda.sql b/migrations/C5_big/20260430000004_tb_flash_fato_venda.sql index 6027f81..2e261f5 100644 --- a/migrations/C5_big/20260430000004_tb_flash_fato_venda.sql +++ b/migrations/C5_big/20260430000004_tb_flash_fato_venda.sql @@ -23,7 +23,7 @@ BEGIN NRODIVISAO NUMBER, NROSEGMENTO NUMBER, NRO_TICKETS NUMBER(18,6), - VLR_IMP_VENDA NUMBER(18,6), + VLR_IMP_VNEDA NUMBER(18,6), QTDE_VENDA NUMBER(18,6), VLR_VENDA NUMBER(18,6), VL_TICKET_MEDIO NUMBER(18,6), diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 164d673..463669d 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -459,7 +459,7 @@ where 1 = 0`, ORDER BY is_total, - nomeempresaapp; + nomeempresaapp `,}; }, }, diff --git a/src/flash_perdas/flash_perdas.module.ts b/src/flash_perdas/flash_perdas.module.ts index 3f00857..01efb0c 100644 --- a/src/flash_perdas/flash_perdas.module.ts +++ b/src/flash_perdas/flash_perdas.module.ts @@ -198,4 +198,38 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, sql: /*sql*/ ``,}; }, }, + }).withSchedules({ + C5: [ + { + name: "Procedure que atualiza os dados do flash", + command: /*sql*/ `BEGIN + END`, + cron: "0 * * * *", + timeout_seconds: 2400, + }, + ], + C5_big: [ + { + name: "Procedure que atualiza os dados do flash", + command: /*sql*/ `BEGIN + PRC_FLASH_ATUALIZA_PERDA_DONO( + p_data_inicial => TRUNC(SYSDATE) - 30, + p_data_final => TRUNC(SYSDATE), + p_empresa_ini => 1, + p_empresa_fim => 10 + ); + END`, + cron: "0 * * * *", + timeout_seconds: 2400, + }, + ], + C5_mambo: [ + { + name: "Procedure que atualiza os dados do flash", + command: /*sql*/ `BEGIN + END`, + cron: "0 * * * *", + timeout_seconds: 2400, + }, + ], }) From bdc7e9bf26e625908c42ffc84b3cdfb4bc225351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonath=C3=A3=20Correa?= Date: Thu, 7 May 2026 11:17:12 -0300 Subject: [PATCH 11/21] =?UTF-8?q?Feat:=20Adicionando=20Flash=20Contribui?= =?UTF-8?q?=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...7000001_seq_tb_flash_fato_contribuicao.sql | 23 + ...60507000002_tb_flash_fato_contribuicao.sql | 111 +++++ ..._seq_tb_flash_nodo_resumo_contribuicao.sql | 23 + ...0010_tb_flash_nodo_resumo_contribuicao.sql | 89 ++++ ...11_prc_flash_carga_resumo_contribuicao.sql | 107 +++++ ...2_prc_flash_atualiza_contribuicao_dono.sql | 81 ++++ ...013_prc_flash_carga_dados_contribuicao.sql | 432 ++++++++++++++++++ ...7000014_tb_flash_meta_contribuicao_stg.sql | 73 +++ ...7000015_vw_flash_meta_contribuicao_stg.sql | 33 ++ .../flash_contribuicao.module.ts | 221 +++++++++ 10 files changed, 1193 insertions(+) create mode 100644 migrations/C5_big/20260507000001_seq_tb_flash_fato_contribuicao.sql create mode 100644 migrations/C5_big/20260507000002_tb_flash_fato_contribuicao.sql create mode 100644 migrations/C5_big/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql create mode 100644 migrations/C5_big/20260507000010_tb_flash_nodo_resumo_contribuicao.sql create mode 100644 migrations/C5_big/20260507000011_prc_flash_carga_resumo_contribuicao.sql create mode 100644 migrations/C5_big/20260507000012_prc_flash_atualiza_contribuicao_dono.sql create mode 100644 migrations/C5_big/20260507000013_prc_flash_carga_dados_contribuicao.sql create mode 100644 migrations/C5_big/20260507000014_tb_flash_meta_contribuicao_stg.sql create mode 100644 migrations/C5_big/20260507000015_vw_flash_meta_contribuicao_stg.sql create mode 100644 src/flash_contribuicao/flash_contribuicao.module.ts diff --git a/migrations/C5_big/20260507000001_seq_tb_flash_fato_contribuicao.sql b/migrations/C5_big/20260507000001_seq_tb_flash_fato_contribuicao.sql new file mode 100644 index 0000000..169f621 --- /dev/null +++ b/migrations/C5_big/20260507000001_seq_tb_flash_fato_contribuicao.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_CONTRIBUICAO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_FATO_CONTRIBUICAO START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_CONTRIBUICAO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_FATO_CONTRIBUICAO'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260507000002_tb_flash_fato_contribuicao.sql b/migrations/C5_big/20260507000002_tb_flash_fato_contribuicao.sql new file mode 100644 index 0000000..fc35414 --- /dev/null +++ b/migrations/C5_big/20260507000002_tb_flash_fato_contribuicao.sql @@ -0,0 +1,111 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_CONTRIBUICAO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE ' + CREATE TABLE TB_FLASH_FATO_CONTRIBUICAO ( + ID_FATO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4) NOT NULL, + MES_REFERENCIA NUMBER(2) NOT NULL, + DIA_REFERENCIA NUMBER(2), + DIA_SEMANA NUMBER(2), + ID_NODO NUMBER NOT NULL, + ID_NODO_EMPRESA NUMBER NOT NULL, + COD_EMPRESA NUMBER NOT NULL, + NOME_EMPRESA VARCHAR2(200), + COD_PRODUTO NUMBER NOT NULL, + DESCRICAO_PRODUTO VARCHAR2(300), + SEQPRODUTOBASE NUMBER, + NRODIVISAO NUMBER, + NROSEGMENTO NUMBER, + NRO_TICKETS NUMBER(18,6), + VLR_IMP_CONTRIBUICAO NUMBER(18,6), + QTDE_CONTRIBUICAO NUMBER(18,6), + VLR_CONTRIBUICAO NUMBER(18,6), + VL_TICKET_MEDIO NUMBER(18,6), + PROPQTDPRODUTOBASE NUMBER(18,6), + DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL, + CONSTRAINT PK_TB_FLASH_FATO_CONTRIBUICAO PRIMARY KEY (ID_FATO), + CONSTRAINT FK_TB_FLASH_FATO_CONTRIB_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), + CONSTRAINT FK_TB_FLASH_FATO_CONTRIB_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO), + CONSTRAINT CK_TB_FLASH_FATO_CONTRIB_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_DATA ON TB_FLASH_FATO_CONTRIBUICAO (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_ANOMES'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_ANOMES ON TB_FLASH_FATO_CONTRIBUICAO (ANO_REFERENCIA, MES_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_NODO ON TB_FLASH_FATO_CONTRIBUICAO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_EMP'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_EMP ON TB_FLASH_FATO_CONTRIBUICAO (COD_EMPRESA, ANO_REFERENCIA, MES_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_CONTRIB_PROD'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_CONTRIB_PROD ON TB_FLASH_FATO_CONTRIBUICAO (COD_PRODUTO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_FATO_CONTRIBUICAO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_CONTRIBUICAO ADD CONSTRAINT UK_TB_FLASH_FATO_CONTRIBUICAO UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_CONTRIBUICAO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_FATO_CONTRIBUICAO CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql b/migrations/C5_big/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql new file mode 100644 index 0000000..426e103 --- /dev/null +++ b/migrations/C5_big/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql @@ -0,0 +1,23 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260507000010_tb_flash_nodo_resumo_contribuicao.sql b/migrations/C5_big/20260507000010_tb_flash_nodo_resumo_contribuicao.sql new file mode 100644 index 0000000..e841102 --- /dev/null +++ b/migrations/C5_big/20260507000010_tb_flash_nodo_resumo_contribuicao.sql @@ -0,0 +1,89 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_CONTRIBUICAO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE ' + CREATE TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO ( + ID_RESUMO NUMBER NOT NULL, + ID_NODO NUMBER NOT NULL, + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4) NOT NULL, + MES_REFERENCIA NUMBER(2) NOT NULL, + DIA_REFERENCIA NUMBER(2) NOT NULL, + NRO_TICKETS NUMBER(18,6), + VLR_IMP_CONTRIBUICAO NUMBER(18,6), + QTDE_CONTRIBUICAO NUMBER(18,6), + VLR_CONTRIBUICAO NUMBER(18,6), + VL_TICKET_MEDIO NUMBER(18,6), + VALOR_META_PROPRIA NUMBER(18,6), + VALOR_META_FILHOS NUMBER(18,6), + VALOR_META_EFETIVA NUMBER(18,6), + PERCENTUAL_META_PROPRIA NUMBER(10,4), + PERCENTUAL_META_FILHOS NUMBER(10,4), + PERCENTUAL_META_EFETIVA NUMBER(10,4), + DESVIO NUMBER(18,6), + PERCENTUAL_ATINGIMENTO NUMBER(18,6), + DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL, + CONSTRAINT PK_TB_FLASH_NODO_RES_CONTRIB PRIMARY KEY (ID_RESUMO), + CONSTRAINT FK_TB_FLASH_NODO_RES_CONTRIB_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO), + CONSTRAINT CK_TB_FLASH_NODO_RES_CONTRIB_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), + CONSTRAINT CK_TB_FLASH_NODO_RES_CONTRIB_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_NODO_RES_CONTRIB'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO ADD CONSTRAINT UK_TB_FLASH_NODO_RES_CONTRIB UNIQUE (ID_NODO, DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_CONTRIB_NODO'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_CONTRIB_NODO ON TB_FLASH_NODO_RESUMO_CONTRIBUICAO (ID_NODO)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_CONTRIB_DATA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_CONTRIB_DATA ON TB_FLASH_NODO_RESUMO_CONTRIBUICAO (DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_CONTRIB_ANOMESDIA'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_CONTRIB_ANOMESDIA ON TB_FLASH_NODO_RESUMO_CONTRIBUICAO (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_CONTRIBUICAO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_NODO_RESUMO_CONTRIBUICAO CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260507000011_prc_flash_carga_resumo_contribuicao.sql b/migrations/C5_big/20260507000011_prc_flash_carga_resumo_contribuicao.sql new file mode 100644 index 0000000..d83796d --- /dev/null +++ b/migrations/C5_big/20260507000011_prc_flash_carga_resumo_contribuicao.sql @@ -0,0 +1,107 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS +BEGIN + DELETE FROM TB_FLASH_NODO_RESUMO_CONTRIBUICAO + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + INSERT INTO TB_FLASH_NODO_RESUMO_CONTRIBUICAO ( + id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, + valor_contribuicao, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva, + percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva, + desvio, percentual_atingimento, data_apuracao + ) + WITH datas AS ( + SELECT TRUNC(p_data_inicial) + LEVEL - 1 AS data_referencia + FROM dual + CONNECT BY TRUNC(p_data_inicial) + LEVEL - 1 <= TRUNC(p_data_final) + ), + contribuicao_direta AS ( + SELECT f.id_nodo, TRUNC(f.data_referencia) AS data_referencia, + f.ano_referencia, f.mes_referencia, f.dia_referencia, + SUM(f.vlr_contribuicao) AS valor_contribuicao + FROM TB_FLASH_FATO_CONTRIBUICAO f + WHERE f.data_referencia BETWEEN p_data_inicial AND p_data_final + GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia + ), + contribuicao_hierarquia AS ( + SELECT a.id_nodo_ancestral AS id_nodo, + d.data_referencia, + EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, + EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, + EXTRACT(DAY FROM d.data_referencia) AS dia_referencia, + SUM(NVL(cd.valor_contribuicao, 0)) AS valor_contribuicao + FROM ( + SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral, + n.id_nodo AS id_nodo_descendente + FROM TB_FLASH_NODO n + CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai + ) a + CROSS JOIN datas d + LEFT JOIN contribuicao_direta cd + ON cd.id_nodo = a.id_nodo_descendente + AND cd.data_referencia = d.data_referencia + GROUP BY a.id_nodo_ancestral, d.data_referencia + ), + meta_propria_diaria AS ( + SELECT m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia, + MAX(m.percentual_meta) AS percentual_meta_propria, + SUM(m.valor_meta) AS valor_meta_propria + FROM TB_FLASH_META_CONTRIBUICAO m + WHERE m.data_referencia BETWEEN p_data_inicial AND p_data_final + GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia + ), + meta_filhos_diaria AS ( + SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia, + SUM(mpd.valor_meta_propria) AS valor_meta_filhos + FROM TB_FLASH_NODO pai + JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo + JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo + GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia + ), + base AS ( + SELECT n.id_nodo, d.data_referencia, + EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, + EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, + EXTRACT(DAY FROM d.data_referencia) AS dia_referencia + FROM TB_FLASH_NODO n + CROSS JOIN datas d + ) + SELECT SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO.NEXTVAL, + b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia, + ch.valor_contribuicao, + mpd.valor_meta_propria, + mfd.valor_meta_filhos, + CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, + mpd.percentual_meta_propria, + CAST(NULL AS NUMBER(10,4)), + CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END, + NVL(ch.valor_contribuicao, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0), + CASE + WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL + ELSE (NVL(ch.valor_contribuicao, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100 + END, + SYSDATE + FROM base b + LEFT JOIN contribuicao_hierarquia ch ON ch.id_nodo = b.id_nodo AND ch.data_referencia = b.data_referencia + LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia + LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia; + + COMMIT; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260507000012_prc_flash_atualiza_contribuicao_dono.sql b/migrations/C5_big/20260507000012_prc_flash_atualiza_contribuicao_dono.sql new file mode 100644 index 0000000..c0b6b73 --- /dev/null +++ b/migrations/C5_big/20260507000012_prc_flash_atualiza_contribuicao_dono.sql @@ -0,0 +1,81 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO ( + p_data_inicial IN DATE, + p_data_final IN DATE, + p_empresa_ini IN NUMBER DEFAULT NULL, + p_empresa_fim IN NUMBER DEFAULT NULL +) AS + v_inicio_execucao DATE := SYSDATE; +BEGIN + DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO em ' || TO_CHAR(v_inicio_execucao, 'DD/MM/YYYY HH24:MI:SS')); + DBMS_OUTPUT.PUT_LINE('Período: ' || TO_CHAR(p_data_inicial, 'DD/MM/YYYY') || ' até ' || TO_CHAR(p_data_final, 'DD/MM/YYYY')); + + FOR r IN ( + SELECT codigo + FROM vitruvio.vi_lojas + WHERE codigo NOT IN (301, 401, 500) + AND (p_empresa_ini IS NULL OR codigo >= p_empresa_ini) + AND (p_empresa_fim IS NULL OR codigo <= p_empresa_fim) + ORDER BY codigo + ) LOOP + BEGIN + DBMS_OUTPUT.PUT_LINE('Carregando contribuição da empresa: ' || r.codigo); + + PRC_FLASH_CARGA_DADOS_CONTRIBUICAO( + p_data_inicial => p_data_inicial, + p_data_final => p_data_final, + p_empresa => r.codigo + ); + + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE( + 'Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM + ); + RAISE; + END; + END LOOP; + + DBMS_OUTPUT.PUT_LINE('Carregando stage de metas de contribuição...'); + + PRC_FLASH_CARGA_META_CONTRIBUICAO_STG( + p_data_inicial => p_data_inicial, + p_data_final => p_data_final + ); + + DBMS_OUTPUT.PUT_LINE('Carregando metas finais de contribuição...'); + + PRC_FLASH_CARGA_META_CONTRIBUICAO( + p_data_inicial => p_data_inicial, + p_data_final => p_data_final + ); + + DBMS_OUTPUT.PUT_LINE('Atualizando resumo de contribuição...'); + + PRC_FLASH_CARGA_RESUMO_CONTRIBUICAO( + p_data_inicial => p_data_inicial, + p_data_final => p_data_final + ); + + DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); + DBMS_OUTPUT.PUT_LINE('Tempo em segundos: ' || ROUND((SYSDATE - v_inicio_execucao) * 86400, 2)); + +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO: ' || SQLERRM); + RAISE; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260507000013_prc_flash_carga_dados_contribuicao.sql b/migrations/C5_big/20260507000013_prc_flash_carga_dados_contribuicao.sql new file mode 100644 index 0000000..a0317f6 --- /dev/null +++ b/migrations/C5_big/20260507000013_prc_flash_carga_dados_contribuicao.sql @@ -0,0 +1,432 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO ( + p_data_inicial IN DATE, + p_data_final IN DATE, + p_empresa IN NUMBER +) AS + v_id_empresa NUMBER; + v_id_cat1 NUMBER; + v_id_cat2 NUMBER; + v_id_cat3 NUMBER; + v_id_cat4 NUMBER; + v_id_cat5 NUMBER; + v_id_produto NUMBER; + v_contador NUMBER := 0; + + FUNCTION FN_GET_OR_CREATE_NODO ( + p_id_nodo_pai IN NUMBER, + p_tipo_nodo IN VARCHAR2, + p_codigo IN VARCHAR2, + p_nome IN VARCHAR2, + p_nivel IN NUMBER, + p_cod_empresa IN NUMBER DEFAULT NULL, + p_cod_produto IN NUMBER DEFAULT NULL, + p_seqprodutobase IN NUMBER DEFAULT NULL + ) RETURN NUMBER + IS + v_id_nodo NUMBER; + BEGIN + SELECT n.id_nodo + INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE ( + n.id_nodo_pai = p_id_nodo_pai + OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) + ) + AND n.tipo_nodo = p_tipo_nodo + AND n.codigo = p_codigo + AND ( + p_tipo_nodo <> 'PRODUTO' + OR ( + n.cod_empresa = p_cod_empresa + OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) + ) + ); + + UPDATE TB_FLASH_NODO n + SET n.nome = p_nome, + n.cod_empresa = p_cod_empresa, + n.cod_produto = p_cod_produto, + n.seqprodutobase = p_seqprodutobase, + n.data_atualizacao = SYSDATE + WHERE n.id_nodo = v_id_nodo + AND ( + NVL(n.nome, '#') <> NVL(p_nome, '#') + OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) + OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) + OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) + ); + + RETURN v_id_nodo; + + EXCEPTION + WHEN NO_DATA_FOUND THEN + v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; + + INSERT INTO TB_FLASH_NODO ( + id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, + ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, + data_cadastro, data_atualizacao + ) VALUES ( + v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, + NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, + SYSDATE, NULL + ); + + RETURN v_id_nodo; + END; + +BEGIN + DELETE FROM TB_FLASH_FATO_CONTRIBUICAO + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final + AND cod_empresa = p_empresa; + + FOR r IN ( + SELECT Z.DTA, + Z.NROEMPRESA, + Z.NROSEGMENTO, + Z.SEQPRODUTO, + Z.PRODUTO, + Z.SEQCATEGORIAN1, + Z.CATEGORIAN1, + Z.SEQCATEGORIAN2, + Z.CATEGORIAN2, + Z.SEQCATEGORIAN3, + Z.CATEGORIAN3, + Z.SEQCATEGORIAN4, + Z.CATEGORIAN4, + Z.SEQCATEGORIAN5, + Z.CATEGORIAN5, + Z.VLRVENDA, + (CASE WHEN (Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) < TO_DATE('01/09/2022','DD/MM/YYYY')) + OR ( Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) > TO_DATE('01/01/2024','DD/MM/YYYY')) THEN + Z.VLRVENDA - (Z.QTDE_VENDA * (SELECT nvl(ROUND((CD.CMDIAVLRNF + CD.CMDIAIPI + CD.CMDIAICMSST + CD.CMDIADESPNF + CD.CMDIADESPFORANF - + CD.CMDIACREDICMS - CD.CMDIACREDICMSPRESUM - CD.CMDIACREDICMSANTECIP - CD.CMDIACREDPIS - CD.CMDIACREDCOFINS- CD.CMDIADCTOFORANF),4),0) + FROM MRL_CUSTODIA CD + WHERE CD.SEQPRODUTO = (CASE WHEN Z.SEQPRODUTOBASE IS NULL THEN Z.SEQPRODUTO ELSE Z.SEQPRODUTOBASE END) + AND CD.NROEMPRESA = 301 + AND CD.DTAENTRADASAIDA = ( + SELECT MAX(CD1.DTAENTRADASAIDA) + FROM MRL_CUSTODIA CD1 + WHERE CD1.SEQPRODUTO = CD.SEQPRODUTO + AND CD1.NROEMPRESA = 301 + AND CD1.DTAENTRADASAIDA <= Z.DTA + ) + )) - Z.VLR_IMP_VENDA + ELSE + Z.VLRCONTRIB + END) AS VLRCONTRIB, + Z.VLRVENDA_MES_ANT, + Z.VLRCONTRIB_MES_ANT, + Z.VLRVENDA_ANO_ANT, + Z.VLRCONTRIB_ANO_ANT, + Z.QTDE_VENDA + FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/ + TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA, + V.NROEMPRESA, + V.NROSEGMENTO, + V.SEQPRODUTO, + A.SEQPRODUTOBASE, + A.DESCCOMPLETA PRODUTO, + CC1.SEQCATEGORIA AS SEQCATEGORIAN1, + CC1.CATEGORIA AS CATEGORIAN1, + ( SELECT CC2.SEQCATEGORIA + FROM MAP_FAMDIVCATEG DC2 + JOIN MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR in ('A', 'F') + AND CC2.NIVELHIERARQUIA = 2 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS in ('A', 'F') + ) AS SEQCATEGORIAN2, + ( SELECT CC2.CATEGORIA + FROM MAP_FAMDIVCATEG DC2 + JOIN MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR in ('A', 'F') + AND CC2.NIVELHIERARQUIA = 2 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS in ('A', 'F') + ) AS CATEGORIAN2, + ( SELECT CC2.SEQCATEGORIA + FROM MAP_FAMDIVCATEG DC2 + JOIN MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 3 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS SEQCATEGORIAN3, + ( SELECT CC2.CATEGORIA + FROM MAP_FAMDIVCATEG DC2 + JOIN MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 3 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS CATEGORIAN3, + ( SELECT CC2.SEQCATEGORIA + FROM MAP_FAMDIVCATEG DC2 + JOIN MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 4 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS SEQCATEGORIAN4, + ( SELECT CC2.CATEGORIA + FROM MAP_FAMDIVCATEG DC2 + JOIN MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 4 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS CATEGORIAN4, + ( SELECT CC2.SEQCATEGORIA + FROM MAP_FAMDIVCATEG DC2 + JOIN MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 5 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS SEQCATEGORIAN5, + ( SELECT CC2.CATEGORIA + FROM MAP_FAMDIVCATEG DC2 + JOIN MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 5 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS CATEGORIAN5, + SUM( ( V.QTDITEM - NVL( V.QTDDEVOLITEM, 0 ) ) ) AS QTDE_VENDA, + SUM( ( ROUND( V.VLRITEM, 2 ) ) - ( ROUND( V.VLRDEVOLITEM, 2 ) - ( 0 ) ) ) AS VLRVENDA, + SUM( DECODE( + V.ACMCOMPRAVENDA, 'I', ( V.VLRITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), + DECODE( Y.QTDVDA * V.QTDITEM, 0, 0, ( Y.VLRIMPOSTOVDA - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDITEM ) + ) + - DECODE( + V.ACMCOMPRAVENDA, 'I', ( V.VLRDEVOLITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), + DECODE( Y.QTDVDA * V.QTDDEVOLITEM, 0, 0, ( Y.VLRIMPOSTODEVOL - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDDEVOLITEM ) + ) + + DECODE( + V.ACMCOMPRAVENDA, 'I', 0, + DECODE( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) + + V.VLRFCPICMS + V.PISITEM + V.COFINSITEM - + DECODE( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) + - V.DVLRFCPICMS - V.PISDEVOLITEM - V.COFINSDEVOLITEM + ) + ) AS VLR_IMP_VENDA + , sum( + consinco.fC5_AbcDistribLucratividade( + 'L', + 'L', + 'N', + V.VLRITEM , + 'N', + V.VLRICMSST, + V.VLRFCPST, + V.VLRICMSSTEMPORIG, + E.UF, + V.UFPESSOA, + 'S', + null, + 'N', + V.VLRIPIITEM, + V.VLRIPIDEVOLITEM, + 'N', + V.VLRDESCFORANF, + Y.CMDIAVLRNF - 0 , + Y.CMDIAIPI, + nvl( Y.CMDIACREDPIS, 0 ), + nvl( Y.CMDIACREDCOFINS, 0 ), + Y.CMDIAICMSST, + Y.CMDIADESPNF, + Y.CMDIADESPFORANF, + Y.CMDIADCTOFORANF, + 'S', + a.propqtdprodutobase, + V.QTDITEM, + V.VLREMBDESCRESSARCST, + V.ACMCOMPRAVENDA, + V.PISITEM, + V.COFINSITEM, + decode( V.TIPCGO, 'S', Y.QTDVDA, nvl( Y.QTDDEVOL, Y.QTDVDA ) ), + ( decode( V.TIPCGO, 'S', Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ), + nvl( Y.VLRIMPOSTODEVOL - nvl( V.VLRIPIDEVOLITEM, 0 ), + Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ) ) ) ) , + 'N', + V.VLRDESPOPERACIONALITEM, + Y.VLRDESPESAVDA, + 'N', + nvl( Y.VLRVERBAVDAACR, 0 ), + DECODE( V.TIPDOCFISCALCGO, 'T', 0, Y.QTDVERBAVDA ), + Y.VLRVERBAVDA - nvl( Y.VLRVERBAVDAINDEVIDA, 0 ), + 'N', + NVL(V.VLRTOTCOMISSAOITEM, 0), + V.VLRDEVOLITEM, + VLRDEVOLICMSST, + V.DVLRFCPST, + V.QTDDEVOLITEM, + V.PISDEVOLITEM, + V.COFINSDEVOLITEM, + V.VLRDESPOPERACIONALITEMDEVOL, + V.VLRTOTCOMISSAOITEMDEVOL, + E.PERIRLUCRAT, + E.PERCSLLLUCRAT, + Y.CMDIACREDICMS, + decode( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) + + 0 , + V.VLRFCPICMS, + V.PERCPMF, + V.PEROUTROIMPOSTO, + decode( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) + + 0 , + V.DVLRFCPICMS, + case when ( 'N' ) = 'N' then + (nvl(y.cmdiavlrdescpistransf,0) + nvl(y.cmdiavlrdesccofinstransf,0) + nvl(y.cmdiavlrdescicmstransf,0) + + nvl(y.cmdiavlrdescipitransf,0) + nvl(y.cmdiavlrdesclucrotransf,0) + nvl(y.cmdiavlrdescverbatransf,0) ) + else 0 + end, + case when DV.UTILACRESCCUSTPRODRELAC = 'S' and nvl( A.SEQPRODUTOBASE, A.SEQPRODUTOBASEANTIGO ) is not null then + coalesce( PR.PERCACRESCCUSTORELACVIG, nvl( consinco.F_RETACRESCCUSTORELACABC( V.SEQPRODUTO, V.DTAVDA ), 1 ) ) + else 1 + end, + 'N', + 0, + 0, + 'S', + V.VLRDESCMEDALHA, + 'S', + V.VLRDESCFORNEC, + V.VLRDESCFORNECDEVOL, + 'N', + V.VLRFRETEITEMRATEIO, + V.VLRFRETEITEMRATEIODEV, + 'S', + V.VLRICMSSTEMBUTPROD, + V.VLRICMSSTEMBUTPRODDEV, + V.VLREMBDESCRESSARCSTDEVOL, + case when 'N' = 'S' then nvl( V.VLRDESCACORDOVERBAPDV, 0 ) else 0 end, + nvl( Y.CMDIACREDIPI, 0 ), + NVL(V.VLRITEMRATEIOCTE,0), + 'N', + 'C', + V.VLRIPIPRECOVDA, + V.VLRIPIPRECODEVOL, + V.VLRDESCMEDALHADEVOL, + 'N' + )) AS VLRCONTRIB + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT + FROM MRL_CUSTODIA Y + JOIN MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA + JOIN MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO + JOIN MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO + JOIN MAP_FAMDIVISAO D ON D.SEQFAMILIA = A.SEQFAMILIA AND D.NRODIVISAO = V.NRODIVISAO + JOIN MAP_FAMEMBALAGEM K ON K.SEQFAMILIA = A.SEQFAMILIA AND K.QTDEMBALAGEM = 1 + JOIN MAX_EMPRESA E ON E.NROEMPRESA = V.NROEMPRESA AND Y.NROEMPRESA = NVL( E.NROEMPCUSTOABC, E.NROEMPRESA ) + JOIN MAX_DIVISAO DV ON E.NRODIVISAO = DV.NRODIVISAO + JOIN MAP_FAMDIVCATEG DC ON DC.NRODIVISAO = D.NRODIVISAO AND DC.STATUS = 'A' AND DC.SEQFAMILIA = D.SEQFAMILIA + JOIN MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA = DC.SEQCATEGORIA AND CC1.STATUSCATEGOR in ('A', 'F') AND CC1.NIVELHIERARQUIA = 1 AND CC1.NRODIVISAO = DC.NRODIVISAO AND CC1.TIPCATEGORIA = 'M' + LEFT JOIN MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO = V.SEQPRODUTO AND PR.DTAMOVIMENTACAO = V.DTAVDA + WHERE V.NROEMPRESA IN ( SELECT E.EMPRESA_ID FROM EMPRESA_PARAMETROS E WHERE E.PARTICIPA_FLASH = 1 ) + AND V.NROSEGMENTO IN ( SELECT A.NROSEGMENTO FROM CONSINCO.MAD_SEGMENTO A WHERE A.STATUS = 'A' ) + AND DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' ) + AND V.DTAVDA BETWEEN ParDataInicial AND ParDataFinal + GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) + , V.NROEMPRESA + , V.NRODIVISAO + , V.NROSEGMENTO + , V.SEQPRODUTO + , A.SEQPRODUTOBASE + , A.SEQFAMILIA + , A.DESCCOMPLETA + , CC1.SEQCATEGORIA + , CC1.CATEGORIA) Z + ) LOOP + + v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa); + + IF r.codcatn1 IS NOT NULL THEN + v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa); + ELSE v_id_cat1 := v_id_empresa; END IF; + + IF r.codcatn2 IS NOT NULL THEN + v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa); + ELSE v_id_cat2 := v_id_cat1; END IF; + + IF r.codcatn3 IS NOT NULL THEN + v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa); + ELSE v_id_cat3 := v_id_cat2; END IF; + + IF r.codcatn4 IS NOT NULL THEN + v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa); + ELSE v_id_cat4 := v_id_cat3; END IF; + + IF r.codcatn5 IS NOT NULL THEN + v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa); + ELSE v_id_cat5 := v_id_cat4; END IF; + + v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase); + + INSERT INTO TB_FLASH_FATO_CONTRIBUICAO ( + id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, + id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, + seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, + vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro + ) VALUES ( + SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL, + r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana, + v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao, + r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_contribuicao, + r.qtde_contribuicao, r.vlr_contribuicao, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE + ); + + END LOOP; + + COMMIT; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_CONTRIBUICAO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260507000014_tb_flash_meta_contribuicao_stg.sql b/migrations/C5_big/20260507000014_tb_flash_meta_contribuicao_stg.sql new file mode 100644 index 0000000..7ec7401 --- /dev/null +++ b/migrations/C5_big/20260507000014_tb_flash_meta_contribuicao_stg.sql @@ -0,0 +1,73 @@ +-- +goose Up +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_CONTRIBUICAO_STG'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE ' + CREATE TABLE TB_FLASH_META_CONTRIBUICAO_STG ( + COD_EMPRESA NUMBER NOT NULL, + TIPO_NODO VARCHAR2(30) NOT NULL, + CODIGO_NODO VARCHAR2(60) NOT NULL, + CODIGO_NODO_PAI VARCHAR2(60), + TIPO_NODO_PAI VARCHAR2(30), + DATA_REFERENCIA DATE NOT NULL, + ANO_REFERENCIA NUMBER(4) NOT NULL, + MES_REFERENCIA NUMBER(2) NOT NULL, + DIA_REFERENCIA NUMBER(2) NOT NULL, + PERCENTUAL_META NUMBER(10,4), + VALOR_META NUMBER(18,6), + OBSERVACAO VARCHAR2(500), + ORIGEM_META VARCHAR2(100), + DATA_CARGA DATE DEFAULT SYSDATE, + CONSTRAINT CK_TB_FLASH_META_CTB_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')), + CONSTRAINT CK_TB_FLASH_META_CTB_STG_TIPO_PAI CHECK (TIPO_NODO_PAI IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'') OR TIPO_NODO_PAI IS NULL), + CONSTRAINT CK_TB_FLASH_META_CTB_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12), + CONSTRAINT CK_TB_FLASH_META_CTB_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31) + )'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CTB_STG_01'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CTB_STG_01 ON TB_FLASH_META_CONTRIBUICAO_STG (COD_EMPRESA, DATA_REFERENCIA)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CTB_STG_02'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CTB_STG_02 ON TB_FLASH_META_CONTRIBUICAO_STG (TIPO_NODO, CODIGO_NODO, CODIGO_NODO_PAI)'; + END IF; +END; +-- +goose StatementEnd +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_CTB_STG_03'; + IF v_count = 0 THEN + EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_CTB_STG_03 ON TB_FLASH_META_CONTRIBUICAO_STG (ORIGEM_META)'; + END IF; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_CONTRIBUICAO_STG'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_CONTRIBUICAO_STG CASCADE CONSTRAINTS PURGE'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260507000015_vw_flash_meta_contribuicao_stg.sql b/migrations/C5_big/20260507000015_vw_flash_meta_contribuicao_stg.sql new file mode 100644 index 0000000..76d9027 --- /dev/null +++ b/migrations/C5_big/20260507000015_vw_flash_meta_contribuicao_stg.sql @@ -0,0 +1,33 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE VIEW VW_FLASH_META_CONTRIBUICAO_STG AS +SELECT m1.empresa_fk AS cod_empresa, 'CATEGORIA' AS tipo_nodo, TO_CHAR(m1.categoria_fk) AS codigo_nodo, + TO_CHAR(m1.categoria_pai_fk) AS codigo_nodo_pai, 'CATEGORIA' AS tipo_nodo_pai, + m1.data_referencia, m1.ano AS ano_referencia, m1.mes AS mes_referencia, m1.dia AS dia_referencia, + m1.percentual AS percentual_meta, m1.valor_meta, 'TB_METAS_CONTRIB_CATN1' AS observacao, 'TB_METAS_CONTRIB_CATN1' AS origem_meta +FROM vitruvio.TB_METAS_CONTRIB_CATN1 m1 +UNION ALL +SELECT m2.empresa_fk, 'CATEGORIA', TO_CHAR(m2.categoria_fk), TO_CHAR(m2.categoria_pai_fk), 'CATEGORIA', + m2.data_referencia, m2.ano, m2.mes, m2.dia, m2.percentual, m2.valor_meta, 'TB_METAS_CONTRIB_CATN2', 'TB_METAS_CONTRIB_CATN2' +FROM vitruvio.TB_METAS_CONTRIB_CATN2 m2 +UNION ALL +SELECT m3.empresa_fk, 'CATEGORIA', TO_CHAR(m3.categoria_fk), TO_CHAR(m3.categoria_pai_fk), 'CATEGORIA', + m3.data_referencia, m3.ano, m3.mes, m3.dia, m3.percentual, m3.valor_meta, 'TB_METAS_CONTRIB_CATN3', 'TB_METAS_CONTRIB_CATN3' +FROM vitruvio.TB_METAS_CONTRIB_CATN3 m3 +UNION ALL +SELECT m4.empresa_fk, 'CATEGORIA', TO_CHAR(m4.categoria_fk), TO_CHAR(m4.categoria_pai_fk), 'CATEGORIA', + m4.data_referencia, m4.ano, m4.mes, m4.dia, m4.percentual, m4.valor_meta, 'TB_METAS_CONTRIB_CATN4', 'TB_METAS_CONTRIB_CATN4' +FROM vitruvio.TB_METAS_CONTRIB_CATN4 m4 +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DECLARE + v_count NUMBER; +BEGIN + SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'VW_FLASH_META_CONTRIBUICAO_STG' AND object_type = 'VIEW'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP VIEW VW_FLASH_META_CONTRIBUICAO_STG'; + END IF; +END; +-- +goose StatementEnd diff --git a/src/flash_contribuicao/flash_contribuicao.module.ts b/src/flash_contribuicao/flash_contribuicao.module.ts new file mode 100644 index 0000000..5ca588c --- /dev/null +++ b/src/flash_contribuicao/flash_contribuicao.module.ts @@ -0,0 +1,221 @@ +import { createModuleFactory } from "@davinti/jeff"; + +const moduleFactory = createModuleFactory(["C5", "C5_big", "C5_mambo"]); + +export default moduleFactory + .createModule({ + id: "flash-de-contribuicao", + description: "Flash de Contribuição", + label: "Flash de Contribuição", + icon: "bar-chart", + queries: { + flashContribuicao: { + name: "Flash de Contribuição", + display: { + type: "flash", + settings: { + group_column: "canalapp", + total_indicator_column: "is_total", + null_label_key: "Geral", + }, + header: { + title_column: "canalapp", + value_column: "contribuicao_dia", + value_format: "currency", + }, + rows: [ + { + label: "Meta Mês", + column: "meta_mes", + format: "currency_short", + }, + { + label: "Mês Atual", + column: "mes_atual", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_mes_atual", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_atual", + format: "percentage", + }, + { + label: "Mês Anterior", + column: "mes_anterior", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_mes_anterior", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_mes_anterior", + format: "percentage", + }, + { + label: "Ano Anterior", + column: "ano_anterior", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_ano_anterior", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_ano_anterior", + format: "percentage", + }, + ], + }, + params: ["data_contribuicao"], + }, + }, + entrypoint: "flashContribuicao", + }) + .withImplementations({ + C5: { + flashContribuicao: (args) => { + return { + sql: /*sql*/ ``, + }; + }, + }, + C5_big: { + flashContribuicao: (args) => { + return { + sql: /*sql*/ ` + SELECT + 'Lojas' AS canalapp, + x.codigo AS cod_empresa, + x.nomeempresaapp AS nomeempresaapp, + CASE + WHEN GROUPING(x.codigo) = 1 THEN 1 + ELSE 0 + END AS is_total, + SUM(CASE WHEN x.data_referencia = TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') THEN x.valor_contribuicao ELSE 0 END) AS contribuicao_dia, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) AS mes_atual, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual, + CASE + WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) / + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100 + , 2) + END AS variacao_atual, + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior, + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) AS mes_anterior, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) AS dif_mes_anterior, + CASE + WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) / + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END)) * 100) - 100 + , 2) + END AS variacao_mes_anterior, + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior, + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) AS ano_anterior, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) AS dif_ano_anterior, + CASE + WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_contribuicao ELSE 0 END) / + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_contribuicao ELSE 0 END)) * 100) - 100 + , 2) + END AS variacao_ano_anterior + FROM + ( + SELECT + n.codigo, + n.nome AS nomeempresaapp, + r.data_referencia, + r.valor_meta_efetiva, + r.valor_contribuicao, + CASE + WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') + THEN 'ATUAL' + WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM'), -1) + AND ADD_MONTHS(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), -1) + THEN 'MES_ANTERIOR' + WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM'), -12) + AND ADD_MONTHS(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), -12) + THEN 'ANO_ANTERIOR' + END AS periodo + FROM + tb_flash_nodo_resumo_contribuicao r + JOIN tb_flash_nodo n + ON + n.id_nodo = r.id_nodo + WHERE + n.tipo_nodo = 'EMPRESA' + and (n.cod_empresa in (${args.ctx_user_companies_for_module})) + AND ( + r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD') + OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM'), -1) + AND ADD_MONTHS(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), -1) + OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), 'MM'), -12) + AND ADD_MONTHS(TO_DATE(${args.data_contribuicao}, 'YYYY-MM-DD'), -12) + ) + ) x + GROUP BY + GROUPING SETS ( + (x.codigo, x.nomeempresaapp), + () + ) + `, + }; + }, + }, + C5_mambo: { + flashContribuicao: (args) => { + return { + sql: /*sql*/ ``, + }; + }, + }, + }).withSchedules({ + C5: [ + { + name: "Procedure que atualiza os dados do flash de contribuição", + command: /*sql*/ `BEGIN + END`, + cron: "0 * * * *", + timeout_seconds: 2400, + }, + ], + C5_big: [ + { + name: "Procedure que atualiza os dados do flash de contribuição", + command: /*sql*/ `BEGIN + PRC_FLASH_ATUALIZA_CONTRIBUICAO_DONO( + p_data_inicial => TRUNC(SYSDATE) - 30, + p_data_final => TRUNC(SYSDATE), + p_empresa_ini => 1, + p_empresa_fim => 10 + ); + END`, + cron: "0 * * * *", + timeout_seconds: 2400, + }, + ], + C5_mambo: [ + { + name: "Procedure que atualiza os dados do flash de contribuição", + command: /*sql*/ `BEGIN + END`, + cron: "0 * * * *", + timeout_seconds: 2400, + }, + ], + }); From b2ac53b41c2ce628045ef8fa1558df6f60a6273c Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Thu, 7 May 2026 14:21:35 -0300 Subject: [PATCH 12/21] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20para=20categorias?= =?UTF-8?q?=20do=20flash=20de=20perdas.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash_perdas/flash_perdas.module.ts | 273 +++++++++++++++++++++++- 1 file changed, 272 insertions(+), 1 deletion(-) diff --git a/src/flash_perdas/flash_perdas.module.ts b/src/flash_perdas/flash_perdas.module.ts index 01efb0c..39a3c3c 100644 --- a/src/flash_perdas/flash_perdas.module.ts +++ b/src/flash_perdas/flash_perdas.module.ts @@ -78,8 +78,77 @@ export default moduleFactory }, params: ["data_perda"], }, + flash_categorias: { + name: "Flash de Perdas por Categorias", + display: { + type: "flash", + settings: { + group_column: "categoriaapp", + total_indicator_column: "is_total", + null_label_key: "Geral", + }, + header: { + title_column: "categoriaapp", + value_column: "perda_dia", + value_format: "currency", + }, + rows: [ + { + label: "Meta Mês", + column: "meta_mes", + format: "currency_short", + }, + { + label: "Mês Atual", + column: "mes_atual", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_mes_atual", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_atual", + format: "percentage", + }, + { + label: "Mês Anterior", + column: "mes_anterior", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_mes_anterior", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_mes_anterior", + format: "percentage", + }, + { + label: "Ano Anterior", + column: "ano_anterior", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_ano_anterior", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_ano_anterior", + format: "percentage", + }, + ], + }, + params: ["data_perda", "codigo_categoria_pai", "cod_empresa"], + }, }, - entrypoint: "flashPerdas", + entrypoint: "flashPerdas" as "flashPerdas" | "flash_categorias", }) .withImplementations({ C5: { @@ -113,6 +182,27 @@ group by rollup(canalapp, nomeempresaapp) order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, }; }, + flash_categorias: (args) => { + return { + sql: /*sql*/ ` +select + 'Categorias' as categoriaapp, + 1 as is_total, + 0 as perda_dia, + 0 as meta_mes, + 0 as mes_atual, + 0 as dif_mes_atual, + 0 as variacao_atual, + 0 as mes_anterior, + 0 as dif_mes_anterior, + 0 as variacao_mes_anterior, + 0 as ano_anterior, + 0 as dif_ano_anterior, + 0 as variacao_ano_anterior +from dual +where 1 = 0`, + }; + }, }, C5_big: {flashPerdas: (args) => { return { @@ -192,8 +282,189 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`, ROLLUP(x.nomeempresaapp) `,}; }, + flash_categorias: (args) => { + return { + sql: /*sql*/ ` + WITH params AS ( + SELECT + TO_DATE(${args.data_perda}, 'YYYY-MM-DD') AS data_perda, + ${args.codigo_categoria_pai} AS codigo_categoria_pai, + ${args.cod_empresa} AS cod_empresa + FROM dual + ), + nodo_pai_param AS ( + SELECT n.* + FROM tb_flash_nodo n + CROSS JOIN params p + WHERE p.codigo_categoria_pai IS NOT NULL + AND n.tipo_nodo = 'CATEGORIA' + AND n.codigo = p.codigo_categoria_pai + and (n.cod_empresa in (${args.ctx_user_companies_for_module})) + AND ( + p.cod_empresa IS NULL + OR n.cod_empresa = p.cod_empresa + ) + ), + nodos_filtrados AS ( + SELECT filho.* + FROM tb_flash_nodo filho + JOIN nodo_pai_param pai_param + ON pai_param.id_nodo = filho.id_nodo_pai + CROSS JOIN params p + WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO') + AND filho.ativo = 'S' + AND ( + p.cod_empresa IS NULL + OR filho.cod_empresa = p.cod_empresa + ) + + UNION ALL + + SELECT n.* + FROM tb_flash_nodo n + CROSS JOIN params p + WHERE p.codigo_categoria_pai IS NULL + AND n.tipo_nodo = 'CATEGORIA' + AND n.ativo = 'S' + and (n.cod_empresa in (${args.ctx_user_companies_for_module})) + AND ( + p.cod_empresa IS NULL + OR n.cod_empresa = p.cod_empresa + ) + AND n.nivel = ( + SELECT MIN(n2.nivel) + FROM tb_flash_nodo n2 + WHERE n2.tipo_nodo = 'CATEGORIA' + AND n2.ativo = 'S' + AND ( + p.cod_empresa IS NULL + OR n2.cod_empresa = p.cod_empresa + ) + ) + ) + SELECT + 'Categorias' AS categoriaapp, + + x.codigo AS cod_empresa, + + x.nomeempresaapp AS nomeempresaapp, + + CASE + WHEN GROUPING(x.codigo) = 1 THEN 1 + ELSE 0 + END AS is_total, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS perda_dia, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual, + + CASE + WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ( + ( + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) + / + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) + ) * 100 + ) - 100 + , 2) + END AS variacao_atual, + + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior, + + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior, + + CASE + WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ( + ( + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) + / + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) + ) * 100 + ) - 100 + , 2) + END AS variacao_mes_anterior, + + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior, + + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior, + + CASE + WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ( + ( + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) + / + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) + ) * 100 + ) - 100 + , 2) + END AS variacao_ano_anterior + + FROM ( + SELECT + cat.codigo AS codigo, + cat.nome AS nomeempresaapp, + r.valor_meta_efetiva, + r.valor_venda, + CASE + WHEN r.data_referencia BETWEEN TRUNC(p.data_perda, 'MM') AND p.data_perda + THEN 'ATUAL' + + WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_perda, 'MM'), -1) + AND ADD_MONTHS(p.data_perda, -1) + THEN 'MES_ANTERIOR' + + WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_perda, 'MM'), -12) + AND ADD_MONTHS(p.data_perda, -12) + THEN 'ANO_ANTERIOR' + END AS periodo + FROM tb_flash_nodo_resumo_perda r + JOIN nodos_filtrados cat + ON cat.id_nodo = r.id_nodo + CROSS JOIN params p + WHERE ( + r.data_referencia BETWEEN TRUNC(p.data_perda, 'MM') AND p.data_perda + + OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_perda, 'MM'), -1) + AND ADD_MONTHS(p.data_perda, -1) + + OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_perda, 'MM'), -12) + AND ADD_MONTHS(p.data_perda, -12) + ) + ) x + + GROUP BY + GROUPING SETS ( + (x.codigo, x.nomeempresaapp), + () + ) + + ORDER BY + is_total, + nomeempresaapp + `,}; + }, }, C5_mambo: {flashPerdas: (args) => { + return { + sql: /*sql*/ ``,}; + }, + flash_categorias: (args) => { return { sql: /*sql*/ ``,}; }, From 6d599c6ef8c1e24a489ef03fca33f314a8acf886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonath=C3=A3=20Correa?= Date: Thu, 7 May 2026 14:32:29 -0300 Subject: [PATCH 13/21] Feat: subida dos objetos de banco --- .../20260507000001_seq_tb_flash_fato_contribuicao.sql | 0 .../{C5_big => }/20260507000002_tb_flash_fato_contribuicao.sql | 0 .../20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql | 0 .../20260507000010_tb_flash_nodo_resumo_contribuicao.sql | 0 .../20260507000011_prc_flash_carga_resumo_contribuicao.sql | 0 .../20260507000012_prc_flash_atualiza_contribuicao_dono.sql | 0 .../20260507000013_prc_flash_carga_dados_contribuicao.sql | 0 .../20260507000014_tb_flash_meta_contribuicao_stg.sql | 0 .../20260507000015_vw_flash_meta_contribuicao_stg.sql | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename migrations/{C5_big => }/20260507000001_seq_tb_flash_fato_contribuicao.sql (100%) rename migrations/{C5_big => }/20260507000002_tb_flash_fato_contribuicao.sql (100%) rename migrations/{C5_big => }/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql (100%) rename migrations/{C5_big => }/20260507000010_tb_flash_nodo_resumo_contribuicao.sql (100%) rename migrations/{C5_big => }/20260507000011_prc_flash_carga_resumo_contribuicao.sql (100%) rename migrations/{C5_big => }/20260507000012_prc_flash_atualiza_contribuicao_dono.sql (100%) rename migrations/{C5_big => }/20260507000013_prc_flash_carga_dados_contribuicao.sql (100%) rename migrations/{C5_big => }/20260507000014_tb_flash_meta_contribuicao_stg.sql (100%) rename migrations/{C5_big => }/20260507000015_vw_flash_meta_contribuicao_stg.sql (100%) diff --git a/migrations/C5_big/20260507000001_seq_tb_flash_fato_contribuicao.sql b/migrations/20260507000001_seq_tb_flash_fato_contribuicao.sql similarity index 100% rename from migrations/C5_big/20260507000001_seq_tb_flash_fato_contribuicao.sql rename to migrations/20260507000001_seq_tb_flash_fato_contribuicao.sql diff --git a/migrations/C5_big/20260507000002_tb_flash_fato_contribuicao.sql b/migrations/20260507000002_tb_flash_fato_contribuicao.sql similarity index 100% rename from migrations/C5_big/20260507000002_tb_flash_fato_contribuicao.sql rename to migrations/20260507000002_tb_flash_fato_contribuicao.sql diff --git a/migrations/C5_big/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql b/migrations/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql similarity index 100% rename from migrations/C5_big/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql rename to migrations/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql diff --git a/migrations/C5_big/20260507000010_tb_flash_nodo_resumo_contribuicao.sql b/migrations/20260507000010_tb_flash_nodo_resumo_contribuicao.sql similarity index 100% rename from migrations/C5_big/20260507000010_tb_flash_nodo_resumo_contribuicao.sql rename to migrations/20260507000010_tb_flash_nodo_resumo_contribuicao.sql diff --git a/migrations/C5_big/20260507000011_prc_flash_carga_resumo_contribuicao.sql b/migrations/20260507000011_prc_flash_carga_resumo_contribuicao.sql similarity index 100% rename from migrations/C5_big/20260507000011_prc_flash_carga_resumo_contribuicao.sql rename to migrations/20260507000011_prc_flash_carga_resumo_contribuicao.sql diff --git a/migrations/C5_big/20260507000012_prc_flash_atualiza_contribuicao_dono.sql b/migrations/20260507000012_prc_flash_atualiza_contribuicao_dono.sql similarity index 100% rename from migrations/C5_big/20260507000012_prc_flash_atualiza_contribuicao_dono.sql rename to migrations/20260507000012_prc_flash_atualiza_contribuicao_dono.sql diff --git a/migrations/C5_big/20260507000013_prc_flash_carga_dados_contribuicao.sql b/migrations/20260507000013_prc_flash_carga_dados_contribuicao.sql similarity index 100% rename from migrations/C5_big/20260507000013_prc_flash_carga_dados_contribuicao.sql rename to migrations/20260507000013_prc_flash_carga_dados_contribuicao.sql diff --git a/migrations/C5_big/20260507000014_tb_flash_meta_contribuicao_stg.sql b/migrations/20260507000014_tb_flash_meta_contribuicao_stg.sql similarity index 100% rename from migrations/C5_big/20260507000014_tb_flash_meta_contribuicao_stg.sql rename to migrations/20260507000014_tb_flash_meta_contribuicao_stg.sql diff --git a/migrations/C5_big/20260507000015_vw_flash_meta_contribuicao_stg.sql b/migrations/20260507000015_vw_flash_meta_contribuicao_stg.sql similarity index 100% rename from migrations/C5_big/20260507000015_vw_flash_meta_contribuicao_stg.sql rename to migrations/20260507000015_vw_flash_meta_contribuicao_stg.sql From 8fea2da1c9716f9acca7ad70ac71f5bfc2494823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonath=C3=A3=20Correa?= Date: Thu, 7 May 2026 15:01:29 -0300 Subject: [PATCH 14/21] =?UTF-8?q?Fix:=20ajuste=20nas=20procedures=20de=20c?= =?UTF-8?q?ontribui=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...7000001_seq_tb_flash_fato_contribuicao.sql | 1 + ...60507000002_tb_flash_fato_contribuicao.sql | 1 + ..._seq_tb_flash_nodo_resumo_contribuicao.sql | 1 + ...0010_tb_flash_nodo_resumo_contribuicao.sql | 1 + ...11_prc_flash_carga_resumo_contribuicao.sql | 24 ++++++--- ...2_prc_flash_atualiza_contribuicao_dono.sql | 1 + ...013_prc_flash_carga_dados_contribuicao.sql | 50 ++++++++++++------- ...7000014_tb_flash_meta_contribuicao_stg.sql | 1 + ...7000015_vw_flash_meta_contribuicao_stg.sql | 1 + 9 files changed, 56 insertions(+), 25 deletions(-) diff --git a/migrations/20260507000001_seq_tb_flash_fato_contribuicao.sql b/migrations/20260507000001_seq_tb_flash_fato_contribuicao.sql index 169f621..96e423d 100644 --- a/migrations/20260507000001_seq_tb_flash_fato_contribuicao.sql +++ b/migrations/20260507000001_seq_tb_flash_fato_contribuicao.sql @@ -21,3 +21,4 @@ BEGIN END IF; END; -- +goose StatementEnd + \ No newline at end of file diff --git a/migrations/20260507000002_tb_flash_fato_contribuicao.sql b/migrations/20260507000002_tb_flash_fato_contribuicao.sql index fc35414..07062f1 100644 --- a/migrations/20260507000002_tb_flash_fato_contribuicao.sql +++ b/migrations/20260507000002_tb_flash_fato_contribuicao.sql @@ -109,3 +109,4 @@ BEGIN END IF; END; -- +goose StatementEnd + \ No newline at end of file diff --git a/migrations/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql b/migrations/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql index 426e103..064b5cf 100644 --- a/migrations/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql +++ b/migrations/20260507000009_seq_tb_flash_nodo_resumo_contribuicao.sql @@ -21,3 +21,4 @@ BEGIN END IF; END; -- +goose StatementEnd + \ No newline at end of file diff --git a/migrations/20260507000010_tb_flash_nodo_resumo_contribuicao.sql b/migrations/20260507000010_tb_flash_nodo_resumo_contribuicao.sql index e841102..7b8d179 100644 --- a/migrations/20260507000010_tb_flash_nodo_resumo_contribuicao.sql +++ b/migrations/20260507000010_tb_flash_nodo_resumo_contribuicao.sql @@ -87,3 +87,4 @@ BEGIN END IF; END; -- +goose StatementEnd + \ No newline at end of file diff --git a/migrations/20260507000011_prc_flash_carga_resumo_contribuicao.sql b/migrations/20260507000011_prc_flash_carga_resumo_contribuicao.sql index d83796d..9c854d9 100644 --- a/migrations/20260507000011_prc_flash_carga_resumo_contribuicao.sql +++ b/migrations/20260507000011_prc_flash_carga_resumo_contribuicao.sql @@ -10,7 +10,9 @@ BEGIN INSERT INTO TB_FLASH_NODO_RESUMO_CONTRIBUICAO ( id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia, - valor_contribuicao, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva, + nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, + vlr_contribuicao, vl_ticket_medio, + valor_meta_propria, valor_meta_filhos, valor_meta_efetiva, percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva, desvio, percentual_atingimento, data_apuracao ) @@ -22,7 +24,10 @@ BEGIN contribuicao_direta AS ( SELECT f.id_nodo, TRUNC(f.data_referencia) AS data_referencia, f.ano_referencia, f.mes_referencia, f.dia_referencia, - SUM(f.vlr_contribuicao) AS valor_contribuicao + SUM(f.nro_tickets) AS nro_tickets, + SUM(f.vlr_imp_contribuicao) AS vlr_imp_contribuicao, + SUM(f.qtde_contribuicao) AS qtde_contribuicao, + SUM(f.vlr_contribuicao) AS vlr_contribuicao FROM TB_FLASH_FATO_CONTRIBUICAO f WHERE f.data_referencia BETWEEN p_data_inicial AND p_data_final GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia @@ -33,7 +38,10 @@ BEGIN EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia, EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia, EXTRACT(DAY FROM d.data_referencia) AS dia_referencia, - SUM(NVL(cd.valor_contribuicao, 0)) AS valor_contribuicao + SUM(NVL(cd.nro_tickets, 0)) AS nro_tickets, + SUM(NVL(cd.vlr_imp_contribuicao, 0)) AS vlr_imp_contribuicao, + SUM(NVL(cd.qtde_contribuicao, 0)) AS qtde_contribuicao, + SUM(NVL(cd.vlr_contribuicao, 0)) AS vlr_contribuicao FROM ( SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral, n.id_nodo AS id_nodo_descendente @@ -72,17 +80,21 @@ BEGIN ) SELECT SEQ_TB_FLASH_NODO_RESUMO_CONTRIBUICAO.NEXTVAL, b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia, - ch.valor_contribuicao, + ch.nro_tickets, + ch.vlr_imp_contribuicao, + ch.qtde_contribuicao, + ch.vlr_contribuicao, + CASE WHEN NVL(ch.nro_tickets, 0) > 0 THEN ch.vlr_contribuicao / ch.nro_tickets ELSE NULL END, mpd.valor_meta_propria, mfd.valor_meta_filhos, CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, mpd.percentual_meta_propria, CAST(NULL AS NUMBER(10,4)), CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END, - NVL(ch.valor_contribuicao, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0), + NVL(ch.vlr_contribuicao, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0), CASE WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL - ELSE (NVL(ch.valor_contribuicao, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100 + ELSE (NVL(ch.vlr_contribuicao, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100 END, SYSDATE FROM base b diff --git a/migrations/20260507000012_prc_flash_atualiza_contribuicao_dono.sql b/migrations/20260507000012_prc_flash_atualiza_contribuicao_dono.sql index c0b6b73..8c12ae7 100644 --- a/migrations/20260507000012_prc_flash_atualiza_contribuicao_dono.sql +++ b/migrations/20260507000012_prc_flash_atualiza_contribuicao_dono.sql @@ -79,3 +79,4 @@ BEGIN END IF; END; -- +goose StatementEnd + \ No newline at end of file diff --git a/migrations/20260507000013_prc_flash_carga_dados_contribuicao.sql b/migrations/20260507000013_prc_flash_carga_dados_contribuicao.sql index a0317f6..2c009ac 100644 --- a/migrations/20260507000013_prc_flash_carga_dados_contribuicao.sql +++ b/migrations/20260507000013_prc_flash_carga_dados_contribuicao.sql @@ -85,8 +85,11 @@ BEGIN FOR r IN ( SELECT Z.DTA, Z.NROEMPRESA, + Z.NOMEEMPRESA, Z.NROSEGMENTO, + Z.NRODIVISAO, Z.SEQPRODUTO, + Z.SEQPRODUTOBASE, Z.PRODUTO, Z.SEQCATEGORIAN1, Z.CATEGORIAN1, @@ -121,11 +124,15 @@ BEGIN Z.VLRCONTRIB_MES_ANT, Z.VLRVENDA_ANO_ANT, Z.VLRCONTRIB_ANO_ANT, - Z.QTDE_VENDA + Z.QTDE_VENDA, + Z.VLR_IMP_VENDA, + Z.PROPQTDPRODUTOBASE FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/ TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA, V.NROEMPRESA, + E.NOMEFANTASIA AS NOMEEMPRESA, V.NROSEGMENTO, + V.NRODIVISAO, V.SEQPRODUTO, A.SEQPRODUTOBASE, A.DESCCOMPLETA PRODUTO, @@ -348,7 +355,8 @@ BEGIN , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT - , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT + , MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE FROM MRL_CUSTODIA Y JOIN MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA JOIN MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO @@ -363,9 +371,10 @@ BEGIN WHERE V.NROEMPRESA IN ( SELECT E.EMPRESA_ID FROM EMPRESA_PARAMETROS E WHERE E.PARTICIPA_FLASH = 1 ) AND V.NROSEGMENTO IN ( SELECT A.NROSEGMENTO FROM CONSINCO.MAD_SEGMENTO A WHERE A.STATUS = 'A' ) AND DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' ) - AND V.DTAVDA BETWEEN ParDataInicial AND ParDataFinal + AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) , V.NROEMPRESA + , E.NOMEFANTASIA , V.NRODIVISAO , V.NROSEGMENTO , V.SEQPRODUTO @@ -376,29 +385,29 @@ BEGIN , CC1.CATEGORIA) Z ) LOOP - v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa); + v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.NROEMPRESA), r.NOMEEMPRESA, 1, r.NROEMPRESA); - IF r.codcatn1 IS NOT NULL THEN - v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa); + IF r.SEQCATEGORIAN1 IS NOT NULL THEN + v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN1), r.CATEGORIAN1, 2, r.NROEMPRESA); ELSE v_id_cat1 := v_id_empresa; END IF; - IF r.codcatn2 IS NOT NULL THEN - v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa); + IF r.SEQCATEGORIAN2 IS NOT NULL THEN + v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN2), r.CATEGORIAN2, 3, r.NROEMPRESA); ELSE v_id_cat2 := v_id_cat1; END IF; - IF r.codcatn3 IS NOT NULL THEN - v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa); + IF r.SEQCATEGORIAN3 IS NOT NULL THEN + v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN3), r.CATEGORIAN3, 4, r.NROEMPRESA); ELSE v_id_cat3 := v_id_cat2; END IF; - IF r.codcatn4 IS NOT NULL THEN - v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa); + IF r.SEQCATEGORIAN4 IS NOT NULL THEN + v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN4), r.CATEGORIAN4, 5, r.NROEMPRESA); ELSE v_id_cat4 := v_id_cat3; END IF; - IF r.codcatn5 IS NOT NULL THEN - v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa); + IF r.SEQCATEGORIAN5 IS NOT NULL THEN + v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN5), r.CATEGORIAN5, 6, r.NROEMPRESA); ELSE v_id_cat5 := v_id_cat4; END IF; - v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase); + v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.SEQPRODUTO), r.PRODUTO, 7, r.NROEMPRESA, r.SEQPRODUTO, r.SEQPRODUTOBASE); INSERT INTO TB_FLASH_FATO_CONTRIBUICAO ( id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, @@ -407,10 +416,13 @@ BEGIN vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro ) VALUES ( SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL, - r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana, - v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao, - r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_contribuicao, - r.qtde_contribuicao, r.vlr_contribuicao, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE + r.DTA, EXTRACT(YEAR FROM r.DTA), EXTRACT(MONTH FROM r.DTA), EXTRACT(DAY FROM r.DTA), + TO_NUMBER(TO_CHAR(r.DTA, 'D')), + v_id_produto, v_id_empresa, r.NROEMPRESA, r.NOMEEMPRESA, r.SEQPRODUTO, r.PRODUTO, + r.SEQPRODUTOBASE, r.NRODIVISAO, r.NROSEGMENTO, r.QTDE_VENDA, r.VLR_IMP_VENDA, + r.QTDE_VENDA, r.VLRCONTRIB, + CASE WHEN r.QTDE_VENDA > 0 THEN r.VLRVENDA / r.QTDE_VENDA ELSE NULL END, + r.PROPQTDPRODUTOBASE, SYSDATE ); END LOOP; diff --git a/migrations/20260507000014_tb_flash_meta_contribuicao_stg.sql b/migrations/20260507000014_tb_flash_meta_contribuicao_stg.sql index 7ec7401..24e4b1f 100644 --- a/migrations/20260507000014_tb_flash_meta_contribuicao_stg.sql +++ b/migrations/20260507000014_tb_flash_meta_contribuicao_stg.sql @@ -71,3 +71,4 @@ BEGIN END IF; END; -- +goose StatementEnd + \ No newline at end of file diff --git a/migrations/20260507000015_vw_flash_meta_contribuicao_stg.sql b/migrations/20260507000015_vw_flash_meta_contribuicao_stg.sql index 76d9027..4d68566 100644 --- a/migrations/20260507000015_vw_flash_meta_contribuicao_stg.sql +++ b/migrations/20260507000015_vw_flash_meta_contribuicao_stg.sql @@ -31,3 +31,4 @@ BEGIN END IF; END; -- +goose StatementEnd + \ No newline at end of file From 139fbaf0035b974fbb9848f499746037eed449b2 Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Thu, 7 May 2026 15:03:25 -0300 Subject: [PATCH 15/21] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20da=20query=20de?= =?UTF-8?q?=20Flash=20de=20Vendas=20-=20Categorias.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash/flash.module.ts | 86 ++------------------------------------- 1 file changed, 4 insertions(+), 82 deletions(-) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 463669d..50ffbc7 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -94,55 +94,20 @@ export default moduleFactory }, rows: [ { - label: "Meta Mês", + label: "Meta Mês", column: "meta_mes", format: "currency_short", }, { - label: "Mês Atual", + label: "Mês Atual", column: "mes_atual", format: "currency_short", }, { - label: "Dif ($)", - column: "dif_mes_atual", - format: "currency_short", - }, - { - label: "% Variação", + label: "% Variação", column: "variacao_atual", format: "percentage", }, - { - label: "Mês Anterior", - column: "mes_anterior", - format: "currency_short", - }, - { - label: "Dif ($)", - column: "dif_mes_anterior", - format: "currency_short", - }, - { - label: "% Variação", - column: "variacao_mes_anterior", - format: "percentage", - }, - { - label: "Ano Anterior", - column: "ano_anterior", - format: "currency_short", - }, - { - label: "Dif ($)", - column: "dif_ano_anterior", - format: "currency_short", - }, - { - label: "% Variação", - column: "variacao_ano_anterior", - format: "percentage", - }, ], }, params: ["data_venda", "codigo_categoria_pai", "cod_empresa"], @@ -363,8 +328,6 @@ where 1 = 0`, SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual, - SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual, - CASE WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0 ELSE ROUND( @@ -376,48 +339,7 @@ where 1 = 0`, ) * 100 ) - 100 , 2) - END AS variacao_atual, - - SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior, - - SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior, - - SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - - SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior, - - CASE - WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 - ELSE ROUND( - ( - ( - SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - / - SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) - ) * 100 - ) - 100 - , 2) - END AS variacao_mes_anterior, - - SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior, - - SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior, - - SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - - SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior, - - CASE - WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 - ELSE ROUND( - ( - ( - SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - / - SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) - ) * 100 - ) - 100 - , 2) - END AS variacao_ano_anterior - + END AS variacao_atual FROM ( SELECT cat.codigo AS codigo, From ff1aa145cc3cbff02c97261585067f447a5b6e4c Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Thu, 7 May 2026 15:07:28 -0300 Subject: [PATCH 16/21] =?UTF-8?q?Revert=20"Atualiza=C3=A7=C3=A3o=20da=20qu?= =?UTF-8?q?ery=20de=20Flash=20de=20Vendas=20-=20Categorias."?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 139fbaf0035b974fbb9848f499746037eed449b2. --- src/flash/flash.module.ts | 86 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 50ffbc7..463669d 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -94,20 +94,55 @@ export default moduleFactory }, rows: [ { - label: "Meta Mês", + label: "Meta Mês", column: "meta_mes", format: "currency_short", }, { - label: "Mês Atual", + label: "Mês Atual", column: "mes_atual", format: "currency_short", }, { - label: "% Variação", + label: "Dif ($)", + column: "dif_mes_atual", + format: "currency_short", + }, + { + label: "% Variação", column: "variacao_atual", format: "percentage", }, + { + label: "Mês Anterior", + column: "mes_anterior", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_mes_anterior", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_mes_anterior", + format: "percentage", + }, + { + label: "Ano Anterior", + column: "ano_anterior", + format: "currency_short", + }, + { + label: "Dif ($)", + column: "dif_ano_anterior", + format: "currency_short", + }, + { + label: "% Variação", + column: "variacao_ano_anterior", + format: "percentage", + }, ], }, params: ["data_venda", "codigo_categoria_pai", "cod_empresa"], @@ -328,6 +363,8 @@ where 1 = 0`, SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual, + CASE WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0 ELSE ROUND( @@ -339,7 +376,48 @@ where 1 = 0`, ) * 100 ) - 100 , 2) - END AS variacao_atual + END AS variacao_atual, + + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior, + + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior, + + CASE + WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ( + ( + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) + / + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) + ) * 100 + ) - 100 + , 2) + END AS variacao_mes_anterior, + + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior, + + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior, + + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior, + + CASE + WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ( + ( + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) + / + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) + ) * 100 + ) - 100 + , 2) + END AS variacao_ano_anterior + FROM ( SELECT cat.codigo AS codigo, From bbd48ea2f7582dcae687eee6c41b7d22be41799b Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Thu, 7 May 2026 15:08:58 -0300 Subject: [PATCH 17/21] =?UTF-8?q?Corre=C3=A7=C3=B5es=20de=20acentua=C3=A7?= =?UTF-8?q?=C3=A3o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash/flash.module.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 463669d..7fe8ebd 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -94,12 +94,12 @@ export default moduleFactory }, rows: [ { - label: "Meta Mês", + label: "Meta Mês", column: "meta_mes", format: "currency_short", }, { - label: "Mês Atual", + label: "Mês Atual", column: "mes_atual", format: "currency_short", }, @@ -109,12 +109,12 @@ export default moduleFactory format: "currency_short", }, { - label: "% Variação", + label: "% Variação", column: "variacao_atual", format: "percentage", }, { - label: "Mês Anterior", + label: "Mês Anterior", column: "mes_anterior", format: "currency_short", }, @@ -124,7 +124,7 @@ export default moduleFactory format: "currency_short", }, { - label: "% Variação", + label: "% Variação", column: "variacao_mes_anterior", format: "percentage", }, @@ -139,7 +139,7 @@ export default moduleFactory format: "currency_short", }, { - label: "% Variação", + label: "% Variação", column: "variacao_ano_anterior", format: "percentage", }, From c5e8419894b4e6a17d2701612722ffd52c73acbe Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Thu, 7 May 2026 16:38:03 -0300 Subject: [PATCH 18/21] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20da=20query=20para?= =?UTF-8?q?=20retornar=20o=20n=C3=ADvel=20correto=20dos=20produtos.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash/flash.module.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 7fe8ebd..5944f46 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -348,7 +348,7 @@ where 1 = 0`, ) ) SELECT - 'Categorias' AS canalapp, + x.tipo_nodo AS canalapp, x.codigo AS cod_empresa, @@ -422,6 +422,7 @@ where 1 = 0`, SELECT cat.codigo AS codigo, cat.nome AS nomeempresaapp, + cat.tipo_nodo, r.valor_meta_efetiva, r.valor_venda, CASE @@ -453,7 +454,7 @@ where 1 = 0`, GROUP BY GROUPING SETS ( - (x.codigo, x.nomeempresaapp), + (x.codigo, x.nomeempresaapp, x.tipo_nodo), () ) From 0defa669a31039f31fc4d8664ba17642a48412c6 Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Fri, 8 May 2026 17:08:34 -0300 Subject: [PATCH 19/21] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20da=20query=20de?= =?UTF-8?q?=20Flash=20de=20Perdas=20-=20Categorias.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/flash_perdas/flash_perdas.module.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/flash_perdas/flash_perdas.module.ts b/src/flash_perdas/flash_perdas.module.ts index 39a3c3c..a1a7571 100644 --- a/src/flash_perdas/flash_perdas.module.ts +++ b/src/flash_perdas/flash_perdas.module.ts @@ -343,7 +343,7 @@ where 1 = 0`, ) ) SELECT - 'Categorias' AS categoriaapp, + x.tipo_nodo AS categoriaapp, x.codigo AS cod_empresa, @@ -419,6 +419,7 @@ where 1 = 0`, SELECT cat.codigo AS codigo, cat.nome AS nomeempresaapp, + cat.tipo_nodo, r.valor_meta_efetiva, r.valor_venda, CASE @@ -450,7 +451,7 @@ where 1 = 0`, GROUP BY GROUPING SETS ( - (x.codigo, x.nomeempresaapp), + (x.codigo, x.nomeempresaapp, x.tipo_nodo), () ) From c2e98a7ae21ea7b703b88bf64a0e4648159e1306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sarah=20Magalh=C3=A3es?= Date: Tue, 12 May 2026 10:34:51 -0300 Subject: [PATCH 20/21] =?UTF-8?q?Adi=C3=A7=C3=A3o=20do=20assunto=20de=20fl?= =?UTF-8?q?ash=20de=20vendas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/flash/flash.module.ts | 96 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 5944f46..0988e3d 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -8,6 +8,102 @@ export default moduleFactory description: "Flash de Vendas", label: "Flash de Vendas", icon: "bar-chart", + ai : { + topics : { + flash_vendas_big : { + descricao: "Consulta e análise do relatório Flash de Vendas. Permite visualizar metas do mês, vendas do mês atual, variações e projeções, além de comparativos com o mês anterior e ano anterior. Útil para projeção de batimento de meta, ranking de lojas e comparativos de performance.", + prompt: { + prompt_persona: "Você é um Especialista em Dados e Extrator de Filtros de alto nível. Sua única tarefa é analisar a solicitação do usuário sobre desempenho de vendas (Flash de Vendas), identificar quais informações ele deseja buscar (como data de referência ou loja) e como deseja visualizar esses dados (agrupamento), preparando as variáveis exatas para o sistema de relatórios.", + prompt_tarefa: "1. Identificação de Filtros: Extraia a data de referência (geralmente hoje) e identifique se o usuário quer ver dados de uma loja específica. A fonte de dados apenas suporta filtro de 'data' e 'loja'.\n2. Identificação de Agrupamento: Verifique se o usuário deseja visualizar o total geral (agrupamento vazio) ou agrupar por loja (ex: 'Qual loja está mais distante da meta?'). A query não suporta agrupamentos por divisão, segmento ou categoria.\n3. Identificação do Propósito Analítico:\n - Se perguntar 'Vou bater a meta do mês?', a IA final deverá calcular a média de venda diária (realizado / dias corridos), projetar o fechamento (média * dias do mês), comparar com a meta e exibir o gap.\n - Se perguntar 'Qual loja está mais distante da meta?', a IA final deverá criar um ranking ordenando as lojas pelo percentual de atingimento.\n - Se perguntar comparativos temporais ('mês passado' ou 'ano passado'), a IA final fará o comparativo direto em valor e percentual.", + prompt_regras_gerais: "- Extraia listas de lojas se múltiplas forem solicitadas (ex: 'loja A e loja B').\n- Se não houver solicitação explícita ou implícita de agrupamento por loja, não preencha a chave de agrupamento, mantendo-a vazia.\n- Não invente filtros ou agrupamentos (como divisão, segmento) que não existem na configuração.", + prompt_regras_contexto: "- Nunca analise a mensagem de forma isolada se ela for um refinamento (ex: 'E como foi o ano passado?'). Use o histórico para resgatar os filtros anteriores.\n- Não invente valores para os filtros se não forem fornecidos na conversa.", + prompt_exemplos: "*Exemplo 1:*\n- Usuário: 'Vou bater a meta do mês?'\n- Raciocínio: Não há filtro de loja explícito (visão global). Nenhum agrupamento solicitado. A IA apenas extrairá os totais para calcular a projeção e gap com a meta.\n\n*Exemplo 2:*\n- Usuário: 'Qual loja está mais distante da meta?'\n- Raciocínio: Há um pedido implícito de agrupamento por 'loja'. O sistema irá consolidar os dados de todas as lojas para montar o ranking das mais distantes (menor atingimento percentual).\n\n*Exemplo 3:*\n- Usuário: 'Como estamos em relação ao mês passado?'\n- Raciocínio: Nenhuma quebra solicitada, exceto se for contexto anterior. O foco é a comparação de mes_atual vs mes_anterior em valor e percentual.", + prompt_outras_infos: "Atenção: A query subjacente fornece apenas totalizações gerais ou por loja. Qualquer pedido de quebra por divisão, regional ou segmento não pode ser atendido. A lógica de projeção (diária * total dias), gap de valor e ranking de percentual ficam a cargo do processamento final baseado nas colunas mes_atual, meta_mes, mes_anterior e ano_anterior retornadas.", + prompt_saida: "Sua resposta deve ser uma análise detalhada e objetiva dos dados recebidos, apresentando os principais insights de forma clara e concisa." + }, + json_params_saida: { + agrupamentos: [ + { + "nome_parametro": "loja", + coluna_vtr: "x.codigo" + } + ], + filtros: { + data_venda: { + descricao_agente: "A data base para a consulta das vendas. Caso não informada explicitamente, usar a data de hoje no formato YYYY-MM-DD.", + coluna_vtr: "args.data_venda", + tabela_rag: " " + }, + loja: { + descricao_agente: "Lista de nomes ou códigos de lojas mencionados para filtragem.", + coluna_vtr: "x.nomeempresaapp", + tabela_rag: "tb_flash_nodo" + } + } + }/*, + sql: `SELECT + ${agrupamento} AS KEY_FIELD, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual, + CASE + WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100 + , 2) + END AS variacao_atual, + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_mes_anterior, + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior, + CASE + WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / + SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100 + , 2) + END AS variacao_mes_anterior, + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) AS meta_ano_anterior, + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior, + SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior, + CASE + WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0 + ELSE ROUND( + ((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / + SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100 + , 2) + END AS variacao_ano_anterior + FROM + ( + SELECT + n.codigo, + n.nome AS nomeempresaapp, + n.codigo || ' - ' || n.nome AS loja_formatada, + r.valor_meta_efetiva, + r.valor_venda, + CASE + WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD') THEN 'ATUAL' + WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1) THEN 'MES_ANTERIOR' + WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12) THEN 'ANO_ANTERIOR' + END AS periodo + FROM tb_flash_nodo_resumo_venda r + JOIN tb_flash_nodo n ON n.id_nodo = r.id_nodo + WHERE n.tipo_nodo = 'EMPRESA' + AND ( + r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD') + OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1) + OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12) + ) + ) x + WHERE 1=1 + --FILTROS-- + GROUP BY ${agrupamento} + ORDER BY mes_atual DESC`*/ + } + } + }, queries: { flash: { name: "Flash de Vendas", From d10d046ca71226edc2280f1d09d30f8c0e2fd374 Mon Sep 17 00:00:00 2001 From: tkinaba Date: Tue, 12 May 2026 17:12:06 -0300 Subject: [PATCH 21/21] chore: bump jeff version v1.0.10 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97166a1..3bf4355 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,16 +9,16 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@davinti/jeff": "^1.0.9" + "@davinti/jeff": "^1.0.10" }, "devDependencies": { "tsx": "^4.21.0" } }, "node_modules/@davinti/jeff": { - "version": "1.0.9", - "resolved": "https://git.davinti.com.br/api/packages/davinTI/npm/%40davinti%2Fjeff/-/1.0.9/jeff-1.0.9.tgz", - "integrity": "sha512-qrpcShdzY/xUlUCXzcgmRAMWIlEkA4zXhhgdBKPULYxU1l8gS6jKA1h1Bf/omIdE8NTATBC2aTRbgew8NsBv5g==", + "version": "1.0.10", + "resolved": "https://git.davinti.com.br/api/packages/davinTI/npm/%40davinti%2Fjeff/-/1.0.10/jeff-1.0.10.tgz", + "integrity": "sha512-feJnWYr175fW6GQHhf+J7/ivfydRb85+6TgC3Qe/3Z+OWOLNxl1jgP4uJC8csi0eeWwu1/8sJ/RE97BIKeADVw==", "license": "ISC", "dependencies": { "@types/glob": "^8.1.0", diff --git a/package.json b/package.json index 6735d68..3f99f5c 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "license": "ISC", "description": "", "dependencies": { - "@davinti/jeff": "^1.0.9" + "@davinti/jeff": "^1.0.10" }, "devDependencies": { "tsx": "^4.21.0"