/*
 * FUNCTION RETORNA_NATUREZA_GUIARJ
 * Retorna a natureza, a qualificação (quando houver) e a descrição da
 * 'receita' para cada código de receita do estado RJ.
 * Tarefa 224770 - Transmissão das GUIAS de arrecadação de ES e RJ
 * 15/10/2019
 */
create or replace TYPE "NATUREZA_GUIARJ_TYPE" AS
OBJECT (CDNATUREZAREC VARCHAR2(20),
        DSNATUREZAREC VARCHAR2(500),
        CDQUALIFICAO  VARCHAR2(2),
        DSQUALIFICAO  VARCHAR2(500),
        DSRECEITA     VARCHAR2(100));
/



create or replace TYPE "NATUREZA_GUIARJ_TABLE" AS TABLE OF NATUREZA_GUIARJ_TYPE;
/
--DROP TYPE "NATUREZA_GUIARJ_TABLE"; 
/



create or replace FUNCTION RETORNA_NATUREZA_GUIARJ( P_CDRECEITA IN VARCHAR2 )
RETURN NATUREZA_GUIARJ_TABLE PIPELINED
IS
  V_RETURN VARCHAR2(1) := 'S'; /*Apenas retorna se V_RETURN for 'S'. Ver ELSE do CASE abaixo.*/
  OUT_RECORD NATUREZA_GUIARJ_TYPE := NATUREZA_GUIARJ_TYPE ( NULL, NULL, NULL, NULL, NULL);
BEGIN
  OUT_RECORD.DSRECEITA := 'ICMS'; /*Padrão para a maioria*/
  CASE P_CDRECEITA
    /*Operações próprias – Apuração (Débitos/Créditos) – Normal – ICMS*/
    WHEN '0213' THEN OUT_RECORD.CDNATUREZAREC := '1';
                     OUT_RECORD.DSNATUREZAREC := 'Regime de confronto (débitos e créditos)';
                     OUT_RECORD.CDQUALIFICAO  := '1';
                     OUT_RECORD.DSQUALIFICAO  := 'Normal';
    /*Fundo Estadual de Combate à Pobreza - FECP*/
    WHEN '7501' THEN OUT_RECORD.CDNATUREZAREC := '1';
                     OUT_RECORD.DSNATUREZAREC := 'Regime de confronto (débitos e créditos)';
                     OUT_RECORD.CDQUALIFICAO  := '1';
                     OUT_RECORD.DSQUALIFICAO  := 'Normal';
    /*Operações próprias – Apuração (Débitos/Créditos) – Petróleo – ICMS*/
    WHEN '0329' THEN OUT_RECORD.CDNATUREZAREC := '1';
                     OUT_RECORD.DSNATUREZAREC := 'Regime de confronto (débitos e créditos)';
                     OUT_RECORD.CDQUALIFICAO  := '2';
                     OUT_RECORD.DSQUALIFICAO  := 'Petróleo';
    /*Operações próprias – Apuração (Débitos/Créditos) – Energia elétrica – ICMS*/
    WHEN '0337' THEN OUT_RECORD.CDNATUREZAREC := '1';
                     OUT_RECORD.DSNATUREZAREC := 'Regime de confronto (débitos e créditos)';
                     OUT_RECORD.CDQUALIFICAO  := '3';
                     OUT_RECORD.DSQUALIFICAO  := 'Energia Elétrica';
    /*Operações próprias – Apuração (Débitos/Créditos) – Comunicações – ICMS*/
    WHEN '0345' THEN OUT_RECORD.CDNATUREZAREC := '1';
                     OUT_RECORD.DSNATUREZAREC := 'Regime de confronto (débitos e créditos)';
                     OUT_RECORD.CDQUALIFICAO  := '4';
                     OUT_RECORD.DSQUALIFICAO  := 'Comunicações';
    /*Operações próprias – Apuração (Débitos/Créditos) – Transporte – ICMS*/
    WHEN '0361' THEN OUT_RECORD.CDNATUREZAREC := '1';
                     OUT_RECORD.DSNATUREZAREC := 'Regime de confronto (débitos e créditos)';
                     OUT_RECORD.CDQUALIFICAO  := '5';
                     OUT_RECORD.DSQUALIFICAO  := 'Transporte';
    /*Substituição Tributária - ICMS*/
    WHEN '0230' THEN OUT_RECORD.CDNATUREZAREC := '2';
                     OUT_RECORD.DSNATUREZAREC := 'Substituição tributária por Operação própria';
                     out_RECORD.DSRECEITA     := 'ICMS ST';
    /*Diferencial de alíquota – ICMS*/
    WHEN '0272' THEN OUT_RECORD.CDNATUREZAREC := '3';
                     OUT_RECORD.DSNATUREZAREC := 'Diferencial de alíquota';
    /*Importação – ICMS*/
    WHEN '0248' THEN OUT_RECORD.CDNATUREZAREC := '5';
                     OUT_RECORD.DSNATUREZAREC := 'Importação';
    /*Importação – FECP*/
    WHEN '7544' THEN OUT_RECORD.CDNATUREZAREC := '5';
                     OUT_RECORD.DSNATUREZAREC := 'Importação';
    /*Regime de Estimativa – ICMS*/
    WHEN '0221' THEN OUT_RECORD.CDNATUREZAREC := '6';
                     OUT_RECORD.DSNATUREZAREC := 'Regime de estimativa';
    /*Outras (Fato gerador) – ICMS*/
    WHEN '0370' THEN OUT_RECORD.CDNATUREZAREC := '7';
                     OUT_RECORD.DSNATUREZAREC := 'Outras (Fato Gerador)';
    /*ICMS Consumidor Final não Contribuinte outra UF por Apuração (DARJ)*/
    WHEN '0620' THEN OUT_RECORD.CDNATUREZAREC := '56';
                     OUT_RECORD.DSNATUREZAREC := 'ICMS Cons Final não Contrib. Outra UF por Apuração';
    /*ICMS Consumidor Final não Contribuinte outra UF por Apuração (GNRE)*/
    WHEN '0604' THEN OUT_RECORD.CDNATUREZAREC := '56';
                     OUT_RECORD.DSNATUREZAREC := 'ICMS Cons Final não Contrib. Outra UF por Apuração';
    /*ICMS Consumidor Final não Contribuinte outra UF por Operação (DARJ)*/
    WHEN '0639' THEN OUT_RECORD.CDNATUREZAREC := '58';
                     OUT_RECORD.DSNATUREZAREC := 'ICMS Cons Final não Contrib. Outra UF por Operação';
    /*ICMS Consumidor Final não Contribuinte outra UF por Operação (GNRE)*/
    WHEN '0612' THEN OUT_RECORD.CDNATUREZAREC := '58';
                     OUT_RECORD.DSNATUREZAREC := 'ICMS Cons Final não Contrib. Outra UF por Operação';
    /*Operações Próprias – ICMS Compensado – Normal – ICMS*/
    WHEN '0710' THEN OUT_RECORD.CDNATUREZAREC := '60';
                     OUT_RECORD.DSNATUREZAREC := 'Operações Próprias - ICMS Compensado';
    /*Operações Próprias – ICMS após Compensação – Normal – ICMS*/
    WHEN '0663' THEN OUT_RECORD.CDNATUREZAREC := '60';
                     OUT_RECORD.DSNATUREZAREC := 'Operações Próprias - ICMS Compensado';
    /*Operações Próprias – ICMS Compensado – Comunicações – ICMS*/
    WHEN '0698' THEN OUT_RECORD.CDNATUREZAREC := '60';
                     OUT_RECORD.DSNATUREZAREC := 'Operações Próprias - ICMS Compensado';
    /*Operações Próprias – ICMS após Compensação – Comunicações – ICMS*/
    WHEN '0647' THEN OUT_RECORD.CDNATUREZAREC := '60';
                     OUT_RECORD.DSNATUREZAREC := 'Operações Próprias - ICMS Compensado';
    /*Operações Próprias – ICMS Compensado – Energia Elétrica – ICMS*/
    WHEN '0701' THEN OUT_RECORD.CDNATUREZAREC := '60';
                     OUT_RECORD.DSNATUREZAREC := 'Operações Próprias - ICMS Compensado';
    /*Operações Próprias – ICMS após Compensação – Energia Elétrica – ICMS*/
    WHEN '0655' THEN OUT_RECORD.CDNATUREZAREC := '60';
                     OUT_RECORD.DSNATUREZAREC := 'Operações Próprias - ICMS Compensado';
    /*Operações Próprias – ICMS Compensado – Transportes – ICMS*/
    WHEN '0736' THEN OUT_RECORD.CDNATUREZAREC := '60';
                     OUT_RECORD.DSNATUREZAREC := 'Operações Próprias - ICMS Compensado';
    /*Operações Próprias – ICMS após Compensação – Transportes – ICMS*/
    WHEN '0680' THEN OUT_RECORD.CDNATUREZAREC := '60';
                     OUT_RECORD.DSNATUREZAREC := 'Operações Próprias - ICMS Compensado';
    /*OPERAÇÕES PRÓPRIAS – ICMS COMPENSADO – PETRÓLEO E DERIVADOS, COMBUSTÍVEIS E LUBRIFICANTES – ICMS*/
    WHEN '0728' THEN OUT_RECORD.CDNATUREZAREC := '60';
                     OUT_RECORD.DSNATUREZAREC := 'Operações Próprias - ICMS Compensado';
    /*Operações Próprias – ICMS após Compensação – Petróleo e Derivados, Combustíveis e Lubrificantes – ICMS*/
    WHEN '0671' THEN OUT_RECORD.CDNATUREZAREC := '60';
                     OUT_RECORD.DSNATUREZAREC := 'Operações Próprias - ICMS Compensado';
    /*Fundo Estadual de Equilíbrio Fiscal – FEEF*/
    WHEN '0744' THEN OUT_RECORD.CDNATUREZAREC := '61';
                     OUT_RECORD.DSNATUREZAREC := 'Fundo Estadual de Equilíbrio Fiscal - FEEF';
    ELSE V_RETURN := 'N'; /*Não há cód de receita correspondente, não retorna registro.*/
  END CASE;
  /*grava registro*/
  IF V_RETURN = 'S' THEN
    PIPE ROW (OUT_RECORD);
  END IF;
END;
/


/*teste da função*/
--SELECT * FROM TABLE(RETORNA_NATUREZA_GUIARJ('0728'));