/********************************************************************************
** Copyright DATASUL S.A. (1997)
** Todos os Direitos Reservados.
**
** Este fonte e de propriedade exclusiva da DATASUL, sua reproducao
** parcial ou total por qualquer meio, so podera ser feita mediante
** autorizacao expressa.
*******************************************************************************/
{include/i-prgvrs.i LAPTUA900I-112-RPW 2.00.00.020 } /*** "010020" ***/

&IF "{&EMSFND_VERSION}" >= "1.00" &THEN
{include/i-license-manager.i lainsumo900e MLA}
&ENDIF

/*******************************************************************************
*    Programa .....: LAPTUA900I-112-RPW.p                                      *
*    Data .........: 13/11/2018                                                *
*    Sistema ......: RC - REVISAO DE CONTAS MEDICAS                            *
*    Empresa ......: TOTVS                                                     *
*    Programador ..: Wilian Arrosi                                             *
*    Objetivo .....: Importacao de insumos PTU A900 11.2 - RPW                 *
********************************************************************************/
/* ---------------------------------------------------------------- TEMP --- */
{api/api-import-insumos.i}
{bosau/hrc/bosauimportinsumos.i}
{rtp/rtfuncoes.i}

/* --------------------------------------------- DEFINICAO DE PARAMETROS --- */
def input        parameter nm-arquivo-completo-par as char no-undo.
def output 		 parameter nr-ver-tra-aux 		   as char no-undo.
def input-output parameter table for tmp-dados.
def input-output parameter table for tmp-dados-906.
def input-output parameter table for tmp-erro.
           
/* ---------------------------------------------- DEFINICAO DE VARIAVEIS --- */
def var ds-campo-imp           as char    no-undo.
def var cd-tipo-registro-aux   as char    no-undo.
def var nr-reg-902-aux         as int     no-undo.
def var nr-reg-905-aux         as int     no-undo.
def var nr-reg-902-905-aux     as int     no-undo.
def var nr-reg-902-aux-2       as int     no-undo.
def var nr-linha-aux           as int     no-undo.
def var lg-erro-aux            as log     no-undo.
def var lg-leu-tipo-905-aux    as log     no-undo.
def var cd-cnpj-fabricante-aux as dec     no-undo.
def var ds-mens-rela-aux       as char    no-undo.
def var lg-erro-cgc-cpf-aux    as log     no-undo. 
def var lg-erro-906-aux        as log     no-undo.
def var lg-erro-905-aux        as log     no-undo.
def var lg-erro-902-aux        as log     no-undo.
def var lg-entra-aux           as log     no-undo.
def var lg-leitura-reg-906-aux as log     no-undo.
def var cd-insumo-aux          as dec     no-undo.
def var cd-registro-anvisa-aux as dec     no-undo.
def var vl-fabrica-aux         as dec     no-undo.
def var vl-max-comsumidor-aux  as dec     no-undo.
def var dat-inic-vigenc-aux    as date    no-undo.
def var dat-fim-vigenc-aux     as date    no-undo.
def var lg-entra-aux-2         as log     no-undo.
def var nr-reg-905-aux-2       as int     no-undo.
def var lg-tp-reg-909-aux      as log     no-undo.
def var ds-refer-mater-fab-aux as char    no-undo.
def var cd-fator-conversao-aux as dec     no-undo.
def var cd-insumo-anterior-aux as int     no-undo.
def var vl-perc-icms-aux       as dec     no-undo.

def buffer b-especialid for especialid.

def stream s-import.

/* ------------------------------------------------------- IMPORTA DADOS --- */
run importa-dados.

/* ------------------------------- FIM DO BLOCO PRINCIPAL ------------------ */
procedure importa-dados:

    assign nr-reg-902-aux      = 0
           nr-reg-905-aux      = 0
           nr-reg-902-905-aux  = 0
           nr-reg-902-aux-2    = 0
           nr-linha-aux        = 0
           lg-erro-aux         = no
           lg-leu-tipo-905-aux = no.

    /* Adiciona linha em branco no final */
    output stream s-import to value(nm-arquivo-completo-par) append.
    put stream s-import skip(01).
    output stream s-import close.

    /* Inicia importacao do arquivo */
    input stream s-import from value(nm-arquivo-completo-par) no-convert.

    repeat:
        import stream s-import unformatted ds-campo-imp.

        /* --- De acordo com a U' do Brasil ‚ permitido campos com ";" --- */
        assign ds-campo-imp = replace(ds-campo-imp,";",",").

        assign nr-linha-aux           = nr-linha-aux + 1
               cd-tipo-registro-aux   = substr(ds-campo-imp,9,3).

        if (cd-tipo-registro-aux <> "901" and nr-linha-aux = 1)
        or (cd-tipo-registro-aux  = "901" and nr-linha-aux > 1)
        then do:
               run cria-tmp-erro(input "E",
                                 input nr-linha-aux,
                                 input "Tipo do Registro R901 nao informado ou nao esta na ordem. Arquivo: " + nm-arquivo-completo-par).
               return.
             end.

        if  (cd-tipo-registro-aux       = "901")
		then do:
        	    if (substr(ds-campo-imp,25,2) <> "09")
        then do:
               run cria-tmp-erro(input "E",
                                 input nr-linha-aux,
                                 input "Numero da versao da transacao incorreta. Dever ser igual a '09'. Arquivo: " + nm-arquivo-completo-par).
               return.
             end.
			    else assign nr-ver-tra-aux = substr(ds-campo-imp,25,2).
		end.

        if cd-tipo-registro-aux = "902"
        then do:
               if lg-leu-tipo-905-aux
               then do:
                      run cria-tmp-erro(input "E",
                                        input nr-linha-aux,
                                        input "Tipo do Registro R902 esta fora da ordem. Arquivo: " + nm-arquivo-completo-par).
                      return.
                    end.

               run reg-tipo-902.
             end.

        /* ------------------ LOGICA PARA TRATAR SEGMENTO COM TAMANHO DOS CAMPOS VARIAVEIS --------- */
        /* ---------------------------- ESTE SEGMENTO VEM APOS O REGISTRO R902 --------------------- */
        if lg-entra-aux
        then do:
               assign nr-reg-902-aux-2       = nr-reg-902-aux-2 + 1
                      lg-leitura-reg-906-aux = no.

               case nr-reg-902-aux-2:
                   when 2 /* Descricao */
                   then do:
                          if substr(ds-campo-imp,1,100) = ""
                          then do:
                                 run cria-tmp-erro(input "E",
                                                   input nr-linha-aux,
                                                   input "Descricao do insumo nao informado").
                               end.
                          else assign tmp-dados.ds-insumo = removeCharEspecial(trim(substr(ds-campo-imp,1,100))).
                        end.

                   when 3 /* Descricao do Produto */
                   then assign tmp-dados.ds-produto = removeCharEspecial(trim(caps(substr(ds-campo-imp,1,91)))).
                      

                   when 4 /* Especialidade do Produto */
                   then assign tmp-dados.ds-especialidade = removeCharEspecial(caps(trim(substr(ds-campo-imp,1,100)))).

                   when 5 /* Classificacao do Produto conforme ANVISA */
                   then assign tmp-dados.ds-clas-anvisa = removeCharEspecial(trim(caps(substr(ds-campo-imp,1,49)))).

                   when 6 /* Apresentacao Comercial do Produto */
                   then assign tmp-dados.ds-comercial = removeCharEspecial(trim(caps(substr(ds-campo-imp,1,81)))).

                   when 7 /*Observacoes*/
                   then assign tmp-dados.ds-observacao = removeCharEspecial(caps(substr(trim(ds-campo-imp),1,255))).

                   when 8 /* Equivalencia Tecnica */
                   then assign tmp-dados.ds-equiv-tecnica = removeCharEspecial(replace(substr(ds-campo-imp,1,100),";","-"))
                               lg-entra-aux               = no
                               nr-reg-902-aux-2           = 0.  
                               
               end case.
             end.

        if cd-tipo-registro-aux = "905"
        then run reg-tipo-905.

        /* ------------------ LOGICA PARA TRATAR SEGMENTO COM TAMANHO DOS CAMPOS VARIAVEIS --------- */
        /* ---------------------------- ESTE SEGMENTO VEM APOS O REGISTRO R905 --------------------- */
        if lg-entra-aux-2
        then do:
               assign nr-reg-905-aux-2 = nr-reg-905-aux-2 + 1.

               case nr-reg-905-aux-2:
                   when 2 /* Principio Ativo */         /*comeca por 2 pois o 1 eh processado na procedure reg-tipo-905*/
                   then assign tmp-dados.ds-princp-ativ = removeCharEspecial(caps(trim(substr(ds-campo-imp,1,200))))
                               lg-leitura-reg-906-aux     = no.

                   when 3 /* Descricao */
                   then do:
                          assign lg-leitura-reg-906-aux = no.

                          if substr(ds-campo-imp,1,100) = ""
                          then do:
                                 run cria-tmp-erro(input "E",
                                                   input nr-linha-aux,
                                                   input "Descricao do insumo nao informado").
                                 return.
                               end.
                          else assign tmp-dados.ds-insumo = removeCharEspecial(trim(substr(ds-campo-imp,1,100))).
                        end.

                   when 4 /* Grupo Farmacologico */
                   then assign tmp-dados.ds-grupo   = removeCharEspecial(caps(trim(substr(ds-campo-imp,1,100))))
                               lg-leitura-reg-906-aux = no.
                            
                   when 5 /* Classe Farmacologica */
                   then assign tmp-dados.ds-classe  = removeCharEspecial(caps(trim(substr(ds-campo-imp,1,40))))
                               lg-leitura-reg-906-aux = no.
                            
                   when 6 /* Forma Farmaceutica */
                   then assign tmp-dados.ds-forma-farma = removeCharEspecial(caps(trim(substr(ds-campo-imp,1,100))))
                               lg-leitura-reg-906-aux     = no.

                   when 7 /* Nome do Fabricante */
                   then assign nr-reg-905-aux-2          = 0
                               lg-entra-aux-2            = no
                               tmp-dados.ds-fabricante = removeCharEspecial(trim(caps(substr(ds-campo-imp,1,40))))
                               lg-leitura-reg-906-aux    = yes.
               end case.
             end.

        if cd-tipo-registro-aux = "906"
        then do:                   
               if lg-tp-reg-909-aux
               or not lg-leitura-reg-906-aux
               then do:
                      run cria-tmp-erro(input "E",
                                        input nr-linha-aux,
                                        input "Tipo do Registro 906 (Bloco de valores por ICMS) nao esta na ordem.").
                      return.
                    end.

               run reg-tipo-906.

               if lg-erro-906-aux
               then return.
             end.

        if cd-tipo-registro-aux = "909"
        then do:
               if lg-tp-reg-909-aux
               then do:
                      run cria-tmp-erro(input "E",
                                        input nr-linha-aux,
                                        input "Tipo do Registro 909 (Trailer) nao esta na ordem. Arquivo: " + nm-arquivo-completo-par).
                      return.
                    end.

               if nr-reg-902-aux <> int(substr(ds-campo-imp,12,8))
               then do:
                      run cria-tmp-erro(input "E",
                                        input nr-linha-aux,
                                        input "Quantidade de registros R902: " + string(nr-reg-902-aux) + " nao confere do informado no arquivo: " + substr(ds-campo-imp,12,8) + " Arquivo: " + nm-arquivo-completo-par).
                      return.
                    end.

               if nr-reg-905-aux <> int(substr(ds-campo-imp,20,8))
               then do:
                      run cria-tmp-erro(input "E",
                                        input nr-linha-aux,
                                        input "Quantidade de registros R905: " + string(nr-reg-905-aux) + " nao confere do informado no arquivo: " + substr(ds-campo-imp,20,8) + " Arquivo: " + nm-arquivo-completo-par).
                      return.
                    end.

               assign lg-tp-reg-909-aux = yes.
             end.
    end.

    input stream s-import close.

    if not lg-tp-reg-909-aux
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Registro 909 (Trailer) nao informado no arquivo. Arquivo: " + nm-arquivo-completo-par).
           return.
         end.

    if  lg-erro-aux
    and nr-linha-aux <> 0
    then assign lg-erro-aux = no.
end procedure.

/* ------------------------------------------------------------------------- */
procedure reg-tipo-902:

    assign nr-reg-902-aux         = nr-reg-902-aux + 1
           nr-reg-902-905-aux     = nr-reg-902-905-aux + 1
           lg-entra-aux           = yes
           lg-leitura-reg-906-aux = no.

    create tmp-dados.
    assign tmp-dados.nr-linha    = nr-linha-aux   /* SEQ. 001 - NR_SEQ */
           tmp-dados.in-tipo-reg = "902".         /* SEQ. 002 - TP_REG */

    /* ------------------------------- VERIFICA SE INSUMO E DO TIPO OPME --- */
    /* SEQ. 020 - TP_PRODUTO */
    if substr(ds-campo-imp,365,1) = "5" /* OPME */
    then assign tmp-dados.lg-opme = yes.

    /* SEQ. 021 - TP_CODIFICACAO */
    if  substr(ds-campo-imp,366,1) <> "1" 
    and substr(ds-campo-imp,366,1) <> "2"
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Campo Tipo de Codificacao invalido: " + substr(ds-campo-imp,366,1)).
         end.
    else assign tmp-dados.in-tipo-cod  = substr(ds-campo-imp,366,1). /* 1 = TNUMM e 2 = TUSS */

    /* --------------------------- TISS – TIPO DE TABELA --- */
    /*  SEQ. 028 - TISS_TP_TABELA */
    assign tmp-dados.cd-tiss-tp-tabela = substr(ds-campo-imp,411,2).

    /* --------------------------- TISS - Código do Material --- */
    /*  SEQ. 029 - TISS_CODIGO */
    if tmp-dados.in-tipo-cod = "1"
    then assign tmp-dados.cd-tiss-codigo = substr(ds-campo-imp,413,2).
    else assign tmp-dados.cd-tiss-codigo = tmp-dados.cd-tiss-tp-tabela.

    /* -------------------------------------------- CODIGO DO INSUMO --- */
    /* SEQ. 003 - CD_MATERIAL */
    assign cd-insumo-aux = int(substr(ds-campo-imp,12,8)) no-error.
    if error-status:error
    then do:
           assign cd-insumo-aux = 0.
           
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Campo Codigo do Insumo possui dados nao numericos: " + substr(ds-campo-imp,12,8)).
         end.
    else do:
           if cd-insumo-aux = 0
           then do:
                  run cria-tmp-erro(input "E",
                                    input nr-linha-aux,
                                    input "Campo Codigo do Insumo nao informado").
                end.
           else assign tmp-dados.cd-insumo = cd-insumo-aux.
         end.

    /* ---------------------------------- SIGLA DA UNIDADE DE MEDIDA --- */
    /* SEQ. 004 - UN_FRACAO_PRODUTO */
    if substr(ds-campo-imp,20,7) = ""
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Sigla da Unidade de Medida nao informada.").
         end.
    else assign tmp-dados.ds-sigla-um = substr(ds-campo-imp,20,7).

    /* --------------------------- CNPJ DO FABRICANTE ------------------------------ */
    /* SEQ. 005 - NR_CNPJ */
    if trim(substr(ds-campo-imp,30,14)) <> "" 
    then do:
           assign cd-cnpj-fabricante-aux = dec(trim(substr(ds-campo-imp,30,14))) no-error.
           if error-status:error
           then do:
                  assign cd-cnpj-fabricante-aux = 0.
                  
                  run cria-tmp-erro(input "E",
                                    input nr-linha-aux,
                                    input "Campo CNPJ do Fabricante possui dados nao numericos: " + substr(ds-campo-imp,30,14)).
                end.
           else assign tmp-dados.cd-cnpj-fabricante = substr(ds-campo-imp,30,14).

           /* ---------------- NOME DO FABRICANTE ------------- */ 
           /* SEQ. 006 - DET_REG_ANVISA */
           assign tmp-dados.ds-fabricante = removeCharEspecial(trim(caps(substr(ds-campo-imp,44,50)))).
         end.

    /* --------------------------------------------- REGISTRO ANVISA --- */
    /* SEQ. 018 - NR_REGISTRO_ANVISA */
    assign cd-registro-anvisa-aux = dec(substr(ds-campo-imp,290,15)) no-error.
    if error-status:error
    then do:
           assign cd-registro-anvisa-aux = 0.
           
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Campo Numero do Registro ANVISA possui dados nao numericos: " + substr(ds-campo-imp,290,15)).
         end.
    else assign tmp-dados.cd-registro-anvisa = cd-registro-anvisa-aux.
    
    /* ------------------------------------ MOTIVO ATIVO INATIVO --------------------------- */
    /*  SEQ. 012 - DS_MOTIVO_ATIVO_INATIVO */
    assign tmp-dados.ds-motivo = removeCharEspecial(trim(caps(substr(ds-campo-imp,174,40)))).

    /* ---------------------------- PRECO MAXIMO AO CONSUMIDOR ---------------------------- */
    /*  SEQ. 014 - VL_MAX_INTERCAMBIO */
    assign vl-max-comsumidor-aux = dec(  substr(ds-campo-imp,229,11)
                                       + ","
                                       + substr(ds-campo-imp,240,4)) no-error.
    if error-status:error
    then do:
           assign vl-max-comsumidor-aux = 0.
           
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Campo Preco Maximo ao Consumidor possui dados nao numericos: " + string(substr(ds-campo-imp,229,15))).
         end.
    else do:
           if vl-max-comsumidor-aux > 99999999999.9999
           then do:
                  run cria-tmp-erro(input "A",
                                    input nr-linha-aux,
                                    input "Preco Maximo ao Consumidor maior que 99999,99 ("
                                          + string(vl-max-comsumidor-aux)
                                          + "). Valor sera truncado").
           
                  assign vl-max-comsumidor-aux = 99999999999.9999.
                end.
         end.

    assign tmp-dados.vl-max-consumidor = vl-max-comsumidor-aux.

    /* -------------------------------------- COD REF MATERIAL FABRICANTE ------------------------ */
    /*  SEQ. 019 - CD_REF_MATERIAL_FAB */
    assign ds-refer-mater-fab-aux = trim(substr(ds-campo-imp,305,60)) no-error.

    if error-status:error
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Codigo de ref. do material do fabricante.").
         end.
    else assign tmp-dados.ds-refer-mater-fab = ds-refer-mater-fab-aux.

    /* ------------------------- COD MATERIAL/MEDICAMENTO ANTIGO --------------------------------- */
    /*  SEQ. 017 - CD_ANTERIOR_MATERIAL */
    assign cd-insumo-anterior-aux = int(substr(ds-campo-imp,282,8)) no-error.
    if error-status:error
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Codigo anterior do material nao numerico: " + substr(ds-campo-imp,282,8)).
         end.
    else assign tmp-dados.cdn-insumo-ant = cd-insumo-anterior-aux.

    /* ---------------------------------------- DATA INICIO VIGENCIA --- */
    /*  SEQ. 022 - DT_INICIO_VIGENCIA */
    assign dat-inic-vigenc-aux = ?.
    if substr(ds-campo-imp,367,8) <> ""
    then do:
           assign dat-inic-vigenc-aux = date(int(substr(ds-campo-imp,371,2)),
                                             int(substr(ds-campo-imp,373,2)),
                                             int(substr(ds-campo-imp,367,4))) no-error.
           if error-status:error
           then do:
                  assign dat-inic-vigenc-aux = ?.
           
                  run cria-tmp-erro(input "E",
                                    input nr-linha-aux,
                                    input "Data de inicio de vigencia invalida: " + substr(ds-campo-imp,367,4) + substr(ds-campo-imp,371,2) + substr(ds-campo-imp,373,2)).
                end.                                                              
         end.                                                                     

    assign tmp-dados.dat-inic-vigenc = dat-inic-vigenc-aux. 
    
    /* ---------------------------------------- DATA FIM DE VIGENCIA --- */
    /*  SEQ. 023 - DT_FIM_VIGENCIA */
    assign dat-fim-vigenc-aux = ?.
    if substr(ds-campo-imp,375,8) <> ""
    then do:
           assign dat-fim-vigenc-aux = date(int(substr(ds-campo-imp,379,2)),
                                            int(substr(ds-campo-imp,381,2)),
                                            int(substr(ds-campo-imp,375,4))) no-error.
           if error-status:error
           then do:
                  assign dat-fim-vigenc-aux = ?.
           
                  run cria-tmp-erro(input "E",
                                    input nr-linha-aux,
                                    input "Data de fim de vigencia invalida: " + substr(ds-campo-imp,375,4) + substr(ds-campo-imp,379,2) + substr(ds-campo-imp,381,2)).
                end.
         end.

    if dat-fim-vigenc-aux <> ?
    then assign tmp-dados.dat-fim-vigenc = dat-fim-vigenc-aux.
    else assign tmp-dados.dat-fim-vigenc = 12/31/9999.

    if  tmp-dados.dat-inic-vigenc <> ?
    and tmp-dados.dat-fim-vigenc  <> ?
    and tmp-dados.dat-fim-vigenc  < tmp-dados.dat-inic-vigenc
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Data de fim de vigencia: " + string(tmp-dados.dat-fim-vigenc) + " menor que data de inicio de vigencia: " + string(tmp-dados.dat-inic-vigenc)).
         end.

    /* --------------------- Codigo da Unidade de fracao do produto - CD_UN_FRACAO_PRODUTO --- */
    /*  SEQ. 026 - CD_UN_FRACAO_PRODUTO */
    if int(substr(ds-campo-imp,406,3)) = 0
    then do: 
            run cria-tmp-erro(input "E",
                              input nr-linha-aux,
                              input "Codigo da unidade de fracao do produto invalida: " + substr(ds-campo-imp,406,3)).
         end.
    else assign tmp-dados.cd-unidade-fracao = int(substr(ds-campo-imp,406,3)).
    
    /* --------------------------- TAXA DE CUSTOS (VL_TC) ------------------------------------ */
    /*  SEQ. 027 - VL_TC */
    assign tmp-dados.vl-taxa-custos = dec(substr(ds-campo-imp,409,2)).    

end procedure.

/* --------------------------------------------------------------------- */

procedure reg-tipo-905:

    assign nr-reg-905-aux         = nr-reg-905-aux + 1
           nr-reg-902-905-aux     = nr-reg-902-905-aux + 1
           lg-entra-aux-2         = yes
           lg-leu-tipo-905-aux    = yes
           lg-leitura-reg-906-aux = no.
    
    create tmp-dados.
    assign tmp-dados.nr-linha    = nr-linha-aux
           tmp-dados.in-tipo-reg = "905".
    
    if  substr(ds-campo-imp,159,1) <> "1" 
    and substr(ds-campo-imp,159,1) <> "2"
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Campo Tipo de Codificacao invalido: " + substr(ds-campo-imp,159,1)).
         end.
    else assign tmp-dados.in-tipo-cod  = substr(ds-campo-imp,159,1). /* 1 = TNUMM e 2 = TUSS */

    /* --------------------------- TISS – TIPO DE TABELA --- */
    /*  SEQ. 024 - TISS_TP_TABELA */
    assign tmp-dados.cd-tiss-tp-tabela = substr(ds-campo-imp,189,2).

    /* --------------------------- TISS - Código do Material --- */
    /*  SEQ. 025 - TISS_CODIGO */
    if tmp-dados.in-tipo-cod = "1"
    then assign tmp-dados.cd-tiss-codigo = substr(ds-campo-imp,191,2).
    else assign tmp-dados.cd-tiss-codigo = tmp-dados.cd-tiss-tp-tabela.

    /* -------------------------------------------- CODIGO DO INSUMO --- */
    assign cd-insumo-aux = int(substr(ds-campo-imp,12,8)) no-error.
    if error-status:error
    then do:
           assign cd-insumo-aux = 0.
           
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Campo Codigo do Insumo possui dados nao numericos: " + substr(ds-campo-imp,12,8)).
         end.
    else do:
           if cd-insumo-aux = 0
           then do:
                  run cria-tmp-erro(input "E",
                                    input nr-linha-aux,
                                    input "Campo Codigo do Insumo nao informado").
                end.
           else assign tmp-dados.cd-insumo = cd-insumo-aux.    
         end.

    /* ---------------------------------- SIGLA DA UNIDADE DE MEDIDA --- */
    if substr(ds-campo-imp,20,7) = ""
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Sigla da Unidade de Medida nao informada.").
         end.
    else assign tmp-dados.ds-sigla-um = substr(ds-campo-imp,20,7).

    /* --------------------------------------------- REGISTRO ANVISA --- */
    assign cd-registro-anvisa-aux = dec(substr(ds-campo-imp,144,15)) no-error.
    if error-status:error
    then do:
           assign cd-registro-anvisa-aux = 0.
           
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Campo Numero do Registro ANVISA possui dados nao numericos: " + substr(ds-campo-imp,144,15)).
         end.
    else assign tmp-dados.cd-registro-anvisa = cd-registro-anvisa-aux.

    /* --------------------------- CNPJ DO FABRICANTE ------------------------------ */
    if trim(substr(ds-campo-imp,58,14)) <> "" 
    then do:
           assign cd-cnpj-fabricante-aux = dec(trim(substr(ds-campo-imp,58,14))) no-error.
           if error-status:error
           then do:
                  assign cd-cnpj-fabricante-aux = 0.
                  
                  run cria-tmp-erro(input "E",
                                    input nr-linha-aux,
                                    input "Campo CNPJ do Fabricante possui dados nao numericos: " + substr(ds-campo-imp,58,14)).
                end.
           else assign tmp-dados.cd-cnpj-fabricante = substr(ds-campo-imp,58,14).
         end.

    /* ----------------------------------- MOTIVO ATIVO INATIVO --------------------------- */
    assign tmp-dados.ds-motivo = removeCharEspecial(trim(caps(substr(ds-campo-imp,73,40)))).

    /* ----------------------- FATOR DE CONVERSAO ----------------------------- */
    assign cd-fator-conversao-aux = dec(substr(ds-campo-imp,136,8)) / 100 no-error.
    if error-status:error
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Valor do Fator de Conversao possui dados nao numericos: " + substr(ds-campo-imp,136,8)).
         end.
    else assign tmp-dados.ft-conversao = cd-fator-conversao-aux.

    /* ----------------------- INDICATIVO DE MEDICAMENTO GENERICO ------------------------ */
    case substr(ds-campo-imp,119,1):
        when "S" then assign tmp-dados.lg-generico = yes.
        when "N" then assign tmp-dados.lg-generico = no.
        otherwise do:
                    run cria-tmp-erro(input "E",
                                      input nr-linha-aux,
                                      input "Indicativo de Medicamento Generico invalido: " + substr(ds-campo-imp,119,1)).
        end.
    end case.

    /* ------------------------- COD MATERIAL/MEDICAMENTO ANTIGO --------------------------------- */
    assign cd-insumo-anterior-aux = int(substr(ds-campo-imp,128,8)) no-error.
    if error-status:error
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Codigo anterior do material nao numerico: " + substr(ds-campo-imp,128,8)).
         end.                                                                   
    else assign tmp-dados.cdn-insumo-ant = cd-insumo-anterior-aux.

    /* ---------------------------------------- DATA INICIO VIGENCIA --- */
    assign dat-inic-vigenc-aux = ?.

    if substr(ds-campo-imp,160,8) <> ""
    then do:
           assign dat-inic-vigenc-aux = date(int(substr(ds-campo-imp,164,2)),
                                             int(substr(ds-campo-imp,166,2)),
                                             int(substr(ds-campo-imp,160,4))) no-error.

           if error-status:error
           then do:
                  assign dat-inic-vigenc-aux = ?.
           
                  run cria-tmp-erro(input "E",
                                    input nr-linha-aux,
                                    input "Data de inicio de vigencia invalida.").
                end.
         end.

    assign tmp-dados.dat-inic-vigenc = dat-inic-vigenc-aux.
    
    /* ---------------------------------------- DATA FIM DE VIGENCIA --- */
    assign dat-fim-vigenc-aux = ?.

    if substr(ds-campo-imp,168,8) <> ""
    then do:
           assign dat-fim-vigenc-aux = date(int(substr(ds-campo-imp,172,2)),
                                            int(substr(ds-campo-imp,174,2)),
                                            int(substr(ds-campo-imp,168,4))) no-error.

           if error-status:error
           then do:
                  assign dat-fim-vigenc-aux = ?.
           
                  run cria-tmp-erro(input "E",
                                    input nr-linha-aux,
                                    input "Data de fim de vigencia invalida. ").
                end.
         end.

    if dat-fim-vigenc-aux <> ?
    then assign tmp-dados.dat-fim-vigenc = dat-fim-vigenc-aux.
    else assign tmp-dados.dat-fim-vigenc = 12/31/9999.
    
    if  tmp-dados.dat-fim-vigenc <> ?
	and tmp-dados.dat-inic-vigenc <> ?
	and tmp-dados.dat-fim-vigenc < tmp-dados.dat-inic-vigenc
    then do:                            
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Data de fim de vigencia: " + string(tmp-dados.dat-fim-vigenc) + " menor que data de inicio de vigencia: " + string(tmp-dados.dat-inic-vigenc)).
         end.

    /* --------------------- Codigo da Unidade de fracao do produto - CD_UN_FRACAO_PRODUTO --- */
    if int(substr(ds-campo-imp,184,3)) = 0
    then do: 
            run cria-tmp-erro(input "E",
                              input nr-linha-aux,
                              input "Codigo da unidade de fracao do produto invalida: " + substr(ds-campo-imp,184,3)).
         end.
    else assign tmp-dados.cd-unidade-fracao = int(substr(ds-campo-imp,184,3)).

    /* --------------------- Indicacao do tipo de produto - ID_TP_PRODUTO_MED --- */
    case int(substr(ds-campo-imp,187,1)):
        when 1 or
        when 2 then assign tmp-dados.cd-tipo-produto = int(substr(ds-campo-imp,187,1)).
        otherwise do:
                    run cria-tmp-erro(input "E",
                                      input nr-linha-aux,
                                      input "Indicacao do tipo de produto invalida: " + substr(ds-campo-imp,187,1)).
                  end.
    end case.
    
    /* --------------------- Indicacao se pertence ao convenio Confaz - ID_CONFAZ --- */
    case substr(ds-campo-imp,188,1):
        when "S" then assign tmp-dados.lg-confaz = yes.
        when "N" then assign tmp-dados.lg-confaz = no.
        otherwise do:
                    run cria-tmp-erro(input "E",
                                      input nr-linha-aux,
                                      input "Indicacao se pertence ao convenio Confaz invalida: " + substr(ds-campo-imp,188,1)).
                 end.
    end case.

end procedure.

procedure reg-tipo-906:

    create tmp-dados-906.
    assign tmp-dados-906.cd-insumo = tmp-dados.cd-insumo.

    /* ---------------------------------- PERCENTUAL DE ICMS ------------------------------ */
    assign vl-perc-icms-aux = dec(  substr(ds-campo-imp,12,3)
                                  + ","
                                  + substr(ds-campo-imp,15,2)) no-error.
    if error-status:error
    then do:
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Campo Percentual de ICMS possui dados nao numericos: " + substr(ds-campo-imp,12,5)).
         end.
    else assign tmp-dados-906.vl-perc-icms = vl-perc-icms-aux.

    /* ---------------------------- PRECO MAXIMO AO CONSUMIDOR ---------------------------- */
    assign vl-max-comsumidor-aux = dec(  substr(ds-campo-imp,17,11)
                                       + ","
                                       + substr(ds-campo-imp,28,4)) no-error.
    if error-status:error
    then do:
           assign vl-max-comsumidor-aux = 0.
           
           run cria-tmp-erro(input "E",
                             input nr-linha-aux,
                             input "Campo Preco Maximo ao Consumidor possui dados nao numericos: " + substr(ds-campo-imp,17,15)).
         end.
    else do: 
           if vl-max-comsumidor-aux > 99999.99
           then do:
                  run cria-tmp-erro(input "A",
                                    input nr-linha-aux,
                                    input "Preco Maximo ao Consumidor maior que 99999,99 ("
                                          + string(vl-max-comsumidor-aux)
                                          + "). Valor sera truncado").
           
                  assign vl-max-comsumidor-aux = 99999.99.
                end.
         end.

    assign tmp-dados-906.vl-max-consumidor = vl-max-comsumidor-aux.   

    /* ---------------------------- INDICADOR DE AREA DE LIVRE COMERCIO ---------------------------- */
    case substr(ds-campo-imp,34,1) :
        when "S" then assign tmp-dados-906.lg-livre-comercio = yes.
        when "N" then assign tmp-dados-906.lg-livre-comercio = no.
        otherwise do:
                    run cria-tmp-erro(input "E",
                                      input nr-linha-aux,
                                      input "Campo Area de Livre Comercio possui valor invalido: " + substr(ds-campo-imp,34,1)).
                  end.
    end case.
    
    /* -------------------------- Taxa de Custos (VL_TC) ------------------------------------------- */
    assign tmp-dados.vl-taxa-custos = dec(substr(ds-campo-imp,32,2)).    

end procedure.

procedure cria-tmp-erro:

    def input parameter in-tipo-erro-par as char format "x(01)" no-undo.
    def input parameter nr-linha-par     as int                 no-undo.
    def input parameter ds-mens-par      as char                no-undo.

    create tmp-erro.
    assign tmp-erro.in-tipo-erro = in-tipo-erro-par
           tmp-erro.nr-linha     = nr-linha-par
           tmp-erro.ds-erro      = ds-mens-par.

end procedure.
/* ----------------------------------------------------------------- EOF --- */
