Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save AndyDaSilva52/7bc192547904c3a8f538111ae0292123 to your computer and use it in GitHub Desktop.
Save AndyDaSilva52/7bc192547904c3a8f538111ae0292123 to your computer and use it in GitHub Desktop.
#Mega #Tributos - NCM (Nomenclatura Comum do Mercosul) - Ajusta o NCM Pai (Sintético) em todos considerando o Extenso que coincidir mais próximo #MegaERP
declare
v_max_len_ncm_extenso integer;
v_achou_pai CHAR := 'N';
v_pai_ncm_tab_in mgtrf.trf_ncm.ncm_tab_in_codigo%type;
v_pai_ncm_pad_in mgtrf.trf_ncm.ncm_pad_in_codigo%type;
v_pai_ncm_in mgtrf.trf_ncm.ncm_in_codigo%type;
v_pai_ncm_ext mgtrf.trf_ncm.ncm_st_extenso%type;
begin
begin
select max(length(ncm_st_extenso))
into v_max_len_ncm_extenso
from mgtrf.trf_ncm;
end;
--dbms_output.put_line('max: '|| v_max_len_ncm_extenso);
for c_lengths in (
select result len from (
select rownum result from dual connect by level <= v_max_len_ncm_extenso -- max
) where result >= 0 -- min
order by 1 desc
) loop
--dbms_output.put_line('tamanho agora: ' || c_lengths.len);
for c_ncm_filho in (
select
n.ncm_tab_in_codigo, n.ncm_pad_in_codigo, n.ncm_in_codigo, n.ncm_st_extenso,
n.pai_ncm_tab_in_codigo, n.pai_ncm_pad_in_codigo, n.pai_ncm_in_codigo, p.ncm_st_extenso pai_ncm_st_extenso
from mgtrf.trf_ncm n
left join mgtrf.trf_ncm p
on p.ncm_tab_in_codigo = n.pai_ncm_tab_in_codigo
and p.ncm_pad_in_codigo = n.pai_ncm_pad_in_codigo
and p.ncm_in_codigo = n.pai_ncm_in_codigo
where length(n.ncm_st_extenso) = c_lengths.len
) loop
--dbms_output.put_line('NCM: '|| c_ncm_filho.ncm_st_extenso || ' Pai: ' || c_ncm_filho.pai_ncm_st_extenso);
v_achou_pai := 'N'; -- se encontrou pai sintético
for c_all_lens in (
select result len from (
select rownum result from dual connect by level < c_lengths.len -- max
) where result >= 0 -- min
order by 1 desc
) loop
if v_achou_pai = 'S' then
continue;
end if;
begin -- procura pai mais próximo que seja sintético
select p.ncm_tab_in_codigo, p.ncm_pad_in_codigo, p.ncm_in_codigo, p.ncm_st_extenso
into v_pai_ncm_tab_in, v_pai_ncm_pad_in, v_pai_ncm_in, v_pai_ncm_ext
from mgtrf.trf_ncm p
where p.ncm_ch_tipo = 'S' -- Sintético
and p.ncm_st_extenso = substr(c_ncm_filho.ncm_st_extenso, 0, c_all_lens.len)
and p.ncm_st_extenso <> c_ncm_filho.ncm_st_extenso;
v_achou_pai := 'S';
if v_achou_pai = 'S' then
if c_ncm_filho.pai_ncm_st_extenso <> v_pai_ncm_ext then
null;
--dbms_output.put_line('NCM Filho: '|| c_ncm_filho.ncm_st_extenso || ' NCM Pai Atual (Extenso):[' || c_ncm_filho.pai_ncm_st_extenso || '] NCM Pai Novo (Extenso):[' || v_pai_ncm_ext || ']');
end if;
update mgtrf.trf_ncm
set
pai_ncm_tab_in_codigo = v_pai_ncm_tab_in,
pai_ncm_pad_in_codigo = v_pai_ncm_pad_in,
pai_ncm_in_codigo = v_pai_ncm_in
where
ncm_tab_in_codigo = c_ncm_filho.ncm_tab_in_codigo
and ncm_pad_in_codigo = c_ncm_filho.ncm_pad_in_codigo
and ncm_in_codigo = c_ncm_filho.ncm_in_codigo
;
end if;
exception
when no_data_found then
v_achou_pai := 'N';
end;
end loop;
end loop;
end loop;
end;
@AndyDaSilva52
Copy link
Author

O script percorre todos os NCM's (seja sintético ou analítico para identificar o nível sintético mais próximo dentro do Código Extenso do NCM)
Ex:

NCM Filho (Extenso): 0804.40.00/01
NCM Pai (Extenso): 0804

O NCM 0804 é o nível sintético mais próximo dentro do Código Extenso 0804.40.00/01

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment