CREATE OR REPLACE PROCEDURE SPED_CONTABIL_MESTRE (
   P_NRSEQARQMAG IN ARQMAGNETICO.NRSEQARQMAG%TYPE,
   P_CDEMPRESA IN EMPRESA.CDEMPRESA%TYPE,
   P_DTINICIAL IN DATE,
   P_DTFINAL   IN DATE,
   P_DSNATUREZA IN VARCHAR2,
   P_IDSPED IN VARCHAR2,
   P_PORTE IN VARCHAR2,
   P_GERARAZAO IN VARCHAR2,
   P_TIPOLIVRO IN VARCHAR2,
   P_FINALIDADE IN VARCHAR2,
   P_PERIODO IN VARCHAR2,
   P_MUDPLANCTB   IN VARCHAR2,
   P_CODPLANCTB   IN VARCHAR2) /* PARAMETRO QUE DEFINE SE SERA GERADO SPED OU FCONT */
IS
   V_NRORDREGARQ  INTEGER;
   V_LIVRO VARCHAR2(01);

BEGIN
   /* Registro 0000 ao I010 */
   SPED_CONTABIL_CABECALHO (P_NRSEQARQMAG, P_CDEMPRESA, P_DTINICIAL, P_DTFINAL, P_IDSPED, P_PORTE, P_FINALIDADE, P_MUDPLANCTB,  P_CODPLANCTB, V_NRORDREGARQ);

   IF P_GERARAZAO = 'N' THEN
      V_LIVRO := 'G';
   ELSE
      IF P_TIPOLIVRO = 'P' THEN
         V_LIVRO := 'R';
      ELSE
         V_LIVRO := 'Z';
      END IF;
   END IF;

   /* Registro I030 ao I053. Nesta procedure contem o TERMO DE ABERTURA */
   SPED_CONTABIL_PLANOCONTA (P_NRSEQARQMAG, P_CDEMPRESA, P_DTINICIAL, P_DTFINAL, P_DSNATUREZA,
                             V_LIVRO, V_NRORDREGARQ, P_IDSPED, P_CODPLANCTB, V_NRORDREGARQ);

   /* Registro I075 */
   SPED_CONTABIL_HISTORICO (P_NRSEQARQMAG, V_NRORDREGARQ, P_IDSPED, V_NRORDREGARQ);

   /* Registro I100 */
   SPED_CONTABIL_CENTROCUSTO (P_NRSEQARQMAG, P_DTFINAL, V_NRORDREGARQ, P_IDSPED, V_NRORDREGARQ);

   IF V_LIVRO <> 'Z' THEN
      /* Registro I150 ao I156 - Registro que contem o balancete, contendo saldo inicial, debitos e creditos
                                 e saldos finais */
      SPED_CONTABIL_SALDO(P_NRSEQARQMAG, P_CDEMPRESA, P_DTINICIAL, P_DTFINAL, V_NRORDREGARQ, P_IDSPED, P_PERIODO, P_MUDPLANCTB, V_NRORDREGARQ);
   END IF;

   /* Registro I200 ao I555 */
   SPED_CONTABIL_LANCAMENTO (P_NRSEQARQMAG, P_CDEMPRESA, P_DTINICIAL, P_DTFINAL, V_NRORDREGARQ, P_IDSPED, P_PERIODO, V_LIVRO, V_NRORDREGARQ);
   IF V_LIVRO <> 'Z' THEN
      /* Registro I350 e I355 - Registros referentes aos saldos das contas do encerramento de exercicio */
      SPED_CONTABIL_BALANCETE (P_NRSEQARQMAG, P_CDEMPRESA, P_DTINICIAL, P_DTFINAL, V_NRORDREGARQ, P_PERIODO, V_NRORDREGARQ);
   END IF;

   /* Registros I990 - J001 - J005 - J100 - J150 - J900 - J930 - J935 - J990 */
   SPED_CONTABIL_DEMONSTRACOES (P_NRSEQARQMAG, P_CDEMPRESA, P_DTINICIAL, P_DTFINAL, P_DSNATUREZA,
                                V_NRORDREGARQ, P_IDSPED, P_PERIODO, P_PORTE, V_LIVRO, V_NRORDREGARQ);

   SPED_CONTABIL_ENCERRAMENTO (P_NRSEQARQMAG, P_CDEMPRESA, P_DTINICIAL, P_DTFINAL, P_DSNATUREZA, V_NRORDREGARQ, P_IDSPED, V_NRORDREGARQ);
END;
/