DROP TABLE TMP_DIF_TO_ENTSAI
/

CREATE GLOBAL TEMPORARY TABLE TMP_DIF_TO_ENTSAI
(
   CDFILIAL           VARCHAR2(4)     NULL,
	NRLANCTONF         VARCHAR2(10)    NULL,
	IDENTRSAIDOP       VARCHAR2(1)     NULL,
	UF                 VARCHAR2(2)     NULL,
	TIPODOMICFISCAL    CHAR(1)         NULL,
	CODMUNIBGE         CHAR(7)         NULL,
	NRSEQITPROD        VARCHAR2(4)     NULL,
	CFOP               VARCHAR2(11)    NULL,
	CDLAYOUTLMAG       VARCHAR2(4)     NULL,
	IDCONTRIBICMS      VARCHAR2(1)     NULL,
	VALOR_CONTABIL     NUMBER          NULL,
	BASE_CALC_ICMS     NUMBER          NULL,
	OUTROS             NUMBER          NULL,
	VR_CONT_ICMS_ST    NUMBER          NULL,
	VR_ICMS_ST         NUMBER          NULL,
	CD_F4              VARCHAR2(2)     NULL,
        IBGE_ORIGEM        VARCHAR2(7)     NULL,
	IE_ORIGEM          VARCHAR2(9)     NULL,
	NOTA_FISCAL        VARCHAR2(20)   NULL ) ON COMMIT PRESERVE ROWS
/


create or replace PROCEDURE ARQUIVO_DIF_TO_AB(
   P_CDEMPRESA     IN MAPAAPURAC.CDEMPRESA%TYPE,  --Cod empresa referencia
   P_CDINSCESTA    IN MAPAAPURAC.CDINSCESTA%TYPE,  --I.E. da empresa referencia
   P_PERIODO       IN MAPAAPURAC.CDINSCESTA%TYPE,  --Periodo referEncia AAAA
   P_DTINICIO      IN MAPAAPURAC.DTINIPERIODO%TYPE, --Data inicio periodo
   P_DTFIM         IN MAPAAPURAC.DTFIMPERIODO%TYPE, --Data final periodo o ano sera usado para refencia
   P_NRSEQARQMAG   IN ARQMAGNETICO.NRSEQARQMAG%TYPE, --Sequencial controle tabela ARQMAGNETICO
   P_IDRETIFIC     IN NOTAFISCAL.IDENTRSAIDOP%TYPE, --(S=Sim, N=Nao).
   P_IDTPESTAB     IN NOTAFISCAL.IDENTRSAIDOP%TYPE, --(1=Unico, 2=Matriz, 3=Filial)
   P_IDFINALIDADE  IN NOTAFISCAL.IDENTRSAIDOP%TYPE, --(1=Informacao anual,2=Baixa Voluntaria,4=Suspensao Voluntaria)
   P_IDTPESCRIT    IN NOTAFISCAL.IDENTRSAIDOP%TYPE, --(1=Fiscal, 2= Contabil)
   P_VRINICAIXA    IN NOTAFISCAL.VRNOTAFISC%TYPE, --Saldo inicial de caixa
   P_VRFIMCAIXA    IN NOTAFISCAL.VRNOTAFISC%TYPE, --Saldo final de caixa
   P_VRPATRLIQ     IN NOTAFISCAL.VRNOTAFISC%TYPE, --Valor de patrimonio liquido
   P_IECENTRAL     IN NOTAFISCAL.IDENTRSAIDOP%TYPE, --Inscricao estadual centralizada (S=Sim, N=Nao).
   P_REGAPURACAO   IN NOTAFISCAL.IDENTRSAIDOP%TYPE, --Regime de apuracao
   P_VERSAO        IN VARCHAR2, --versao do laiout
   P_IDMUDDOMICI   IN NOTAFISCAL.IDENTRSAIDOP%TYPE, --Houve mudanca de domicilio (S=Sim, N=Nao)
   P_CDMUNIANT     IN MUNICIPIO.CDMUNICIPIO%TYPE, --Cod Municipio Anterior
   P_DTINIMUNIANT  IN NOTAFISCAL.DTENTRSAID%TYPE, --Data inicio municipio anterior
   P_DTFINMUNIANT  IN NOTAFISCAL.DTENTRSAID%TYPE, --Data inicio municipio anterior
   P_CONTREG       OUT NUMBER,
   P_CNAE          OUT EMPRESA.CDCNAE%TYPE,
   P_IBGE_A        OUT MUNICIPIO.CDMUNICIBGE%TYPE,
   P_IBGE_B        OUT MUNICIPIO.CDMUNICIBGE%TYPE
   )
AS
   V_CONTREG    NUMBER;
   V_REGISTRO_B VARCHAR(50);
   V_IBGE_A     VARCHAR(7);
   V_IBGE_B     VARCHAR(7);

BEGIN
   V_CONTREG := 0;
   V_IBGE_A := '       ';
   V_IBGE_B := '       ';
------------------------------/* SEGMENTO A - Identificacao do Contribuinte  */------------------------------
   FOR C_REG_A IN (SELECT 'A'                                                                || --A1 Segmento
                          LPAD(P_CDINSCESTA,9,'0')                                           || --A2 Inscricao Estadual 
                          P_PERIODO                                                          || --A3 Periodo de referencia
                          P_IDRETIFIC                                                        || --A4 Retificacao
                          LPAD(NVL(E.CDCNAE,'0'),7,'0')                                      || --A5 Atividade economica principal
                          DECODE(P_IDTPESTAB,'U','1','M','2','F','3')                        || --A6 Tipo de estabelecimento
                          P_IDFINALIDADE                                                     || --A7 Finalidade
                          DECODE(P_IDTPESCRIT,'F','1','2')                                   || --A8 Tipo de escrituracao
                          P_REGAPURACAO                                                      || --A9 Regime de apuracao   
                          LPAD(NVL(M.CDMUNICIBGE,'0'),7,'0')                                 || --A10 Codigo do municipio
                          RPAD(NVL(TO_CHAR(P_DTINICIO,'DDMMYYYY'),' '),8,' ')                || --A11 Periodo Fiscal de referencia inicial
                          RPAD(NVL(TO_CHAR(P_DTFIM,'DDMMYYYY'),' '),8,' ')                   || --A12 Periodo Fiscal de referencia final
                          LPAD(NRCPFRESPONS,11,'0')                                          || --A13 CPF do contador
                          RPAD(NMRESPONSAVL,80,' ')                                          || --A14 Responsavel
                          REPLACE(LTRIM(TO_CHAR(NVL(P_VRINICAIXA,0),'000000000000.00')),'.') || --A15 Saldo inicial de caixa
                          REPLACE(LTRIM(TO_CHAR(NVL(P_VRFIMCAIXA,0),'000000000000.00')),'.') || --A16 Saldo final de caixa
                          REPLACE(LTRIM(TO_CHAR(NVL(P_VRPATRLIQ,0),'000000000000.00')),'.')  || --A17 Valor de patrimonio liquido
                          P_IDMUDDOMICI                                                      || --A18 Houve mudanca de domicilio
                          P_VERSAO                                                           || --A19 Versao
						  '' AS SEG_A,
                          LPAD(I.CDINSCESTA,9,'0') AS NRINSCESTA,
                          TO_CHAR(P_DTFIM,'YYYY')  AS PERIODO,
                          LPAD(NVL(E.CDCNAE,'0'),7,'0') AS CNAE
                     FROM
                        MUNICIPIO M,
                        INSCRESTAD I,
                        CONTADOR C,
                        EMPRESA E
                    WHERE I.CDEMPRESA   = P_CDEMPRESA
                        AND I.CDINSCESTA  = P_CDINSCESTA
                        AND I.CDPAIS      = M.CDPAIS
                        AND I.SGESTADO    = M.SGESTADO
                        AND I.CDMUNICIPIO = M.CDMUNICIPIO
                        AND I.CDCONTADOR2 = C.CDCONTADOR2
                        AND E.CDEMPRESA   = I.CDEMPRESA ) LOOP

      V_CONTREG := NVL(V_CONTREG,0) + 1;

      INSERT INTO ARQMAGNETICO
         (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
      VALUES
         ('01'||LPAD(RTRIM(V_CONTREG), 8, '0'), C_REG_A.SEG_A, P_NRSEQARQMAG);

   END LOOP;

------------------------------/* SEGMENTO B  Identificacao da Mudanca de Domicilio Fiscal do Contribuinte  */------------------------------
   IF ((P_IDMUDDOMICI = 'S') AND (V_CONTREG > 0)) THEN
      BEGIN
        SELECT
          'B'                                                    ||--B1 Segmento
          LPAD(P_CDINSCESTA,9,'0')                               ||--B2 Inscricao Estadual
          P_PERIODO                                              ||--B3 Periodo de referencia
          RPAD(NVL(CDMUNICIBGE,' '),'7',' ')                     ||--B4 Municipio anterior
          RPAD(NVL(TO_CHAR(P_DTINIMUNIANT,'DDMMYYYY'),' '),8,' ')||--B5 Data Inicial da cidade anterior
          RPAD(NVL(TO_CHAR(P_DTFINMUNIANT,'DDMMYYYY'),' '),8,' ')||--B6 Data final da cidade anterior
          'B',                                                      --B7 Tipo de domicilio fiscal anterior
          RPAD(NVL(CDMUNICIBGE,' '),'7',' ')  -- Informacao a ser retornada para controle
          INTO V_REGISTRO_B, V_IBGE_B
        FROM MUNICIPIO
        WHERE CDPAIS      = '0055'
          AND SGESTADO    = 'TO'
          AND CDMUNICIPIO = P_CDMUNIANT;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_REGISTRO_B := NULL;
      END;

      IF (V_REGISTRO_B is not null) THEN
        V_CONTREG := NVL(V_CONTREG,0) + 1;
        INSERT INTO ARQMAGNETICO
           (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
        VALUES
           ('02'||LPAD(RTRIM(V_CONTREG), 8, '0'), V_REGISTRO_B, P_NRSEQARQMAG);
      END IF;

      BEGIN
         SELECT
           'B'                                                      ||--B1 Segmento
           LPAD(P_CDINSCESTA,9,'0')                                 ||--B2 Inscricao Estadual
           P_PERIODO                                                ||--B3 Periodo de referencia
           LPAD(NVL(M.CDMUNICIBGE,'0'),7,'0')                       ||--B4 Municipio atual
           RPAD(NVL(TO_CHAR(P_DTFINMUNIANT+1,'DDMMYYYY'),' '),8,' ')||--B5 Data Inicial da cidade atual
           RPAD(NVL(TO_CHAR(P_DTFIM,'DDMMYYYY'),' '),8,' ')         ||--B6 Data final da cidade atual
           'A',                                                        --B7 Tipo de domicilio fiscal atual
           LPAD(NVL(M.CDMUNICIBGE,'0'),7,'0')  -- Informacao a ser retornada para controle
           INTO V_REGISTRO_B, V_IBGE_A
         FROM
           MUNICIPIO M,
           INSCRESTAD I
         WHERE I.CDEMPRESA   = P_CDEMPRESA
           AND I.CDINSCESTA  = P_CDINSCESTA
           AND I.CDPAIS      = M.CDPAIS
           AND I.SGESTADO    = M.SGESTADO
           AND I.CDMUNICIPIO = M.CDMUNICIPIO;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_REGISTRO_B := NULL;
      END;        

      IF (V_REGISTRO_B is not null) THEN
        V_CONTREG := NVL(V_CONTREG,0) + 1;
        INSERT INTO ARQMAGNETICO
           (NRORDREGARQ, DSREGARQMAG, NRSEQARQMAG)
        VALUES
           ('02'||LPAD(RTRIM(V_CONTREG), 8, '0'), V_REGISTRO_B, P_NRSEQARQMAG);
      END IF;
   ELSE
      BEGIN
         SELECT       
           LPAD(NVL(M.CDMUNICIBGE,'0'),7,'0')  -- Informacao a ser retornada para controle
           INTO V_IBGE_A
         FROM
           MUNICIPIO M,
           INSCRESTAD I
         WHERE I.CDEMPRESA   = P_CDEMPRESA
           AND I.CDINSCESTA  = P_CDINSCESTA
           AND I.CDPAIS      = M.CDPAIS
           AND I.SGESTADO    = M.SGESTADO
           AND I.CDMUNICIPIO = M.CDMUNICIPIO;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_IBGE_A := NULL;
      END;        

   END IF;

   P_IBGE_A := V_IBGE_A;
   P_IBGE_B := V_IBGE_B;
   P_CONTREG := V_CONTREG;
END;
/