Patches Obrigatórios

Versão 19.17.0

315 - Popular a coluna emitente_codigo_municipio tabela NFe

Autor: Arthur Rogério
Arquivo: V315__popular_coluna_emitente_codigo_municipio_tabela_nfe.sql
Tipo: SQL
Atividade: #11732
Data: 19/09/2019

POSTGRES:

UPDATE nfe n
SET emitente_codigo_municipio = split_part(split_part(split_part(nd.dados_xml, '<enderEmit>', 2), '</cMun>', 1), '<cMun>', 2)::INTEGER
FROM nfe_documento nd
WHERE n.id = nd.nfe_id;

ORACLE:

MERGE INTO nfe n
USING (SELECT nfe_id, dados_xml FROM nfe_documento) nd
ON (n.id = nd.nfe_id)
WHEN MATCHED THEN
    UPDATE SET n.emitente_codigo_municipio = CAST(
    extractValue(xmltype(nd.dados_xml), 'nfeProc/NFe/infNFe/emit/enderEmit/cMun','xmlns="http://www.portalfiscal.inf.br/nfe"')AS INTEGER);

314 - Criação associação de Conta no DFe Client

Autor: Uillan Araújo
Arquivo: V314__criar_associacao_conta_dfe_client.sql
Tipo: SQL
Atividade: #12069
Data: 16/09/2019

POSTGRESQL:

ALTER TABLE dfe_client ADD COLUMN conta_id BIGINT  CONSTRAINT dfe_client_id_conta_fkey REFERENCES conta (id_conta)

ORACLE:

ALTER TABLE DFE_CLIENT ADD (conta_id NUMBER(19,0)) ADD CONSTRAINT dfe_client_id_conta_fkey FOREIGN KEY (conta_id) REFERENCES CONTA(id_conta);

313 - Drop Constraint Usuario do DFe Client

Autor: Uillan Araújo
Arquivo: V313__drop_constraint_usuario_dfe_client.sql
Tipo: SQL
Atividade: #12069
Data: 16/09/2019

POSTGRESQL:

ALTER TABLE dfe_client ALTER COLUMN id_usuario DROP NOT NULL;
ALTER TABLE dfe_client DROP CONSTRAINT id_usuario_fk;

ORACLE:

ALTER TABLE DFE_CLIENT MODIFY (ID_USUARIO NULL);
ALTER TABLE DFE_CLIENT DROP CONSTRAINT ID_USUARIO_FK;

312 - Cria index da coluna data_processamento para NFS-e (PATCH LONGO)

Autor: Ícaro Aguiar
Arquivo: V312__cria_index_data_processamento_nfse.sql
Tipo: SQL
Atividade: #12056
Data: 16/09/2019

POSTGRES e ORACLE:

CREATE INDEX idx_nfse_dtproc ON nfse (data_processamento);

311 - Cria index da coluna data_processamento para NF-e (PATCH LONGO)

Autor: Ícaro Aguiar
Arquivo: V311__cria_index_data_processamento_nfe.sql
Tipo: SQL
Atividade: #12056
Data: 16/09/2019

POSTGRES e ORACLE:

CREATE INDEX idx_nfe_dtproc ON nfe (data_processamento);

310 - Cria index da coluna data_processamento para CT-eOS (PATCH LONGO)

Autor: Ícaro Aguiar
Arquivo: V310__cria_index_data_processamento_cteos.sql
Tipo: SQL
Atividade: #12056
Data: 16/09/2019

POSTGRES e ORACLE:

CREATE INDEX idx_cteos_dtproc ON cteos (data_processamento);

309 - Cria index da coluna data_processamento para CT-e (PATCH LONGO)

Autor: Ícaro Aguiar
Arquivo: V309__cria_index_data_processamento_cte.sql
Tipo: SQL
Atividade: #12056
Data: 16/09/2019

POSTGRES e ORACLE:

CREATE INDEX idx_cte_dtproc ON cte (data_processamento);

308 - Cria index da coluna data_processamento para MDF-e (PATCH LONGO)

Autor: Ícaro Aguiar
Arquivo: V308__cria_index_data_processamento_mdfe.sql
Tipo: SQL
Atividade: #12056
Data: 16/09/2019

POSTGRES e ORACLE:

CREATE INDEX idx_mdfe_dtproc ON mdfe (data_processamento);

307 - Cria index da coluna data_processamento para NFC-e (PATCH LONGO)

Autor: Ícaro Aguiar
Arquivo: V307__cria_index_data_processamento_nfce.sql
Tipo: SQL
Atividade: #12056
Data: 16/09/2019

POSTGRES e ORACLE:

CREATE INDEX idx_nfce_dtproc ON nfce (data_processamento);

306 - Adicionar coluna emitente_codigo_municipio para (NFe, NFCe, CTe, CTe-OS e MDFe)

Autor: Arthur Rogério
Arquivo: V306__adicionar_coluna_emitente_codigo_municipio.sql
Tipo: SQL
Atividade: #11732
Data: 13/09/2019

POSTGRES:

ALTER TABLE nfe ADD COLUMN emitente_codigo_municipio INTEGER;
ALTER TABLE nfce ADD COLUMN emitente_codigo_municipio INTEGER;
ALTER TABLE cte ADD COLUMN emitente_codigo_municipio INTEGER;
ALTER TABLE cteos ADD COLUMN emitente_codigo_municipio INTEGER;
ALTER TABLE mdfe ADD COLUMN emitente_codigo_municipio INTEGER;

ORACLE:

ALTER TABLE nfe ADD (emitente_codigo_municipio INTEGER);
ALTER TABLE nfce ADD (emitente_codigo_municipio INTEGER);
ALTER TABLE cte ADD (emitente_codigo_municipio INTEGER);
ALTER TABLE cteos ADD (emitente_codigo_municipio INTEGER);
ALTER TABLE mdfe ADD (emitente_codigo_municipio INTEGER);

305 - Configurações SMTP na conta

Autor: Erickson Silva
Arquivo: V305__adicionar_colunas_smtp_conta.sql
Tipo: SQL
Atividade: #12031
Data: 09/09/2019

POSTGRES:

ALTER TABLE conta ADD COLUMN rem_especifico BOOLEAN NOT NULL DEFAULT FALSE;
ALTER TABLE conta ADD COLUMN smtp_serv CHARACTER VARYING(255);
ALTER TABLE conta ADD COLUMN smtp_porta INTEGER;
ALTER TABLE conta ADD COLUMN smtp_remetente CHARACTER VARYING(255);
ALTER TABLE conta ADD COLUMN smtp_usuario CHARACTER VARYING(255);
ALTER TABLE conta ADD COLUMN smtp_protocolo CHARACTER VARYING(4) DEFAULT 'NONE'::CHARACTER VARYING;
ALTER TABLE conta ADD COLUMN smtp_senha CHARACTER VARYING(255);

ORACLE:

ALTER TABLE conta ADD rem_especifico NUMBER(1, 0) DEFAULT 0 NOT NULL;
ALTER TABLE conta ADD smtp_serv VARCHAR2(255);
ALTER TABLE conta ADD smtp_porta NUMBER(10, 0);
ALTER TABLE conta ADD smtp_remetente VARCHAR2(255);
ALTER TABLE conta ADD smtp_usuario VARCHAR2(255);
ALTER TABLE conta ADD smtp_protocolo VARCHAR2(4) DEFAULT 'NONE';
ALTER TABLE conta ADD smtp_senha VARCHAR2(255);

Versão 19.16.0

304 - Correções nas colunas da tabela PARAMETROS_CLIENTE (ORACLE)

Autor: Erickson Silva
Arquivo: V304__corrigir_colunas_tabela_parametros_cliente.sql
Tipo: SQL
Atividade: #11996
Data: 30/08/2019

ORACLE:

ALTER TABLE PARAMETROS_CLIENTE
    MODIFY (ENVIARDANFE DEFAULT 0);
ALTER TABLE PARAMETROS_CLIENTE
    MODIFY (ENVIARNFE DEFAULT 1);
DECLARE
    CURSOR c_parametros_cliente
        IS
        SELECT column_name
        FROM user_tab_cols
        WHERE table_name = 'PARAMETROS_CLIENTE'
          AND column_name IN ('ENVIARDANFE', 'ENVIARNFE', 'FILIAL_ID')
          AND nullable = 'N';

BEGIN
    FOR r_coluna IN c_parametros_cliente
        LOOP
            EXECUTE IMMEDIATE 'ALTER TABLE PARAMETROS_CLIENTE MODIFY (' || r_coluna.column_name || ' NULL)';
        END LOOP;
END;

303 - Criar tabela preferencia grid

Autor: Erickson Silva
Arquivo: V303__criar_tabela_preferencia_grid.sql
Tipo: SQL
Atividade: #9296
Data: 28/08/2019

POSTGRES:

CREATE TABLE preferencia_grid
(
    id_pref_grid bigint                NOT NULL,
    grid_id      bigint                NOT NULL,
    nome_usuario character varying(64) NOT NULL,
    state        text                  NOT NULL,
    version      integer,
    CONSTRAINT pref_grid_pkey PRIMARY KEY (id_pref_grid),
    CONSTRAINT pref_grid_nome_usu_fkey FOREIGN KEY (nome_usuario)
        REFERENCES public.usuario (nome_usuario),
    CONSTRAINT pref_grid_grid_id_nome_usu_key UNIQUE (grid_id, nome_usuario)
);

CREATE SEQUENCE seq_id_pref_grid START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
SELECT pg_catalog.setval('seq_id_pref_grid', 1, false);

ORACLE:

CREATE TABLE preferencia_grid
(
    id_pref_grid NUMBER(19, 0)         NOT NULL,
    grid_id      NUMBER(19, 0)         NOT NULL,
    nome_usuario character varying(64) NOT NULL,
    state        CLOB                  NOT NULL,
    version      integer,
    CONSTRAINT pref_grid_pkey PRIMARY KEY (id_pref_grid),
    CONSTRAINT pref_grid_nome_usu_fkey FOREIGN KEY (nome_usuario)
        REFERENCES usuario (nome_usuario),
    CONSTRAINT pref_grid_grid_id_nome_usu_key UNIQUE (grid_id, nome_usuario)
);

CREATE SEQUENCE seq_id_pref_grid START WITH 1 INCREMENT BY 1;

298 - Adicionar tema personalizado para contas

Autor: Ícaro Aguiar Perez
Arquivo: V298__alterar_tabela_preferencia_aparencia_adiciona_id_conta.sql
Tipo: SQL
Atividade: #11968
Data: 28/08/2019

POSTGRES:

ALTER TABLE preferencia_aparencia
    ADD COLUMN conta_id BIGINT
    CONSTRAINT preferencia_aparencia_id_conta_fkey REFERENCES conta (id_conta) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION;

ALTER TABLE conta
    ADD COLUMN tema_personalizado_ativo BOOLEAN;

ORACLE:

ALTER TABLE preferencia_aparencia
    ADD (conta_id NUMBER(19,0))
    ADD FOREIGN KEY (conta_id) REFERENCES conta(id_conta);

ALTER TABLE conta
    ADD (tema_personalizado_ativo NUMBER(1,0));

Versão 19.15.0

302 - Criar tabela evento_sistema

Autor: Mateus Neves
Arquivo: V302__criar_tabela_evento_sistema.sql
Tipo: SQL
Atividade: #11981
Data: 27/08/2019

POSTGRES:

[...]

ORACLE:

[...]

301 - Remover hífens duplicados da coluna 'nome' da Tabela 'Arquivo'

Autor: Arthur Rogério
Arquivo: V301__remover_hifens_duplicados_coluna_nome_tabela_arquivo.sql
Tipo: SQL
Atividade: #11995
Data: 26/08/2019

POSTGRES:

update arquivo set nome = regexp_replace(nome, '-{2,}', '-', 'g') where nome ~ '-{2,}';

ORACLE:

update arquivo set nome = regexp_replace(nome, '-{2,}', '-', 1, 0) where regexp_like (nome, '-{2,}');

300 - Remover permissão de gerenciar Filiais

Autor: Lucas Campos
Arquivo: V300__remover_permissao_gerenciar_filiais.sql
Tipo: SQL
Atividade: #11676
Data: 22/08/2019

POSTGRES:

delete from perfil_permissoes where permissao = 'ROLE_GERENCIAR_UNIDADES_FILIAIS';

ORACLE:

delete from perfil_permissoes where permissao = 'ROLE_GERENCIAR_UNIDADES_FILIAIS';

299 - Normalizar emails copia da tabela unidade_cliente

Autor: Mateus Neves
Arquivo: V299__normalizar_emails_copia_unidade_cliente.sql
Tipo: SQL
Atividade: #11970
Data: 19/08/2019

POSTGRES:

update unidade_cliente
set emails_copia = btrim(
        regexp_replace(regexp_replace(emails_copia, E'[\\n\\r\\s\\t;]+', ',', 'g'), E'[,]{2,}', ',', 'g'), ',')

ORACLE:

update unidade_cliente
set emails_copia = LTRIM(RTRIM(regexp_replace(regexp_replace(emails_copia, '(\s)|(\;)', ','), '([\,]{2,})', ','), ','),
                         ',')

Versão 19.14.0

297 - Criar tabela de preferência por conta de customizações na Página Inicial

Autor: Uillan
Arquivo: V297__criacao_tabela_conta_preferencia_pagina_inicial.sql
Tipo: SQL
Atividade: #11691
Data: 08/08/2019

POSTGRES:

CREATE TABLE
    conta_preferencia_tela_inicial
    (
        id_conta_pref_tela BIGINT NOT NULL,
        conta_id BIGINT NOT NULL,
        edicao_urls_login_ativa BOOLEAN,
        saiba_mais_ativo BOOLEAN,
        url_saiba_mais CHARACTER VARYING(150),
        url_personalizada_ativa BOOLEAN,
        descricao_url_personalizada CHARACTER VARYING(60),
        url_personalizada CHARACTER VARYING(150),
        url_adicional_ativa BOOLEAN,
        descricao_url_adicional CHARACTER VARYING(60),
        url_adicional CHARACTER VARYING(150),
        url_complementar_ativa BOOLEAN,
        descricao_url_complementar CHARACTER VARYING(60),
        url_complementar CHARACTER VARYING(150),
        rodape_ativo BOOLEAN,
        descricao_url_rodape CHARACTER VARYING(60),
        url_rodape CHARACTER VARYING(150),
        version INTEGER,
        CONSTRAINT conta_preferencia_tela_inicial_conta_pk PRIMARY KEY (id_conta_pref_tela),
        CONSTRAINT conta_preferencia_tela_inicial_conta_fkey FOREIGN KEY (conta_id) REFERENCES conta
        (id_conta),
        UNIQUE (conta_id)
    );

CREATE SEQUENCE seq_id_conta_pref_tela_inicial START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;

ORACLE:

CREATE TABLE conta_preferencia_tela_inicial (
  id_conta_pref_tela NUMBER(19,0) PRIMARY KEY,
  conta_id NUMBER(19,0) NOT NULL UNIQUE,
    edicao_urls_login_ativa NUMBER(1, 0),
    saiba_mais_ativo NUMBER(1, 0),
    url_saiba_mais VARCHAR2(150),
    url_personalizada_ativa NUMBER(1, 0),
    descricao_url_personalizada VARCHAR2(60),
    url_personalizada VARCHAR2(150),
    url_adicional_ativa NUMBER(1, 0),
    descricao_url_adicional VARCHAR2(60),
    url_adicional VARCHAR2(150),
    url_complementar_ativa NUMBER(1, 0),
    descricao_url_complementar VARCHAR2(60),
    url_complementar VARCHAR2(150),
    rodape_ativo NUMBER(1, 0),
    descricao_url_rodape VARCHAR2(60),
    url_rodape VARCHAR2(150),
    version NUMBER(10,0),
    FOREIGN KEY (conta_id) REFERENCES conta(id_conta)
);

CREATE SEQUENCE seq_id_conta_pref_tela_inicial START WITH 1 INCREMENT BY 1;

296 - Criar tabelas para Importações

Autor: Erickson Silva
Arquivo: V296__criar_tabelas_importacoes.sql
Tipo: SQL
Atividade: #9364
Data: 05/08/2019

POSTGRES:

CREATE TABLE importacao_empresa (
    id_importacao BIGINT PRIMARY KEY,
    id_conta BIGINT NOT NULL,
    nome_usuario character varying(64) NOT NULL,
    data_execucao TIMESTAMP,
    nome_arquivo character varying(255) NOT NULL,
    quantidade_linhas_processadas INTEGER,
    quantidade_total_linhas INTEGER,
    version INTEGER,
    FOREIGN KEY (id_conta) REFERENCES conta(id_conta),
    FOREIGN KEY (nome_usuario) REFERENCES usuario(nome_usuario)
);

CREATE TABLE importacao_empresa_invalida (
    id_importacao_invalida BIGINT PRIMARY KEY ,
    id_importacao BIGINT NOT NULL,
    conteudo_linha TEXT NOT NULL,
    numero_linha INTEGER NOT NULL,
    cnpj VARCHAR(128),
    motivo VARCHAR(255) NOT NULL,
    version INTEGER,
    FOREIGN KEY (id_importacao) REFERENCES importacao_empresa(id_importacao)
);

CREATE SEQUENCE seq_id_importacao_empresa_inv START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
SELECT pg_catalog.setval('seq_id_importacao_empresa_inv', 1, false);

CREATE SEQUENCE seq_id_importacao_empresa START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
SELECT pg_catalog.setval('seq_id_importacao_empresa', 1, false);

ORACLE:

CREATE TABLE importacao_empresa (
    id_importacao NUMBER(19,0) PRIMARY KEY,
    id_conta NUMBER(19,0) NOT NULL,
    nome_usuario varchar2(64) NOT NULL,
    data_execucao TIMESTAMP,
    nome_arquivo varchar2(255) NOT NULL,
    quantidade_linhas_processadas INTEGER,
    quantidade_total_linhas INTEGER,
    version INTEGER,
    FOREIGN KEY (id_conta) REFERENCES conta(id_conta),
    FOREIGN KEY (nome_usuario) REFERENCES usuario(nome_usuario)
);

CREATE TABLE importacao_empresa_invalida (
    id_importacao_invalida NUMBER(19,0) PRIMARY KEY ,
    id_importacao NUMBER(19,0) NOT NULL,
    conteudo_linha CLOB NOT NULL,
    numero_linha INTEGER NOT NULL,
    cnpj VARCHAR(128),
    motivo VARCHAR(255) NOT NULL,
    version INTEGER,
    FOREIGN KEY (id_importacao) REFERENCES importacao_empresa(id_importacao)
);

CREATE SEQUENCE seq_id_importacao_empresa_inv START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE seq_id_importacao_empresa START WITH 1 INCREMENT BY 1;

Versão 19.13.0

295 - Corrige coluna data_processamento de NFe após término do horário de verão (PATCH LONGO)

Autor: Renato Borges
Arquivo: V295__corrige_coluna_data_processamento_de_nfe_apos_termino_horario_de_verao.sql
Tipo: SQL
Atividade: #11855
Data: 15/07/2019

POSTGRES:

UPDATE nfe dfe
SET data_processamento = replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
FROM nfe_documento doc
WHERE dfe.chave_acesso = doc.chave_acesso
  AND doc.tipo_documento = 551
  AND dfe.versao in ('3.10', '4.00')
  AND dfe.data_processamento > '2019-02-16'
  AND dfe.emitente_uf <> 43
  AND dfe.origem_tipo <> 5
  AND dfe.manifesto_vigente_data_hora IS NOT NULL
  AND '' <> replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')
  AND date_part('hour', dfe.data_processamento) <> date_part('hour', replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone)
  AND date_part('minute', dfe.data_processamento) = date_part('minute', replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone)
  AND date_part('second', dfe.data_processamento) = date_part('second', replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone);

ORACLE:

UPDATE nfe dfe SET data_processamento = (
  SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
  FROM nfe_documento doc
  WHERE doc.chave_acesso = dfe.chave_acesso
    AND doc.tipo_documento = 551
    AND dfe.emitente_uf <> 43
    AND dfe.origem_tipo <> 5
    AND dfe.manifesto_vigente_data_hora IS NOT NULL
    AND TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') IS NOT NULL
    AND EXTRACT(hour FROM dfe.data_processamento) <> EXTRACT(hour FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
    AND EXTRACT(minute FROM dfe.data_processamento) = EXTRACT(minute FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
    AND EXTRACT(second FROM dfe.data_processamento) = EXTRACT(second FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
    AND ROWNUM = 1
)
WHERE dfe.versao IN ('3.10', '4.00')
  AND dfe.data_processamento != (
    SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    FROM nfe_documento doc
    WHERE doc.chave_acesso = dfe.chave_acesso
      AND doc.tipo_documento = 551
      AND dfe.emitente_uf <> 43
      AND dfe.origem_tipo <> 5
      AND dfe.manifesto_vigente_data_hora IS NOT NULL
      AND TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') IS NOT NULL
      AND EXTRACT(hour FROM dfe.data_processamento) <> EXTRACT(hour FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
      AND EXTRACT(minute FROM dfe.data_processamento) = EXTRACT(minute FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
      AND EXTRACT(second FROM dfe.data_processamento) = EXTRACT(second FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
      AND ROWNUM = 1
);

294 - Corrige XML NFe campo dhRecbto de documentos dos estados RO, AC, AM, RR, MS e MT após término do horário de verão (PATCH LONGO)

Autor: Renato Borges
Arquivo: V294__corrige_xml_campo_dhrecbto_de_documentos_de_ro_ac_am_rr_ms_mt_apos_termino_horario_de_verao.sql
Tipo: SQL
Atividade: #11854
Data: 12/07/2019

POSTGRES:

UPDATE nfe_documento doc
SET dados_xml = regexp_replace(doc.dados_xml, -- Fonte
                               '.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}', -- Padrao
                               '<dhRecbto>'||to_char(dfe.data_processamento,'yyyy-mm-DD"T"HH24:MI:SS')) -- String de substituicao
FROM nfe dfe
WHERE doc.nfe_id = dfe.id
  AND doc.tipo_documento = 551 -- nfeProc
  AND dfe.emitente_uf IN (11, 12, 13, 14, 50, 51) -- RO, AC, AM, RR, MS, MT
  AND dfe.origem_tipo = 5 -- Importa DFe
  AND dfe.manifesto_vigente_data_hora IS NULL
  AND dfe.data_processamento > '2019-02-16' -- Apos termino do horario de verao
  AND dfe.versao in ('3.10', '4.00') -- versoes com time zone na dhRecbto
  -- Documentos com 1 hora de diferenca entre o campo dhRecbto do XML e a coluna data_processamento na tabela nfe
  AND '' <> replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')
  AND date_part('hour', dfe.data_processamento) <> date_part('hour', replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone)
  AND date_part('minute', dfe.data_processamento) = date_part('minute', replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone)
  AND date_part('second', dfe.data_processamento) = date_part('second', replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone);

ORACLE:

UPDATE nfe_documento doc
SET dados_xml =
  (SELECT regexp_replace(doc.dados_xml, -- Fonte
                         '.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}', -- Padrao
                         '<dhRecbto>'||to_char(dfe.data_processamento,'yyyy-mm-DD"T"HH24:MI:SS')) -- String de substituicao
   FROM nfe dfe
   WHERE doc.nfe_id = dfe.id
     AND doc.tipo_documento = 551 -- nfeProc
     AND dfe.emitente_uf IN (11, 12, 13, 14, 50, 51) -- RO, AC, AM, RR, MS, MT
     AND dfe.origem_tipo = 5 -- Importa DFe
     AND dfe.manifesto_vigente_data_hora IS NULL
     AND dfe.data_processamento > '16/02/19' -- Apos termino do horario de verao
     AND dfe.versao in ('3.10', '4.00') -- versoes com time zone na dhRecbto
     -- Documentos com 1 hora de diferenca entre o campo dhRecbto do XML e a coluna data_processamento na tabela nfe
     AND TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') IS NOT NULL
     AND EXTRACT(hour FROM dfe.data_processamento) <> EXTRACT(hour FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
     AND EXTRACT(minute FROM dfe.data_processamento) = EXTRACT(minute FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
     AND EXTRACT(second FROM dfe.data_processamento) = EXTRACT(second FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
     AND ROWNUM = 1)
WHERE doc.tipo_documento = 551
  AND doc.nfe_id =
    (SELECT dfe.id
     FROM nfe dfe
     WHERE dfe.emitente_uf IN (11, 12, 13, 14, 50, 51)
       AND dfe.origem_tipo = 5
       AND dfe.manifesto_vigente_data_hora IS NULL
       AND dfe.data_processamento > '16/02/19'
       AND dfe.versao in ('3.10', '4.00')
       AND TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') IS NOT NULL
       AND EXTRACT(hour FROM dfe.data_processamento) <> EXTRACT(hour FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
       AND EXTRACT(minute FROM dfe.data_processamento) = EXTRACT(minute FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
       AND EXTRACT(second FROM dfe.data_processamento) = EXTRACT(second FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
       AND ROWNUM = 1);

293 - Corrige XML NFe campo dhRecbto de documentos do Rio Grande do Sul após término do horário de verão (PATCH LONGO)

Autor: Renato Borges
Arquivo: V293__corrige_xml_campo_dhrecbto_de_documentos_do_rio_grande_do_sul_apos_termino_horario_de_verao.sql
Tipo: SQL
Atividade: #11853
Data: 12/07/2019

POSTGRES:

UPDATE nfe_documento doc
SET dados_xml = regexp_replace(doc.dados_xml, -- Fonte
                               '.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}', -- Padrao
                               '<dhRecbto>'||to_char(dfe.data_processamento,'yyyy-mm-DD"T"HH24:MI:SS')) -- String de substituicao
FROM nfe dfe
WHERE doc.nfe_id = dfe.id
  AND doc.tipo_documento = 551 -- nfeProc
  AND dfe.emitente_uf = 43 -- Rio Grande do Sul (RS)
  AND dfe.data_processamento > '2019-02-16' -- Apos termino do horario de verao
  AND dfe.versao in ('3.10', '4.00') -- versoes com time zone na dhRecbto
  -- Documentos com 1 hora de diferenca entre o campo dhRecbto do XML e a coluna data_processamento na tabela nfe
  AND '' <> replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')
  AND date_part('hour', dfe.data_processamento) <> date_part('hour', replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone)
  AND date_part('minute', dfe.data_processamento) = date_part('minute', replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone)
  AND date_part('second', dfe.data_processamento) = date_part('second', replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone);

ORACLE:

UPDATE nfe_documento doc
SET dados_xml = 
  (SELECT regexp_replace(doc.dados_xml, -- Fonte
                         '.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}', -- Padrao
                         '<dhRecbto>'||to_char(dfe.data_processamento,'yyyy-mm-DD"T"HH24:MI:SS')) -- String de substituicao
   FROM nfe dfe
   WHERE doc.nfe_id = dfe.id
     AND doc.tipo_documento = 551 -- nfeProc
     AND dfe.emitente_uf = 43 -- Rio Grande do Sul (RS)
     AND dfe.data_processamento > '16/02/19' -- Apos termino do horario de verao
     AND dfe.versao in ('3.10', '4.00') -- versoes com time zone na dhRecbto
     -- Documentos com 1 hora de diferenca entre o campo dhRecbto do XML e a coluna data_processamento na tabela nfe
     AND TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') IS NOT NULL
     AND EXTRACT(hour FROM dfe.data_processamento) <> EXTRACT(hour FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
     AND EXTRACT(minute FROM dfe.data_processamento) = EXTRACT(minute FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
     AND EXTRACT(second FROM dfe.data_processamento) = EXTRACT(second FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
     AND ROWNUM = 1)
WHERE doc.tipo_documento = 551
  AND doc.nfe_id = 
    (SELECT dfe.id
     FROM nfe dfe
     WHERE dfe.emitente_uf = 43
       AND dfe.data_processamento > '16/02/19'
       AND dfe.versao in ('3.10', '4.00')
       AND TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') IS NOT NULL
       AND EXTRACT(hour FROM dfe.data_processamento) <> EXTRACT(hour FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
       AND EXTRACT(minute FROM dfe.data_processamento) = EXTRACT(minute FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
       AND EXTRACT(second FROM dfe.data_processamento) = EXTRACT(second FROM TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS'))
       AND ROWNUM = 1);

292 - Adiciona colunas para as cores dos temas customizados

Autor: Ícaro Aguiar
Arquivo: V292__adiciona_colunas_cores_tema_customizado_preferencia_aparencia
Tipo: SQL
Atividade: #11809
Data: 09/07/2019

POSTGRES:

ALTER TABLE preferencia_aparencia
    ADD COLUMN cor_fonte_topo varchar(7),
    ADD COLUMN cor_fundo_topo varchar(7),
    ADD COLUMN cor_fonte_lateral varchar(7),
    ADD COLUMN cor_fundo_lateral varchar(7);

ORACLE:

ALTER TABLE preferencia_aparencia
ADD (
    cor_fonte_topo varchar(7),
    cor_fundo_topo varchar(7),
    cor_fonte_lateral varchar(7),
    cor_fundo_lateral varchar(7)
);

Versão 19.12.0

291 - Trocar descrição Ocorrência de Sefaz para Prefeitura modelo NFS-e

Autor: Uillan
Arquivo: V291__trocar_descricao_sefaz_prefeitura_nfse.sql
Tipo: SQL
Atividade: #11392
Data: 01/07/2019

POSTGRES, ORACLE:

UPDATE nfse_ocorrencia SET descricao = REPLACE(descricao, 'Sefaz', 'Prefeitura') WHERE tipo_ocorrencia IN (19,20,28,29);

290 - Adiciona tabela de Preferências de Aparência

Autor: Ícaro Aguiar
Arquivo: V290__adiciona_tabela_preferencia_aparencia.sql
Tipo: SQL
Atividade: #6104
Data: 01/07/2019

POSTGRES:

CREATE TABLE preferencia_aparencia (
    id_pref_aparencia bigint NOT NULL,
    nome_usuario character varying(64),
    tema_lateral integer NOT NULL,
    tema_topo integer NOT NULL,
    version integer,
    CONSTRAINT pref_aparencia_pk PRIMARY KEY (id_pref_aparencia),
    CONSTRAINT preferencia_aparencia_nome_usuario_key UNIQUE (nome_usuario),
    CONSTRAINT preferencia_aparencia_nome_usuario_fkey FOREIGN KEY (nome_usuario)
        REFERENCES usuario (nome_usuario) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
);

CREATE SEQUENCE seq_id_pref_aparencia START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
SELECT pg_catalog.setval('seq_id_pref_alerta', 1, false);

ORACLE:

CREATE TABLE preferencia_aparencia (
    id_pref_aparencia NUMBER(19,0) PRIMARY KEY,
    nome_usuario varchar2(64) NOT NULL UNIQUE,
    tema_lateral NUMBER(2, 0) DEFAULT 1,
    tema_topo NUMBER(2, 0) DEFAULT 1,
    version NUMBER(10,0),
    FOREIGN KEY (nome_usuario) REFERENCES usuario(nome_usuario)
);

CREATE SEQUENCE seq_id_pref_alerta START WITH 1 INCREMENT BY 1;

Versão 19.11.0

289 - Corrige emitente_documento de acordo com o Proc XML para NFE (PATCH LONGO)

Autor: Mateus Neves
Arquivo: V289__preenche_coluna_emitente_documento_para_nfe.sql
Tipo: SQL
Atividade: #11612
Data: 18/06/2019

POSTGRES:

UPDATE nfe n
SET emitente_documento =
    CASE
        WHEN split_part(dados_xml, '<emit><CNPJ>', 2)::text != ''
        THEN split_part(split_part(dados_xml, '<emit><CNPJ>', 2), '</CNPJ>', 1)::text
        ELSE split_part(split_part(dados_xml, '<emit><CPF>', 2), '</CPF>', 1)::text
    END
FROM nfe_documento nd
WHERE n.id = nd.nfe_id
  AND n.chave_acesso = nd.chave_acesso
  AND nd.dados_xml is not null
  AND nd.tipo_documento = 551 -- PROC_NFE

ORACLE:

MERGE
INTO nfe n
    USING (SELECT nfe_id,
           dados_xml,
           chave_acesso,
           tipo_documento
           FROM nfe_documento) nd
ON (n.id = nd.nfe_id
    AND n.chave_acesso = nd.chave_acesso
    AND nd.tipo_documento = 551 -- PROC_NFE
    AND nd.dados_xml is not null)
    WHEN MATCHED THEN
UPDATE
    SET n.emitente_documento =
        CASE
            WHEN extractValue(xmltype(nd.dados_xml), 'nfeProc/NFe/infNFe/emit/CNPJ', 'xmlns="http://www.portalfiscal.inf.br/nfe"') is not null
            THEN extractValue(xmltype(nd.dados_xml), 'nfeProc/NFe/infNFe/emit/CNPJ', 'xmlns="http://www.portalfiscal.inf.br/nfe"')
            ELSE extractValue(xmltype(nd.dados_xml), 'nfeProc/NFe/infNFe/emit/CPF' , 'xmlns="http://www.portalfiscal.inf.br/nfe"')
        END;

288 - Corrige data_hora_emissao de acordo com o Proc XML para MDFE (PATCH LONGO)

Autor: Mateus Neves
Arquivo: V288__preenche_coluna_data_hora_emissao_para_mdfe.sql
Tipo: SQL
Atividade: #11727
Data: 14/06/2019

POSTGRES:

UPDATE mdfe m
SET data_hora_emissao = REPLACE(SUBSTRING(SPLIT_PART(SPLIT_PART(md.dados_xml, 'dhEmi>', 2), '</', 1)
                                          FROM 1 FOR 19), 'T', ' ')::TIMESTAMP WITHOUT TIME ZONE
FROM mdfe_documento md
WHERE m.id = md.mdfe_id
  AND m.chave_acesso = md.chave_acesso
  AND md.dados_xml is not null
  AND md.tipo_documento = 581 -- PROC_MDFE

ORACLE:

MERGE INTO mdfe m
USING (SELECT mdfe_id,
              dados_xml,
              chave_acesso,
              tipo_documento
       FROM mdfe_documento) md
ON (m.id = md.mdfe_id
    AND m.chave_acesso = md.chave_acesso
    AND md.tipo_documento = 581 -- PROC_MDFE
    AND md.dados_xml is not null)
WHEN MATCHED THEN
    UPDATE
    SET m.data_hora_emissao = CAST(TO_TIMESTAMP(SUBSTR(REPLACE(
    extractValue(xmltype(md.dados_xml), 'mdfeProc/MDFe/infMDFe/ide/dhEmi',
    'xmlns="http://www.portalfiscal.inf.br/mdfe"'), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') AS TIMESTAMP(6));

287 - Corrige data_hora_emissao de acordo com o Proc XML para CTe OS (PATCH LONGO)

Autor: Mateus Neves
Arquivo: V287__preenche_coluna_data_hora_emissao_para_cteos.sql
Tipo: SQL
Atividade: #11727
Data: 14/06/2019

POSTGRES:

UPDATE cteos c
SET data_hora_emissao = REPLACE(SUBSTRING(SPLIT_PART(SPLIT_PART(cd.dados_xml, 'dhEmi>', 2), '</', 1)
                                          FROM 1 FOR 19), 'T', ' ')::TIMESTAMP WITHOUT TIME ZONE
FROM cteos_documento cd
WHERE c.id = cd.cteos_id
  AND c.chave_acesso = cd.chave_acesso
  AND cd.dados_xml is not null
  AND cd.tipo_documento = 671 -- PROC_CTEOS

ORACLE:

MERGE INTO cteos c
USING (SELECT cteos_id,
              dados_xml,
              chave_acesso,
              tipo_documento
       FROM cteos_documento) cd
ON (c.id = cd.cteos_id
    AND c.chave_acesso = cd.chave_acesso
    AND cd.tipo_documento = 671 -- PROC_CTEOS
    AND cd.dados_xml is not null)
WHEN MATCHED THEN
    UPDATE
    SET c.data_hora_emissao = CAST(TO_TIMESTAMP(SUBSTR(REPLACE(
    extractValue(xmltype(cd.dados_xml), 'cteOSProc/CTeOS/infCte/ide/dhEmi',
    'xmlns="http://www.portalfiscal.inf.br/cte"'), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') AS TIMESTAMP(6));

286 - Corrige data_hora_emissao de acordo com o Proc XML para CTe (PATCH LONGO)

Autor: Mateus Neves
Arquivo: V286__preenche_coluna_data_hora_emissao_para_cte.sql
Tipo: SQL
Atividade: #11727
Data: 14/06/2019

POSTGRES:

UPDATE cte c
SET data_hora_emissao = REPLACE(SUBSTRING(SPLIT_PART(SPLIT_PART(cd.dados_xml, 'dhEmi>', 2), '</', 1)
                                          FROM 1 FOR 19), 'T', ' ')::TIMESTAMP WITHOUT TIME ZONE
FROM cte_documento cd
WHERE c.id = cd.cte_id
  AND c.chave_acesso = cd.chave_acesso
  AND cd.dados_xml is not null
  AND cd.tipo_documento = 571 -- PROC_CTE

ORACLE:

MERGE INTO cte c
USING (SELECT cte_id,
              dados_xml,
              chave_acesso,
              tipo_documento
       FROM cte_documento) cd
ON (c.id = cd.cte_id
    AND c.chave_acesso = cd.chave_acesso
    AND cd.tipo_documento = 571 -- PROC_CTE
    AND cd.dados_xml is not null)
WHEN MATCHED THEN
    UPDATE
    SET c.data_hora_emissao = CAST(TO_TIMESTAMP(SUBSTR(REPLACE(
    extractValue(xmltype(cd.dados_xml), 'cteProc/CTe/infCte/ide/dhEmi',
    'xmlns="http://www.portalfiscal.inf.br/cte"'), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') AS TIMESTAMP(6));

285 - Corrige data_hora_emissao de acordo com o Proc XML para NFCe (PATCH LONGO)

Autor: Mateus Neves
Arquivo: V285__preenche_coluna_data_hora_emissao_para_nfce.sql
Tipo: SQL
Atividade: #11727
Data: 14/06/2019

POSTGRES:

UPDATE nfce n
SET data_hora_emissao = REPLACE(SUBSTRING(SPLIT_PART(SPLIT_PART(nd.dados_xml, 'dhEmi>', 2), '</', 1)
                                          FROM 1 FOR 19), 'T', ' ')::TIMESTAMP WITHOUT TIME ZONE
FROM nfce_documento nd
WHERE n.id = nd.nfce_id
  AND n.versao IN ('3.10', '4.00')
  AND n.chave_acesso = nd.chave_acesso
  AND nd.dados_xml is not null
  AND nd.tipo_documento = 651 -- PROC_NFCE

ORACLE:

MERGE INTO nfce n
USING (SELECT nfce_id,
              dados_xml,
              chave_acesso,
              tipo_documento
       FROM nfce_documento) nd
ON (n.id = nd.nfce_id
    AND n.chave_acesso = nd.chave_acesso
    AND n.versao IN ('3.10', '4.00')
    AND nd.tipo_documento = 651 -- PROC_NFCE
    AND nd.dados_xml is not null)
WHEN MATCHED THEN
    UPDATE
    SET n.data_hora_emissao = CAST(TO_TIMESTAMP(SUBSTR(REPLACE(
    extractValue(xmltype(nd.dados_xml), 'nfeProc/NFe/infNFe/ide/dhEmi',
    'xmlns="http://www.portalfiscal.inf.br/nfe"'), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') AS TIMESTAMP(6));

284 - Corrige data_hora_emissao de acordo com o Proc XML para NFe (PATCH LONGO)

Autor: Mateus Neves
Arquivo: V284__preenche_coluna_data_hora_emissao_para_nfe.sql
Tipo: SQL
Atividade: #11727
Data: 14/06/2019

POSTGRES:

UPDATE nfe n
SET data_hora_emissao = REPLACE(SUBSTRING(SPLIT_PART(SPLIT_PART(nd.dados_xml, 'dhEmi>', 2), '</', 1)
                                          FROM 1 FOR 19), 'T', ' ')::TIMESTAMP WITHOUT TIME ZONE
FROM nfe_documento nd
WHERE n.id = nd.nfe_id
  AND n.versao IN ('3.10', '4.00')
  AND n.chave_acesso = nd.chave_acesso
  AND nd.dados_xml is not null
  AND nd.tipo_documento = 551 -- PROD_NFE

ORACLE:

MERGE INTO nfe n
USING (SELECT nfe_id,
              dados_xml,
              chave_acesso,
              tipo_documento
       FROM nfe_documento) nd
ON (n.id = nd.nfe_id
    AND n.chave_acesso = nd.chave_acesso
    AND n.versao IN ('3.10', '4.00')
    AND nd.tipo_documento = 551 -- PROC_NFE
    AND nd.dados_xml is not null)
WHEN MATCHED THEN
    UPDATE
    SET n.data_hora_emissao = CAST(TO_TIMESTAMP(SUBSTR(REPLACE(
    extractValue(xmltype(nd.dados_xml), 'nfeProc/NFe/infNFe/ide/dhEmi',
    'xmlns="http://www.portalfiscal.inf.br/nfe"'), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS') AS TIMESTAMP(6));

Versão 19.10.0

283 - Altera tabela me_recebida criando coluna timezone_data_processamento

Autor: Renato Borges
Arquivo: V283__altera_tabela_me_recebida_criando_coluna_timezone_data_processamento.sql
Tipo: SQL
Atividade: #11716
Data: 13/06/2019

POSTGRES e ORACLE:

ALTER TABLE me_recebida ADD timezone_data_processamento CHAR(5);

282 - Preenche a coluna timezone_data_processamento da tabela cteos (PATCH LONGO)

Autor: Renato Borges
Arquivo: V282__preenche_coluna_timezone_data_processamento_cteos.sql
Tipo: SQL
Atividade: #11197
Data: 06/06/2019

POSTGRES:

UPDATE cteos dfe SET timezone_data_processamento = (
  SELECT
    replace(right(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1), 6), ':', '')
  FROM cteos_documento doc INNER JOIN cteos d USING (chave_acesso)
  WHERE dfe.chave_acesso = d.chave_acesso
    AND doc.tipo_documento = 671
    AND CHAR_LENGTH(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1)) = 25
  ORDER BY doc.data_insercao DESC LIMIT 1
);

ORACLE:

UPDATE cteos dfe SET timezone_data_processamento = (
  SELECT
    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhRecbto>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '')
  FROM cteos_documento doc JOIN cteos d ON (d.chave_acesso = doc.chave_acesso)
  WHERE dfe.chave_acesso = d.chave_acesso
    AND doc.tipo_documento = 671
    AND LENGTH(EXTRACT(xmltype(doc.dados_xml), '/cteOSProc/protCTe/infProt/dhRecbto/text()', 'xmlns="http://www.portalfiscal.inf.br/cte')) = 25
    AND ROWNUM = 1
);

281 - Preenche a coluna timezone_data_processamento da tabela mdfe (PATCH LONGO)

Autor: Renato Borges
Arquivo: V281__preenche_coluna_timezone_data_processamento_mdfe.sql
Tipo: SQL
Atividade: #11197
Data: 06/06/2019

POSTGRES:

UPDATE mdfe dfe SET timezone_data_processamento = (
  SELECT
    replace(right(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1), 6), ':', '')
  FROM mdfe_documento doc INNER JOIN mdfe d USING (chave_acesso)
  WHERE dfe.chave_acesso = d.chave_acesso
    AND doc.tipo_documento = 581
    AND CHAR_LENGTH(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1)) = 25
  ORDER BY doc.data_insercao DESC LIMIT 1
);

ORACLE:

UPDATE mdfe dfe SET timezone_data_processamento = (
  SELECT
    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhRecbto>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '')
  FROM mdfe_documento doc JOIN mdfe d ON (d.chave_acesso = doc.chave_acesso)
  WHERE dfe.chave_acesso = d.chave_acesso
    AND doc.tipo_documento = 581
    AND LENGTH(EXTRACT(xmltype(doc.dados_xml), '/mdfeProc/protMDFe/infProt/dhRecbto/text()', 'xmlns="http://www.portalfiscal.inf.br/mdfe')) = 25
    AND ROWNUM = 1
);

280 - Preenche a coluna timezone_data_processamento da tabela cte (PATCH LONGO)

Autor: Renato Borges
Arquivo: V280__preenche_coluna_timezone_data_processamento_cte.sql
Tipo: SQL
Atividade: #11197
Data: 06/06/2019

POSTGRES:

UPDATE cte dfe SET timezone_data_processamento = (
  SELECT
    replace(right(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1), 6), ':', '')
  FROM cte_documento doc INNER JOIN cte d USING (chave_acesso)
  WHERE dfe.chave_acesso = d.chave_acesso
    AND doc.tipo_documento = 571
    AND CHAR_LENGTH(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1)) = 25
  ORDER BY doc.data_insercao DESC LIMIT 1
);

ORACLE:

UPDATE cte dfe SET timezone_data_processamento = (
  SELECT
    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhRecbto>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '')
  FROM cte_documento doc JOIN cte d ON (d.chave_acesso = doc.chave_acesso)
  WHERE dfe.chave_acesso = d.chave_acesso
    AND doc.tipo_documento = 571
    AND LENGTH(EXTRACT(xmltype(doc.dados_xml), '/cteProc/protCTe/infProt/dhRecbto/text()', 'xmlns="http://www.portalfiscal.inf.br/cte')) = 25
    AND ROWNUM = 1
);

279 - Preenche a coluna timezone_data_processamento da tabela nfce (PATCH LONGO)

Autor: Renato Borges
Arquivo: V279__preenche_coluna_timezone_data_processamento_nfce.sql
Tipo: SQL
Atividade: #11197
Data: 06/06/2019

POSTGRES:

UPDATE nfce dfe SET timezone_data_processamento = (
  SELECT
    replace(right(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1), 6), ':', '')
  FROM nfce_documento doc INNER JOIN nfce d USING (chave_acesso)
  WHERE dfe.chave_acesso = d.chave_acesso
    AND doc.tipo_documento = 651
    AND d.versao IN ('3.10', '4.00')
    AND CHAR_LENGTH(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1)) = 25
  ORDER BY doc.data_insercao DESC LIMIT 1
);

ORACLE:

UPDATE nfce dfe SET timezone_data_processamento = (
  SELECT
    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhRecbto>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '')
  FROM nfce_documento doc JOIN nfce d ON (d.chave_acesso = doc.chave_acesso)
  WHERE dfe.chave_acesso = d.chave_acesso
    AND doc.tipo_documento = 651
    AND d.versao IN ('3.10', '4.00')
    AND LENGTH(EXTRACT(xmltype(doc.dados_xml), '/nfeProc/protNFe/infProt/dhRecbto/text()', 'xmlns="http://www.portalfiscal.inf.br/nfe')) = 25
    AND ROWNUM = 1
);

278 - Adiciona tabela Preferencia Alerta e permissões de Gerenciamento Alertas & Notificações para Administrador e Gerente

Autor: Erickson Silva
Arquivo: V278__adiciona_tabela_e_permissoes_gerenciamento_alertas_e_notificacoes.sql
Tipo: SQL
Atividade: #101
Data: 06/05/2019

POSTGRESQL:

CREATE TABLE preferencia_alerta (
    id_pref_alerta BIGINT NOT NULL,
    nome_usuario character varying(64) NOT NULL UNIQUE,
    doc_fiscais_recebidos BOOLEAN DEFAULT TRUE,
    receb_busca_sefaz BOOLEAN DEFAULT TRUE,
    venc_cert_digital BOOLEAN DEFAULT TRUE,
    version integer,
    FOREIGN KEY (nome_usuario) REFERENCES usuario(nome_usuario)
);

CREATE SEQUENCE seq_id_pref_alerta START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
SELECT pg_catalog.setval('seq_id_pref_alerta', 1, false);

INSERT INTO perfil_permissoes(perfil_id, permissao)
VALUES ((SELECT id FROM perfil WHERE nome = 'Administrador' and fixo = true), 'ROLE_GERENCIAR_ALERTAS_E_NOTIFICACOES');

INSERT INTO perfil_permissoes(perfil_id, permissao)
VALUES ((SELECT id FROM perfil WHERE nome = 'Gerente' and fixo = true), 'ROLE_GERENCIAR_ALERTAS_E_NOTIFICACOES');

ORACLE:

CREATE TABLE preferencia_alerta (
    id_pref_alerta NUMBER(19,0) PRIMARY KEY,
    nome_usuario varchar2(64) NOT NULL UNIQUE,
    doc_fiscais_recebidos NUMBER(1, 0) DEFAULT 1,
    receb_busca_sefaz NUMBER(1, 0) DEFAULT 1,
    venc_cert_digital NUMBER(1, 0) DEFAULT 1,
    version NUMBER(10,0),
    FOREIGN KEY (nome_usuario) REFERENCES usuario(nome_usuario)
);

CREATE SEQUENCE seq_id_pref_alerta START WITH 1 INCREMENT BY 1;

INSERT INTO perfil_permissoes(perfil_id, permissao)
VALUES ((SELECT id FROM perfil WHERE nome = 'Administrador' and fixo = 1), 'ROLE_GERENCIAR_ALERTAS_E_NOTIFICACOES');

INSERT INTO perfil_permissoes(perfil_id, permissao)
VALUES ((SELECT id FROM perfil WHERE nome = 'Gerente' and fixo = 1), 'ROLE_GERENCIAR_ALERTAS_E_NOTIFICACOES');

Versão 19.9.0

277 - Remove a constraint NOTNULL da coluna numero da tabela_nfse

Necessário remover pois só temos o numero quando a NFS-e é autorizada pela prefeitura, no momento do envio tem apenas o numero rps.

Autor: Marcus Neves
Arquivo: V277__remove_constraint_notnull_coluna_numero_tabela_nfse
Tipo: SQL
Atividade: #11423
Data: 27/05/2019

POSTGRESQL:

alter table nfse alter column numero drop not null;

ORACLE:

alter table NFSE modify NUMERO null;

Versão 19.8.0

276 - Adicionar coluna consulta_cadastro_ativo para a tabela conta

Adiciona a coluna consulta_cadastro_ativo para ativar ou desativar módulo na conta

Autor: Mateus Neves
Arquivo: V276__adiciona_coluna_consulta_cadastro_ativo_em_conta.sql
Tipo: SQL
Atividade: #11192
Data: 07/05/2019

POSTGRESQL:

ALTER TABLE conta ADD COLUMN consulta_cadastro_ativo BOOLEAN DEFAULT FALSE;

ORACLE:

ALTER TABLE CONTA ADD consulta_cadastro_ativo NUMBER(1) DEFAULT 0;

275 - Corrige a versão dos eventos de NF-e (PATCH LONGO)

Corrige a versão dos eventos de NF-e que estejam diferentes de 1.00

Autor: Marcus Neves
Arquivo: V275__corrige_versao_eventos_nfe.sql
Tipo: SQL
Atividade: #11423
Data: 03/05/2019

POSTGRESQL:

UPDATE nfe_evento
SET versao = substring(dados_xml, 'evento versao="([^"]+)')
FROM nfe_documento_evento doc
WHERE nfe_evento.id = doc.evento_nfe_id
  AND versao != '1.00'
  AND substring(dados_xml, 'evento versao="([^"]+)') IS NOT NULL;

ORACLE:

MERGE INTO NFE_EVENTO EVENTO
USING NFE_DOCUMENTO_EVENTO DOC
ON (EVENTO.ID = DOC.EVENTO_NFE_ID)
WHEN MATCHED THEN
    UPDATE
    SET VERSAO = regexp_substr(DADOS_XML, 'evento versao="([^"]+)', 1, 1, 'm', 1)
    WHERE VERSAO != '1.00'
      AND regexp_substr(DADOS_XML, 'evento versao="([^"]+)', 1, 1, 'm', 1) IS NOT NULL;

Versão 19.7.0

274 - Cria colunas para configuração de customização do nome de exibição da empresa na conta e do fav icon.

Cria colunas para configuração do nome de exibição da empresa na conta e do fav icon

Autor: Uillan Araújo
Arquivo: V274__cria_colunas_para_alteracao_nome_empresa_fav_icon_na_conta.sql
Tipo: SQL
Atividade: #11421
Data: 29/04/2019

POSTGRESQL:

ALTER TABLE conta ADD COLUMN nome_exibicao_empresa CHARACTER VARYING(60);
ALTER TABLE conta ADD COLUMN fav_icon bigint;

ORACLE:

ALTER TABLE CONTA ADD (NOME_EXIBICAO_EMPRESA VARCHAR2(60));
ALTER TABLE CONTA ADD (FAV_ICON NUMBER(19));

273 - Cria índice para coluna codg_ibge na tabela gen_municipio

Adiciona um índice para a coluna codg_ibge da tabela gen_municipio.

Autor: Rafael Canêdo
Arquivo: V273__cria_indice_para_coluna_codg_ibge_na_tabela_gen_municipio.sql
Tipo: SQL
Atividade: #11496
Data: 25/04/2019

POSTGRESQL:

CREATE INDEX codg_ibge_gen_municipio ON public.gen_municipio USING btree (codg_ibge);

ORACLE:

CREATE INDEX codg_ibge_gen_municipio ON gen_municipio (codg_ibge);

272 - Atualiza os parâmetros de Data Inicial de Preenchimento do Responsável Técnico

Corrige erro de digitação no nome do parâmetro.

Autor: Danilo Guimarães
Arquivo: V272__atualizar_parametro_data_inicial_preenchimento_responsavel_tecnico.sql
Tipo: SQL
Atividade: #11431
Data: 16/04/2019

POSTGRESQL e ORACLE:

-- nfe
update nfe_parametro set 
chave = 'EMISSAO_DATA_INICIAL_PREENCHIMENTO_RESPONSAVEL_TECNICO_PARA_MODELO_NFE_AAAAMMDD' 
where
chave = 'EMISSAO_DATA_INICIAL_PREENCHIMENTO_RESPONSAVEL_TECNICO_PARA_MODELO_NFE_AAAAMMMDD';

-- nfce
update nfe_parametro set 
chave = 'EMISSAO_DATA_INICIAL_PREENCHIMENTO_RESPONSAVEL_TECNICO_PARA_MODELO_NFCE_AAAAMMDD' 
where
chave = 'EMISSAO_DATA_INICIAL_PREENCHIMENTO_RESPONSAVEL_TECNICO_PARA_MODELO_NFCE_AAAAMMMDD';

Versão 19.6.0

271 - Altera o tipo da coluna cnpj_filial da tabela nfe_filial para contemplar cpf que são 11 dígitos

Altera de char(14) para varchar(14)

Autor: Marcus Neves
Arquivo: V271__alterar_coluna_cnpj_filial_tabela_nfe_filial_para_varchar14.sql
Tipo: SQL
Atividade: #11388
Data: 04/04/2019

POSTGRESQL:

alter table nfe_filial alter column cnpj_filial type varchar(14);

ORACLE:

alter table NFE_FILIAL modify CNPJ_FILIAL VARCHAR2(14 char);

270 - Flexibiliza o tamanho das colunas de descrição das tabelas de iteração

Altera o tamanho da coluna descrição das tabelas referentes a iteração_dfe e as iteracao_eventos

Autor: Sartre Brasil
Arquivo: V270__flexibilizar_colunas_iteracao.sql
Tipo: SQL
Atividade: #11329
Data: 29/03/2019

POSTGRESQL:

ALTER TABLE nfse_iteracao ALTER COLUMN descricao_retorno TYPE character varying(1024);
ALTER TABLE nfse_iteracao_evento ALTER COLUMN descricao_retorno TYPE character varying(1024);
ALTER TABLE mdfe_iteracao ALTER COLUMN descricao_retorno TYPE character varying(1024);
ALTER TABLE mdfe_iteracao_evento ALTER COLUMN descricao_retorno TYPE character varying(1024);
ALTER TABLE nfe_iteracao ALTER COLUMN descricao_retorno TYPE character varying(1024);
ALTER TABLE nfe_iteracao_evento ALTER COLUMN descricao_retorno TYPE character varying(1024);
ALTER TABLE nfce_iteracao ALTER COLUMN descricao_retorno TYPE character varying(1024);
ALTER TABLE nfce_iteracao_evento ALTER COLUMN descricao_retorno TYPE character varying(1024);
ALTER TABLE cteos_iteracao_evento ALTER COLUMN descricao_retorno TYPE character varying(1024);
ALTER TABLE cte_iteracao ALTER COLUMN descricao_retorno TYPE character varying(1024);
ALTER TABLE cte_iteracao_evento ALTER COLUMN descricao_retorno TYPE character varying(1024);

ORACLE:

ALTER TABLE nfse_iteracao MODIFY descricao_retorno VARCHAR2(1024);
ALTER TABLE nfse_iteracao_evento MODIFY descricao_retorno VARCHAR2(1024);
ALTER TABLE mdfe_iteracao MODIFY descricao_retorno VARCHAR2(1024);
ALTER TABLE mdfe_iteracao_evento MODIFY descricao_retorno VARCHAR2(1024);
ALTER TABLE nfe_iteracao MODIFY descricao_retorno VARCHAR2(1024);
ALTER TABLE nfe_iteracao_evento MODIFY descricao_retorno VARCHAR2(1024);
ALTER TABLE nfce_iteracao MODIFY descricao_retorno VARCHAR2(1024);
ALTER TABLE nfce_iteracao_evento MODIFY descricao_retorno VARCHAR2(1024);
ALTER TABLE cteos_iteracao_evento MODIFY descricao_retorno VARCHAR2(1024);
ALTER TABLE cte_iteracao MODIFY descricao_retorno VARCHAR2(1024);
ALTER TABLE cte_iteracao_evento MODIFY descricao_retorno VARCHAR2(1024);

269 - Adicionar coluna de placa para registro de entrada.

Customização para ser possível informar a placa ao realizar registro de entrada.

Autor: Uillan Araújo
Arquivo: V269__criacao_coluna_entrada_placa.sql
Tipo: SQL
Atividade: #11172
Data: 28/03/2019

POSTGRESQL:

ALTER TABLE nfe ADD COLUMN entrada_placa CHARACTER VARYING(11);
ALTER TABLE nfce ADD COLUMN entrada_placa CHARACTER VARYING(11);
ALTER TABLE cte ADD COLUMN entrada_placa CHARACTER VARYING(11);
ALTER TABLE cteos ADD COLUMN entrada_placa CHARACTER VARYING(11);

ORACLE:

ALTER TABLE nfe ADD (ENTRADA_PLACA VARCHAR2(11));
ALTER TABLE nfce ADD (ENTRADA_PLACA VARCHAR2(11));
ALTER TABLE cte ADD (ENTRADA_PLACA VARCHAR2(11));
ALTER TABLE cteos ADD (ENTRADA_PLACA VARCHAR2(11));

Versão 19.5.0

268 - Flexibiliza as colunas de nome e documento do tomador da nfse.

Tornar possível inserir valores nulos nestas colunas

Autor: Sartre Brasil
Arquivo: V268__flexibilizar_colunas_tomador_nfse.sql
Tipo: SQL
Atividade: #11320
Data: 29/03/2019

POSTGRES

ALTER TABLE nfse ALTER COLUMN tomador_nome DROP NOT NULL;
ALTER TABLE nfse ALTER COLUMN tomador_documento DROP NOT NULL;

ORACLE

ALTER TABLE nfse MODIFY tomador_nome varchar2(255);
ALTER TABLE nfse MODIFY tomador_documento varchar2(14);

Versão 19.4.0

267 - Criar índice na tabela de cfe_autorizado.

Autor: Uillan Araújo
Arquivo: V267__V267__criacao_indice_cfe_autorizado.sql
Tipo: SQL
Atividade: #11240
Data: 14/03/2019

POSTGRES e ORACLE

create index idx_cfeautorizado_cfeidon cfe_autorizado(cfe_id);

266 - Adiciona coluna tipo_empresa na tabela nfe_empresa

Autor: Jonathan Camilo
Arquivo: V266__adicionar_coluna_tipo_empresa_nfe_empresa.sql
Tipo: SQL
Atividade: #11118
Data: 08/03/2019

POSTGRES

ALTER TABLE nfe_empresa ADD tipo_empresa smallint default 1;

ORACLE

alter table NFE_EMPRESA    add TIPO_EMPRESA NUMBER(2) default 1;

265 - Insere permissão de Gerencias Pessoas Físicas para Administradores e Gerentes

Autor: Uillan Araújo
Arquivo: V265__adiciona_permissoes_gerenciamento_pessoa_fisica.sql
Tipo: SQL
Atividade: #11180
Data: 01/03/2019

POSTGRES

INSERT INTO perfil_permissoes(perfil_id, permissao)
VALUES ((SELECT id FROM perfil WHERE nome = 'Administrador' and fixo = true), 'ROLE_GERENCIAR_PESSOA_FISICA');

INSERT INTO perfil_permissoes(perfil_id, permissao)
VALUES ((SELECT id FROM perfil WHERE nome = 'Gerente' and fixo = true), 'ROLE_GERENCIAR_PESSOA_FISICA');

ORACLE

INSERT INTO perfil_permissoes(perfil_id, permissao)
VALUES ((SELECT id FROM perfil WHERE nome = 'Administrador' and fixo = 1), 'ROLE_GERENCIAR_PESSOA_FISICA');

INSERT INTO perfil_permissoes(perfil_id, permissao)
VALUES ((SELECT id FROM perfil WHERE nome = 'Gerente' and fixo = 1), 'ROLE_GERENCIAR_PESSOA_FISICA');

264 - Aumenta coluna cnpj_base na tabela nfe_empresa de 8 caracteres para 11

Autor: Jonathan Camilo
Arquivo: V264__aumentar_coluna_cnpj_base_nfe_empresa.sql
Tipo: SQL
Atividade: #11118
Data: 28/02/2019

POSTGRES

ALTER TABLE nfe_empresa ALTER COLUMN cnpj_base TYPE CHARACTER VARYING (11);

ORACLE

ALTER TABLE NFE_EMPRESA MODIFY (CNPJ_BASE VARCHAR2(11));

263 - Cria colunas de email para tomador, emitente e interessado da tabela nfse

Autor: Sartre Brasil
Arquivo: V263__adicionar_coluna_emails_nfse.sql
Tipo: SQL
Atividade: #11087
Data: 28/02/2019

POSTGRES

alter table nfse add column tomador_email character varying(100);
alter table nfse add column prestador_email character varying(100);
alter table nfse add column intermediario_email character varying(100);

ORACLE

alter table nfse add tomador_email varchar2(100);
alter table nfse add prestador_email varchar2(100);
alter table nfse add intermediario_email varchar2(100);

261 - Cria colunas de série e número para arquivos inválidos (tabela eng_mensagem_rejeitada)

Autor: Marcus Neves
Arquivo: V261__cria_colunas_serie_dfe_numero_dfe_tabela_eng_mensagem_rejeitada.sql
Tipo: SQL
Atividade: #11168
Data: 28/02/2019

POSTGRES

alter table eng_mensagem_rejeitada add serie_dfe varchar(3);
alter table eng_mensagem_rejeitada add num_dfe varchar(9);

ORACLE

alter table eng_mensagem_rejeitada add serie_dfe varchar2(3);
alter table eng_mensagem_rejeitada add num_dfe varchar2(9);

260 - Cria coluna de Chave de acesso referenciada para eventos de NFCe (tabela: nfce_evento)

Autor: Marcus Neves
Arquivo: V260__cria_coluna_chave_acesso_ref_tabela_nfce_evento.sql
Tipo: SQL
Atividade: #10970
Data: 28/02/2019

POSTGRES

alter table nfce_evento add chave_acesso_ref char(44);

ORACLE

alter table nfce_evento add chave_acesso_ref char(44);

259 - Corrige data_processamento do MDF-e que difere do XML (PATCH LONGO)

Autor: Renato Borges
Arquivo: V259__corrige_data_processamento_mdfe_que_difere_do_xml.sql
Tipo: SQL
Atividade: #11161
Data: 28/02/2019

POSTGRES

update mdfe mdf set data_processamento = replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
  from mdfe_documento doc
  where mdf.chave_acesso = doc.chave_acesso
    and doc.tipo_documento = 581
    and mdf.data_processamento != replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
    and replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ') <> '';

ORACLE

UPDATE mdfe mdf SET data_processamento = (
  SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
  FROM mdfe_documento doc
  WHERE doc.chave_acesso = mdf.chave_acesso
    AND doc.tipo_documento = 581
    AND mdf.data_processamento != TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    AND ROWNUM = 1
)
WHERE mdf.data_processamento != (
    SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    FROM mdfe_documento doc
    WHERE doc.chave_acesso = mdf.chave_acesso
      AND doc.tipo_documento = 581
      AND mdf.data_processamento != TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
      AND ROWNUM = 1
);

258 - Corrige data_processamento do CT-e OS que difere do XML (PATCH LONGO)

Autor: Renato Borges
Arquivo: V258__corrige_data_processamento_cteos_que_difere_do_xml.sql
Tipo: SQL
Atividade: #11161
Data: 28/02/2019

POSTGRES

update cteos ctos set data_processamento = replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
  from cteos_documento doc
  where ctos.chave_acesso = doc.chave_acesso
    and doc.tipo_documento = 671
    and ctos.data_processamento != replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
    and replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ') <> '';

ORACLE

UPDATE cteos ctos SET data_processamento = (
  SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
  FROM cteos_documento doc
  WHERE doc.chave_acesso = ctos.chave_acesso
    AND doc.tipo_documento = 671
    AND ctos.data_processamento != TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    AND ROWNUM = 1
)
WHERE ctos.data_processamento != (
    SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    FROM cteos_documento doc
    WHERE doc.chave_acesso = ctos.chave_acesso
      AND doc.tipo_documento = 671
      AND ctos.data_processamento != TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
      AND ROWNUM = 1
);

257 - Corrige data_processamento do CT-e que difere do XML (PATCH LONGO)

Autor: Renato Borges
Arquivo: V257__corrige_data_processamento_cte_que_difere_do_xml.sql
Tipo: SQL
Atividade: #11161
Data: 28/02/2019

POSTGRES

update cte ct set data_processamento = replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
  from cte_documento doc
  where ct.chave_acesso = doc.chave_acesso
    and doc.tipo_documento = 571
    and ct.data_processamento != replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
    and replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ') <> '';

ORACLE

UPDATE cte ct SET data_processamento = (
  SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
  FROM cte_documento doc
  WHERE doc.chave_acesso = ct.chave_acesso
    AND doc.tipo_documento = 571
    AND ct.data_processamento != TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    AND ROWNUM = 1
)
WHERE ct.data_processamento != (
    SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    FROM cte_documento doc
    WHERE doc.chave_acesso = ct.chave_acesso
      AND doc.tipo_documento = 571
      AND ct.data_processamento != TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
      AND ROWNUM = 1
);

256 - Corrige data_processamento da NFC-e que difere do XML (PATCH LONGO)

Autor: Renato Borges
Arquivo: V256__corrige_data_processamento_nfce_que_difere_do_xml.sql
Tipo: SQL
Atividade: #11161
Data: 28/02/2019

POSTGRES

update nfce nfc set data_processamento = replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
  from nfce_documento doc
  where nfc.chave_acesso = doc.chave_acesso
    and doc.tipo_documento = 651
    and nfc.versao in ('3.10', '4.00')
    and nfc.data_processamento != replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
    and replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ') <> '';

ORACLE

UPDATE nfce nfc SET data_processamento = (
  SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
  FROM nfce_documento doc
  WHERE doc.chave_acesso = nfc.chave_acesso
    AND doc.tipo_documento = 651
    AND nfc.data_processamento != TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    AND ROWNUM = 1
)
WHERE nfc.versao IN ('3.10', '4.00')
  AND nfc.data_processamento != (
    SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    FROM nfce_documento doc
    WHERE doc.chave_acesso = nfc.chave_acesso
      AND doc.tipo_documento = 651
      AND nfc.data_processamento != TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
      AND ROWNUM = 1
);

255 - Adiciona coluna template_padrao_email em nfe_empresa e cria tabela template_personalizado_email

Autor: Taynan Rezende
Arquivo: V255__adiciona_coluna_template_padrao_cria_tabela_template_personalizado_email.sql
Tipo: SQL
Atividade: #10754
Data: 14/03/2019

POSTGRES

ALTER TABLE parametros_empresa
  ADD COLUMN template_padrao_email boolean DEFAULT true;

CREATE SEQUENCE template_person_email_id_seq start with 1 increment by 1;

CREATE TABLE template_personalizado_email
(
  id               bigint       not null default nextval('template_person_email_id_seq')
    constraint template_person_email_pkey
      primary key,
  version          integer,
  id_empresa       bigint       NOT NULL
    constraint fk_nfe_empresa_id_empresa references nfe_empresa,
  modelo           varchar(255) NOT NULL,
  assunto          text,
  mensagem         text,
  ultima_alteracao timestamp without time zone,
  nome_usuario     varchar(255)
);

ORACLE

ALTER TABLE parametros_empresa
  ADD (template_padrao_email NUMBER(1) DEFAULT 1 NOT NULL);

CREATE SEQUENCE template_person_email_id_seq start with 1 increment by 1;

CREATE TABLE template_personalizado_email
(
  ID               NUMBER(19, 0) NOT NULL ENABLE,
  VERSION          NUMBER(10),
  ID_EMPRESA       NUMBER(19)    NOT NULL,
  MODELO           VARCHAR2(255) NOT NULL,
  ASSUNTO          CLOB,
  MENSAGEM         CLOB,
  ULTIMA_ALTERACAO TIMESTAMP,
  NOME_USUARIO     VARCHAR2(255),
  CONSTRAINT TEMPLATE_PERSON_EMAIL_PKEY PRIMARY KEY (ID) ENABLE,
  CONSTRAINT FK_NFE_EMPRESA_ID_EMPRESA FOREIGN KEY (ID_EMPRESA)
    REFERENCES NFE_EMPRESA (ID_EMPRESA) ENABLE
);

254 - Corrige data_processamento da NF-e que difere do XML (PATCH LONGO)

Autor: Renato Borges
Arquivo: V254__corrige_data_processamento_nfe_que_difere_do_xml.sql
Tipo: SQL
Atividade: #11161
Data: 25/02/2019

POSTGRES

update nfe nf set data_processamento = replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
  from nfe_documento doc
  where nf.chave_acesso = doc.chave_acesso
    and doc.tipo_documento = 551
    and nf.versao in ('3.10', '4.00')
    and nf.data_processamento != replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ')::timestamp without time zone
    and replace(substring(split_part(split_part(doc.dados_xml, 'dhRecbto>', 2), '</', 1) from 1 for 19), 'T', ' ') <> '';

ORACLE

UPDATE nfe nf SET data_processamento = (
  SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
  FROM nfe_documento doc
  WHERE doc.chave_acesso = nf.chave_acesso
    AND doc.tipo_documento = 551
    AND nf.data_processamento != TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    AND ROWNUM = 1
)
WHERE nf.versao IN ('3.10', '4.00')
  AND nf.data_processamento != (
    SELECT TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
    FROM nfe_documento doc
    WHERE doc.chave_acesso = nf.chave_acesso
      AND doc.tipo_documento = 551
      AND nf.data_processamento != TO_TIMESTAMP(SUBSTR(REPLACE(CAST(REGEXP_SUBSTR(REGEXP_SUBSTR(doc.dados_xml, '<dhRecbto>(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))</dhRecbto>'), '(((20(([02468][048])|([13579][26]))-02-29))|(20[0-9][0-9])-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))T(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d(([-+])(0[0-9]|10|11):00|([+](12):00))') AS VARCHAR2(30)), 'T', ' '), 1, 19), 'YYYY-MM-DD HH24:MI:SS')
      AND ROWNUM = 1
);

Versão 19.3.0

262 - Altera o status de documentos recebidos e salvo como Rejeitado para Consulta Rejeitada

Autor: Renato Borges
Arquivo: V262__altera_status_de_documentos_recebidos_como_rejeitados_para_consulta_rejeitada.sql
Tipo: SQL
Atividade: #11133
Data: 28/02/2019

POSTGRES

update nfe set status_dfe = 13 where status_dfe = 4 and cstat_sefaz in (526, 656)
update cte set status_dfe = 13 where status_dfe = 4 and cstat_sefaz = 678

ORACLE

update nfe set status_dfe = 13 where status_dfe = 4 and cstat_sefaz in (526, 656)
update cte set status_dfe = 13 where status_dfe = 4 and cstat_sefaz = 678

253 - Corrige nomenclatura das configurações de políticas de senhas:

Autor: Marcus Neves
Arquivo: V253__corrige_politicas_senha.sql
Tipo: SQL
Atividade: #11073
Data: 18/02/2019

POSTGRES

update nfe_parametro
set valor = regexp_replace(valor, 'temLetras|temChars', 'tem', 'g')
where chave = 'CONFIG_POLITICAS_SENHA_JSON';

ORACLE

update nfe_parametro
set valor = regexp_replace(valor, 'temLetras|temChars', 'tem')
where chave = 'CONFIG_POLITICAS_SENHA_JSON';

Versão 19.2.0

252 - Cria colunas 'arquivo_convertido_id' e 'arquivo_original_id' na tabela 'nfse',

- Referenciando ao documento original recebido para processamento e para o convertido

Autor: Sartre Brasil
Tipo: SQL
Atividade: #11085
Data: 13/02/2019

POSTGRES

alter table nfse add column arquivo_convertido_id int8;
alter table nfse add column arquivo_original_id int8;        
alter table nfse add constraint fk_arq_convertido_nfse foreign key (arquivo_convertido_id) references arquivo;
alter table nfse add constraint fk_arq_original_nfse foreign key (arquivo_original_id) references arquivo;

ORACLE

alter table nfse add arquivo_convertido_id number(19,0);
alter table nfse add arquivo_original_id number(19,0);    
alter table nfse add constraint fk_arq_convertido_nfse foreign key (arquivo_convertido_id) references arquivo;
alter table nfse add constraint fk_arq_original_nfse foreign key (arquivo_original_id) references arquivo;

251 - Cria coluna 'modelo' na tabela 'eng_mensagem_rejeitada'

- Cria nova coluna 'modelo' nas tabela 'eng_mensagem_rejeitada',

Autor: Rafael
Tipo: SQL
Atividade: #10917
Data: 01/02/2019

POSTGRES

--- # CRIAÇÃO DA COLUNA # ---

ALTER TABLE eng_mensagem_rejeitada
  ADD COLUMN modelo INTEGER;

--- # PREENCHIMENTO DAS TUPLAS # ---

--- NFE --- 
UPDATE eng_mensagem_rejeitada
SET    modelo = 55
WHERE  tipo_mensagem = 1
       AND ( Lower(nome_mensagem) LIKE '%lote-%'
             OR Lower(nome_mensagem) LIKE '%lotenfe-%'
             OR Lower(nome_mensagem) LIKE '%restservice_lote-%'
             OR Lower(nome_mensagem) LIKE '%restservice_evento-%'
             OR Lower(nome_mensagem) LIKE '%restservice_evento-%'
             OR Lower(nome_mensagem) LIKE '%loteevento-%'
             OR Lower(nome_mensagem) LIKE '%evento-%'
             OR Lower(nome_mensagem) LIKE '%nfe-%'
             OR Lower(nome_mensagem) LIKE '%_envi.txt%'
             OR Lower(nome_mensagem) LIKE '%inut-%'
             OR Lower(nome_mensagem) LIKE '%ped-evt.txt%'
             OR Lower(nome_mensagem) LIKE '%lotend%' );

--- NFSE ---  
UPDATE eng_mensagem_rejeitada
SET    modelo = 99
WHERE  tipo_mensagem = 1
       AND Lower(nome_mensagem) LIKE '%nfse%';

--- NFCE ---  
UPDATE eng_mensagem_rejeitada
SET    modelo = 65
WHERE  tipo_mensagem = 1
       AND ( Lower(nome_mensagem) LIKE '%nfce%'
             OR Lower(nome_mensagem) LIKE '%microsjson%'
             OR Lower(nome_mensagem) LIKE '%simpl%'
             OR Lower(nome_mensagem) LIKE '%cielopos%' );

--- CFE --- 
UPDATE eng_mensagem_rejeitada
SET    modelo = 59
WHERE  tipo_mensagem = 1
       AND ( Lower(nome_mensagem) LIKE '%cfe%' );

--- CTE --- 
UPDATE eng_mensagem_rejeitada
SET    modelo = 57
WHERE  tipo_mensagem = 1
       AND ( Lower(nome_mensagem) LIKE '%cte%' );

--- MDFE ---  
UPDATE eng_mensagem_rejeitada
SET    modelo = 58
WHERE  tipo_mensagem = 1
       AND ( Lower(nome_mensagem) LIKE '%mdfe%' ); 

ORACLE

--- # CRIAÇÃO DA COLUNA # ---

ALTER TABLE eng_mensagem_rejeitada
  ADD modelo INTEGER;

--- # PREENCHIMENTO DAS TUPLAS # ---

--- NFE --- 
UPDATE eng_mensagem_rejeitada
SET    modelo = 55
WHERE  tipo_mensagem = 1
       AND ( Lower(nome_mensagem) LIKE '%lote-%'
             OR Lower(nome_mensagem) LIKE '%lotenfe-%'
             OR Lower(nome_mensagem) LIKE '%restservice_lote-%'
             OR Lower(nome_mensagem) LIKE '%restservice_evento-%'
             OR Lower(nome_mensagem) LIKE '%restservice_evento-%'
             OR Lower(nome_mensagem) LIKE '%loteevento-%'
             OR Lower(nome_mensagem) LIKE '%evento-%'
             OR Lower(nome_mensagem) LIKE '%nfe-%'
             OR Lower(nome_mensagem) LIKE '%_envi.txt%'
             OR Lower(nome_mensagem) LIKE '%inut-%'
             OR Lower(nome_mensagem) LIKE '%ped-evt.txt%'
             OR Lower(nome_mensagem) LIKE '%lotend%' );

--- NFSE ---  
UPDATE eng_mensagem_rejeitada
SET    modelo = 99
WHERE  tipo_mensagem = 1
       AND Lower(nome_mensagem) LIKE '%nfse%';

--- NFCE ---  
UPDATE eng_mensagem_rejeitada
SET    modelo = 65
WHERE  tipo_mensagem = 1
       AND ( Lower(nome_mensagem) LIKE '%nfce%'
             OR Lower(nome_mensagem) LIKE '%microsjson%'
             OR Lower(nome_mensagem) LIKE '%simpl%'
             OR Lower(nome_mensagem) LIKE '%cielopos%' );

--- CFE --- 
UPDATE eng_mensagem_rejeitada
SET    modelo = 59
WHERE  tipo_mensagem = 1
       AND ( Lower(nome_mensagem) LIKE '%cfe%' );

--- CTE --- 
UPDATE eng_mensagem_rejeitada
SET    modelo = 57
WHERE  tipo_mensagem = 1
       AND ( Lower(nome_mensagem) LIKE '%cte%' );

--- MDFE ---  
UPDATE eng_mensagem_rejeitada
SET    modelo = 58
WHERE  tipo_mensagem = 1
       AND ( Lower(nome_mensagem) LIKE '%mdfe%' ); 

250 - Cria coluna Tipo de Término na tabela de Acionamento de Contingência

Autor: Lucas Batalha
Tipo: SQL
Atividade: #10655
Data: 25/02/2019

POSTGRES

ALTER TABLE acionamento_contingencia ADD COLUMN tipo_termino integer;

ORACLE

ALTER TABLE acionamento_contingencia ADD tipo_termino integer;

249 - Atualiza status DFe para status correto (PATCH LONGO)

- Ajustando status DFe para o status DFe correto (Impresso / Autorizado).

Autor: Taynan Rezende
Tipo: SQL
Atividade: #10733
Data: 29/01/2019

POSTGRES

--NFE
update nfe set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update nfe set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update nfe set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200
and cstat_sefaz not in (526, 641, 656);

update nfe set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

--NFCE
update nfce set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update nfce set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update nfce set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200;

update nfce set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

--CTE
update cte set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update cte set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update cte set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200
and cstat_sefaz not in (731, 641, 678);

update cte set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

--MDFE
update mdfe set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update mdfe set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update mdfe set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200;

update mdfe set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

--NFSE
update nfse set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update nfse set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update nfse set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200;

update nfse set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

--CTEOS
update cteos set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update cteos set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update cteos set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200;

update cteos set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

ORACLE

--NFE
update nfe set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update nfe set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update nfe set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200
and cstat_sefaz not in (526, 641, 656);

update nfe set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

--NFCE
update nfce set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update nfce set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update nfce set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200;

update nfce set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

--CTE
update cte set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update cte set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update cte set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200
and cstat_sefaz not in (731, 641, 678);

update cte set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

--MDFE
update mdfe set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update mdfe set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update mdfe set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200;

update mdfe set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

--NFSE
update nfse set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update nfse set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update nfse set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200;

update nfse set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

--CTEOS
update cteos set status_dfe = 1
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (100, 150);

update cteos set status_dfe = 2
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz in (101, 151);

update cteos set status_dfe = 4
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and cstat_sefaz >= 200;

update cteos set status_dfe = 0
where status_dfe in (7, 8, 20, 22)
and origem_tipo in (2, 5, 11, 12)
and (cstat_sefaz in (106, 109) or cstat_sefaz is null);

248 - Cria coluna Status Impressão (PATCH LONGO)

- Cria nova coluna status_impressao nas tabelas nfe, nfce, cte, mdfe, nfse e cteos

Autor: Taynan Rezende
Tipo: SQL
Atividade: #10733
Data: 24/01/2019

POSTGRES

ALTER TABLE nfe ADD COLUMN status_impressao integer;
update nfe
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;
ALTER TABLE nfe ALTER COLUMN status_impressao SET NOT NULL;
ALTER TABLE nfe ALTER COLUMN status_impressao SET DEFAULT 23;

ALTER TABLE nfce ADD COLUMN status_impressao integer;
update nfce
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;
ALTER TABLE nfce ALTER COLUMN status_impressao SET NOT NULL;
ALTER TABLE nfce ALTER COLUMN status_impressao SET DEFAULT 23;

ALTER TABLE cte ADD COLUMN status_impressao integer;
update cte
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;
ALTER TABLE cte ALTER COLUMN status_impressao SET NOT NULL;
ALTER TABLE cte ALTER COLUMN status_impressao SET DEFAULT 23;

ALTER TABLE mdfe ADD COLUMN status_impressao integer;
update mdfe
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;
ALTER TABLE mdfe ALTER COLUMN status_impressao SET NOT NULL;
ALTER TABLE mdfe ALTER COLUMN status_impressao SET DEFAULT 23;

ALTER TABLE nfse ADD COLUMN status_impressao integer;
update nfse
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;
ALTER TABLE nfse ALTER COLUMN status_impressao SET NOT NULL;
ALTER TABLE nfse ALTER COLUMN status_impressao SET DEFAULT 23;

ALTER TABLE cteos ADD COLUMN status_impressao integer;
update cteos
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;
ALTER TABLE cteos ALTER COLUMN status_impressao SET NOT NULL;
ALTER TABLE cteos ALTER COLUMN status_impressao SET DEFAULT 23;

ORACLE

ALTER TABLE nfe ADD status_impressao int DEFAULT 23 NOT NULL;
update nfe
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;

ALTER TABLE nfce ADD status_impressao int DEFAULT 23 NOT NULL;
update nfce
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;

ALTER TABLE cte ADD status_impressao int DEFAULT 23 NOT NULL;
update cte
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;

ALTER TABLE mdfe ADD status_impressao int DEFAULT 23 NOT NULL;
update mdfe
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;

ALTER TABLE nfse ADD status_impressao int DEFAULT 23 NOT NULL;
update nfse
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;

ALTER TABLE cteos ADD status_impressao int DEFAULT 23 NOT NULL;
update cteos
set status_impressao = case when status_dfe in (7, 8, 20, 22, 23) then status_dfe else 23 end;

Versão 19.1.0

247 - Cria a estrutura de tabelas de eventos de NFSe

- Cria as tabelas nfse_compartilhamento_evento, nfse_documento_evento, nfse_evento, nfse_iteracao_evento, seus indices, sequencies etc.

Autor: Sartre
Tipo: SQL
Atividade: #10494
Data: 21/01/2019

POSTGRES

create sequence nfse_compart_evento_id_seq start 1 increment 1;
create sequence nfse_documento_evento_id_seq start 1 increment 1;
create sequence nfse_evento_id_seq start 1 increment 1;
create sequence nfse_iteracao_evento_id_seq start 1 increment 1;

create table nfse_compartilhamento_evento (id int8 not null, version int4, automatico boolean, chave_acesso varchar(60) not null, compartilhou_pdf boolean not null, compartilhou_xml boolean not null, condicoes varchar(1000), conversor varchar(50), data_compartilhamento timestamp not null, descricao varchar(1024) not null, descricao_status varchar(1024), entregador varchar(150), origem_compartilhamento int4 not null, propriedades varchar(2048), renomeador varchar(50), status_compartilhamento int4 not null, tipo_compartilhamento int4 not null, tipo_ambiente int4 not null, tipo_documento int4, tipo_migracao int4 not null, usuario varchar(60) not null, tipo_evento int8 not null, evento_nfse_id int8 not null, primary key (id));
create table nfse_documento_evento (id int8 not null, version int4, chave_acesso varchar(44) not null, dados_xml text not null, data_insercao timestamp not null, nome varchar(120) not null, tamanho int4 not null, tipo_ambiente int4 not null, tipo_documento int4 not null, tipo_evento int8 not null, tipo_migracao int4 not null, evento_nfse_id int8 not null, primary key (id));
create table nfse_evento (id int8 not null, version int4, chave_acesso varchar(44) not null, codigo_retorno int4, data_hora_evento timestamp not null, data_hora_registro_evento timestamp, data_hora_tentativa_envio timestamp, descricao_evento varchar(255) not null, documento_autor varchar(14), id_lote_erp varchar(30), descricao_retorno varchar(255), status_integracao_noov int4 not null, origem_data_hora timestamp not null, origem_identificacao varchar(60), origem_protocolo varchar(255), origem_tipo int4 not null, origem_usuario varchar(60), protocolo_status int8, numero_protocolo varchar(20), sequencial int4 not null, status_arquivo int4 not null, timezone_data_evento varchar(5), timezone_data_registro_evento varchar(5), tipo_ambiente int4 not null, tipo_evento int8 not null, tipo_migracao int4 not null, uf_recepcao int4 not null, versao varchar(5) not null, primary key (id));
create table nfse_iteracao_evento (id int8 not null, version int4, codigo_retorno int4, data_iteracao timestamp not null, data_resposta timestamp not null, data_resposta_sefaz timestamp, descricao_retorno varchar(260), numero_recibo varchar(100), tipo_iteracao int4 not null, usuario varchar(60), tipo_evento int8 not null, evento_nfse_id int8 not null, primary key (id));

create index idx_compartevnfse_eventonfeid on nfse_compartilhamento_evento (evento_nfse_id);
create index idx_compartevnfse_chaveacesso on nfse_compartilhamento_evento (chave_acesso);
alter table nfse_compartilhamento_evento add constraint fk_compart_evnfse foreign key (evento_nfse_id) references nfse_evento;
create index idx_docevnfse_eventonfeid on nfse_documento_evento (evento_nfse_id);
create index idx_docevnfse_chaveacesso on nfse_documento_evento (chave_acesso);
create index idx_docevnfse_tpdoc on nfse_documento_evento (tipo_documento);
alter table nfse_documento_evento add constraint UK_3bcxsqddga2fg8p5g8hiusvcf unique (evento_nfse_id);
alter table nfse_documento_evento add constraint fk_evento_nfse_documento foreign key (evento_nfse_id) references nfse_evento;
create index idx_evnfse_chave on nfse_evento (chave_acesso);
create index idx_evnfse_tpambiente on nfse_evento (tipo_ambiente);
create index idx_evnfse_autor on nfse_evento (documento_autor);
create index idx_evnfse_tpevento on nfse_evento (tipo_evento);
create index idx_itevnfse_eventoid on nfse_iteracao_evento (evento_nfse_id);
create index idx_itevnfse_usuario on nfse_iteracao_evento (usuario);
create index idx_itevnfse_tpiter on nfse_iteracao_evento (tipo_iteracao);
create index idx_itevnfse_dtiter on nfse_iteracao_evento (data_iteracao);
alter table nfse_iteracao_evento add constraint fk_iter_evento_nfse foreign key (evento_nfse_id) references nfse_evento;

ORACLE

create sequence nfse_compart_evento_id_seq start with 1 increment by 1;
create sequence nfse_documento_evento_id_seq start with 1 increment by 1;
create sequence nfse_evento_id_seq start with 1 increment by 1;
create sequence nfse_iteracao_evento_id_seq start with 1 increment by 1;

create table nfse_compartilhamento_evento (id number(19,0) not null, version number(10,0), automatico number(1,0), chave_acesso varchar2(60 char) not null, compartilhou_pdf number(1,0) not null, compartilhou_xml number(1,0) not null, condicoes varchar2(1000 char), conversor varchar2(50 char), data_compartilhamento timestamp not null, descricao varchar2(1024 char) not null, descricao_status varchar2(1024 char), entregador varchar2(150 char), origem_compartilhamento number(10,0) not null, propriedades varchar2(2048 char), renomeador varchar2(50 char), status_compartilhamento number(10,0) not null, tipo_compartilhamento number(10,0) not null, tipo_ambiente number(10,0) not null, tipo_documento number(10,0), tipo_migracao number(10,0) not null, usuario varchar2(60 char) not null, tipo_evento number(19,0) not null, evento_nfse_id number(19,0) not null, primary key (id));
create table nfse_documento_evento (id number(19,0) not null, version number(10,0), chave_acesso varchar2(44 char) not null, dados_xml long not null, data_insercao timestamp not null, nome varchar2(120 char) not null, tamanho number(10,0) not null, tipo_ambiente number(10,0) not null, tipo_documento number(10,0) not null, tipo_evento number(19,0) not null, tipo_migracao number(10,0) not null, evento_nfse_id number(19,0) not null, primary key (id));
create table nfse_evento (id number(19,0) not null, version number(10,0), chave_acesso varchar2(44 char) not null, codigo_retorno number(10,0), data_hora_evento timestamp not null, data_hora_registro_evento timestamp, data_hora_tentativa_envio timestamp, descricao_evento varchar2(255 char) not null, documento_autor varchar2(14 char), id_lote_erp varchar2(30 char), descricao_retorno varchar2(255 char), status_integracao_noov number(10,0) not null, origem_data_hora timestamp not null, origem_identificacao varchar2(60 char), origem_protocolo varchar2(255 char), origem_tipo number(10,0) not null, origem_usuario varchar2(60 char), protocolo_status number(19,0), numero_protocolo varchar2(20 char), sequencial number(10,0) not null, status_arquivo number(10,0) not null, timezone_data_evento varchar2(5 char), timezone_data_registro_evento varchar2(5 char), tipo_ambiente number(10,0) not null, tipo_evento number(19,0) not null, tipo_migracao number(10,0) not null, uf_recepcao number(10,0) not null, versao varchar2(5 char) not null, primary key (id));
create table nfse_iteracao_evento (id number(19,0) not null, version number(10,0), codigo_retorno number(10,0), data_iteracao timestamp not null, data_resposta timestamp not null, data_resposta_sefaz timestamp, descricao_retorno varchar2(260 char), numero_recibo varchar2(100 char), tipo_iteracao number(10,0) not null, usuario varchar2(60 char), tipo_evento number(19,0) not null, evento_nfse_id number(19,0) not null, primary key (id));

create index idx_compartevnfse_eventonfeid on nfse_compartilhamento_evento (evento_nfse_id);
create index idx_compartevnfse_chaveacesso on nfse_compartilhamento_evento (chave_acesso);
alter table nfse_compartilhamento_evento add constraint fk_compart_evnfse foreign key (evento_nfse_id) references nfse_evento;
create index idx_docevnfse_eventonfeid on nfse_documento_evento (evento_nfse_id);
create index idx_docevnfse_chaveacesso on nfse_documento_evento (chave_acesso);
create index idx_docevnfse_tpdoc on nfse_documento_evento (tipo_documento);
alter table nfse_documento_evento add constraint UK_3bcxsqddga2fg8p5g8hiusvcf unique (evento_nfse_id);
alter table nfse_documento_evento add constraint fk_evento_nfse_documento foreign key (evento_nfse_id) references nfse_evento;
create index idx_evnfse_chave on nfse_evento (chave_acesso);
create index idx_evnfse_tpambiente on nfse_evento (tipo_ambiente);
create index idx_evnfse_autor on nfse_evento (documento_autor);
create index idx_evnfse_tpevento on nfse_evento (tipo_evento);
create index idx_itevnfse_eventoid on nfse_iteracao_evento (evento_nfse_id);
create index idx_itevnfse_usuario on nfse_iteracao_evento (usuario);
create index idx_itevnfse_tpiter on nfse_iteracao_evento (tipo_iteracao);
create index idx_itevnfse_dtiter on nfse_iteracao_evento (data_iteracao);
alter table nfse_iteracao_evento add constraint fk_iter_evento_nfse foreign key (evento_nfse_id) references nfse_evento;

246 - Cria colunas na tabela parametros_empresa referentes a certificado HSM

- Adiciona as seguintes colunas na tabela parametros_empresa:
  • hsm_fornecedor
  • hsm_host
  • hsm_porta
  • hsm_usuario
  • hsm_senha
  • hsm_keystore
  • hsm_objeto_private_key
  • hsm_objeto_certificate

Autor: Danilo Guimarães
Tipo: SQL
Atividade: #11006
Data: 24/01/2019

POSTGRES

alter table parametros_empresa add hsm_fornecedor character varying(255);
alter table parametros_empresa add hsm_host character varying(255);
alter table parametros_empresa add hsm_porta integer;
alter table parametros_empresa add hsm_usuario character varying(255);
alter table parametros_empresa add hsm_senha character varying(255);
alter table parametros_empresa add hsm_keystore character varying(255);
alter table parametros_empresa add hsm_objeto_private_key character varying(255);
alter table parametros_empresa add hsm_objeto_certificate character varying(255);

ORACLE

ALTER TABLE parametros_empresa ADD (hsm_fornecedor VARCHAR2(255 CHAR));
ALTER TABLE parametros_empresa ADD (hsm_host VARCHAR2(255 CHAR));
ALTER TABLE parametros_empresa ADD (hsm_porta integer);
ALTER TABLE parametros_empresa ADD (hsm_usuario VARCHAR2(255 CHAR));
ALTER TABLE parametros_empresa ADD (hsm_senha VARCHAR2(255 CHAR));
ALTER TABLE parametros_empresa ADD (hsm_keystore VARCHAR2(255 CHAR));
ALTER TABLE parametros_empresa ADD (hsm_objeto_private_key VARCHAR2(255 CHAR));
ALTER TABLE parametros_empresa ADD (hsm_objeto_certificate VARCHAR2(255 CHAR));

245 - Adiciona/Altera colunas na tabela usuario

- Adiciona a coluna: qtde_falhas_login, data_bloqueio
- Altera a coluna data_senha de date para timestamp

Autor: Marcus Neves
Arquivo: V245__adiciona_altera_colunas_tabela_usuario.sql
Tipo: SQL
Atividade: #10996
Data: 16/01/2019

POSTGRES

alter table usuario alter column data_senha type timestamp using data_senha::timestamp;
alter table usuario add falhas_login int default 0 not null;
alter table usuario add dt_bloqueio timestamp;

ORACLE

alter table usuario modify DATA_SENHA TIMESTAMP;
alter table usuario add falhas_login int default 0 not null;
alter table usuario add dt_bloqueio timestamp;

244 - Cria tabela de histórico de senhas do usuário

Cria a tabela usuario_historico_senha que é uma 'extensão' da tabela usuario com as colunas: nome_usuario, senha, data_alteracao

Autor: Marcus Neves
Arquivo: V244__cria_tabela_usuario_historico_senha.sql
Tipo: SQL
Atividade: #10996
Data: 16/01/2019

POSTGRES

create table usuario_historico_senha
(
  nome_usuario   varchar(64) not null
    constraint nome_usuario_fk
      references usuario
      on delete cascade,
  senha          varchar(64) not null,
  data timestamp   not null,
  constraint usuario_historico_senha_pk
    primary key (nome_usuario, senha)
);

ORACLE

create table usuario_historico_senha
(
  nome_usuario   varchar2(64) not null
    constraint nome_usuario_fk
      references usuario
      on delete cascade,
  senha          varchar2(64) not null,
  data timestamp   not null,
  constraint usuario_historico_senha_pk
    primary key (nome_usuario, senha)
);

Versão 19.0.0

243 - Cria coluna de usuário criador na tabela perfil

Cria a coluna de usuário criador (id_usuario_criador) na tabela de perfil.

Autor: Lucas Batalha
Tipo: SQL
Atividade: #10934
Data: 09/01/2019

POSTGRES

ALTER TABLE perfil ADD COLUMN nome_usuario_criador character varying(64);
ALTER TABLE perfil ADD CONSTRAINT fk_nome_usuario_criador FOREIGN KEY (nome_usuario_criador)
      REFERENCES usuario (nome_usuario);

ORACLE

ALTER TABLE perfil ADD (nome_usuario_criador VARCHAR2(64 CHAR));
ALTER TABLE perfil ADD CONSTRAINT fk_nome_usuario_criador FOREIGN KEY (nome_usuario_criador)
      REFERENCES usuario (nome_usuario);

241 - Preenche/Corrige timezone_data_processamento da tabela nfe e dados_xml da tabela nfe_documento (Sul Sudeste Centro Oeste) (PATCH LONGO)

- Este patch não aplica as correções das informações par os estados Mato Grosso e Mato Grosso do Sul.
- Preenche a coluna 'timezone_data_processamento' da tabela 'NFE'.
- Corrige o valor da coluna 'data_processamento' da tabela 'NFE' caso o valor da coluna apresente alguma inconsistência em relação ao valor contido na tag '<dhRecbto>' do XML.
- Corrige o conteúdo da tag '<dhRecbto>' do XML caso o mesmo apresente alguma inconsistência em relação a time zone e/ou fuso horário.

Autor: Thiago Rocha
Tipo: SQL
Atividade: #10797
Data: 28/12/2018

POSTGRES

DO $$
  DECLARE
    dado record;
    dt_proc_corrigida timestamp;
    hora_calculada char(2);
  BEGIN
  FOR dado in SELECT
      nfe.id nfe_id,
      replace(right(split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1), 6), ':', '') as time_zone,
      nfe.emitente_uf,
      CASE
        WHEN split_part(split_part(dados_xml, 'dhRecbto>', 2),'</',1) <> ''
        THEN
        split_part(split_part(dados_xml, 'dhRecbto>', 2),'</',1)::TIMESTAMP
      END AS data_processamento_xml,
      CASE
        WHEN dados_xml SIMILAR TO '%<dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</dhRecbto>%'
        THEN
          CASE
            WHEN
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2013-10-20 00:00:00' and '2014-02-15 23:59:59'
              OR
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2014-10-19 00:00:00' and '2015-02-21 23:59:59'
              OR
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2015-10-18 00:00:00' and '2016-02-20 23:59:59'
              OR
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2016-10-16 00:00:00' and '2017-02-18 23:59:59'
              OR
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2017-10-15 00:00:00' and '2018-02-17 23:59:59'
              OR
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2018-11-04 00:00:00' and '2019-02-16 23:59:59'
            THEN
              True
            ELSE
              False
          END
      END AS is_horario_verao,
      data_processamento,
      dados_xml
      FROM nfe INNER JOIN nfe_documento n ON nfe.id = n.nfe_id
      WHERE emitente_uf NOT IN (12,14,11,13,17,24,22,26,25,15,21,23,29,16,27,28,50,51) AND n.tipo_documento = 551 AND versao <> '2.00'
      AND data_processamento NOTNULL AND timezone_data_processamento ISNULL
  LOOP
    IF ((dado.data_processamento NOTNULL) AND (dado.data_processamento_xml NOTNULL) AND (dado.is_horario_verao) AND
        (EXTRACT(hour FROM dado.data_processamento) <> EXTRACT(hour FROM dado.data_processamento_xml)) AND ((dado.time_zone) <> '-0200')) THEN

      hora_calculada := substr(CAST(CAST(substr(dado.time_zone,1,3) AS INT) - (CAST(substr('-0200',1,3) AS INT)) AS CHAR(2)), -1);
      dt_proc_corrigida := dado.data_processamento_xml - (hora_calculada || 'hour')::INTERVAL;
      UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0200' WHERE id = dado.nfe_id;
      UPDATE nfe_documento
        SET dados_xml = regexp_replace(dado.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
                                       '<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-02:00</d')
        WHERE nfe_id = dado.nfe_id;

    ELSEIF((dado.data_processamento NOTNULL) AND (dado.data_processamento_xml NOTNULL) AND (dado.is_horario_verao) AND
        (extract(hour from dado.data_processamento) <> extract(hour from dado.data_processamento_xml)) AND ((dado.time_zone) = '-0200')) THEN

      UPDATE nfe SET data_processamento = dado.data_processamento_xml, timezone_data_processamento = dado.time_zone WHERE id = dado.nfe_id;

    ELSEIF((dado.data_processamento NOTNULL) AND (dado.data_processamento_xml NOTNULL) AND (NOT dado.is_horario_verao) AND
        (extract(hour from dado.data_processamento) <> extract(hour from dado.data_processamento_xml)) AND ((dado.time_zone) <> '-0300')) THEN

      hora_calculada := substr(CAST(CAST(substr(dado.time_zone,1,3) AS INT) - (CAST(substr('-0300',1,3) AS INT)) AS CHAR(2)), -1);
      dt_proc_corrigida := dado.data_processamento_xml - (hora_calculada || 'hour')::INTERVAL;
      UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0300' WHERE id = dado.nfe_id;
      UPDATE nfe_documento
        SET dados_xml = regexp_replace(dado.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
                                       '<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-03:00</d')
        WHERE nfe_id = dado.nfe_id;

    ELSEIF((dado.data_processamento NOTNULL) AND (dado.data_processamento_xml NOTNULL) AND (NOT dado.is_horario_verao) AND
        (extract(hour from dado.data_processamento) <> extract(hour from dado.data_processamento_xml)) AND ((dado.time_zone) = '-0300')) THEN

      UPDATE nfe SET data_processamento = dado.data_processamento_xml, timezone_data_processamento  = dado.time_zone WHERE id = dado.nfe_id;

    ELSEIF((dado.data_processamento NOTNULL) AND (dado.data_processamento_xml NOTNULL) AND (dado.is_horario_verao) AND
        (extract(hour from dado.data_processamento) = extract(hour from dado.data_processamento_xml)) AND ((dado.time_zone) <> '-0200')) THEN

      hora_calculada := substr(CAST(CAST(substr(dado.time_zone,1,3) AS INT) - (CAST(substr('-0200',1,3) AS INT)) AS CHAR(2)), -1);
      dt_proc_corrigida := dado.data_processamento_xml - (hora_calculada || 'hour')::INTERVAL;
      UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = dado.time_zone WHERE id = dado.nfe_id;
      UPDATE nfe_documento
        SET dados_xml = regexp_replace(dado.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
                                       '<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-02:00</d')
        WHERE nfe_id = dado.nfe_id;

    ELSE

      UPDATE nfe SET timezone_data_processamento = dado.time_zone WHERE id = dado.nfe_id;

    END IF;
  END LOOP;
END $$;

ORACLE

DECLARE
  dt_proc_corrigida timestamp;
  hora_calculada_minutos number;
BEGIN
  FOR rec IN ( SELECT
    nfe_id,
    REGEXP_REPLACE(REGEXP_SUBSTR(dados_xml, '.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}(-[0-9]{1,2}:[0-9]{1,2})</.',1,1,'i',1),':','') as time_zone,
    emitente_uf,
    TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') as data_processamento_xml,
    CASE
      WHEN
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2013-10-20 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2014-02-15 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
        OR
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2014-10-19 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2015-02-21 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
        OR
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2015-10-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2016-02-20 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
        OR
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2016-10-16 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2017-02-18 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
        OR
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2017-10-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2018-02-17 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
        OR
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2018-11-04 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2019-02-16 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
      THEN
         1
      ELSE
         0
    END AS is_horario_verao,
    data_processamento,
    dados_xml
    FROM nfe INNER JOIN nfe_documento n ON nfe.id = n.nfe_id
    WHERE emitente_uf NOT IN (12,14,11,13,17,24,22,26,25,15,21,23,29,16,27,28,50,51) AND n.tipo_documento = 551 AND versao <> '2.00'
    AND data_processamento IS NOT NULL) --3936)
  LOOP
            IF((rec.data_processamento IS NOT NULL) AND (rec.data_processamento_xml IS NOT NULL) AND (rec.is_horario_verao = 1) AND
      (EXTRACT(HOUR FROM rec.data_processamento) <> EXTRACT(HOUR FROM rec.data_processamento_xml)) AND ((rec.time_zone) <> '-0200')) THEN

                hora_calculada_minutos := 60 * (TO_NUMBER(substr(rec.time_zone,1,3)) - TO_NUMBER(substr('-0200',1,3)));
                dt_proc_corrigida := rec.data_processamento_xml - (hora_calculada_minutos/1440);
                UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0200' WHERE id = rec.nfe_id;
                UPDATE nfe_documento
        SET dados_xml = regexp_replace(rec.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
                                       '<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-02:00</d')
        WHERE nfe_id = rec.nfe_id;
                commit;
      ELSIF((rec.data_processamento IS NOT NULL) AND (rec.data_processamento_xml IS NOT NULL) AND (rec.is_horario_verao = 1) AND
        (EXTRACT(HOUR FROM rec.data_processamento) <> EXTRACT(HOUR FROM rec.data_processamento_xml)) AND ((rec.time_zone) = '-0200')) THEN

                UPDATE nfe SET data_processamento = rec.data_processamento_xml, timezone_data_processamento = rec.time_zone WHERE id = rec.nfe_id;
                commit;
            ELSIF((rec.data_processamento IS NOT NULL) AND (rec.data_processamento_xml IS NOT NULL) AND (rec.is_horario_verao <> 1) AND
        (EXTRACT(HOUR FROM rec.data_processamento) <> EXTRACT(HOUR FROM rec.data_processamento_xml)) AND ((rec.time_zone) <> '-0300')) THEN

                hora_calculada_minutos := 60 * (TO_NUMBER(substr(rec.time_zone,1,3)) - TO_NUMBER(substr('-0300',1,3)));
                dt_proc_corrigida := rec.data_processamento_xml - (hora_calculada_minutos/1440);
        UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0300' WHERE id = rec.nfe_id;
        UPDATE nfe_documento
        SET dados_xml = regexp_replace(rec.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
                                       '<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-03:00</d')
        WHERE nfe_id = rec.nfe_id;
                commit;
            ELSIF((rec.data_processamento IS NOT NULL) AND (rec.data_processamento_xml IS NOT NULL) AND (rec.is_horario_verao <> 1) AND
        (EXTRACT(HOUR FROM rec.data_processamento) <> EXTRACT(HOUR FROM rec.data_processamento_xml)) AND ((rec.time_zone) = '-0300')) THEN

        UPDATE nfe SET data_processamento = rec.data_processamento_xml, timezone_data_processamento  = rec.time_zone WHERE id = rec.nfe_id;
                commit;
            ELSIF((rec.data_processamento IS NOT NULL) AND (rec.data_processamento_xml IS NOT NULL) AND (rec.is_horario_verao = 1) AND
        (EXTRACT(HOUR FROM rec.data_processamento) = EXTRACT(HOUR FROM rec.data_processamento_xml)) AND ((rec.time_zone) <> '-0200')) THEN

                hora_calculada_minutos := 60 * (TO_NUMBER(substr(rec.time_zone,1,3)) - TO_NUMBER(substr('-0200',1,3)));
                dt_proc_corrigida := rec.data_processamento_xml - (hora_calculada_minutos/1440);
                UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0200' WHERE id = rec.nfe_id;
        UPDATE nfe_documento
        SET dados_xml = regexp_replace(rec.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
                                       '<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-02:00</d')
                WHERE nfe_id = rec.nfe_id;
                commit;
      ELSE

        UPDATE nfe SET timezone_data_processamento = rec.time_zone WHERE id = rec.nfe_id;
                commit;
    END IF;

  END LOOP;
END;

240 - Preenche/Corrige timezone_data_processamento da tabela nfe e dados_xml da tabela nfe_documento (Mato Grosso Mato Grosso Sul) (PATCH LONGO)

- Preenche a coluna 'timezone_data_processamento' da tabela 'NFE'.
- Corrige o valor da coluna 'data_processamento' da tabela 'NFE' caso o valor da coluna apresente alguma inconsistência em relação ao valor contido na tag '<dhRecbto>' do XML.
- Corrige o conteúdo da tag '<dhRecbto>' do XML caso o mesmo apresente alguma inconsistência em relação a time zone e/ou fuso horário.

Autor: Thiago Rocha
Tipo: SQL
Atividade: #10797
Data: 28/12/2018

POSTGRES

DO $$
  DECLARE
    dado record;
    dt_proc_corrigida timestamp;
    hora_calculada char(2);
  BEGIN
  FOR dado in SELECT
      nfe.id nfe_id,
      replace(right(split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1), 6), ':', '') as time_zone,
      nfe.emitente_uf,
      CASE
        WHEN split_part(split_part(dados_xml, 'dhRecbto>', 2),'</',1) <> ''
        THEN
        split_part(split_part(dados_xml, 'dhRecbto>', 2),'</',1)::TIMESTAMP
      END AS data_processamento_xml,
      CASE
        WHEN dados_xml SIMILAR TO '%<dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</dhRecbto>%'
        THEN
          CASE
            WHEN
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2013-10-20 00:00:00' and '2014-02-15 23:59:59'
              OR
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2014-10-19 00:00:00' and '2015-02-21 23:59:59'
              OR
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2015-10-18 00:00:00' and '2016-02-20 23:59:59'
              OR
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2016-10-16 00:00:00' and '2017-02-18 23:59:59'
              OR
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2017-10-15 00:00:00' and '2018-02-17 23:59:59'
              OR
                split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1)::timestamp between '2018-11-04 00:00:00' and '2019-02-16 23:59:59'
            THEN
              True
            ELSE
              False
          END
      END AS is_horario_verao,
      data_processamento,
      nfe.chave_acesso,
      dados_xml
      FROM nfe INNER JOIN nfe_documento n ON nfe.id = n.nfe_id
      WHERE emitente_uf IN (50,51) AND n.tipo_documento = 551 AND versao <> '2.00'
      AND data_processamento NOTNULL AND timezone_data_processamento ISNULL
  LOOP
    IF (dado.is_horario_verao AND ((dado.time_zone) <> '-0300')) THEN

      hora_calculada := substr(CAST(CAST(substr(dado.time_zone,1,3) AS INT) - (CAST(substr('-0300',1,3) AS INT)) AS CHAR(2)), -1);
      dt_proc_corrigida := dado.data_processamento_xml - (hora_calculada || 'hour')::INTERVAL;
      UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0300' WHERE id = dado.nfe_id;
      UPDATE nfe_documento
        SET dados_xml = regexp_replace(dado.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
                                       '<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-03:00</d')
        WHERE nfe_id = dado.nfe_id;

    ELSEIF (dado.is_horario_verao AND ((dado.time_zone) = '-0300') AND
            (EXTRACT(hour FROM dado.data_processamento) <> EXTRACT(hour FROM dado.data_processamento_xml))) THEN

      hora_calculada := substr(CAST(CAST(substr(dado.time_zone,1,3) AS INT) - (CAST(substr('-0300',1,3) AS INT)) AS CHAR(2)), -1);
      dt_proc_corrigida := dado.data_processamento_xml - (hora_calculada || 'hour')::INTERVAL;
      UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0300' WHERE id = dado.nfe_id;

    ELSEIF (NOT dado.is_horario_verao AND ((dado.time_zone) <> '-0400')) THEN

      hora_calculada := substr(CAST(CAST(substr(dado.time_zone,1,3) AS INT) - (CAST(substr('-0400',1,3) AS INT)) AS CHAR(2)), -1);
      dt_proc_corrigida := dado.data_processamento_xml - (hora_calculada || 'hour')::INTERVAL;
      UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0400' WHERE id = dado.nfe_id;
      UPDATE nfe_documento
        SET dados_xml = regexp_replace(dado.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
                                       '<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-04:00</d')
        WHERE nfe_id = dado.nfe_id;

    ELSEIF (NOT dado.is_horario_verao AND ((dado.time_zone) = '-0400') AND
            (EXTRACT(hour FROM dado.data_processamento) <> EXTRACT(hour FROM dado.data_processamento_xml))) THEN

      hora_calculada := substr(CAST(CAST(substr(dado.time_zone,1,3) AS INT) - (CAST(substr('-0400',1,3) AS INT)) AS CHAR(2)), -1);
      dt_proc_corrigida := dado.data_processamento_xml - (hora_calculada || 'hour')::INTERVAL;
      UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0400' WHERE id = dado.nfe_id;

    ELSE

      UPDATE nfe SET timezone_data_processamento = dado.time_zone WHERE id = dado.nfe_id;

    END IF;
  END LOOP;
END $$;

ORACLE

DECLARE
  dt_proc_corrigida timestamp;
  hora_calculada_minutos number;
BEGIN
  FOR rec IN ( SELECT
    nfe_id,
    REGEXP_REPLACE(REGEXP_SUBSTR(dados_xml, '.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}(-[0-9]{1,2}:[0-9]{1,2})</.',1,1,'i',1),':','') as time_zone,
    emitente_uf,
    TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') as data_processamento_xml,
    CASE
      WHEN
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2013-10-20 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2014-02-15 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
        OR
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2014-10-19 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2015-02-21 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
        OR
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2015-10-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2016-02-20 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
        OR
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2016-10-16 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2017-02-18 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
        OR
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2017-10-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2018-02-17 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
        OR
          TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') BETWEEN TO_TIMESTAMP('2018-11-04 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2019-02-16 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
      THEN
         1
      ELSE
         0
    END AS is_horario_verao,
    data_processamento,
    dados_xml
    FROM nfe INNER JOIN nfe_documento n ON nfe.id = n.nfe_id
    WHERE emitente_uf IN (50,51) AND n.tipo_documento = 551 AND versao <> '2.00'
    AND data_processamento IS NOT NULL AND timezone_data_processamento IS NULL)
  LOOP
            IF((rec.data_processamento IS NOT NULL) AND (rec.data_processamento_xml IS NOT NULL) AND (rec.is_horario_verao = 1) AND (rec.time_zone <> '-0300')) THEN

        hora_calculada_minutos := 60 * (TO_NUMBER(substr(rec.time_zone,1,3)) - TO_NUMBER(substr('-0300',1,3)));
                dt_proc_corrigida := rec.data_processamento_xml - (hora_calculada_minutos/1440);

        UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0300' WHERE id = rec.nfe_id;
        UPDATE nfe_documento
        SET dados_xml = regexp_replace(rec.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
                                       '<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-03:00</d')
        WHERE nfe_id = rec.nfe_id;
        commit;
      ELSIF ((rec.data_processamento IS NOT NULL) AND (rec.data_processamento_xml IS NOT NULL) AND (rec.is_horario_verao  = 1) AND ((rec.time_zone) = '-0300') AND
            (EXTRACT(hour FROM rec.data_processamento) <> EXTRACT(hour FROM rec.data_processamento_xml))) THEN

        hora_calculada_minutos := 60 * (TO_NUMBER(substr(rec.time_zone,1,3)) - TO_NUMBER(substr('-0300',1,3)));
                dt_proc_corrigida := rec.data_processamento_xml - (hora_calculada_minutos/1440);
        UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0300' WHERE id = rec.nfe_id;
        commit;
      ELSIF ((rec.data_processamento IS NOT NULL) AND (rec.data_processamento_xml IS NOT NULL) AND (rec.is_horario_verao  <> 1) AND
             (rec.time_zone <> '-0400') ) THEN

        hora_calculada_minutos := 60 * (TO_NUMBER(substr(rec.time_zone,1,3)) - TO_NUMBER(substr('-0400',1,3)));
                dt_proc_corrigida := rec.data_processamento_xml - (hora_calculada_minutos/1440);

        UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0400' WHERE id = rec.nfe_id;
        UPDATE nfe_documento
        SET dados_xml = regexp_replace(rec.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
                                       '<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-04:00</d')
        WHERE nfe_id = rec.nfe_id;
        commit;
      ELSIF ((rec.data_processamento IS NOT NULL) AND (rec.data_processamento_xml IS NOT NULL) AND (rec.time_zone = '-0400')  AND
             (rec.is_horario_verao  <> 1) AND (EXTRACT(hour FROM rec.data_processamento) <> EXTRACT(hour FROM rec.data_processamento_xml))) THEN

        hora_calculada_minutos := 60 * (TO_NUMBER(substr(rec.time_zone,1,3)) - TO_NUMBER(substr('-0400',1,3)));
                dt_proc_corrigida := rec.data_processamento_xml - (hora_calculada_minutos/1440);
        UPDATE nfe SET data_processamento = dt_proc_corrigida, timezone_data_processamento = '-0400' WHERE id = rec.nfe_id;
        commit;
      ELSE

         UPDATE nfe SET timezone_data_processamento = rec.time_zone WHERE id = rec.nfe_id;
        commit;
    END IF;

  END LOOP;
END;

237 - Preenche/Corrige timezone_data_processamento da tabela nfe e dados_xml da tabela nfe_documento (Norte Nordeste) (PATCH LONGO)

- Preenche a coluna 'timezone_data_processamento' da tabela 'NFE'.
- Corrige o valor da coluna 'data_processamento' da tabela 'NFE' caso o valor da coluna apresente alguma inconsistência em relação ao valor contido na tag '<dhRecbto>' do XML.
- Corrige o conteúdo da tag '<dhRecbto>' do XML caso o mesmo apresente alguma inconsistência em relação a time zone e/ou fuso horário.

Autor: Thiago Rocha
Tipo: SQL
Atividade: #10797
Data: 17/12/2018

POSTGRES

DO $$
DECLARE
dado record;
dt_proc_corrigida timestamp;
hora_calculada char(2);
uf_timezone_3 INT[] := '{17,24,22,26,25,15,21,23,29,16,27}';
uf_timezone_4 INT[] := '{14,11,13}';
uf_timezone_5 INT := 12;
BEGIN
FOR dado in SELECT
nfe_id,
emitente_uf,
data_processamento,
replace(right(split_part(split_part(dados_xml, 'dhRecbto>', 2), '</', 1), 6), ':', '') AS time_zone,
CASE
WHEN split_part(split_part(dados_xml, 'dhRecbto>', 2),'</',1) <> '' THEN
split_part(split_part(dados_xml, 'dhRecbto>', 2),'</',1)::TIMESTAMP
END AS data_processamento_xml,
dados_xml
FROM nfe_documento INNER JOIN nfe ON nfe_documento.nfe_id = nfe.id
WHERE emitente_uf IN (17,14,11,24,22,26,25,15,21,23,29,13,16,27,12) AND tipo_documento = 551 AND versao <> '2.00'
AND data_processamento NOTNULL AND timezone_data_processamento ISNULL
LOOP
IF ((dado.emitente_uf = any(uf_timezone_3)) AND dado.time_zone <> '-0300') THEN

hora_calculada := substr(CAST(CAST(substr(dado.time_zone,1,3) AS INT) - (CAST(substr('-0300',1,3) AS INT)) AS CHAR(2)), -1);
dt_proc_corrigida := dado.data_processamento_xml - (hora_calculada || 'hour')::INTERVAL;

UPDATE nfe set timezone_data_processamento = '-0300', data_processamento = dt_proc_corrigida WHERE id = dado.nfe_id;
UPDATE nfe_documento
set dados_xml = regexp_replace(dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
'<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-03:00</d')
WHERE nfe_id = dado.nfe_id;

ELSEIF (dado.emitente_uf = any(uf_timezone_4) AND dado.time_zone <> '-0400') THEN

hora_calculada := substr(CAST(CAST(substr(dado.time_zone,1,3) AS INT) - (CAST(substr('-0400',1,3) AS INT)) AS CHAR(2)), -1);
dt_proc_corrigida := dado.data_processamento_xml - (hora_calculada || 'hour')::INTERVAL;

UPDATE nfe set timezone_data_processamento = '-0400', data_processamento = dt_proc_corrigida WHERE id = dado.nfe_id;
UPDATE nfe_documento
set dados_xml = regexp_replace(dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
'<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-04:00</d')
WHERE nfe_id = dado.nfe_id;

ELSEIF ((dado.emitente_uf = uf_timezone_5) AND dado.time_zone <> '-0500') THEN

hora_calculada := substr(CAST(CAST(substr(dado.time_zone,1,3) AS INT) - (CAST(substr('-0500',1,3) AS INT)) AS CHAR(2)), -1);
dt_proc_corrigida := dado.data_processamento_xml - (hora_calculada || 'hour')::INTERVAL;

UPDATE nfe set timezone_data_processamento = '-0500', data_processamento = dt_proc_corrigida WHERE id = dado.nfe_id;
UPDATE nfe_documento
set dados_xml = regexp_replace(dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
'<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-05:00</d')
WHERE nfe_id = dado.nfe_id;

ELSE

UPDATE nfe set timezone_data_processamento = dado.time_zone WHERE id = dado.nfe_id;
END IF;
END LOOP;
END $$;


ORACLE

DECLARE
type number_array is table of number;

dt_proc_corrigida timestamp;
hora_calculada_minutos number;
uf_timezone_3 number_array;
uf_timezone_4 number_array;
uf_timezone_5 number := 12;
BEGIN
uf_timezone_3 := number_array(17,24,22,26,25,15,21,23,29,16,27);
uf_timezone_4 := number_array(14,11,13);

FOR rec in ( SELECT
nfe_id,
emitente_uf,
data_processamento,
REGEXP_REPLACE(REGEXP_SUBSTR(dados_xml, '.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}(-[0-9]{1,2}:[0-9]{1,2})</.',1,1,'i',1),':','') as time_zone,
TO_TIMESTAMP(TO_CHAR(REGEXP_SUBSTR(dados_xml, '.dhRecbto>([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})-[0-9]{1,2}:[0-9]{1,2}</.',1,1,'i',1)), 'YYYY-MM-DD"T"HH24:MI:SS') as data_processamento_xml,
dados_xml
FROM nfe_documento INNER JOIN nfe ON nfe_documento.nfe_id = nfe.id
WHERE emitente_uf IN (17,14,11,24,22,26,25,15,21,23,29,13,16,27,12) AND tipo_documento = 551 AND versao <> '2.00'
AND data_processamento IS NOT NULL AND timezone_data_processamento IS NULL)
LOOP
IF ((rec.emitente_uf member of uf_timezone_3) AND rec.time_zone <> '-0300') THEN

hora_calculada_minutos := 60 * (TO_NUMBER(substr(rec.time_zone,1,3)) - TO_NUMBER(substr('-0300',1,3)));
dt_proc_corrigida := rec.data_processamento_xml - (hora_calculada_minutos/1440);
UPDATE nfe set timezone_data_processamento = '-0300', data_processamento = dt_proc_corrigida WHERE id = rec.nfe_id;
UPDATE nfe_documento
set dados_xml = regexp_replace(rec.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
'<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-03:00</d')
WHERE nfe_id = rec.nfe_id;
commit;
ELSIF((rec.emitente_uf member of uf_timezone_4) AND rec.time_zone <> '-0400') THEN

hora_calculada_minutos := 60 * (TO_NUMBER(substr(rec.time_zone,1,3)) - TO_NUMBER(substr('-0400',1,3)));
dt_proc_corrigida := rec.data_processamento_xml - (hora_calculada_minutos/1440);
UPDATE nfe set timezone_data_processamento = '-0400', data_processamento = dt_proc_corrigida WHERE id = rec.nfe_id;
UPDATE nfe_documento
SET dados_xml = regexp_replace(rec.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
'<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-04:00</d')
WHERE nfe_id = rec.nfe_id;
commit;
ELSIF ((rec.emitente_uf = uf_timezone_5) AND rec.time_zone <> '-0500') THEN

hora_calculada_minutos := 60 * (TO_NUMBER(substr(rec.time_zone,1,3)) - TO_NUMBER(substr('-0500',1,3)));
dt_proc_corrigida := rec.data_processamento_xml - (hora_calculada_minutos/1440);
UPDATE nfe set timezone_data_processamento = '-0500', data_processamento = dt_proc_corrigida WHERE id = rec.nfe_id;
UPDATE nfe_documento
SET dados_xml = regexp_replace(rec.dados_xml,'.dhRecbto>[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}</.',
'<dhRecbto>'||to_char(dt_proc_corrigida,'yyyy-mm-DD"T"HH24:MI:SS')||'-05:00</d')
WHERE nfe_id = rec.nfe_id;
commit;
ELSE
UPDATE nfe set timezone_data_processamento = rec.time_zone WHERE id = rec.nfe_id;
commit;
END IF;

END LOOP;
END;

Versão 18.23.0

242 - Aumenta tamanho da coluna 'nome' em todas as tabelas de documento para 255

Remove a coluna modelo das tabelas: nfe, nfce, nfse, mdfe, cte, cteos, cfe.

Autor: Mateus Neves
Tipo: SQL
Atividade: #10957
Data: 28/12/2018

POSTGRES

-- CFE
alter table cfe_documento alter column nome type varchar(255);
alter table cfe_documento_evento alter column nome type varchar(255);

-- CTE
alter table cte_documento alter column nome type varchar(255);
alter table cte_documento_evento alter column nome type varchar(255);

-- CTEOS
alter table cteos_documento alter column nome type varchar(255);
alter table cteos_documento_evento alter column nome type varchar(255);

-- MDFE
alter table mdfe_documento alter column nome type varchar(255);
alter table mdfe_documento_evento alter column nome type varchar(255);

-- NFCE
alter table nfce_documento alter column nome type varchar(255);
alter table nfce_documento_evento alter column nome type varchar(255);

-- NFE
alter table nfe_documento alter column nome type varchar(255);
alter table nfe_documento_evento alter column nome type varchar(255);

-- NFSE
alter table nfse_documento alter column nome type varchar(255);

ORACLE

-- CFE
alter table cfe_documento modify NOME VARCHAR2(255);
alter table cfe_documento_evento modify NOME VARCHAR2(255);

-- CTE
alter table cte_documento modify NOME VARCHAR2(255);
alter table cte_documento_evento modify NOME VARCHAR2(255);

-- CTEOS
alter table cteos_documento modify NOME VARCHAR2(255);
alter table cteos_documento_evento modify NOME VARCHAR2(255);

-- MDFE
alter table mdfe_documento modify NOME VARCHAR2(255);
alter table mdfe_documento_evento modify NOME VARCHAR2(255);

-- NFCE
alter table nfce_documento modify NOME VARCHAR2(255);
alter table nfce_documento_evento modify NOME VARCHAR2(255);

-- NFE
alter table nfe_documento modify NOME VARCHAR2(255);
alter table nfe_documento_evento modify NOME VARCHAR2(255);

-- NFSE
alter table nfse_documento modify NOME VARCHAR2(255);

239 - Remove a coluna modelo

Remove a coluna modelo das tabelas: nfe, nfce, nfse, mdfe, cte, cteos, cfe.

Autor: Marcus Neves
Tipo: SQL
Atividade: #10971
Data: 27/12/2018

POSTGRES e ORACLE

alter table nfe drop column modelo;
alter table nfce drop column modelo;
alter table nfse drop column modelo;
alter table cte drop column modelo;
alter table cteos drop column modelo;
alter table cfe drop column modelo;
alter table mdfe drop column modelo;

238 - Adiciona coluna ultima_consulta_lote na tabela sat_equipamentos

Adiciona coluna ultima_consulta_lote na tabela sat_equipamentos

Autor: Taynan Rezende
Tipo: SQL
Atividade: #10925
Data: 19/12/2018

POSTGRES e ORACLE

ALTER TABLE sat_equipamentos ADD COLUMN ultima_consulta_lote timestamp without time zone;

ALTER TABLE sat_equipamentos ADD (ultima_consulta_lote TIMESTAMP(6));

236 - Cria Primary Key para a tabela nfe_referenciada e índice na tabela sat_conteudo_download

Cria Primary Key para a tabela nfe_referenciada e INDEX para as colunas equipamento_id e data_processamento da tabela sat_conteudo_download.

Autor: Mateus Neves
Tipo: SQL
Atividade: #10844
Data: 17/12/2018

POSTGRES

ALTER TABLE nfe_referenciada ADD PRIMARY KEY (id);
create index satcont_dtproc_idx on sat_conteudo_download(equipamento_id,data_processamento);

ORACLE

-- O Patch 153 (V153__criacao_tabela_nfe_referenciadas) cria a tabela nfe_referenciada com Primary Key.
-- ALTER TABLE nfe_referenciada ADD PRIMARY KEY (id);
create index satcont_dtproc_idx on sat_conteudo_download(equipamento_id,data_processamento);

235 - Corrige tipo_documento baseando-se no tipo do XML

Corrige registros que estavam preenchidos com o tipo de documento diferente do que constava na coluna de dados do XML.

Autor: Renato Borges
Tipo: SQL
Atividade:
Data: 17/12/2018

POSTGRES e ORACLE

update nfce_documento set tipo_documento = 651 where dados_xml like '%<nfeProc%' and tipo_documento <> 651;

update nfe_documento set tipo_documento = 551 where dados_xml like '%<nfeProc%' and tipo_documento <> 551;

update cte_documento set tipo_documento = 571 where dados_xml like '%<cteProc%' and tipo_documento <> 571;

update mdfe_documento set tipo_documento = 581 where dados_xml like '%<mdfeProc%' and tipo_documento <> 581;

Versão 18.22.0

234 - Cria índice único da coluna CNPJ da tabela nfe_filial.

Patch para criar índice único da coluna CNPJ da tabela FILIAL. Obs: no Postgres já existia o índice: nfefil_cnpj_ix, mas não era único.

Autor: Marcus Neves
Tipo: SQL
Atividade:
Data: 12/12/2018

POSTGRES

DROP INDEX nfefil_cnpj_ix;

CREATE UNIQUE INDEX idx_uk_filial_cnpj
    ON nfe_filial
        USING btree(cnpj_filial bpchar_pattern_ops);

ORACLE

CREATE UNIQUE INDEX idx_uk_filial_cnpj
    ON nfe_filial(cnpj_filial);

233 - Corrige valor default da coluna quantidade_requisicao_api_rest

Patch criado para corrigir valor default da coluna quantidade_requisicao_api_rest setando 0 onde estiver null e adiciona constraint NOT NULL.

Autor: Marcus Neves
Tipo: SQL
Atividade:
Data: 12/12/2018

POSTGRES

UPDATE distribuicao
SET quantidade_requisicao_api_rest = 0
WHERE quantidade_requisicao_api_rest IS NULL;

ALTER table distribuicao
    alter column quantidade_requisicao_api_rest SET NOT NULL;

ORACLE

UPDATE distribuicao
SET quantidade_requisicao_api_rest = 0
WHERE quantidade_requisicao_api_rest IS NULL;

ALTER table distribuicao
    MODIFY quantidade_requisicao_api_rest NOT NULL;

232 - Remove obrigatoriedade da coluna justificativa na tabela acionamento_contingencia

Patch criado para remover a obrigatoriedade da coluna justificativa em acionamento contingência.

Autor: Taynan Rezende
Tipo: SQL
Atividade:
Data: 11/12/2018

POSTGRES

ALTER TABLE acionamento_contingencia ALTER COLUMN justificativa DROP NOT NULL;

ORACLE

ALTER TABLE acionamento_contingencia MODIFY justificativa varchar2(255);

231 - Cria índice na tabela distribuicao

Cria índice na tabela distribuição para as colunas: cpf_cnpj, dh_consulta e id_distribuicao com o objetivo de melhorar a performance das consultas realizadas na tela WS Distribuição do monitor.

Autor: Jonathan Camilo
Tipo: SQL
Atividade: #9623
Data: 05/12/2018

POSTGRES

CREATE INDEX dist_dhcon_cnpj_id_idx ON distribuicao (cpf_cnpj, dh_consulta, id_distribuicao) WHERE codigo_cstat <> 137;

ORACLE

CREATE INDEX dist_dhcon_cnpj_id_idx ON distribuicao (cpf_cnpj, dh_consulta, id_distribuicao);

Versão 18.21.0

230 - Adiciona a coluna nome_usuario na tabela acionamento_contingencia

Adiciona a coluna nome_usuario na tabela acionamento_contingencia para registrar mais detalhes do usuário responsável por alterar o tipo de emissão.

Autor: Taynan Rezende
Tipo: SQL
Atividade:
Data: 15/12/2018

POSTGRES

ALTER TABLE acionamento_contingencia ADD COLUMN nome_usuario character varying;

ORACLE:

ALTER TABLE acionamento_contingencia ADD nome_usuario VARCHAR2(255 CHAR);

229 - Altera o tipo da coluna chave_unica nas tabelas nfse e nfse_ocorrencia

Relaxa o tamanho da coluna "chave_unica" nas tabelas "nfse" e "nfse_ocorrencia"

Autor: Sartre Brasil
Tipo: SQL
Atividade:
Data: 03/12/2018

POSTGRES:

ALTER TABLE nfse ALTER COLUMN chave_unica TYPE CHARACTER VARYING(41);
ALTER TABLE nfse_ocorrencia ALTER COLUMN chave_unica_nfse TYPE CHARACTER VARYING(41);

ORACLE:

ALTER TABLE nfse MODIFY (chave_unica VARCHAR2(41));
ALTER TABLE nfse_ocorrencia MODIFY (chave_unica_nfse VARCHAR2(41));

Versão 18.20.0

228 - Altera cstat default na tabela nfse

Correção de dados default de DFe para NFSe.

Autor: Uillan
Tipo: SQL
Atividade:
Data: 28/11/2018

POSTGRES e ORACLE:

UPDATE nfse 
SET cstat_sefaz = 100, motivo_sefaz = 'Autorizado o uso da NFS-e', id_lote_erp = 1, status_lote = 2, serie = 1, status_dfe = 1 
WHERE serie IS NULL 
AND status_lote IS NULL;

227 - Adiciona permissão de Validador de Arquivos para todo perfil que tem permissão de Arquivos Inválidos

ORACLE e POSTGRES: Esse patch é executado através da Classe Java, tanto para POSTGRESQL, quanto para ORACLE.

Autor: Taynan Rezende
Tipo: JDBC
Atividade:
Data: 30/11/2018

226 - Cria a coluna timezone_data_processamento na tabela cteos

Cria a coluna timezone_data_processamento na tabela cteos.

Autor: Thiago Rocha
Tipo: SQL
Atividade:
Data: 28/11/2018

ORACLE e POSTGRES:

ALTER TABLE cteos ADD timezone_data_processamento CHAR(5);

225 - Altera o tamanho da coluna "numero_recibo" da tabela "nfse_iteracao" para 100

Aumenta o tamanho da coluna do numero de recibo na tabela nfse iteração.

Autor: Sartre
Tipo: SQL
Atividade:
Data: 27/11/2018

POSTGRES

ALTER TABLE nfse_iteracao ALTER COLUMN numero_recibo TYPE CHARACTER VARYING(100);

ORACLE

ALTER TABLE nfse_iteracao MODIFY (numero_recibo VARCHAR2(100));

224 - Insere permissões nos perfis.

Adiciona permissão aos perfis: Administrador, Gerente, Compra e Venda e Vendas para utilizar a ação de Consultar Não Encerrados para MDFe.

Autor: Mateus Neves
Tipo: SQL
Atividade:
Data: 27/11/2018

POSTGRES e ORACLE:

insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Administrador'), 'ROLE_CONSULTAR_MDFES_NAO_ENCERRADOS_NA_SEFAZ');
insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Gerente'), 'ROLE_CONSULTAR_MDFES_NAO_ENCERRADOS_NA_SEFAZ');
insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Vendas'), 'ROLE_CONSULTAR_MDFES_NAO_ENCERRADOS_NA_SEFAZ');
insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Compra e Venda'), 'ROLE_CONSULTAR_MDFES_NAO_ENCERRADOS_NA_SEFAZ');

223 - Adiciona coluna time zone na tabela antiga (eng_lote)

Cria a coluna de timezone da data/hora recibo na tabela antiga (eng_lote).

Autor: Thiago Rocha
Tipo: SQL
Atividade:
Data: 27/11/2018

POSTGRES:

DO $$
BEGIN
  BEGIN
    ALTER TABLE eng_lote ADD timezone_data_hora_recibo CHAR(5);
    EXCEPTION
    WHEN duplicate_column THEN RAISE NOTICE 'column timezone_data_hora_recibo already exists in eng_lote.';
  END;
END;
$$;

ORACLE:

ALTER TABLE eng_lote ADD timezone_data_hora_recibo CHAR(5);

222 - Adiciona coluna time zone de data de processamento nas tabela dfe

Cria a coluna timezone_data_processamento nas tabelas de dfe.

Autor: Thiago Rocha
Tipo: SQL
Atividade:
Data: 22/11/2018

ORACLE e POSTGRES:

ALTER TABLE nfe ADD timezone_data_processamento CHAR(5);
ALTER TABLE nfce ADD timezone_data_processamento CHAR(5);
ALTER TABLE cte ADD timezone_data_processamento CHAR(5);
ALTER TABLE mdfe ADD timezone_data_processamento CHAR(5);
ALTER TABLE nfse ADD timezone_data_processamento CHAR(5);

221 - Adiciona coluna time zone de data de registro do evento nas tabelas de evento

Cria a coluna timezone_data_registro_evento nas tabelas de evento.

Autor: Renato
Tipo: SQL
Atividade:
Data: 19/11/2018

ORACLE e POSTGRES:

ALTER TABLE eventos_nfe ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE eventos_cte ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE nfe_evento ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE nfce_evento ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE cte_evento ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE cteos_evento ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE mdfe_evento ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE cfe_evento ADD timezone_data_registro_evento CHAR(5)

220 - Preenche coluna uf emitente nas tabelas dfes

A partir dos primeiros dois dígitos da chave de acesso do documento, este patch preenche as tuplas das tabelas dos modelos de DFe cuja UF do emitente estiverem em branco (coluna "emitente_uf" do modelo de dados novo).

Autor: Rafael
Tipo: SQL
Atividade:
Data: 16/12/2018

POSTGRESQL:

UPDATE nfe SET emitente_uf = substr(chave_acesso,1,2)::INT WHERE emitente_uf IS NULL;
UPDATE nfce SET emitente_uf = substr(chave_acesso,1,2)::INT WHERE emitente_uf IS NULL;
UPDATE cfe SET emitente_uf = substr(chave_acesso,1,2)::INT WHERE emitente_uf IS NULL;
UPDATE cte SET emitente_uf = substr(chave_acesso,1,2)::INT WHERE emitente_uf IS NULL;
UPDATE cteos SET emitente_uf = substr(chave_acesso,1,2)::INT WHERE emitente_uf IS NULL;

ORACLE:

UPDATE nfe SET emitente_uf = CAST (substr(chave_acesso,1,2) AS INT) WHERE emitente_uf IS NULL;
UPDATE nfce SET emitente_uf = CAST (substr(chave_acesso,1,2) AS INT) WHERE emitente_uf IS NULL;
UPDATE cfe SET emitente_uf = CAST (substr(chave_acesso,1,2) AS INT) WHERE emitente_uf IS NULL;
UPDATE cte SET emitente_uf = CAST (substr(chave_acesso,1,2) AS INT) WHERE emitente_uf IS NULL;
UPDATE cteos SET emitente_uf = CAST (substr(chave_acesso,1,2) AS INT) WHERE emitente_uf IS NULL;

218 - Adiciona e preenche coluna da placa do veiculo na tabela mdfe.

Cria e preenche coluna placa_veic_tracao na tabela mdfe, com essa consulta é possível buscar por placa no Monitor.

Autor: Marcus Nezes
Tipo: SQL
Atividade: #10036
Data: 28/11/2018

Versão 18.19.0

217 - Cria coluna tipo de interrupção de processamento na tabela antiga (eng_mensagem_eletronica)

Adiciona coluna tp_interrupcao_processamento na tabela eng_mensagem_eletronica

Autor Marcus Neves:
Tipo: SQL
Atividade:
Data: 15/11/2018

POSTGRES

ALTER TABLE eng_mensagem_eletronica
ADD tp_interrupcao_processamento VARCHAR(9);

ORACLE

ALTER TABLE eng_mensagem_eletronica
ADD  tp_interrupcao_processamento VARCHAR2(9);

216 - Cria coluna time zone na tabela de eventos de CFe

Adiciona a coluna de timezone para as tabela de eventos de CFe.

Autor: Renato Borges
Tipo: SQL
Atividade:
Data: 08/11/2018

POSTGRES e ORACLE

ALTER TABLE cfe_evento ADD timezone_data_evento CHAR(5);

215 - Cria coluna time zone nas tabelas de eventos

Adiciona a coluna de timezone para as tabelas de eventos.

Autor: Renato:
Tipo: SQL
Atividade:
Data: 07/11/2018

POSTGRES e ORACLE

ALTER TABLE eventos_nfe ADD timezone_data_evento CHAR(5);
ALTER TABLE eventos_cte ADD timezone_data_evento CHAR(5);
ALTER TABLE nfe_evento ADD timezone_data_evento CHAR(5);
ALTER TABLE nfce_evento ADD timezone_data_evento CHAR(5);
ALTER TABLE cte_evento ADD timezone_data_evento CHAR(5);
ALTER TABLE cteos_evento ADD timezone_data_evento CHAR(5);
ALTER TABLE mdfe_evento ADD timezone_data_evento CHAR(5);

214 - Preenche coluna time zone na tabela antiga de recebimento (me_recebida)

Preenche a coluna timezone da data/hora de emissão da tabela me_recebida com o valor que consta na tag dhEmi do XML.

Autor: Renato
Tipo: SQL
Atividade:
Data:07/11/2018

POSTGRES

--menor que 2013
UPDATE me_recebida SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_autorizacao, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao <='2013-01-01';

--2013
UPDATE me_recebida SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_autorizacao, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2013-01-01' and '2014-01-01';

--2014
UPDATE me_recebida SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_autorizacao, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2014-01-01' and '2015-01-01';

--2015
UPDATE me_recebida SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_autorizacao, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2015-01-01' and '2016-01-01';

--2016
UPDATE me_recebida SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_autorizacao, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2016-01-01' and '2017-01-01';

--2017
UPDATE me_recebida SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_autorizacao, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2017-01-01' and '2018-01-01';

--2018
UPDATE me_recebida SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_autorizacao, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2018-01-01' and '2019-01-01';


ORACLE

--menor que 2013
UPDATE me_recebida SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_autorizacao, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao <= to_date('2013-01-01','YYYY-MM-DD'); COMMIT;

-- 2013
UPDATE me_recebida SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_autorizacao, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2013-01-01','YYYY-MM-DD') and to_date('2014-01-01','YYYY-MM-DD'); COMMIT;

-- 2014
UPDATE me_recebida SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_autorizacao, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2014-01-01','YYYY-MM-DD') and to_date('2015-01-01','YYYY-MM-DD'); COMMIT;

-- 2015
UPDATE me_recebida SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_autorizacao, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2015-01-01','YYYY-MM-DD') and to_date('2016-01-01','YYYY-MM-DD'); COMMIT;

-- 2016
UPDATE me_recebida SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_autorizacao, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2016-01-01','YYYY-MM-DD') and to_date('2017-01-01','YYYY-MM-DD'); COMMIT;

-- 2017
UPDATE me_recebida SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_autorizacao, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2017-01-01','YYYY-MM-DD') and to_date('2018-01-01','YYYY-MM-DD'); COMMIT;

-- 2018
UPDATE me_recebida SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_autorizacao, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2018-01-01','YYYY-MM-DD') and to_date('2019-01-01','YYYY-MM-DD'); COMMIT;

213 - Preenche coluna time zone na tabela antiga de emissão(eng_mensagem_eletronica)

Preenche a coluna timezone da data/hora de emissão da tabela eng_mensagem_eletronica com o valor que consta na tag dhEmi do XML.

Autor: Renato
Tipo: SQL
Atividade:
Data:06/11/2018

POSTGRES

--menor que 2013
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_normal, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_emissao <='2013-01-01';

--2013
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_normal, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2013-01-01' and '2014-01-01';

--2014
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_normal, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2014-01-01' and '2015-01-01';

--2015
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_normal, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2015-01-01' and '2016-01-01';

--2016
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_normal, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2016-01-01' and '2017-01-01';

--2017
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_normal, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2017-01-01' and '2018-01-01';

--2018
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(right(split_part(split_part(xml_normal, 'dhEmi>', 2), '</', 1), 6), ':', '') where timezone_data_hora_emissao  is null and    data_hora_emissao between '2018-01-01' and '2019-01-01';

ORACLE

--menor que 2013
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_normal, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao <= to_date('2013-01-01','YYYY-MM-DD'); COMMIT;

-- 2013
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_normal, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2013-01-01','YYYY-MM-DD') and to_date('2014-01-01','YYYY-MM-DD'); COMMIT;

-- 2014
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_normal, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2014-01-01','YYYY-MM-DD') and to_date('2015-01-01','YYYY-MM-DD'); COMMIT;

-- 2015
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_normal, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2015-01-01','YYYY-MM-DD') and to_date('2016-01-01','YYYY-MM-DD'); COMMIT;

-- 2016
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_normal, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2016-01-01','YYYY-MM-DD') and to_date('2017-01-01','YYYY-MM-DD'); COMMIT;

-- 2017
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_normal, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2017-01-01','YYYY-MM-DD') and to_date('2018-01-01','YYYY-MM-DD'); COMMIT;

-- 2018
UPDATE eng_mensagem_eletronica SET timezone_data_hora_emissao = replace(REGEXP_SUBSTR(REGEXP_SUBSTR(xml_normal, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') WHERE timezone_data_hora_emissao  is null     and    data_emissao between to_date('2018-01-01','YYYY-MM-DD') and to_date('2019-01-01','YYYY-MM-DD'); COMMIT;

212 - Cria coluna time zone da data de emissão nas tabelas antigas (me_recebida e eng_mensagem_eletronica)

Cria a coluna de timezone da data/hora de emissão nas tabelas antigas (eng_mensagem_eletronica e me_recebida).

Autor: Renato
Tipo: SQL
Atividade:
Data: 06/12/2018

POSTGRES e ORACLE

ALTER TABLE eng_mensagem_eletronica ADD timezone_data_hora_emissao CHAR(5);
ALTER TABLE me_recebida ADD timezone_data_hora_emissao CHAR(5);

Versão 18.18.0

211 - Cria coluna time zone da data de registro nas tabelas de eventos

Cria a coluna timezone_data_registro_evento nas tabelas de evento.

Autor: Renato
Tipo: SQL
Atividade:
Data: 26/10/2018

POSTGRES e ORACLE

ALTER TABLE eventos_nfe ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE eventos_cte ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE nfe_evento ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE nfce_evento ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE cte_evento ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE cteos_evento ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE mdfe_evento ADD timezone_data_registro_evento CHAR(5);
ALTER TABLE cfe_evento ADD timezone_data_registro_evento CHAR(5);
commit;

210 - Cria coluna da data e código do reset da senha na tabela usuario

Adiciona colunas de controle do reset de senha do usuário

Autor: Marcus Neves
Tipo: SQL
Atividade:
Data: 26/10/2018

POSTGRES

ALTER TABLE usuario
    ADD cod_reset_senha VARCHAR(36);
ALTER TABLE usuario
    ADD dt_cod_reset_senha TIMESTAMP;

ORACLE

ALTER TABLE usuario
    ADD cod_reset_senha VARCHAR2(36);
ALTER TABLE usuario
    ADD dt_cod_reset_senha TIMESTAMP;

209 - Adaptação da tabela nfse

Adaptação da estrutura de NFSe para extensão de DFe.

Autor: Uillan
Tipo: SQL
Atividade:
Data: 26/10/2018

POSTGRES

DROP INDEX idx_nfse_mun_dhemi;
DROP INDEX idx_nfse_mun_doc_dh;
ALTER TABLE nfse DROP CONSTRAINT nfse_cod_municipio_numero_dh_emissao_prestador_documento_ti_key;
ALTER TABLE nfse DROP CONSTRAINT nfse_chave_acesso_nfse_tipo_ambiente_key;
ALTER TABLE nfse ALTER COLUMN chave_acesso_nfse TYPE CHARACTER VARYING(44);
ALTER TABLE nfse RENAME COLUMN chave_acesso_nfse TO chave_acesso;
ALTER TABLE nfse RENAME COLUMN dh_emissao TO data_hora_emissao;

ALTER TABLE nfse ADD COLUMN chave_unica CHARACTER VARYING(35);
ALTER TABLE nfse ADD COLUMN data_processamento TIMESTAMP(6) WITHOUT TIME ZONE;
ALTER TABLE nfse ADD COLUMN dt_hr_ult_cons_sefaz TIMESTAMP(6) WITHOUT TIME ZONE;
ALTER TABLE nfse ADD COLUMN emitente_crt INTEGER;
ALTER TABLE nfse ADD COLUMN emitente_documento CHARACTER VARYING(14);
ALTER TABLE nfse ADD COLUMN emitente_ie CHARACTER VARYING(20);
ALTER TABLE nfse ADD COLUMN emitente_nome CHARACTER VARYING(60);
ALTER TABLE nfse ADD COLUMN emitente_uf INTEGER;
ALTER TABLE nfse ADD COLUMN modelo INTEGER;
ALTER TABLE nfse ADD COLUMN protocolo_autorizacao CHARACTER VARYING(20);
ALTER TABLE nfse ADD COLUMN serie INTEGER;
ALTER TABLE nfse ADD COLUMN status_integracao_noov INTEGER;
ALTER TABLE nfse ADD COLUMN tempo_autorizacao BIGINT;
ALTER TABLE nfse ADD COLUMN tipo_migracao SMALLINT DEFAULT 0;
ALTER TABLE nfse ADD COLUMN versao_aplicativo_emitente CHARACTER VARYING(255);
ALTER TABLE nfse ADD COLUMN versao_aplicativo_sefaz CHARACTER VARYING(255);
ALTER TABLE nfse ADD COLUMN cstat_sefaz INTEGER;
ALTER TABLE nfse ADD COLUMN motivo_sefaz CHARACTER VARYING(350);
ALTER TABLE nfse ADD COLUMN id_lote_erp CHARACTER VARYING(30);
ALTER TABLE nfse ADD COLUMN nome_arquivo_entrada CHARACTER VARYING(255);
ALTER TABLE nfse ADD COLUMN sincrono BOOLEAN;
ALTER TABLE nfse ADD COLUMN numero_recibo CHARACTER VARYING(100);
ALTER TABLE nfse ADD COLUMN status_lote INTEGER;
ALTER TABLE nfse ADD COLUMN saida_placa CHARACTER VARYING(10);
ALTER TABLE nfse ADD COLUMN saida_status INTEGER;
ALTER TABLE nfse ADD COLUMN saida_data_hora TIMESTAMP(6) WITHOUT TIME ZONE;
ALTER TABLE nfse ADD COLUMN saida_justificativa CHARACTER VARYING(255);
ALTER TABLE nfse ADD COLUMN saida_usuario_resp CHARACTER VARYING(60);
ALTER TABLE nfse ADD COLUMN saida_nome_usuario_resp CHARACTER VARYING(60);

CREATE INDEX
    idx_nfse_mun_dhemi
ON
    nfse
USING
    btree
    (
        cod_municipio,
        data_hora_emissao
    );
CREATE INDEX
    idx_nfse_mun_doc_dh
ON
    nfse
USING
    btree
    (
        cod_municipio,
        prestador_documento,
        data_hora_emissao
    );
ALTER TABLE
    nfse ADD CONSTRAINT nfse_cod_municipio_numero_dh_emissao_prestador_documento_ti_key UNIQUE
    (cod_municipio, numero, data_hora_emissao, prestador_documento, tipo_ambiente);
ALTER TABLE
    nfse ADD CONSTRAINT nfse_chave_acesso_nfse_tipo_ambiente_key UNIQUE (chave_acesso,
    tipo_ambiente);
CREATE TABLE
    nfse_iteracao
    (
        id BIGSERIAL NOT NULL,
        version INTEGER,
        codigo_retorno INTEGER,
        data_iteracao TIMESTAMP(6) WITHOUT TIME ZONE NOT NULL,
        data_resposta TIMESTAMP(6) WITHOUT TIME ZONE NOT NULL,
        data_resposta_sefaz TIMESTAMP(6) WITHOUT TIME ZONE,
        descricao_retorno CHARACTER VARYING(260),
        tipo_iteracao INTEGER NOT NULL,
        usuario CHARACTER VARYING(60),
        nfse_id BIGINT NOT NULL,
        numero_recibo CHARACTER VARYING(20),
        tipo_migracao SMALLINT DEFAULT 0,
        PRIMARY KEY (id),
        CONSTRAINT fk_iter_sefaz_nfse FOREIGN KEY (nfse_id) REFERENCES "nfse" ("id")
    );
CREATE TABLE
    nfse_observacao
    (
        id BIGSERIAL NOT NULL,
        version INTEGER,
        data_hora_observacao TIMESTAMP(6) WITHOUT TIME ZONE NOT NULL,
        observacao CHARACTER VARYING(1024) NOT NULL,
        nome_arquivo_entrada CHARACTER VARYING(255),
        usuario CHARACTER VARYING(60),
        nfse_id BIGINT NOT NULL,
        PRIMARY KEY (id),
        CONSTRAINT fk_obs_nfse FOREIGN KEY (nfse_id) REFERENCES "nfse" ("id")
    );
CREATE TABLE
    nfse_autorizado
    (
        id BIGSERIAL NOT NULL,
        version INTEGER,
        documento_autorizado CHARACTER VARYING(14) NOT NULL,
        nfse_id BIGINT NOT NULL,
        tipo_migracao SMALLINT DEFAULT 0,
        PRIMARY KEY (id),
        CONSTRAINT fk_autorizado_nfse FOREIGN KEY (nfse_id) REFERENCES "nfse" ("id")
    );

CREATE SEQUENCE nfse_iteracao_id_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 NO CYCLE;
CREATE SEQUENCE nfse_observacao_id_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 NO CYCLE;
CREATE SEQUENCE nfse_autorizado_id_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 NO CYCLE;

ORACLE

DROP INDEX idx_nfse_mun_dhemi;
DROP INDEX idx_nfse_mun_doc_dh;
ALTER TABLE nfse DROP CONSTRAINT NFSE_MUN_NUM_DH_EMI_PRE_TA_KEY;
ALTER TABLE nfse DROP CONSTRAINT NFSE_CH_ACE_TP_AMB_KEY;
ALTER TABLE nfse MODIFY (chave_acesso_nfse VARCHAR2(44));
ALTER TABLE nfse RENAME COLUMN chave_acesso_nfse TO chave_acesso;
ALTER TABLE nfse RENAME COLUMN dh_emissao TO data_hora_emissao;

ALTER TABLE nfse ADD chave_unica VARCHAR2(35);
ALTER TABLE nfse ADD data_processamento TIMESTAMP(6);
ALTER TABLE nfse ADD dt_hr_ult_cons_sefaz TIMESTAMP(6);
ALTER TABLE nfse ADD emitente_crt INTEGER;
ALTER TABLE nfse ADD emitente_documento VARCHAR2(14);
ALTER TABLE nfse ADD emitente_ie VARCHAR2(20);
ALTER TABLE nfse ADD emitente_nome VARCHAR2(60);
ALTER TABLE nfse ADD emitente_uf INTEGER;
ALTER TABLE nfse ADD modelo INTEGER;
ALTER TABLE nfse ADD protocolo_autorizacao VARCHAR2(20);
ALTER TABLE nfse ADD serie INTEGER;
ALTER TABLE nfse ADD status_integracao_noov INTEGER;
ALTER TABLE nfse ADD tempo_autorizacao NUMBER(19);
ALTER TABLE nfse ADD tipo_migracao NUMBER(10) DEFAULT 0;
ALTER TABLE nfse ADD versao_aplicativo_emitente VARCHAR2(255);
ALTER TABLE nfse ADD versao_aplicativo_sefaz VARCHAR2(255);
ALTER TABLE nfse ADD cstat_sefaz INTEGER;
ALTER TABLE nfse ADD motivo_sefaz VARCHAR2(350);
ALTER TABLE nfse ADD id_lote_erp VARCHAR2(30);
ALTER TABLE nfse ADD nome_arquivo_entrada VARCHAR2(255);
ALTER TABLE nfse ADD sincrono NUMBER(1);
ALTER TABLE nfse ADD numero_recibo VARCHAR2(100);
ALTER TABLE nfse ADD status_lote INTEGER;
ALTER TABLE nfse ADD saida_placa VARCHAR2(10);
ALTER TABLE nfse ADD saida_status INTEGER;
ALTER TABLE nfse ADD saida_data_hora TIMESTAMP(6);
ALTER TABLE nfse ADD saida_justificativa VARCHAR2(255);
ALTER TABLE nfse ADD saida_usuario_resp VARCHAR2(60);
ALTER TABLE nfse ADD saida_nome_usuario_resp VARCHAR2(60);

CREATE INDEX
    idx_nfse_mun_dhemi
ON
    NFSE
    (
        cod_municipio,
        data_hora_emissao
    );

CREATE INDEX
    idx_nfse_mun_doc_dh
ON
    NFSE
    (
        cod_municipio,
        prestador_documento,
        data_hora_emissao
    );

ALTER TABLE
  nfse ADD CONSTRAINT NFSE_MUN_NUM_DH_EMI_PRE_TA_KEY UNIQUE
  (cod_municipio, numero, data_hora_emissao, prestador_documento, tipo_ambiente);
ALTER TABLE
  nfse ADD CONSTRAINT NFSE_CH_ACE_TP_AMB_KEY UNIQUE (chave_acesso,
  tipo_ambiente);

CREATE TABLE
  nfse_iteracao
  (
    id NUMBER(19) NOT NULL,
    version INTEGER,
    codigo_retorno INTEGER,
    data_iteracao TIMESTAMP(6) NOT NULL,
    data_resposta TIMESTAMP(6) NOT NULL,
    data_resposta_sefaz TIMESTAMP(6),
    descricao_retorno VARCHAR2(260),
    tipo_iteracao INTEGER NOT NULL,
    usuario VARCHAR2(60),
    nfse_id NUMBER(19) NOT NULL,
    numero_recibo VARCHAR2(20),
    tipo_migracao NUMBER(10) DEFAULT 0,
    PRIMARY KEY (id),
    CONSTRAINT fk_iter_sefaz_nfse FOREIGN KEY (nfse_id) REFERENCES nfse (id)
  );
CREATE TABLE
  nfse_observacao
  (
    id NUMBER(19) NOT NULL,
    version INTEGER,
    data_hora_observacao TIMESTAMP(6) NOT NULL,
    observacao VARCHAR2(1024) NOT NULL,
    nome_arquivo_entrada VARCHAR2(255),
    usuario VARCHAR2(60),
    nfse_id NUMBER(19) NOT NULL,
    PRIMARY KEY (id),
    CONSTRAINT fk_obs_nfse FOREIGN KEY (nfse_id) REFERENCES nfse (id)
  );
CREATE TABLE
  nfse_autorizado
  (
    id NUMBER(19) NOT NULL,
    version INTEGER,
    documento_autorizado VARCHAR2(14) NOT NULL,
    nfse_id NUMBER(19) NOT NULL,
    tipo_migracao NUMBER(10) DEFAULT 0,
    PRIMARY KEY (id),
    CONSTRAINT fk_autorizado_nfse FOREIGN KEY (nfse_id) REFERENCES nfse (id)
  );

CREATE SEQUENCE nfse_iteracao_id_seq INCREMENT BY 1 START WITH 1 MAXVALUE 999999999999999999999999999 MINVALUE 1;
CREATE SEQUENCE nfse_observacao_id_seq INCREMENT BY 1 START WITH 1 MAXVALUE 999999999999999999999999999 MINVALUE 1;
CREATE SEQUENCE nfse_autorizado_id_seq INCREMENT BY 1 START WITH 1 MAXVALUE 999999999999999999999999999 MINVALUE 1;

199 - Cria a coluna de time zone na tabela cteos

Cria a coluna de timezone na tabela de CTe OS.

Autor: Renato Borges
Tipo: SQL
Atividade:
Data: 23/10/2018

POSTGRES e ORACLE

alter table cteos add timezone_data_hora_emissao char(5);

198 - Adiciona a permissões na tabela perfis

Adiciona as permissões ROLE_VISUALIZAR_ENTREGAS_WEB_SERVICE e/ou ROLE_REENTREGAR_WEB_SERVICE para os perfis personalizados que têm permissão de ROLE_VISUALIZAR_EMAILS_ENVIADOS e/ou ROLE_REENVIAR_EMAIL.

Patch criado para que a visibilidade e ações dos perfis personalizados não sejam afetados com a separação do acesso aos Menus de Emails Enviados e Entregas WS.

Esse patch é executado através da Classe Java, tanto para POSTGRESQL, quanto para ORACLE.

Autor: Mateus Neves
Tipo: JAVA
Atividade:
Data: 16/10/2018

197 - Adiciona a permissões na tabela perfis

Altera:

A descrição da Permissão ROLE_VISUALIZAR_ENTREGAS_INTEGRACAO para ROLE_VISUALIZAR_EMAILS_ENVIADOS;
A descrição da Permissão ROLE_REENVIAR_REENTREGAR_INTEGRACAO para ROLE_REENVIAR_EMAIL;

Autor: Mateus Neves
Tipo: SQL
Atividade:
Data: 15/10/2018

POSTGRES e ORACLE

update perfil_permissoes set permissao = 'ROLE_VISUALIZAR_EMAILS_ENVIADOS' where permissao = 'ROLE_VISUALIZAR_ENTREGAS_INTEGRACAO';
update perfil_permissoes set permissao = 'ROLE_REENVIAR_EMAIL' where permissao = 'ROLE_REENVIAR_REENTREGAR_INTEGRACAO';

insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Administrador'), 'ROLE_VISUALIZAR_ENTREGAS_WEB_SERVICE');
insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Gerente'), 'ROLE_VISUALIZAR_ENTREGAS_WEB_SERVICE');
insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Vendas'), 'ROLE_VISUALIZAR_ENTREGAS_WEB_SERVICE');
insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Compra e Venda'), 'ROLE_VISUALIZAR_ENTREGAS_WEB_SERVICE');

insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Administrador'), 'ROLE_REENTREGAR_WEB_SERVICE');
insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Gerente'), 'ROLE_REENTREGAR_WEB_SERVICE');
insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Vendas'), 'ROLE_REENTREGAR_WEB_SERVICE');
insert into perfil_permissoes (perfil_id, permissao) values ((select id from perfil where nome = 'Compra e Venda'), 'ROLE_REENTREGAR_WEB_SERVICE');

196 - Adiciona coluna time zone nas tabelas dfe

Cria a coluna timezone_data_hora_emissao nas tabelas de dfe

Autor: Renato Borges
Tipo: SQL
Atividade:
Data: 15/10/2018

POSTGRES e ORACLE

alter table nfe add timezone_data_hora_emissao char(5);
alter table nfce add timezone_data_hora_emissao char(5);
alter table cte add timezone_data_hora_emissao char(5);
alter table mdfe add timezone_data_hora_emissao char(5);
alter table nfse add timezone_data_hora_emissao char(5);

208 - Update da tabela perfil

Resolvendo possíveis problemas quanto a nomes duplicados ao concatenar o nome com o id da tupla

Autor: Rafael Canedo
Tipo: SQL
Atividade:
Data: 26/10/2018

POSTGRES e ORACLE

UPDATE perfil SET nome = nome || ' (' || id || ')' 
 WHERE nome IN (
   SELECT nome FROM perfil GROUP BY nome HAVING COUNT(*) > 1 
 ); 
 -- Inserindo nova restrição:
 ALTER TABLE perfil ADD CONSTRAINT perfil_nome_unico_uk UNIQUE (nome);

207 - Preencher Validade Certificados A1

Esse patch preenche a data de validade dos certificados digitais A1 cadastrados no banco de dados.

Autor: Marcus Neves
Tipo: Java
Atividade:
Data: 22/10/2018

206 - Add coluna validade certificado

Esse patch adiciona a coluna validade de certificado

Autor: Marcus Neves
Tipo: SQL
Atividade:
Data: 22/10/2018

POSTGRES

ALTER TABLE parametros_empresa
    ADD COLUMN validade_certificado TIMESTAMP;

ORACLE

ALTER TABLE parametros_empresa
    ADD validade_certificado TIMESTAMP;

205 - Preenche time zone da emissão na tabela cteos

Preenche todos os registros antigos com o timezone obtido no XML da CTe OS (tag dhEmi). A versão para Oracle inclui uma alteração do tipo de dado da coluna dados_xml da tabela cteos_documento para CLOB.

Autor: Renato Borges
Tipo: SQL
Atividade:
Data: 26/10/2018

POSTGRES

UPDATE cteos ct SET timezone_data_hora_emissao = (
  SELECT
    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi
  FROM cteos_documento cd
    JOIN cteos c ON (c.chave_acesso = cd.chave_acesso)
  WHERE
    ct.chave_acesso = c.chave_acesso ORDER BY cd.data_insercao DESC LIMIT 1);

ORACLE

ALTER TABLE cteos_documento MODIFY dados_xml CLOB;

UPDATE cteos ct SET timezone_data_hora_emissao = (
  SELECT
    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi
  FROM cteos_documento cd
    JOIN cteos c ON (c.chave_acesso = cd.chave_acesso)
  WHERE
    ct.chave_acesso = c.chave_acesso AND ROWNUM = 1);

204 - Preenche time zone da emissão na tabela nfse - PATCH EXCLUÍDO

Preenche todos os registros antigos com o time zone obtido no XML da NFSe (tag DataEmissao).

Autor: Renato Borges
Tipo: SQL
Atividade:
Data: 26/10/2018

Apenas POSTGRES

UPDATE nfse nf SET timezone_data_hora_emissao = (
  SELECT
    regexp_replace(REGEXP_MATCHES(split_part(split_part(dados_xml, 'DataEmissao>', 2), '</', 1),'-[0-9]{2}:[0-9]{2}')::text,'{|:|}','','g') AS dhEmi
  FROM nfse_documento nd
    JOIN nfse n ON (n.chave_acesso_nfse = nd.chave_acesso_nfse)
  WHERE
    nf.chave_acesso_nfse = n.chave_acesso_nfse ORDER BY nd.data_insercao DESC LIMIT 1);

203 - Preenche time zone da emissão na tabela mdfe

Preenche todos os registros antigos com o time zone obtido no XML do MDFe (tag dhEmi).

Autor: Renato Borges
Tipo: SQL
Atividade:
Data: 23/10/2018

POSTGRES

UPDATE mdfe mdf SET timezone_data_hora_emissao = (
  SELECT
    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi
  FROM mdfe_documento md
    JOIN mdfe m ON (m.chave_acesso = md.chave_acesso)
  WHERE
    mdf.chave_acesso = m.chave_acesso ORDER BY md.data_insercao DESC LIMIT 1);

ORACLE

UPDATE mdfe mdf SET timezone_data_hora_emissao = (
  SELECT
    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi
  FROM mdfe_documento md
    JOIN mdfe m ON (m.chave_acesso = md.chave_acesso)
  WHERE
    mdf.chave_acesso = m.chave_acesso AND ROWNUM = 1);

202 - Preenche time zone da emissão na tabela cte

Preenche todos os registros antigos com o timezone obtido no XML do CTe (tag dhEmi).

Autor: Renato Borges
Tipo: SQL
Atividade:
Data: 26/10/2018

POSTGRES

--menor que 2013
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM cte_documento cd  WHERE  ct.chave_acesso = cd.chave_acesso  ORDER BY cd.data_insercao DESC LIMIT 1) where timezone_data_hora_emissao  is null and    data_hora_emissao <='2013-01-01';

--2013
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM cte_documento cd  WHERE  ct.chave_acesso = cd.chave_acesso  ORDER BY cd.data_insercao DESC LIMIT 1) where timezone_data_hora_emissao  is null and    data_hora_emissao between '2013-01-01' and '2014-01-01';

--2014
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM cte_documento cd  WHERE  ct.chave_acesso = cd.chave_acesso  ORDER BY cd.data_insercao DESC LIMIT 1) where timezone_data_hora_emissao  is null and    data_hora_emissao between '2014-01-01' and '2015-01-01';

--2015
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM cte_documento cd  WHERE  ct.chave_acesso = cd.chave_acesso  ORDER BY cd.data_insercao DESC LIMIT 1) where timezone_data_hora_emissao  is null and    data_hora_emissao between '2015-01-01' and '2016-01-01';

--2016
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM cte_documento cd  WHERE  ct.chave_acesso = cd.chave_acesso  ORDER BY cd.data_insercao DESC LIMIT 1) where timezone_data_hora_emissao  is null and    data_hora_emissao between '2016-01-01' and '2017-01-01';

--2017
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM cte_documento cd  WHERE  ct.chave_acesso = cd.chave_acesso  ORDER BY cd.data_insercao DESC LIMIT 1) where timezone_data_hora_emissao  is null and    data_hora_emissao between '2017-01-01' and '2018-01-01';

--2018
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM cte_documento cd  WHERE  ct.chave_acesso = cd.chave_acesso  ORDER BY cd.data_insercao DESC LIMIT 1) where timezone_data_hora_emissao  is null and    data_hora_emissao between '2018-01-01' and '2019-01-01';

ORACLE

-- menor que 2013
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM cte_documento cd where ct.chave_acesso = cd.chave_acesso  and    ROWNUM = 1) where timezone_data_hora_emissao  is null     and    data_hora_emissao <= to_date('2013-01-01','YYYY-MM-DD'); COMMIT;

-- 2013
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM cte_documento cd where ct.chave_acesso = cd.chave_acesso  and    ROWNUM = 1) where timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2013-01-01','YYYY-MM-DD') and to_date('2014-01-01','YYYY-MM-DD'); COMMIT;

-- 2014
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM cte_documento cd where ct.chave_acesso = cd.chave_acesso  and    ROWNUM = 1) where timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2014-01-01','YYYY-MM-DD') and to_date('2015-01-01','YYYY-MM-DD'); COMMIT;

-- 2015
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM cte_documento cd where ct.chave_acesso = cd.chave_acesso  and    ROWNUM = 1) where timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2015-01-01','YYYY-MM-DD') and to_date('2016-01-01','YYYY-MM-DD'); COMMIT;

-- 2016
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM cte_documento cd where ct.chave_acesso = cd.chave_acesso  and    ROWNUM = 1) where timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2016-01-01','YYYY-MM-DD') and to_date('2017-01-01','YYYY-MM-DD'); COMMIT;

-- 2017
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM cte_documento cd where ct.chave_acesso = cd.chave_acesso  and    ROWNUM = 1) where timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2017-01-01','YYYY-MM-DD') and to_date('2018-01-01','YYYY-MM-DD'); COMMIT;

-- 2018
UPDATE cte ct SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM cte_documento cd where ct.chave_acesso = cd.chave_acesso  and    ROWNUM = 1) where timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2018-01-01','YYYY-MM-DD') and to_date('2019-01-01','YYYY-MM-DD'); COMMIT;

201 - Preenche time zone da emissão na tabela nfce

_Preenche todos os registros antigos com o timezone obtido no XML da NFCe (tag dhEmi).

Editar o ano para fazer mês a mês e ano a ano._

Autor: Renato Borges
Tipo: SQL
Atividade:
Data: 26/10/2018

POSTGRES

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-12-01' and '2019-01-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-11-01' and '2018-12-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-10-01' and '2018-11-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-09-01' and '2018-10-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-08-01' and '2018-09-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-07-01' and '2018-08-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-06-01' and '2018-07-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-05-01' and '2018-06-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-04-01' and '2018-05-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-03-01' and '2018-04-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-02-01' and '2018-03-01';

--2018
UPDATE nfce nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfce_documento nd  WHERE  nf.chave_acesso = nd.chave_acesso and    versao IN ('3.10', '4.00')    ORDER BY nd.data_insercao DESC LIMIT 1)    where 
data_hora_emissao between '2018-01-01' and '2018-02-01';


ORACLE

UPDATE nfce nf SET timezone_data_hora_emissao = (
  SELECT
    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi
  FROM nfce_documento nd
    JOIN nfce n ON (n.chave_acesso = nd.chave_acesso)
  WHERE
    versao IN ('3.10', '4.00') AND nf.chave_acesso = n.chave_acesso AND ROWNUM = 1);

200 - Preenche time zone da emissão na tabela nfe

Preenche todos os registros antigos com o timezone obtido no XML da NFe (tag dhEmi).

Autor: Renato Borges
Tipo: SQL
Atividade:
Data: 26/10/2018

POSTGRES

--menor que 2013
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfe_documento nd    JOIN nfe n ON (n.chave_acesso = nd.chave_acesso)  WHERE    versao IN ('3.10','4.00') AND nf.chave_acesso = n.chave_acesso ORDER BY nd.data_insercao DESC LIMIT 1)    where timezone_data_hora_emissao  is null and    data_hora_emissao <='2010-01-01';

-- 2013
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfe_documento nd    JOIN nfe n ON (n.chave_acesso = nd.chave_acesso)  WHERE    versao IN ('3.10','4.00') AND nf.chave_acesso = n.chave_acesso ORDER BY nd.data_insercao DESC LIMIT 1)    where timezone_data_hora_emissao  is null and    data_hora_emissao between '2013-01-01' and '2014-01-01';

--  2014
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfe_documento nd    JOIN nfe n ON (n.chave_acesso = nd.chave_acesso)  WHERE    versao IN ('3.10','4.00') AND nf.chave_acesso = n.chave_acesso ORDER BY nd.data_insercao DESC LIMIT 1)    where timezone_data_hora_emissao  is null and    data_hora_emissao between '2014-01-01' and '2015-01-01';

-- 2015
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfe_documento nd    JOIN nfe n ON (n.chave_acesso = nd.chave_acesso)  WHERE    versao IN ('3.10','4.00') AND nf.chave_acesso = n.chave_acesso ORDER BY nd.data_insercao DESC LIMIT 1)    where timezone_data_hora_emissao  is null and    data_hora_emissao between '2015-01-01' and '2016-01-01';

-- 2016
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfe_documento nd    JOIN nfe n ON (n.chave_acesso = nd.chave_acesso)  WHERE    versao IN ('3.10','4.00') AND nf.chave_acesso = n.chave_acesso ORDER BY nd.data_insercao DESC LIMIT 1)    where timezone_data_hora_emissao  is null and    data_hora_emissao between '2016-01-01' and '2017-07-01';

-- 2017
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfe_documento nd    JOIN nfe n ON (n.chave_acesso = nd.chave_acesso)  WHERE    versao IN ('3.10','4.00') AND nf.chave_acesso = n.chave_acesso ORDER BY nd.data_insercao DESC LIMIT 1)    where timezone_data_hora_emissao  is null and    data_hora_emissao between '2017-01-01' and '2018-01-01';

-- 2018
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(right(split_part(split_part(dados_xml, 'dhEmi>', 2), '</', 1), 6), ':', '') AS dhEmi  FROM nfe_documento nd    JOIN nfe n ON (n.chave_acesso = nd.chave_acesso)  WHERE    versao IN ('3.10','4.00') AND nf.chave_acesso = n.chave_acesso ORDER BY nd.data_insercao DESC LIMIT 1)    where timezone_data_hora_emissao  is null and    data_hora_emissao between '2018-01-01' and '2019-01-01';

ORACLE

--menor que 2013
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM nfe_documento nd  WHERE   nd.chave_acesso=nf.chave_acesso  AND ROWNUM = 1)  WHERE    versao IN ('3.10', '4.00')    and timezone_data_hora_emissao  is null     and    data_hora_emissao <= to_date('2013-01-01','YYYY-MM-DD'); COMMIT;

-- 2013
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM nfe_documento nd  WHERE   nd.chave_acesso=nf.chave_acesso  AND ROWNUM = 1)  WHERE    versao IN ('3.10', '4.00')    and timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2013-01-01','YYYY-MM-DD') and to_date('2014-01-01','YYYY-MM-DD'); COMMIT;

-- 2014
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'),'(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM nfe_documento nd  WHERE   nd.chave_acesso=nf.chave_acesso  AND ROWNUM = 1)  WHERE    versao IN ('3.10', '4.00')    and timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2014-01-01','YYYY-MM-DD') and to_date('2015-01-01','YYYY-MM-DD');    COMMIT;    

-- 2015
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM nfe_documento nd  WHERE   nd.chave_acesso=nf.chave_acesso  AND ROWNUM = 1)  WHERE    versao IN ('3.10', '4.00')    and timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2015-01-01','YYYY-MM-DD') and to_date('2016-01-01','YYYY-MM-DD');    COMMIT;

-- 2016
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM nfe_documento nd  WHERE   nd.chave_acesso=nf.chave_acesso  AND ROWNUM = 1)  WHERE    versao IN ('3.10', '4.00')    and timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2016-01-01','YYYY-MM-DD') and to_date('2017-01-01','YYYY-MM-DD');    COMMIT;        

    -- 2017
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM nfe_documento nd  WHERE   nd.chave_acesso=nf.chave_acesso  AND ROWNUM = 1)  WHERE    versao IN ('3.10', '4.00')    and timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2017-01-01','YYYY-MM-DD') and to_date('2018-01-01','YYYY-MM-DD');    COMMIT;        

    -- 2018
UPDATE nfe nf SET timezone_data_hora_emissao = (  SELECT    replace(REGEXP_SUBSTR(REGEXP_SUBSTR(dados_xml, '(+|-)([0-9]{2}):([0-9]{2})</dhEmi>'), '(+|-)([0-9]{2}):([0-9]{2})'), ':', '') AS dhEmi  FROM nfe_documento nd  WHERE   nd.chave_acesso=nf.chave_acesso  AND ROWNUM = 1)  WHERE    versao IN ('3.10', '4.00')    and timezone_data_hora_emissao  is null     and    data_hora_emissao between to_date('2018-01-01','YYYY-MM-DD') and to_date('2019-01-01','YYYY-MM-DD');    COMMIT;

Versão 18.17.0

Versão 18.16.0

Versão 18.15.0

Versão 18.14.0

Versão 18.13.0

Versão 18.12.0

Versão 18.11.0

Versão 18.10.0

Versão 18.9.0

Versão 18.8.0

Versão 18.7.0

Versão 18.6.0

Versão 18.5.0

Versão 18.4.0

Versão 18.3.0

Versão 18.2.0

Versão 18.1.0

Versão 18.0.0