Feat: subida dos objetos de banco

This commit is contained in:
2026-05-07 14:32:29 -03:00
parent 8646327777
commit 6d599c6ef8
9 changed files with 0 additions and 0 deletions
@@ -1,23 +0,0 @@
-- +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
@@ -1,111 +0,0 @@
-- +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
@@ -1,23 +0,0 @@
-- +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
@@ -1,89 +0,0 @@
-- +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
@@ -1,107 +0,0 @@
-- +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
@@ -1,81 +0,0 @@
-- +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
@@ -1,432 +0,0 @@
-- +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
@@ -1,73 +0,0 @@
-- +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
@@ -1,33 +0,0 @@
-- +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