/********************************************************************************
** 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.
**
    Programa .....: laptua500i-020.p
    Data .........: 17/02/2022
    Empresa ......: TOTVS Saude
    Programador...: Wilian Arrosi
    Objetivo .....: PTU 2.0 - XML A500 IMPORTACAO (nrVerTra_PTU "03")
*******************************************************************************/

using classes.ptu.GpsPtuUtils.

{include/i-prgvrs.i LAPTUA500I-022v3 1.00.00.009 } /*** "010009" ***/

&IF "{&EMSFND_VERSION}" >= "1.00" &THEN
{include/i-license-manager.i laptua500i-020 HRC}
&ENDIF

def var NM-LAYOUT as char init "laptua500i-020" no-undo.

{rtp/rtrowerror.i}
{hrc/bosau/bosau-processa-a500.i}
{hrc/bosau/bosau-import-a500.i}
{lap/includes/a500xml020.i}
{enum/enum-ptu-xml.i}

/* ----------------------------------------------------------- PARAMETROS --- */
def input        parameter table for tmp-dados-entrada.
def output       parameter table for tmp-cabecalho-ptu.
def output       parameter table for tmp-docto-ptu.
def output       parameter table for tmp-servico-ptu.
def output       parameter table for tmp-equipe-ptu.
def input-output parameter table for rowErrors.

def var oGpsPtuUtils as GpsPtuUtils no-undo.

/* -------------------------------------------------------------------------- */
function lgLendoJsonAnexo return log():
	def buffer b-tmp-dados-entrada for tmp-dados-entrada.
	
	return not can-find(first b-tmp-dados-entrada
		                where b-tmp-dados-entrada.ds-arquivo-importacao <> "").
end function.

function setaPrioridade returns int (input in-tipo-guia-ptu-par as int, input lg-guia-principal as log):

    case in-tipo-guia-ptu-par:
        when NOTA_INTERNACAO then return 1.
        when NOTA_HONORARIO  then return 2.
        when NOTA_SADT       then do:
                                  if lg-guia-principal
                                  then return 3.
                                  else return 5.
                             end.
		when NOTA_FISCAL_FORNECEDOR then return 4.
        otherwise return 0.
    end case.

end function.

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

run main.

procedure main:

    oGpsPtuUtils = new GpsPtuUtils().

    run valida-parametros-entrada(
        input table tmp-dados-entrada,
        input-output table rowErrors).

    if containsAnyError(input table RowErrors)
    then return.

    find first tmp-dados-entrada no-error.

	if lgLendoJsonAnexo()
	then run abre-arquivo-json(
	        input tmp-dados-entrada.cdd-anexo,
        	output dataset ptuA500Dset).
    else run abre-arquivo(
        	input tmp-dados-entrada.ds-arquivo-importacao,
        	output dataset ptuA500Dset).

    run verifica-integridade(
        input dataset ptuA500Dset,
        input-output table rowErrors).

    if containsAnyError(input table RowErrors)
    then return.

    run carrega-dados-tmps(
        input dataset ptuA500Dset,
        output       table tmp-cabecalho-ptu,
        output       table tmp-docto-ptu, 
        output       table tmp-servico-ptu,
        output       table tmp-equipe-ptu,
        input-output table rowErrors).

    if containsAnyError(input table RowErrors)
    then return.

    run valida-valores(
        input table tmp-cabecalho-ptu,
        input table tmp-servico-ptu,
        input-output table rowErrors).
    
    finally:
        if valid-object(oGpsPtuUtils)
        then delete object oGpsPtuUtils.
    end.

end.

procedure valida-valores:    
    def input parameter table for tmp-cabecalho-ptu.
    def input parameter table for tmp-servico-ptu.
    def input-output parameter table for rowErrors.

    def var vl-servicos-aux as dec no-undo.
    def var vl-total-aux as dec no-undo.

    find first tmp-cabecalho-ptu no-error.
    if not avail tmp-cabecalho-ptu
    then do:
        run cria-erro-ptu(
            input 1015, 
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'CABECALHO' do arquivo PTU.",
            input-output table rowErrors).
        return.
    end.

    if tmp-cabecalho-ptu.idi-tipo-arquivo-ptu = PTU_A500_AVISO
    then return.

    for each tmp-servico-ptu no-lock:
        assign vl-servicos-aux = vl-servicos-aux + tmp-servico-ptu.val-servico-cobrado
                                                 + tmp-servico-ptu.val-filme-cobrado  
                                                 + tmp-servico-ptu.val-co-cobrado     
                                                 + tmp-servico-ptu.val-taxa-adm-servico
                                                 + tmp-servico-ptu.val-taxa-adm-filme  
                                                 + tmp-servico-ptu.val-taxa-adm-co
                                                 + tmp-servico-ptu.val-restituir.  
    end.
    
    assign vl-total-aux = tmp-cabecalho-ptu.val-total-documento-1 + tmp-cabecalho-ptu.val-total-documento-2.

    if vl-servicos-aux <> vl-total-aux
    then do:
        run cria-erro-ptu(
            input 1277,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Total de valores enviados nos documentos/movimentos incorreto. Valor total: " + string(vl-total-aux) + " Valor dos servicos " +  string(vl-servicos-aux),
            input-output table rowErrors).
    end.

end procedure.

procedure cria-erro-ptu:

    def input parameter cod-erro-par as int no-undo.
    def input parameter nr_GuiaTissOperadora-par as char no-undo.
    def input parameter ds-erro-subtipo-par as char no-undo. //ERROR, WARNING, INFORMATION
    def input parameter ds-help-erro-par as char no-undo. //mensagem de help mais detalhada
    def input-output parameter table for rowErrors.

    run insertOtherError(
        input cod-erro-par, 
        input (if nr_GuiaTissOperadora-par <> ""
               then "Chave: nr_GuiaTissOperadora: " + nr_GuiaTissOperadora-par
               else ""),
        input NM-LAYOUT,
        input ERROR_TYPE[PTU] , 
        input ds-erro-subtipo-par, 
        input ds-help-erro-par,
        input-output table rowErrors). 

end procedure.

procedure valida-parametros-entrada:

    def input parameter table for tmp-dados-entrada.
    def input-output parameter table for rowErrors.
    
    find first tmp-dados-entrada no-error.
    if not avail tmp-dados-entrada 
    then do:
        run insertOtherError(
            input 240, //Tabela temporario nao contem nenhum registro
            input "Nao foi encontrado registro na tabela de Parametros de entrada.",
            input NM-LAYOUT,
            input "GP",
            input "ERROR",
            input "",
            input-output table rowErrors).
        return.
    end.

end.

procedure abre-arquivo:

    def input  parameter nm-arquivo-par as char no-undo.
    def output parameter dataset for ptuA500Dset.

    def var cSourceType             as char     no-undo.
    def var cReadMode               as char     no-undo.
    def var lOverrideDefaultMapping as log      no-undo.
    def var cSchemaLocation         as char     no-undo.
    def var cFieldTypeMapping       as char     no-undo.
    def var cVerifySchemaMode       as char     no-undo.
    def var ix                      as int      no-undo.
    def var lc-arquivo-xml-aux      as longchar no-undo.

    copy-lob file nm-arquivo-par to lc-arquivo-xml-aux.

    //Tratativa para importar o XML sem o namespace "ptu"
    if index(lc-arquivo-xml-aux,NAMESPACE_A500) = 0
    then dataset ptuA500Dset:namespace-uri = "".

    assign cSourceType             = "LONGCHAR"
           cReadMode               = "EMPTY"
           cSchemaLocation         = ""
           lOverrideDefaultMapping = false
           cFieldTypeMapping       = ?
           cVerifySchemaMode       = "IGNORE".

    dataset ptuA500Dset:read-xml(cSourceType,
                                 lc-arquivo-xml-aux,
                                 cReadMode,
                                 cSchemaLocation,
                                 lOverrideDefaultMapping,
                                 cFieldTypeMapping,
                                 cVerifySchemaMode) no-error.

    if error-status:error
    then do ix = 1 to error-status:num-messages:
           run insertOtherError(
               input 9999, 
               input "Problemas na importacao do XML do PTU A500.",
               input NM-LAYOUT,
               input "GP",
               input "ERROR",
               input string(error-status:get-number(ix)) + error-status:get-message(ix),
               input-output table rowErrors).
    end.
end.

procedure abre-arquivo-json:

    def input  parameter cdd-anexo-par like anexo.cdd-anexo no-undo.
    def output parameter dataset for ptuA500Dset.

    def var cSourceType             as char     no-undo.
    def var cReadMode               as char     no-undo.
    def var lOverrideDefaultMapping as log      no-undo.
    def var cSchemaLocation         as char     no-undo.
    def var cFieldTypeMapping       as char     no-undo.
    def var cVerifySchemaMode       as char     no-undo.
    def var ix                      as int      no-undo.
    def var mp-memptr-aux           as longchar no-undo.
        
    find first anexo 
        where anexo.cdd-anexo = cdd-anexo-par
        no-lock no-error.

    if not avail anexo
    then return.
    
    copy-lob from anexo.blb-anexo to mp-memptr-aux.

    assign mp-memptr-aux = replace(mp-memptr-aux, ",}", "}").

    assign cSourceType             = "longchar"
           cReadMode               = "EMPTY"
           cSchemaLocation         = ""
           lOverrideDefaultMapping = false
           cFieldTypeMapping       = ?
           cVerifySchemaMode       = "IGNORE".

    dataset ptuA500Dset:read-json(cSourceType,
                                  mp-memptr-aux,
                                  cReadMode).

    if error-status:error
    then do ix = 1 to error-status:num-messages:
           run insertOtherError(
               input 9999, 
               input "Problemas na importacao do json do PTU A500.",
               input NM-LAYOUT,
               input "GP",
               input "ERROR",
               input string(error-status:get-number(ix)) + error-status:get-message(ix),
               input-output table rowErrors).
    end.
end.

procedure verifica-integridade:

    def input        parameter dataset for ptuA500Dset.
    def input-output parameter table for rowErrors.

    find first Cobranca no-lock no-error.
    find first Aviso no-lock no-error.

    if not avail Cobranca
    and not avail Aviso
    then do:
        run cria-erro-ptu(
            input 0,
            input "",
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'Cobranca' nem o elemento 'Aviso' no arquivo PTU. Arquivo invalido.",
	        input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.    

end procedure.

procedure carrega-dados-tmps:

    def input        parameter dataset for ptuA500Dset.
    def output       parameter table for tmp-cabecalho-ptu.
    def output       parameter table for tmp-docto-ptu.
    def output       parameter table for tmp-servico-ptu.
    def output       parameter table for tmp-equipe-ptu.
    def input-output parameter table for rowErrors.

    run ptu-cabecalho(
        input table cabecalho,
        input table unimed,
        input table carimboCMB,
        input table ptuA500,
        output table tmp-cabecalho-ptu,
        input-output table rowErrors).

    if containsAnyError(input table RowErrors)
    then return.    

    run ptu-aviso(
        input table Aviso,
        input-output table tmp-cabecalho-ptu,
        input-output table rowErrors).

    run ptu-cobranca(
        input table Cobranca,
        input table documento1,
        input table NFE,
        input table documento2,
        input-output table tmp-cabecalho-ptu,
        input-output table rowErrors).

    run ptu-tipoGuia(
        input dataset ptuA500Dset by-reference,
        input-output table tmp-cabecalho-ptu,
        input-output table tmp-docto-ptu, 
        input-output table tmp-servico-ptu,
        input-output table tmp-equipe-ptu,
        input-output table rowErrors).

    run ptu-CobrancaReembolso(
        input dataset ptuA500Dset by-reference,
        input-output table tmp-cabecalho-ptu,
        input-output table tmp-docto-ptu, 
        input-output table tmp-servico-ptu,
        input-output table tmp-equipe-ptu,
        input-output table rowErrors).

end.

procedure ptu-cabecalho:
    
    define input parameter table for cabecalho.
    define input parameter table for unimed.    
    define input parameter table for carimboCMB.
    define input parameter table for ptuA500.
    define output parameter table for tmp-cabecalho-ptu.
    define input-output parameter table for rowErrors.

    find first cabecalho no-lock no-error.
    find first unimed no-lock no-error.
    find first carimboCMB no-lock no-error.
    find first ptuA500 no-lock no-error.
    
    if not avail cabecalho
    then do:
        run cria-erro-ptu(
            input 1015, 
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'CABECALHO' do arquivo PTU.",
            input-output table rowErrors).
    end.

    if cabecalho.nrVerTra_PTU <> 3
    then do:
        run cria-erro-ptu(
            input 2594, 
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Arquivo PTU XML nao pertence a versao PTU 2.0. O elemento 'nrVerTra_PTU' do arquivo XML deve ser 3.",
            input-output table rowErrors).
    end.

    if not avail unimed
    then do:
        run cria-erro-ptu(
            input 1015, 
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'UNIMED' em 'CABECALHO' do arquivo PTU.",
            input-output table rowErrors).
    end.
    
	if not lgLendoJsonAnexo()
	and not avail carimboCMB
    then do:
    	run cria-erro-ptu(
	    	input 1015, 
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'CARIMBOCMB' do arquivo PTU.",
            input-output table rowErrors).
    end.	

    if containsAnyError(input table RowErrors)
    then return.    

    create tmp-cabecalho-ptu.
    assign 
        tmp-cabecalho-ptu.num-versao-trans-ptu      = cabecalho.nrVerTra_PTU
        tmp-cabecalho-ptu.cdn-unidade-destino       = unimed.cd_Uni_Destino
        tmp-cabecalho-ptu.cdn-unidade-origem        = unimed.cd_Uni_Origem.
	
    if not lgLendoJsonAnexo()
    then assign tmp-cabecalho-ptu.ds-data-postagem-completa = carimboCMB.dt_postagem
                tmp-cabecalho-ptu.cod-hash                  = ptuA500.hash
                tmp-cabecalho-ptu.cod-protocolo-ptu         = string(carimboCMB.nr_protocolo).

end procedure.

procedure ptu-aviso:
    define input parameter table for Aviso.
    define input-output parameter table for tmp-cabecalho-ptu.
    define input-output parameter table for rowErrors.  

    find first Aviso no-lock no-error.
    if not avail Aviso
    then return.

    find first tmp-cabecalho-ptu no-error.
    if not avail tmp-cabecalho-ptu
    then do:
        run insertOtherError(
            input 240, //Tabela temporario nao contem nenhum registro
            input "Nao foi encontrado registro na tabela tmp-cabecalho-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.
    
    assign tmp-cabecalho-ptu.idi-tipo-arquivo-ptu = PTU_A500_AVISO
        tmp-cabecalho-ptu.dat-gerac-arq           = oGpsPtuUtils:ptuCharToDate(Aviso.dt_Geracao)
        tmp-cabecalho-ptu.cod-competencia         = Aviso.nr_Competencia.           

end procedure.

procedure ptu-cobranca:
    
    define input parameter table for Cobranca.
    define input parameter table for documento1.
    define input parameter table for NFE.
    define input parameter table for documento2.
    define input-output parameter table for tmp-cabecalho-ptu.
    define input-output parameter table for rowErrors.  

    find first tmp-cabecalho-ptu no-error.
    if not avail tmp-cabecalho-ptu
    then do:
        run insertOtherError(
            input 240, //Tabela temporario nao contem nenhum registro
            input "Nao foi encontrado registro na tabela tmp-cabecalho-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    find first Cobranca no-lock no-error.
    if not avail Cobranca
    then return.

    find first documento1 where documento1.Cobranca_id = recid(Cobranca) no-lock no-error.
    if not avail documento1
    then do:
        run cria-erro-ptu(
            input 1015, 
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'DOCUMENTO1' em cabecalho > dadosAvisoCobranca > Cobranca do arquivo PTU.",
            input-output table rowErrors).
    end.

    assign 
        tmp-cabecalho-ptu.idi-tipo-arquivo-ptu       = PTU_A500
        tmp-cabecalho-ptu.dat-gerac-arq              = oGpsPtuUtils:ptuCharToDate(Cobranca.dt_Geracao)
        tmp-cabecalho-ptu.cod-competencia            = Cobranca.nr_Competencia
        tmp-cabecalho-ptu.idi-tip-cobranca           = Cobranca.tp_Cobranca
        tmp-cabecalho-ptu.idi-tipo-documento-1       = documento1.tp_Documento
        tmp-cabecalho-ptu.cod-documento-1            = documento1.nr_Documento
        tmp-cabecalho-ptu.dat-vencimento-documento-1 = oGpsPtuUtils:ptuCharToDate(documento1.dt_VencimentoDoc)
        tmp-cabecalho-ptu.dat-emis-documento-1       = oGpsPtuUtils:ptuCharToDate(documento1.dt_EmissaoDoc)
        tmp-cabecalho-ptu.val-total-documento-1      = documento1.vl_TotalDoc
        tmp-cabecalho-ptu.cod-documento-fisc-1       = documento1.doc_Fiscal
        tmp-cabecalho-ptu.val-ir                     = documento1.VL_IR.

    for first NFE where NFE.documento1_id = recid(documento1):
        assign tmp-cabecalho-ptu.des-link-nfe-documento-1 = NFE.link_NFeDoc
            tmp-cabecalho-ptu.cod-nota-fisc-documento-1   = NFE.nr_NotaFiscalDoc.
    end.
    
    for first documento2 where documento2.Cobranca_id = recid(Cobranca):
        assign tmp-cabecalho-ptu.idi-tipo-documento-2    = documento2.tp_Documento
            tmp-cabecalho-ptu.cod-documento-2            = documento2.nr_Documento
            tmp-cabecalho-ptu.dat-vencimento-documento-2 = oGpsPtuUtils:ptuCharToDate(documento2.dt_VencimentoDoc)
            tmp-cabecalho-ptu.dat-emis-documento-2       = oGpsPtuUtils:ptuCharToDate(documento2.dt_EmissaoDoc)
            tmp-cabecalho-ptu.val-total-documento-2      = documento2.vl_TotalDoc
            tmp-cabecalho-ptu.cod-documento-fisc-2       = documento2.doc_Fiscal.

        for first NFE where NFE.documento1_id = recid(documento2):
            assign tmp-cabecalho-ptu.des-link-nfe-documento-2 = NFE.link_NFeDoc
                tmp-cabecalho-ptu.cod-nota-fisc-documento-2   = NFE.nr_NotaFiscalDoc.
        end.
    end.

end procedure.

procedure ptu-tipoGuia:

    define input parameter dataset for ptuA500Dset.
    define input-output parameter table for tmp-cabecalho-ptu.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for tmp-equipe-ptu.
    define input-output parameter table for rowErrors.
    
    run tipo-guia-consulta(
        input dataset ptuA500Dset by-reference,
        input-output table tmp-cabecalho-ptu,
        input-output table tmp-docto-ptu, 
        input-output table tmp-servico-ptu,
        input-output table tmp-equipe-ptu,
        input-output table rowErrors).   
    
    run tipo-guia-sadt(
        input dataset ptuA500Dset by-reference,
        input-output table tmp-cabecalho-ptu,
        input-output table tmp-docto-ptu, 
        input-output table tmp-servico-ptu,
        input-output table tmp-equipe-ptu,
        input-output table rowErrors).

    run tipo-guia-internacao(
        input dataset ptuA500Dset by-reference,
        input-output table tmp-cabecalho-ptu,
        input-output table tmp-docto-ptu, 
        input-output table tmp-servico-ptu,
        input-output table tmp-equipe-ptu,
        input-output table rowErrors).

    run tipo-guia-honorarios(
        input dataset ptuA500Dset by-reference,
        input-output table tmp-cabecalho-ptu,
        input-output table tmp-docto-ptu, 
        input-output table tmp-servico-ptu,
        input-output table tmp-equipe-ptu,
        input-output table rowErrors).

    run tipo-guia-nota-fiscal-fornecedor(
        input dataset ptuA500Dset by-reference,
        input-output table tmp-cabecalho-ptu,
        input-output table tmp-docto-ptu, 
        input-output table tmp-servico-ptu,
        input-output table tmp-equipe-ptu,
        input-output table rowErrors).

end procedure.

procedure ptu-CobrancaReembolso:

    define input parameter dataset for ptuA500Dset.
    define input-output parameter table for tmp-cabecalho-ptu.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for tmp-equipe-ptu.
    define input-output parameter table for rowErrors.

    run tipo-reembolso(
        input dataset ptuA500Dset by-reference,
        input-output table tmp-cabecalho-ptu,
        input-output table tmp-docto-ptu, 
        input-output table tmp-servico-ptu,
        input-output table tmp-equipe-ptu,
        input-output table rowErrors).
    
    run RessarcimentoSus(
        input dataset ptuA500Dset by-reference,
        input-output table tmp-cabecalho-ptu,
        input-output table tmp-docto-ptu, 
        input-output table tmp-servico-ptu,
        input-output table tmp-equipe-ptu,
        input-output table rowErrors).

end procedure.

procedure RessarcimentoSus:
    define input parameter dataset for ptuA500Dset.
    define input-output param table for tmp-cabecalho-ptu.
    define input-output param table for tmp-docto-ptu.
    define input-output param table for tmp-servico-ptu.
    define input-output param table for tmp-equipe-ptu.
    define input-output param table for rowErrors.

    def var r-tmp-servico-corrente-ptu-aux as recid init 0 no-undo.
 
    for each RessarcimentoSus no-lock:

        run create-tmp-docto-ptu(
            input recid(RessarcimentoSus),
            input RESSARCIMENTO_SUS,
            input table tmp-cabecalho-ptu,
            input-output table tmp-docto-ptu).

        run atualiza-docto-ptu-ressus(
            input recid(RessarcimentoSus),
            input-output table tmp-docto-ptu).

        run ptu-dadosBeneficiario1-ressarc(
            input recid(RessarcimentoSus),
            input table dadosBeneficiario1,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-carater-atendimento-ressarc(buffer RessarcimentoSus,
                                           input-output table tmp-docto-ptu,
                                           input-output table rowErrors).

        run ptu-Prestador3-ressarc(
            input recid(RessarcimentoSus),
            input        table Prestador3,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-nr_CNPJouCPF-ressarc(
            input recid(RessarcimentoSus),
            input        table Prestador3,
            input        table nr_CNPJouCPF,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).           

        for each dadosProcedimentos1 where dadosProcedimentos1.RessarcimentoSus_id = recid(RessarcimentoSus):    

            run create-tmp-servico-ptu(
                input recid(RessarcimentoSus),
                input table tmp-docto-ptu,
                output r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu).

            run ptu-dadosProcedimentos1(
                buffer dadosProcedimentos1,
                input r-tmp-servico-corrente-ptu-aux,
                input table procedimentos22,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).

        end.

        run ptu-cnes-ressarc(
            buffer RessarcimentoSus,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).
    end.

end procedure.

procedure ptu-cnes-ressarc:
    define parameter buffer b-RessarcimentoSus for RessarcimentoSus.
    define input-output param table for tmp-docto-ptu.
    define input-output param table for rowErrors.

    define buffer b-tmp-docto-ptu for tmp-docto-ptu.

    find first b-tmp-docto-ptu where tmp-docto-ptu.recidGuia = recid(b-RessarcimentoSus) no-error.
    if not avail b-tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.    

    if containsAnyError(input table RowErrors)
    then return.
    
    assign b-tmp-docto-ptu.cod-cnes-contrat-exec = b-RessarcimentoSus.cd_cnes.

end procedure.

procedure tipo-guia-consulta:
    define input parameter dataset for ptuA500Dset.
    define input-output param table for tmp-cabecalho-ptu.
    define input-output param table for tmp-docto-ptu.
    define input-output param table for tmp-servico-ptu.
    define input-output param table for tmp-equipe-ptu.
    define input-output param table for rowErrors.

    define variable r-tmp-servico-corrente-ptu-aux as recid no-undo.

    for each guiaConsulta:

        run create-tmp-docto-ptu(
            input recid(guiaConsulta),
            input NOTA_CONSULTA,
            input table tmp-cabecalho-ptu,
            input-output table tmp-docto-ptu).

        run ptu-dadosBeneficiario-consulta(
            input recid(guiaConsulta),
            input table dadosBeneficiario,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).
    
        run ptu-contratadoExecutante-consulta(
            recid(guiaConsulta),
            input table contratadoExecutante,
            input table UnimedPrestador,
            input table CPF_CNPJ,
            input table prestador,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-profissionalExecutante(
            input recid(guiaConsulta),
            input table profissionalExecutante,
            input table UnimedPrestador,
            input table dadosConselho,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

		run ptu-dadosGuia-consulta(
            recid(guiaConsulta),
            input table dadosGuia,
            input table nr_Guias,                                
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run create-tmp-servico-ptu(
            recid(guiaConsulta),
            input table tmp-docto-ptu,
            output r-tmp-servico-corrente-ptu-aux,
            input-output table tmp-servico-ptu).

        run ptu-procedimentos-consulta(
            recid(guiaConsulta),
            input r-tmp-servico-corrente-ptu-aux,
            input table dadosGuia,
            input table procedimentos,
            input-output table tmp-servico-ptu,
            input-output table rowErrors).        

        run ptu-dadosAutorizacao-consulta(
            recid(guiaConsulta),
            input r-tmp-servico-corrente-ptu-aux,
            input table dadosGuia,
            input table dadosAutorizacao,
            input-output table tmp-servico-ptu,
            input-output table rowErrors).
        
        run ptu-complemento-consulta(
            input recid(guiaConsulta), 
            input table dadosGuia,
            input table complemento,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).
        
        run ptu-reapresentacaoGlosado-consulta(
            input recid(guiaConsulta),
            input table reapresentacaoGlosado,
            input table DadosLoteGuia,
            input table TXT,
            input table XML,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

    end.

end procedure.

procedure tipo-guia-sadt:
    define input parameter dataset for ptuA500Dset.
    define input-output param table for tmp-cabecalho-ptu.
    define input-output param table for tmp-docto-ptu.
    define input-output param table for tmp-servico-ptu.
    define input-output param table for tmp-equipe-ptu.
    define input-output param table for rowErrors.

    def var r-tmp-servico-corrente-ptu-aux as recid init 0 no-undo.
    def var r-tmp-equipe-ptu-aux  as recid init 0 no-undo.

    for each guiaSADT:

        run create-tmp-docto-ptu(
            input recid(guiaSADT),
            input NOTA_SADT,
            input table tmp-cabecalho-ptu,
            input-output table tmp-docto-ptu).

        run ptu-dadosBeneficiario-SADT(
            input recid(guiaSADT),
            input table dadosBeneficiario,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-dadosSolicitante-sadt(
            input recid(guiaSADT),
            input table dadosSolicitante,
            input table profissional,
            input table cpf_cnpj2,
            input table UnimedPrestador,
            input table dadosConselho,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-contratadoExecutante-sadt(
            input recid(guiaSADT),
            input table dadosExecutante,
            input table UnimedPrestador,
            input table CPF_CNPJ,
            input table Prestador,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-dadosAtendimento-sadt(
            input recid(guiaSADT), 
            input        table dadosAtendimento,
            input-output table rowErrors).            

        run ptu-dadosGuia1-sadt(
            input recid(guiaSADT), 
            input table dadosGuia1,
            input table nr_Guias1,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        find dadosGuia1 where dadosGuia1.guiaSADT_id = recid(guiaSADT) no-lock no-error.        

        run ptu-complemento(
            buffer dadosGuia1,
            input recid(guiaSADT),             
            input table complemento,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-reapresentacaoGlosado-sadt(
            input recid(guiaSADT),
            input table reapresentacaoGlosado,
            input table DadosLoteGuia,
            input table TXT,
            input table XML,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        for each procedimentosExecutados where procedimentosExecutados.dadosGuia1_id = recid(dadosGuia1):

            run create-tmp-servico-ptu(
                input recid(guiaSADT),
                input table tmp-docto-ptu,
                output r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu).

            run ptu-procedimentosExecutados(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).

            find procedimentos1 where procedimentos1.procedimentosExecutados_id = recid(procedimentosExecutados) no-error.
            if not avail procedimentos1
            then do:
                run cria-erro-ptu(
                    input 0,
                    input "", 
                    input ERROR_SUBTYPE[ERROR], 
                    "Nao foi possivel ler o elemento 'procedimentos1' em 'procedimentosExecutados' em guias do arquivo PTU.",
	                input-output table rowErrors).
            end.

            run ptu-procedimentos1(
                buffer procedimentos1,
                input r-tmp-servico-corrente-ptu-aux,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).

            run ptu-valores(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input        table  valores,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).

            run ptu-taxas(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input        table  taxas,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).
            
            run ptu-dadosOPME(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input        table  dadosOPME,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).

            run ptu-Pago_FornecedorOPME(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input        table  dadosOPME,
                input        table  Pago_FornecedorOPME,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).

            for each equipe_Profissional where equipe_Profissional.procedimentosExecutados_id = recid(procedimentosExecutados):
                run create-tmp-equipe-ptu(
                    input r-tmp-servico-corrente-ptu-aux,
                    output r-tmp-equipe-ptu-aux,
                    input-output table tmp-equipe-ptu).

                run ptu-equipe_Profissional(
                    input buffer equipe_Profissional:handle,
                    input recid(equipe_Profissional),
                    input r-tmp-equipe-ptu-aux,
                    input-output table  tmp-equipe-ptu,
                    input-output table  rowErrors).

                find Prestador2 where Prestador2.equipe_Profissional_id = recid(equipe_Profissional) no-error.

                if avail Prestador2
                then run ptu-Prestador2(
                         input Prestador2.cd_Uni_Prest,
                         input Prestador2.cd_Prest,
                         input r-tmp-equipe-ptu-aux,
                         input        table  Prestador2,
                         input-output table  tmp-equipe-ptu,
                         input-output table  rowErrors).

                find dadosConselho where dadosConselho.equipe_Profissional_id = recid(equipe_Profissional) no-error.
                if not avail dadosConselho
                then do:
                    run cria-erro-ptu(
                        input 0,
                        input "", 
                        input ERROR_SUBTYPE[ERROR], 
                        "Nao foi possivel ler o elemento 'dadosConselho' em 'equipe_Profissional' do arquivo PTU.",
	                    input-output table rowErrors).
                    next.
                end.

                run ptu-dadosConselho(
                    input dadosConselho.sg_Conselho,
                    input dadosConselho.nr_Conselho,
                    input dadosConselho.UF,
                    input r-tmp-equipe-ptu-aux,
                    input        table  dadosConselho,
                    input-output table  tmp-equipe-ptu,
                    input-output table  rowErrors).
            end.

            run ptu-dadosAutorizacao(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input table dadosAutorizacao,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).

        end. /* each procedimentosExecutados */        

    end. /* each guiaSADT */

end procedure.

procedure tipo-guia-internacao:
    define input parameter dataset for ptuA500Dset.
    define input-output param table for tmp-cabecalho-ptu.
    define input-output param table for tmp-docto-ptu.
    define input-output param table for tmp-servico-ptu.
    define input-output param table for tmp-equipe-ptu.
    define input-output param table for rowErrors.

    def var r-tmp-servico-corrente-ptu-aux as recid init 0 no-undo.
    def var r-tmp-equipe-ptu-aux  as recid init 0 no-undo.

    for each guiaInternacao:

        run create-tmp-docto-ptu(
            input recid(guiaInternacao),
            input NOTA_INTERNACAO,
            input table tmp-cabecalho-ptu,
            input-output table tmp-docto-ptu).

        run ptu-dadosBeneficiario-internacao(
            input recid(guiaInternacao),
            input table dadosBeneficiario,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-dadosSolicitante-internacao(
            recid(guiaInternacao),
            input table dadosSolicitante,
            input table profissional,
            input table cpf_cnpj2,
            input table UnimedPrestador,
            input table dadosConselho,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).
        
        run ptu-dadosGuia1-internacao(
            input recid(guiaInternacao),
            input table dadosGuia1,
            input table nr_Guias1,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).        

        run ptu-dadosExecutante1-internacao(
            input recid(guiaInternacao),
            input table dadosExecutante1,
            input table UnimedPrestador,
            input table prestador,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).
        
        run ptu-dadosInternacao(
            input recid(guiaInternacao),
            input table dadosInternacao,  
            input-output table tmp-docto-ptu, 
            input-output table rowErrors).

        run ptu-dadosSaidaInternacao(
            input recid(guiaInternacao),
            input table dadosSaidaInternacaoImportacao,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-dadosAuditoria(
            input recid(guiaInternacao),
            input table dadosAuditoria,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        find dadosGuia1 where dadosGuia1.guiaInternacao_id = recid(guiaInternacao) no-error.        

        run ptu-complemento(
            buffer dadosGuia1,
            input recid(guiaInternacao), 
            input table complemento,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-reapresentacaoGlosado-inter(
            input recid(guiaInternacao),
            input table reapresentacaoGlosado,
            input table DadosLoteGuia,
            input table TXT,
            input table XML,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        for each procedimentosExecutados where procedimentosExecutados.dadosGuia1_id = recid(dadosGuia1):

            run create-tmp-servico-ptu(
                input recid(guiaInternacao),
                input table tmp-docto-ptu,
                output r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu).

            run ptu-procedimentosExecutados(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).

            find procedimentos1 where procedimentos1.procedimentosExecutados_id = recid(procedimentosExecutados) no-error.
            if not avail procedimentos1
            then do:
                run cria-erro-ptu(
                    input 0,
                    input "", 
                    input ERROR_SUBTYPE[ERROR], 
                    "Nao foi possivel ler o elemento 'procedimentos1' em 'procedimentosExecutados' em guias do arquivo PTU.",
	                input-output table rowErrors).
            end.    

            run ptu-procedimentos1(
                buffer procedimentos1,
                input r-tmp-servico-corrente-ptu-aux,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).

            run ptu-valores(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input        table  valores,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).

            run ptu-taxas(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input        table  taxas,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).
            
            run ptu-dadosOPME(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input        table  dadosOPME,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).

            run ptu-Pago_FornecedorOPME(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input        table  dadosOPME,
                input        table  Pago_FornecedorOPME,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).

            for each equipe_Profissional where equipe_Profissional.procedimentosExecutados_id = recid(procedimentosExecutados):
                run create-tmp-equipe-ptu(
                    input r-tmp-servico-corrente-ptu-aux,
                    output r-tmp-equipe-ptu-aux,
                    input-output table tmp-equipe-ptu).

                run ptu-equipe_Profissional(
                    input buffer equipe_Profissional:handle,
                    input recid(equipe_Profissional),
                    input r-tmp-equipe-ptu-aux,
                    input-output table  tmp-equipe-ptu,
                    input-output table  rowErrors).

                find Prestador2 where Prestador2.equipe_Profissional_id = recid(equipe_Profissional) no-error.

                if avail Prestador2
                then run ptu-Prestador2(
                         input Prestador2.cd_Uni_Prest,
                         input Prestador2.cd_Prest,
                         input r-tmp-equipe-ptu-aux,
                         input        table  Prestador2,
                         input-output table  tmp-equipe-ptu,
                         input-output table  rowErrors).

                find dadosConselho where dadosConselho.equipe_Profissional_id = recid(equipe_Profissional) no-error.
                if not avail dadosConselho
                then do:
                    run cria-erro-ptu(
                        input 0,
                        input "", 
                        input ERROR_SUBTYPE[ERROR], 
                        "Nao foi possivel ler o elemento 'dadosConselho' em 'equipe_Profissional' do arquivo PTU.",
	                    input-output table rowErrors).
                    next.
                end.

                run ptu-dadosConselho(
                    input dadosConselho.sg_Conselho,
                    input dadosConselho.nr_Conselho,
                    input dadosConselho.UF,
                    input r-tmp-equipe-ptu-aux,
                    input        table  dadosConselho,
                    input-output table  tmp-equipe-ptu,
                    input-output table  rowErrors).
            end.

            run ptu-dadosAutorizacao(
                buffer procedimentosExecutados,
                input r-tmp-servico-corrente-ptu-aux,
                input table dadosAutorizacao,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).

        end. /* each procedimentosExecutados */ 
    end.

end procedure.

procedure tipo-guia-honorarios:
    define input parameter dataset for ptuA500Dset.
    define input-output param table for tmp-cabecalho-ptu.
    define input-output param table for tmp-docto-ptu.
    define input-output param table for tmp-servico-ptu.
    define input-output param table for tmp-equipe-ptu.
    define input-output param table for rowErrors.

    def var r-tmp-servico-corrente-ptu-aux as recid init 0 no-undo.
    def var r-tmp-equipe-ptu-aux  as recid init 0 no-undo.

    for each guiaHonorarios:

        run create-tmp-docto-ptu(
            input recid(guiaHonorarios),
            input NOTA_HONORARIO,
            input table tmp-cabecalho-ptu,
            input-output table tmp-docto-ptu).

        run ptu-dadosBeneficiario-honorarios(
            input recid(guiaHonorarios),
            input table dadosBeneficiario,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-contratadoExecutante-honorarios(
            recid(guiaHonorarios), 
            input table dadosExecutante,
            input table UnimedPrestador,
            input table CPF_CNPJ,
            input table prestador,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-dataFaturamento(
            recid(guiaHonorarios), 
            input table dataFaturamento,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-dadosGuia-honorarios(
            recid(guiaHonorarios), 
            input table dadosGuiaHonorario,
            input table nr_Guias1,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).        

        run ptu-dadosHospital(
            input recid(guiaHonorarios),
            input table dadosHospital,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        find dadosGuiaHonorario where dadosGuiaHonorario.guiaHonorarios_id = recid(guiaHonorarios) no-error.   

        run ptu-complemento-honorario(
            buffer dadosGuiaHonorario,
            input recid(guiaHonorarios),             
            input table complemento,
            input-output table tmp-docto-ptu,
            input-output table rowErrors). 
            
        run ptu-reapresentacaoGlosado-hono(
            input recid(guiaHonorarios),
            input table reapresentacaoGlosado,
            input table DadosLoteGuia,
            input table TXT,
            input table XML,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        for each procedimentosExecutadosHono where procedimentosExecutadosHono.dadosGuiaHonorario_id = recid(dadosGuiaHonorario):

            run create-tmp-servico-ptu(
                input recid(guiaHonorarios),
                input table tmp-docto-ptu,
                output r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu).

            run ptu-procedimentosExecutadosHono(
                buffer procedimentosExecutadosHono,
                input r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).

            find procedimentos1 
                 where procedimentos1.procedimentosExecutadosHono_id = recid(procedimentosExecutadosHono) no-error.
            if not avail procedimentos1
            then do:
                run cria-erro-ptu(
                    input 0,
                    input "", 
                    input ERROR_SUBTYPE[ERROR], 
                    "Nao foi possivel ler o elemento 'procedimentos1' em 'procedimentosExecutadosHono' em guias do arquivo PTU.",
	                input-output table rowErrors).
            end.    

            run ptu-procedimentos1(
                buffer procedimentos1,
                input r-tmp-servico-corrente-ptu-aux,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).            

            for each  profissionalEquipeHonorario 
                where profissionalEquipeHonorario.procedimentosExecutadosHono_id = recid(procedimentosExecutadosHono):
                run create-tmp-equipe-ptu(
                    input  r-tmp-servico-corrente-ptu-aux,
                    output r-tmp-equipe-ptu-aux,
                    input-output table tmp-equipe-ptu).

                run ptu-equipe_Profissional(
                    input buffer profissionalEquipeHonorario:handle,
                    input recid(profissionalEquipeHonorario),
                    input r-tmp-equipe-ptu-aux,
                    input-output table  tmp-equipe-ptu,
                    input-output table  rowErrors).

                run valida-equipe_Profissional(
                    input buffer profissionalEquipeHonorario:handle,
                    input-output table  rowErrors).

                find Prestador2 
                     where Prestador2.profissionalEquipeHonorario_id = recid(profissionalEquipeHonorario) no-error.

                if avail Prestador2
                then run ptu-Prestador2(
                         input Prestador2.cd_Uni_Prest,
                         input Prestador2.cd_Prest,
                         input r-tmp-equipe-ptu-aux,
                         input        table  Prestador2,
                         input-output table  tmp-equipe-ptu,
                         input-output table  rowErrors).

                find dadosConselho where dadosConselho.profissionalEquipeHonorario_id = recid(profissionalEquipeHonorario) no-error.
                if not avail dadosConselho
                then do:
                    run cria-erro-ptu(
                        input 0,
                        input "", 
                        input ERROR_SUBTYPE[ERROR], 
                        "Nao foi possivel ler o elemento 'dadosConselho' em 'equipe_Profissional' do arquivo PTU.",
	                    input-output table rowErrors).
                end.

                run ptu-dadosConselho(
                    input dadosConselho.sg_Conselho,
                    input dadosConselho.nr_Conselho,
                    input dadosConselho.UF,
                    input r-tmp-equipe-ptu-aux,
                    input        table  dadosConselho,
                    input-output table  tmp-equipe-ptu,
                    input-output table  rowErrors).
            end.

            find first dadosAutorizacao 
                 where dadosAutorizacao.procedimentosExecutadosHono_id = recid(procedimentosExecutadosHono) no-lock no-error.
            if not avail dadosAutorizacao
            then next.    
            
            run atribui-dados-autorizacao(
                buffer dadosAutorizacao,
                input r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).

        end. /* each procedimentosExecutados */ 

        if dadosGuia1.id_GlosaTotal = "S"
        then next. 

        /* GUIA DE HONORARIO DEVE POSSUIR EQUIPE PROFISSIONAL */
        if r-tmp-equipe-ptu-aux = 0
        then do:
            run cria-erro-ptu( 
                input 0, 
                input 0, 
                input ERROR_SUBTYPE[ERROR], 
                "Guia de honorario deve possuir equipe profissional",
                input-output table rowErrors).
        end.
    end.

end procedure.

procedure ptu-dataFaturamento:
    define input parameter r-guia-par as recid no-undo.        
    define input        parameter table for dataFaturamento. 
    define input-output param table for tmp-docto-ptu.
    define input-output param table for rowErrors.

    define buffer b-tmp-docto-ptu for tmp-docto-ptu.

    find dataFaturamento where dataFaturamento.guiaHonorarios_id = r-guia-par no-error.
    if not avail dataFaturamento
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dataFaturamento' em uma guia de honorarios do arquivo PTU.",
	        input-output table rowErrors).
    end.
    
    find b-tmp-docto-ptu where b-tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail b-tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.
        
    if containsAnyError(input table RowErrors)
    then return.
        
    assign tmp-docto-ptu.ds-data-ini-fatur-completa = dataFaturamento.dt_IniFaturamento
           tmp-docto-ptu.ds-data-fim-fatur-completa = dataFaturamento.dt_FimFaturamento
           tmp-docto-ptu.dat-inicio-faturamento     = oGpsPtuUtils:ptuCharToDate(substring(dataFaturamento.dt_IniFaturamento, 1, 10))
           tmp-docto-ptu.hra-inicio-faturamento     = substring(dataFaturamento.dt_IniFaturamento, 11, 8)
           tmp-docto-ptu.dat-fim-faturamento        = oGpsPtuUtils:ptuCharToDate(substring(dataFaturamento.dt_FimFaturamento, 1, 10))
           tmp-docto-ptu.hra-fim-faturamento        = substring(dataFaturamento.dt_FimFaturamento, 11, 8).

end procedure.

procedure tipo-guia-nota-fiscal-fornecedor:
    define input parameter dataset for ptuA500Dset.
    define input-output param table for tmp-cabecalho-ptu.
    define input-output param table for tmp-docto-ptu.
    define input-output param table for tmp-servico-ptu.
    define input-output param table for tmp-equipe-ptu.
    define input-output param table for rowErrors.

    def var r-tmp-servico-corrente-ptu-aux as recid init 0 no-undo.

    for each notaFiscal_Fornecedor:

        run create-tmp-docto-ptu(
            input recid(notaFiscal_Fornecedor),
            input NOTA_FISCAL_FORNECEDOR,
            input table tmp-cabecalho-ptu,
            input-output table tmp-docto-ptu).

        run ptu-dadosbeneficiario1_notaFis(
            input recid(notaFiscal_Fornecedor),
            input table dadosBeneficiario1,  
            input-output table tmp-docto-ptu, 
            input-output table rowErrors).

        run ptu-notaFiscal_Fornecedor(
            input recid(notaFiscal_Fornecedor),
            input table notaFiscal_Fornecedor,  
            input-output table tmp-docto-ptu, 
            input-output table rowErrors).            
        
        for each Infor_OPME_Med where Infor_OPME_Med.notaFiscal_Fornecedor_id = recid(notaFiscal_Fornecedor):
            run create-tmp-servico-ptu(
                input recid(notaFiscal_Fornecedor),
                input table tmp-docto-ptu,
                output r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu).

            /* CAMPOS ESTAO GRAVADOS NA TABELA DE SERVICOS */
            run ptu-Pago_Fornecedor-notaFiscal(
                buffer notaFiscal_Fornecedor,
                input r-tmp-servico-corrente-ptu-aux,
                input        table  Pago_Fornecedor,
                input-output table  tmp-servico-ptu,
                input-output table  rowErrors).

            run ptu-Infor_OPME( 
                buffer notaFiscal_Fornecedor,
                buffer Infor_OPME_Med,
                input r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).

            run ptu-Procedimentos2(
                buffer Infor_OPME_Med,
                input r-tmp-servico-corrente-ptu-aux,
                input        table Procedimentos2,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).
            
            run ptu-valores_fornecedor(
                buffer Infor_OPME_Med,
                input r-tmp-servico-corrente-ptu-aux,
                input        table valores_fornecedor,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).

        end. /* each Infor_OPME_Med */

        run ptu-reapresentacaoGlosado-nota(
            input recid(notaFiscal_Fornecedor),
            input table reapresentacaoGlosado1,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

    end. /* each notaFiscal_Fornecedor */
end procedure.

procedure tipo-reembolso:

    define input parameter dataset for ptuA500Dset.
    define input-output param table for tmp-cabecalho-ptu.
    define input-output param table for tmp-docto-ptu.
    define input-output param table for tmp-servico-ptu.
    define input-output param table for tmp-equipe-ptu.
    define input-output param table for rowErrors.

    def var r-tmp-servico-corrente-ptu-aux as recid init 0 no-undo.
    def var r-procedimentos-corrente-aux   as recid init 0 no-undo.
    def var r-tmp-equipe-ptu-aux           as recid init 0 no-undo.

    for each reembolso no-lock:

        run create-tmp-docto-ptu(
            input recid(reembolso),
            input REEMBOLSO,
            input table tmp-cabecalho-ptu,
            input-output table tmp-docto-ptu).            

        run ptu-dadosBeneficiario1-reembolso(
            input recid(reembolso),
            input table dadosBeneficiario1,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-dadosReembolso( 
            input recid(reembolso),
            input table dadosReembolso,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-Prestador1(
            input recid(reembolso),
            input        table Prestador1,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).

        run ptu-nr_CNPJouCPF-reembolso(
            input recid(reembolso),
            input        table Prestador1,
            input        table nr_CNPJouCPF,
            input-output table tmp-docto-ptu,
            input-output table rowErrors).           

        for each dadosProcedimentos no-lock
            where dadosProcedimentos.reembolso_id = recid(reembolso):    

            run create-tmp-servico-ptu(
                input recid(reembolso),
                input table tmp-docto-ptu,
                output r-tmp-servico-corrente-ptu-aux,
                input-output table tmp-servico-ptu).

            run ptu-dadosProcedimentos(
                buffer dadosProcedimentos,                
                input r-tmp-servico-corrente-ptu-aux,
                input table procedimentos22,
                output r-procedimentos-corrente-aux,
                input-output table tmp-servico-ptu,
                input-output table rowErrors).

            for each equipe_reembolso where equipe_reembolso.procedimentos22_id = r-procedimentos-corrente-aux
                no-lock:

                run create-tmp-equipe-ptu(
                    input r-tmp-servico-corrente-ptu-aux,
                    output r-tmp-equipe-ptu-aux,
                    input-output table tmp-equipe-ptu).

                run ptu-equipe-reembolso(
                    buffer equipe_reembolso,
                    input r-tmp-equipe-ptu-aux,
                    input-output table tmp-equipe-ptu,
                    input-output table rowErrors).

                run ptu-dados-conselho(
                    buffer equipe_reembolso,
                    input r-tmp-equipe-ptu-aux,
                    input-output table tmp-equipe-ptu,
                    input-output table rowErrors).
            end.
        end.
    end.

end procedure.

procedure ptu-dados-conselho:
    define              parameter buffer b-equipe_reembolso for equipe_reembolso.
    define input        parameter r-tmp-equipe-ptu-par       as recid no-undo.
    define input-output parameter table for tmp-equipe-ptu.    
    define input-output parameter table for rowErrors.

    define buffer b-tmp-equipe-ptu for tmp-equipe-ptu.
    define buffer b-dadosConselho for dadosConselho.

    find first b-tmp-equipe-ptu where recid(b-tmp-equipe-ptu) = r-tmp-equipe-ptu-par no-error.
    if not avail b-tmp-equipe-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-equipe-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.    

    if b-equipe_reembolso.tp_Particip_Reem = "05"
    then return.

    find b-dadosConselho where b-dadosConselho.equipe_reembolso_id = recid(b-equipe_reembolso)
        no-lock no-error.
    if not avail b-dadosConselho
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosConselho' em 'equipe_reembolso' em uma guia de reembolso do arquivo PTU.",
	        input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-equipe-ptu.cod-sigla-cons-prof-exec   = b-dadosConselho.sg_Conselho
        b-tmp-equipe-ptu.cod-registro-prof-exec        = b-dadosConselho.nr_Conselho
        b-tmp-equipe-ptu.cdn-uf-cons-prof-exec         = b-dadosConselho.UF.

end procedure.

procedure ptu-equipe-reembolso:
    define              parameter buffer b-equipe_reembolso for equipe_reembolso.
    define input        parameter r-tmp-equipe-ptu-par       as recid no-undo.
    define input-output parameter table for tmp-equipe-ptu.    
    define input-output parameter table for rowErrors.

    define buffer b-tmp-equipe-ptu for tmp-equipe-ptu.

    find first b-tmp-equipe-ptu where recid(b-tmp-equipe-ptu) = r-tmp-equipe-ptu-par 
               exclusive-lock no-error.
    if not avail b-tmp-equipe-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-equipe-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
        return.
    end.    

    assign b-tmp-equipe-ptu.nom-prof-exec    = b-equipe_reembolso.nm_Profissional
           b-tmp-equipe-ptu.cod-tip-particip = b-equipe_reembolso.tp_Particip_Reem.

end procedure.

procedure create-tmp-docto-ptu:
    def input parameter r-guia-par as recid no-undo.
    def input parameter in-tipo-guia-ptu-par as int   no-undo.
    def input parameter table for tmp-cabecalho-ptu.
    define input-output param table for tmp-docto-ptu.

    find first tmp-cabecalho-ptu no-lock no-error.
    if not avail tmp-cabecalho-ptu
    then do:
        run insertOtherError(
            input 240, //Tabela temporario nao contem nenhum registro
            input "Nao foi encontrado registro na tabela tmp-cabecalho-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
            return.
    end.

    create tmp-docto-ptu.
    assign tmp-docto-ptu.recidGuia   = r-guia-par
           tmp-docto-ptu.num-livre-1 = setaPrioridade(
                                          input in-tipo-guia-ptu-par,
                                          input yes).

end procedure.

procedure create-tmp-servico-ptu private:

    define input        parameter r-guia-par   as recid        no-undo.
    define input        parameter table for tmp-docto-ptu.
    define output       parameter r-tmp-servico-corrente-ptu-par as recid no-undo.
    define input-output parameter table for tmp-servico-ptu. 

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
        return.
    end.

    create tmp-servico-ptu.
    assign tmp-servico-ptu.recidGuia        = tmp-docto-ptu.recidGuia
           tmp-servico-ptu.recidServicoPtu  = recid(tmp-servico-ptu).

    assign r-tmp-servico-corrente-ptu-par = tmp-servico-ptu.recidServicoPtu.

end procedure.

procedure create-tmp-equipe-ptu private:

    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define output       parameter r-tmp-equipe-ptu-par  as recid init 0 no-undo.
    define input-output parameter table for tmp-equipe-ptu. 

    create tmp-equipe-ptu.
    assign tmp-equipe-ptu.recidServicoPtu = r-tmp-servico-corrente-ptu-par
        tmp-equipe-ptu.recidEquipePtu     = recid(tmp-equipe-ptu).

    assign r-tmp-equipe-ptu-par = tmp-equipe-ptu.recidEquipePtu.

end procedure.

procedure ptu-dadosBeneficiario-consulta:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for dadosBeneficiario.   
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    find first dadosBeneficiario where dadosBeneficiario.guiaConsulta_id = r-guia-par no-lock no-error.
    if not avail dadosBeneficiario
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosBeneficiario' em 'guiaConsulta' do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    run atribui-dados-beneficiario(
        buffer dadosBeneficiario,
        buffer tmp-docto-ptu).

end procedure.

procedure ptu-dadosBeneficiario-SADT:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for dadosBeneficiario.   
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    find first dadosBeneficiario where dadosBeneficiario.guiaSADT_id = r-guia-par no-lock no-error.
    if not avail dadosBeneficiario
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosBeneficiario' em 'guiaConsulta' do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    run atribui-dados-beneficiario(
        buffer dadosBeneficiario,
        buffer tmp-docto-ptu).

end procedure.

procedure ptu-dadosBeneficiario-internacao:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for dadosBeneficiario.   
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    find first dadosBeneficiario where dadosBeneficiario.guiaInternacao_id = r-guia-par no-lock no-error.
    if not avail dadosBeneficiario
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosBeneficiario' em uma guia do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    run atribui-dados-beneficiario(
        buffer dadosBeneficiario,
        buffer tmp-docto-ptu).

end procedure.

procedure ptu-dadosBeneficiario-honorarios:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for dadosBeneficiario.   
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    find first dadosBeneficiario where dadosBeneficiario.guiaHonorarios_id = r-guia-par no-lock no-error.
    if not avail dadosBeneficiario
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosBeneficiario' em uma guia do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
        return.
    end.

    run atribui-dados-beneficiario(
        buffer dadosBeneficiario,
        buffer tmp-docto-ptu).

end procedure.

/*Private pois altera o estado da aplica�?o atrav�s do buffer. Nao faz sentido chamar ela sozinha. */
procedure atribui-dados-beneficiario private:
    define parameter buffer b-dadosBeneficiario for dadosBeneficiario. 
    define parameter buffer b-tmp-docto-ptu for tmp-docto-ptu.    
    
    assign b-tmp-docto-ptu.cdn-unidade-benef = b-dadosBeneficiario.cd_Unimed          
        b-tmp-docto-ptu.cod-benef            = b-dadosBeneficiario.id_Benef           
        b-tmp-docto-ptu.nom-benef            = b-dadosBeneficiario.nm_Benef           
        b-tmp-docto-ptu.ind-rn               = b-dadosBeneficiario.id_RN              
        b-tmp-docto-ptu.idi-tipo-paciente    = b-dadosBeneficiario.tp_Paciente.  

end procedure.

procedure ptu-dadosbeneficiario1_notaFis:
    define input        parameter r-guia-par as recid no-undo.
    define input        parameter table for dadosBeneficiario1.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find dadosBeneficiario1 where dadosBeneficiario1.notaFiscal_Fornecedor_id = r-guia-par no-error.

    if not avail dadosBeneficiario1
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosBeneficiario1' na 'nota fiscal fornecedor' do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    run atribui-dadosBeneficiario1(
        buffer dadosBeneficiario1,
        buffer tmp-docto-ptu).    

end procedure.

procedure ptu-dadosBeneficiario1-reembolso:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for dadosBeneficiario1.   
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    find first dadosBeneficiario1 where dadosBeneficiario1.reembolso_id = r-guia-par no-lock no-error.
    if not avail dadosBeneficiario1
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosBeneficiario1' em uma guia de reembolso do arquivo PTU.",
            input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    run atribui-dadosBeneficiario1(
        buffer dadosBeneficiario1,
        buffer tmp-docto-ptu).

end procedure.

procedure ptu-dadosBeneficiario1-ressarc:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for dadosBeneficiario1.   
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    find first dadosBeneficiario1 where dadosBeneficiario1.RessarcimentoSus_id = r-guia-par no-lock no-error.
    if not avail dadosBeneficiario1
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosBeneficiario1' em uma guia de ressarcimento do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    run atribui-dadosBeneficiario1(
        buffer dadosBeneficiario1,
        buffer tmp-docto-ptu).

end procedure.

/*Private pois altera o estado da aplica�?o atrav�s do buffer. Nao faz sentido chamar ela sozinha. */
procedure atribui-dadosBeneficiario1 private:
    define parameter buffer b-dadosBeneficiario1 for dadosBeneficiario1. 
    define parameter buffer b-tmp-docto-ptu for tmp-docto-ptu.    
    
    assign b-tmp-docto-ptu.cdn-unidade-benef = b-dadosBeneficiario1.cd_Unimed          
        b-tmp-docto-ptu.cod-benef            = b-dadosBeneficiario1.id_Benef           
        b-tmp-docto-ptu.nom-benef            = b-dadosBeneficiario1.nm_Benef           
        b-tmp-docto-ptu.dat-nasc-benef       = oGpsPtuUtils:ptuCharToDate(b-dadosBeneficiario1.dt_Nasc)
        b-tmp-docto-ptu.ind-sexo-benef       = b-dadosBeneficiario1.tp_Sexo
        b-tmp-docto-ptu.ind-rn               = b-dadosBeneficiario1.id_RN.  

end procedure.

procedure ptu-notaFiscal_Fornecedor:

    define input        parameter r-guia-par as recid no-undo.
    define input        parameter table for notaFiscal_Fornecedor.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find notaFiscal_Fornecedor where recid(notaFiscal_Fornecedor) = r-guia-par no-error.

    if not avail notaFiscal_Fornecedor
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'notaFiscal_Fornecedor' em uma guia de 'nota fiscal fornecedor' do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign tmp-docto-ptu.cod-guia-tiss-principal = notaFiscal_Fornecedor.nr_GuiaTissPrincipal    
        tmp-docto-ptu.ind-liminar                = notaFiscal_Fornecedor.id_Liminar
        tmp-docto-ptu.idi-tipo-guia-ptu          = NOTA_FISCAL_FORNECEDOR.

end procedure.

procedure ptu-carater-atendimento-ressarc:
    define parameter buffer b-RessarcimentoSus for RessarcimentoSus.    
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = recid(b-RessarcimentoSus) exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign tmp-docto-ptu.idi-carater-atend = b-RessarcimentoSus.caraterAtendimento.

end procedure.

procedure ptu-dadosReembolso:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for dadosReembolso.   
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    define buffer b-tmp-docto-ptu for tmp-docto-ptu.

    find first dadosReembolso where dadosReembolso.reembolso_id = r-guia-par no-lock no-error.
    if not avail dadosReembolso
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosReembolso' em uma guia de reembolso do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find b-tmp-docto-ptu where b-tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail b-tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return. 

    assign b-tmp-docto-ptu.cod-reembolso-benef    = dadosReembolso.idReembolso
        b-tmp-docto-ptu.idi-carater-atend         = dadosReembolso.caraterAtendimento 
        b-tmp-docto-ptu.dat-reembolso-benef       = oGpsPtuUtils:ptuCharToDate(dadosReembolso.dt_Reembolso)
        b-tmp-docto-ptu.idi-tip-cob-reembolso-pag = dadosReembolso.id_ReemParInt
        b-tmp-docto-ptu.cod-cnes-contrat-exec     = dadosReembolso.cd_cnes
        b-tmp-docto-ptu.idi-tipo-guia-ptu         = REEMBOLSO.       
        
end procedure.

procedure ptu-Prestador1:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for Prestador1.   
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    define buffer b-tmp-docto-ptu for tmp-docto-ptu.

    find first Prestador1 where Prestador1.reembolso_id = r-guia-par no-lock no-error.
    if not avail Prestador1
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'Prestador1' em uma guia do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find b-tmp-docto-ptu where b-tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail b-tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-docto-ptu.nom-contrat-exec = Prestador1.nomePrestador.

end procedure.

procedure ptu-Prestador3-ressarc:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for Prestador3.   
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    define buffer b-tmp-docto-ptu for tmp-docto-ptu.

    find first Prestador3 where Prestador3.RessarcimentoSus_id = r-guia-par no-lock no-error.
    if not avail Prestador3
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'Prestador3' em uma guia de ressarcimento do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find b-tmp-docto-ptu where b-tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail b-tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-docto-ptu.nom-contrat-exec = Prestador3.nomePrestador.

end procedure.

procedure ptu-nr_CNPJouCPF-reembolso:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for Prestador1.
    define input parameter table for nr_CNPJouCPF.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    define buffer b-tmp-docto-ptu for tmp-docto-ptu.

    find first Prestador1 where Prestador1.reembolso_id = r-guia-par no-lock no-error.
    if not avail Prestador1
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'Prestador1' em uma guia de reembolso do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find first nr_CNPJouCPF where nr_CNPJouCPF.Prestador1_id = recid(Prestador1) no-lock no-error.
    if not avail nr_CNPJouCPF
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'nr_CNPJouCPF' em uma guia de reembolso do arquivo PTU.",
	        input-output table rowErrors).
    end.

    run atribui-cpf-cnpj-contrat-exec(
        input r-guia-par,
        buffer nr_CNPJouCPF,
        input-output table rowErrors).

end procedure.

procedure ptu-nr_CNPJouCPF-ressarc:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for Prestador3.
    define input parameter table for nr_CNPJouCPF.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors. 

    define buffer b-tmp-docto-ptu for tmp-docto-ptu.

    find first Prestador3 where Prestador3.RessarcimentoSus_id = r-guia-par no-lock no-error.
    if not avail Prestador3
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'Prestador3' em uma guia de ressarcimento do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find first nr_CNPJouCPF where nr_CNPJouCPF.Prestador3_id = recid(Prestador3) no-lock no-error.
    if not avail nr_CNPJouCPF
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'nr_CNPJouCPF' em uma guia de ressarcimento do arquivo PTU.",
	        input-output table rowErrors).
    end.

    run atribui-cpf-cnpj-contrat-exec(
        input r-guia-par,
        buffer nr_CNPJouCPF,
        input-output table rowErrors).

end procedure.

procedure atribui-cpf-cnpj-contrat-exec:
    define input parameter r-guia-par as recid no-undo.
    define parameter buffer b-nr_CNPJouCPF for nr_CNPJouCPF.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-docto-ptu for tmp-docto-ptu.

    find b-tmp-docto-ptu where b-tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail b-tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-docto-ptu.cdd-cpf-contrat-exec = (if dec(b-nr_CNPJouCPF.cd_cpf) <> 0
                                                   then dec(b-nr_CNPJouCPF.cd_cpf)
                                                   else 0)
        b-tmp-docto-ptu.cdd-cnpj-contrat-exec   = (if dec(b-nr_CNPJouCPF.cd_cnpj) <> 0
                                                   then dec(b-nr_CNPJouCPF.cd_cnpj)
                                                   else 0).

end procedure.
procedure ptu-dadosSolicitante-sadt:
    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for dadosSolicitante. 
    define input        parameter table for profissional.
    define input        parameter table for cpf_cnpj2.
    define input        parameter table for UnimedPrestador.    
    define input        parameter table for dadosConselho.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.
    
    find first dadosSolicitante where dadosSolicitante.guiaSADT_id = r-guia-par no-error.

    if not avail dadosSolicitante
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosSolicitante' em uma guia de SADT do arquivo PTU.",
	        input-output table rowErrors).
    end. 

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    run atribui-dados-solicitante(
        buffer tmp-docto-ptu,
        input recid(dadosSolicitante),
        input        table dadosSolicitante, 
        input        table profissional,
        input        table cpf_cnpj2,
        input        table UnimedPrestador,    
        input        table dadosConselho,    
        input-output table rowErrors).

end procedure.

procedure ptu-dadosSolicitante-internacao:
    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for dadosSolicitante. 
    define input        parameter table for profissional.
    define input        parameter table for cpf_cnpj2.
    define input        parameter table for UnimedPrestador.    
    define input        parameter table for dadosConselho.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.
    
    find first dadosSolicitante where dadosSolicitante.guiaInternacao_id = r-guia-par no-error.

    if not avail dadosSolicitante
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'Prestador1' em uma guia de internacao do arquivo PTU.",
	        input-output table rowErrors).
    end. 

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    run atribui-dados-solicitante(
        buffer tmp-docto-ptu,
        input recid(dadosSolicitante),
        input        table dadosSolicitante, 
        input        table profissional,
        input        table cpf_cnpj2,
        input        table UnimedPrestador,    
        input        table dadosConselho,    
        input-output table rowErrors).

end procedure.

procedure atribui-dados-solicitante:
    define              parameter buffer b-tmp-docto-ptu for tmp-docto-ptu.    
    define input        parameter r-dadosSolicitante as recid no-undo.
    define input        parameter table for dadosSolicitante. 
    define input        parameter table for profissional.
    define input        parameter table for cpf_cnpj2.
    define input        parameter table for UnimedPrestador.    
    define input        parameter table for dadosConselho.    
    define input-output parameter table for rowErrors.

    find first contratadoSolicitante where contratadoSolicitante.dadosSolicitante_id = r-dadosSolicitante no-error.
    if not avail contratadoSolicitante
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'contratadoSolicitante' em 'dadosSolicitante' do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find first profissional where profissional.dadosSolicitante_id = r-dadosSolicitante no-error.
    if not avail profissional
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'profissional' em 'dadosSolicitante' do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find first cpf_cnpj2 where cpf_cnpj2.contratadoSolicitante_id = recid(contratadoSolicitante) no-error.

    find first UnimedPrestador where UnimedPrestador.contratadoSolicitante_id = recid(contratadoSolicitante) no-error.    

    find first dadosConselho where dadosConselho.profissional_id = recid(profissional) no-error.
    if not avail dadosConselho
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosConselho' em 'profissional' do arquivo PTU.",
	        input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-docto-ptu.nom-contrat-solic      = contratadoSolicitante.nome
        b-tmp-docto-ptu.nom-prof-solic            = profissional.nm_Profissional     
        b-tmp-docto-ptu.cod-cbo-prof-solic        = profissional.CBO 
        b-tmp-docto-ptu.cod-sigla-cons-prof-solic = dadosConselho.sg_Conselho
        b-tmp-docto-ptu.cod-registro-prof-solic   = dadosConselho.nr_Conselho
        b-tmp-docto-ptu.cdn-uf-cons-prof-solic    = dadosConselho.UF.

    if avail UnimedPrestador
    then assign b-tmp-docto-ptu.cdn-unid-contrat-solic = UnimedPrestador.cd_Uni_Prest
             b-tmp-docto-ptu.cdn-prest-contrat-solic   = UnimedPrestador.cd_Prest.
	
    if avail cpf_cnpj2
    then assign b-tmp-docto-ptu.cdd-cpf-contrat-solic = dec(cpf_cnpj2.cd_cpf)
			 b-tmp-docto-ptu.cdd-cnpj-contrat-solic   = dec(cpf_cnpj2.cd_cnpj).
				

end procedure.

procedure ptu-contratadoExecutante-consulta:
    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for contratadoExecutante. 
    define input        parameter table for UnimedPrestador.
    define input        parameter table for CPF_CNPJ.
    define input        parameter table for prestador.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find first contratadoExecutante where contratadoExecutante.guiaConsulta_id = r-guia-par no-error.

    if not avail contratadoExecutante
    then do:

    run cria-erro-ptu(
            input 1015,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'contratadoExecutante' em uma guia de consulta do arquivo PTU.",
	        input-output table rowErrors).
    end.    

    find first CPF_CNPJ where CPF_CNPJ.contratadoExecutante_id = recid(contratadoExecutante) no-error.

    if not avail CPF_CNPJ
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'CPF_CNPJ' em 'contratadoExecutante' em uma guia de conslta do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find first prestador where prestador.contratadoExecutante_id = recid(contratadoExecutante) no-error.

    if not avail prestador
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'prestador' em 'contratadoExecutante' em uma guia de conslta do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find first UnimedPrestador where UnimedPrestador.contratadoExecutante_id = recid(contratadoExecutante) no-error.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign tmp-docto-ptu.cod-cnes-contrat-exec = contratadoExecutante.CNES.

    run atribui-tmp-docto-dados-contrat-exec(
        buffer tmp-docto-ptu,
        buffer UnimedPrestador,
        buffer CPF_CNPJ,
        buffer prestador,
        input-output table rowErrors).    

end procedure.

procedure ptu-contratadoExecutante-sadt:
    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for dadosExecutante. 
    define input        parameter table for UnimedPrestador.
    define input        parameter table for CPF_CNPJ.
    define input        parameter table for prestador.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find first dadosExecutante where dadosExecutante.guiaSADT_id = r-guia-par no-error.
    if not avail dadosExecutante
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosExecutante' em uma guia de SADT do arquivo PTU.",
	    input-output table rowErrors).
    end. 

    find first CPF_CNPJ where CPF_CNPJ.dadosExecutante_id = recid(dadosExecutante) no-error.
    if not avail CPF_CNPJ
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'CPF_CNPJ' em dadosExecutante em uma guia de SADT do arquivo PTU.",
	    input-output table rowErrors).
    end.

    find first prestador where prestador.dadosExecutante_id = recid(dadosExecutante) no-error.
    if not avail prestador
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'prestador' em dadosExecutante em uma guia de SADT do arquivo PTU.",
	    input-output table rowErrors).
    end.

    find first UnimedPrestador where UnimedPrestador.dadosExecutante_id = recid(dadosExecutante) no-error.    
    
    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign tmp-docto-ptu.cod-cnes-contrat-exec = dadosExecutante.CNES.

    run atribui-tmp-docto-dados-contrat-exec(
        buffer tmp-docto-ptu,
        buffer UnimedPrestador,
        buffer CPF_CNPJ,
        buffer prestador,
        input-output table rowErrors).

end procedure.

procedure ptu-contratadoExecutante-honorarios:
    define input parameter r-guia-par as recid no-undo.        
    define input        parameter table for dadosExecutante. 
    define input        parameter table for UnimedPrestador.
    define input        parameter table for CPF_CNPJ.
    define input        parameter table for prestador.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find first dadosExecutante where dadosExecutante.guiaHonorarios_id = r-guia-par no-error.

    if not avail dadosExecutante
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosExecutante' em uma guia de honor�rios do arquivo PTU.",
	    input-output table rowErrors).
    end. 

    find first CPF_CNPJ where CPF_CNPJ.dadosExecutante_id = recid(dadosExecutante) no-error.
    if not avail CPF_CNPJ
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'CPF_CNPJ' em dadosExecutante em uma guia de honor�rios do arquivo PTU.",
	    input-output table rowErrors).
    end.

    find first prestador where prestador.dadosExecutante_id = recid(dadosExecutante) no-error.
    if not avail prestador
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'prestador' em dadosExecutante em uma guia de honor�rios do arquivo PTU.",
	    input-output table rowErrors).
    end.

    find first UnimedPrestador where UnimedPrestador.dadosExecutante_id = recid(dadosExecutante) no-error.     

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign tmp-docto-ptu.cod-cnes-contrat-exec = dadosExecutante.CNES.

    run atribui-tmp-docto-dados-contrat-exec(
        buffer tmp-docto-ptu,
        buffer UnimedPrestador,
        buffer CPF_CNPJ,
        buffer prestador,
        input-output table rowErrors).   

end procedure.

procedure ptu-dadosExecutante1-internacao:
    define input parameter r-guia-par as recid no-undo.     
    define input parameter table for dadosExecutante1.  
    define input parameter table for UnimedPrestador.  
    define input parameter table for prestador.  
    define input-output parameter table for tmp-docto-ptu.  
    define input-output parameter table for rowErrors.

    find dadosExecutante1 where dadosExecutante1.guiaInternacao_id = r-guia-par no-error.
    if not avail dadosExecutante1
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosExecutante1' em uma guia de internacao do arquivo PTU.",
	    input-output table rowErrors).
    end.

    find first UnimedPrestador where UnimedPrestador.dadosExecutante1_id = recid(dadosExecutante1) no-error.

    find prestador where prestador.dadosExecutante1_id = recid(dadosExecutante1) no-error.
    if not avail prestador
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'prestador' em dadosExecutante1 em uma guia de internacao do arquivo PTU.",
	    input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    if avail UnimedPrestador
    then assign tmp-docto-ptu.cdn-unid-contrat-exec = UnimedPrestador.cd_Uni_Prest
        tmp-docto-ptu.cdn-prest-contrat-exec        = UnimedPrestador.cd_Prest.

    assign 
        tmp-docto-ptu.cdd-cnpj-contrat-exec      = dec(dadosExecutante1.CNPJ)
        tmp-docto-ptu.cod-cnes-contrat-exec      = dadosExecutante1.CNES
        tmp-docto-ptu.cdn-municip-contrat-exec   = prestador.cd_MunicipioCont
        tmp-docto-ptu.idi-tipo-rede-contrat-exec = prestador.tp_RedeMin 
        tmp-docto-ptu.tip-prest-contrat-exec     = prestador.tp_Prestador
        tmp-docto-ptu.ind-rec-prop-contrat-exec  = prestador.id_RecProprio.

end procedure.

procedure atribui-tmp-docto-dados-contrat-exec:
    
    define              parameter buffer b-tmp-docto-ptu   for tmp-docto-ptu.
    define              parameter buffer b-UnimedPrestador for UnimedPrestador.
    define              parameter buffer b-CPF_CNPJ        for CPF_CNPJ.
    define              parameter buffer b-prestador       for prestador.
    define input-output parameter table for rowErrors.
    
    if avail b-UnimedPrestador
    then assign b-tmp-docto-ptu.cdn-unid-contrat-exec = b-UnimedPrestador.cd_Uni_Prest
            b-tmp-docto-ptu.cdn-prest-contrat-exec    = b-UnimedPrestador.cd_Prest.

    
    assign b-tmp-docto-ptu.cdd-cpf-contrat-exec   = (if dec(b-CPF_CNPJ.cd_cpf) <> 0
                                                     then dec(b-CPF_CNPJ.cd_cpf)
                                                     else 0)
        b-tmp-docto-ptu.cdd-cnpj-contrat-exec     = (if dec(b-CPF_CNPJ.cd_cnpj) <> 0
                                                     then dec(b-CPF_CNPJ.cd_cnpj)
                                                     else 0).

    assign b-tmp-docto-ptu.cdn-municip-contrat-exec = b-prestador.cd_MunicipioCont
        b-tmp-docto-ptu.idi-tipo-rede-contrat-exec  = b-prestador.tp_RedeMin 
        b-tmp-docto-ptu.tip-prest-contrat-exec      = b-prestador.tp_Prestador
        b-tmp-docto-ptu.ind-rec-prop-contrat-exec   = b-prestador.id_RecProprio.

end.

procedure ptu-dadosInternacao:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for dadosInternacao. 
    define input-output parameter table for tmp-docto-ptu.    
    define input-output parameter table for rowErrors.
    
    def var idx as int init 1 no-undo.

    find dadosInternacao where dadosInternacao.guiaInternacao_id = r-guia-par no-lock no-error.
    if not avail dadosInternacao
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosInternacao' em uma guia de internacao do arquivo PTU.",
	    input-output table rowErrors).
    end.

    find dadosFaturamento where dadosFaturamento.dadosInternacao_id = recid(dadosInternacao) no-lock no-error.
    if not avail dadosFaturamento
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosFaturamento' em 'dadosInternacao' em uma guia de internacao do arquivo PTU.",
	    input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.    
    
    assign tmp-docto-ptu.cod-tipo-acomodacao     = dadosInternacao.tp_Acomodacao
        tmp-docto-ptu.val-fator-multiplic-amb    = dadosInternacao.ft_Multiplicador_AMB
        tmp-docto-ptu.cdn-tipo-internacao        = dadosInternacao.tp_Internacao
        tmp-docto-ptu.cod-reg-internacao         = dadosInternacao.rg_Internacao
        tmp-docto-ptu.idi-carater-atend          = dadosInternacao.caraterAtendimento
        tmp-docto-ptu.cdn-tipo-faturamento       = dadosFaturamento.tp_Faturamento
        tmp-docto-ptu.ds-data-ini-fatur-completa = dadosFaturamento.dt_IniFaturamento
        tmp-docto-ptu.dat-inicio-faturamento     = oGpsPtuUtils:ptuCharToDate(substring(dadosFaturamento.dt_IniFaturamento, 1, 10))
        tmp-docto-ptu.hra-inicio-faturamento     = substring(dadosFaturamento.dt_IniFaturamento, 11, 8)
        tmp-docto-ptu.ds-data-fim-fatur-completa = dadosFaturamento.dt_FimFaturamento
        tmp-docto-ptu.dat-fim-faturamento        = oGpsPtuUtils:ptuCharToDate(substring(dadosFaturamento.dt_FimFaturamento, 1, 10))
        tmp-docto-ptu.hra-fim-faturamento        = substring(dadosFaturamento.dt_FimFaturamento, 11, 8).
    
    for each dadosDeclaracoes 
       where dadosDeclaracoes.dadosInternacao_id = recid(dadosInternacao)
         and dadosDeclaracoes.declaracao_Nascido <> "":                  
    
        assign tmp-docto-ptu.cod-decla-nasc[idx] = dadosDeclaracoes.declaracao_Nascido
               idx = idx + 1.    
    end.

    assign idx = 1.
    for each dadosDeclaracoes 
       where dadosDeclaracoes.dadosInternacao_id = recid(dadosInternacao)
         and dadosDeclaracoes.declaracao_Obito  <> "":                  
    
        assign tmp-docto-ptu.cod-cid-obit[idx]      = dadosDeclaracoes.CID_Obito
               tmp-docto-ptu.cod-decla-obit[idx]    = dadosDeclaracoes.declaracao_Obito
               tmp-docto-ptu.ind-obit-rn[idx]       = dadosDeclaracoes.indicadorDO_RN
               idx = idx + 1.           
    end.

end procedure.

procedure ptu-dadosSaidaInternacao:

    define input parameter r-guia-par as recid no-undo.
    define input parameter table for dadosSaidaInternacaoImportacao. 
    define input-output parameter table for tmp-docto-ptu.    
    define input-output parameter table for rowErrors.

    find dadosSaidaInternacaoImportacao where dadosSaidaInternacaoImportacao.guiaInternacao_id = r-guia-par no-lock no-error.
    if not avail dadosSaidaInternacaoImportacao
    then do:
        run cria-erro-ptu(
            input 1015,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosSaidaInternacao' em uma guia de internacao do arquivo PTU.",
	    input-output table rowErrors).
    end.    

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.
    
    assign tmp-docto-ptu.ind-tipo-acidente       = dadosSaidaInternacaoImportacao.tp_IndAcidente
        tmp-docto-ptu.cod-motivo-encerramento    = dadosSaidaInternacaoImportacao.mv_Encerramento
        tmp-docto-ptu.cod-cid[1]                 = dadosSaidaInternacaoImportacao.CID[1]
        tmp-docto-ptu.cod-cid[2]                 = dadosSaidaInternacaoImportacao.CID[2]
        tmp-docto-ptu.cod-cid[3]                 = dadosSaidaInternacaoImportacao.CID[3]
        tmp-docto-ptu.cod-cid[4]                 = dadosSaidaInternacaoImportacao.CID[4].

end procedure.

procedure ptu-dadosAuditoria:
    define input parameter r-guia-par as recid no-undo.
    define input parameter table for dadosAuditoria. 
    define input-output parameter table for tmp-docto-ptu.    
    define input-output parameter table for rowErrors.

    find dadosAuditoria where dadosAuditoria.guiaInternacao_id = r-guia-par no-lock no-error.
    if not avail dadosAuditoria
    then return.  

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.
    
    assign tmp-docto-ptu.nom-medico-auditor     = dadosAuditoria.nm_MedicoAuditor
        tmp-docto-ptu.cod-crm-medico-auditor    = dadosAuditoria.nr_CrmAuditor
        tmp-docto-ptu.cdn-uf-crm-medico-auditor = dadosAuditoria.cd_UFCRM
        tmp-docto-ptu.nom-enfermeiro-auditor    = dadosAuditoria.nm_EnfAuditor
        tmp-docto-ptu.cod-coren-enf-auditor     = dadosAuditoria.nr_CorenAuditor
        tmp-docto-ptu.cdn-uf-coren-enf-auditor  = dadosAuditoria.cd_UFCoren.

end procedure.

procedure ptu-profissionalExecutante:

    define input parameter r-guia-par as recid no-undo.
    define input parameter table for profissionalExecutante.    
    define input parameter table for UnimedPrestador.    
    define input parameter table for dadosConselho.    
    define input-output parameter table for tmp-docto-ptu. 
    define input-output parameter table for rowErrors.

    find profissionalExecutante where profissionalExecutante.guiaConsulta_id = r-guia-par no-lock no-error.
    if not avail profissionalExecutante
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'profissionalExecutante' da guia do arquivo PTU.",
	    input-output table rowErrors).
    end.
    
    find UnimedPrestador where UnimedPrestador.profissionalExecutante_id = recid(profissionalExecutante) no-lock no-error.
    
    find dadosConselho where dadosConselho.profissionalExecutante_id = recid(profissionalExecutante) no-lock no-error.
    if not avail dadosConselho
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosConselho' em 'profissionalExecutante' do arquivo PTU.",
	        input-output table rowErrors).
    end.
    
    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    if avail UnimedPrestador
    then assign tmp-docto-ptu.cdn-unid-prof-exec = UnimedPrestador.cd_Uni_Prest
        tmp-docto-ptu.cdn-prest-prof-exec        = UnimedPrestador.cd_Prest.

    assign tmp-docto-ptu.nom-prof-exec         = profissionalExecutante.nome
        tmp-docto-ptu.cod-sigla-cons-prof-exec = dadosConselho.sg_Conselho
        tmp-docto-ptu.cod-registro-prof-exec   = dadosConselho.nr_Conselho
        tmp-docto-ptu.cdn-uf-cons-prof-exec    = dadosConselho.UF
        tmp-docto-ptu.cod-cbo-prof-exec        = profissionalExecutante.CBO.

end procedure.

procedure ptu-dadosGuia-consulta:
    def input parameter r-guia-par as recid no-undo.
    define input        parameter table for dadosGuia.
    define input        parameter table for nr_Guias.
    define input-output parameter table for tmp-docto-ptu. 
    define input-output parameter table for rowErrors.

    find first dadosGuia where dadosGuia.guiaConsulta_id = r-guia-par no-lock no-error.
    if not avail dadosGuia
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosGuia' em uma guia de consulta do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find nr_Guias where nr_Guias.dadosGuia_id = recid(dadosGuia) no-error.
    if not avail nr_Guias
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'nr_Guias' em 'dadosGuia' em uma guia de consulta do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    run valida-dados-mandatorios(
        input nr_Guias.nr_GuiaTissOperadora). 

    assign 
        tmp-docto-ptu.cod-versao-tiss         = dadosGuia.nr_Ver_TISS
        tmp-docto-ptu.cdn-tipo-consulta       = dadosGuia.tp_Consulta
        tmp-docto-ptu.cod-lote-prestador      = dadosGuia.nr_LotePrestador
        tmp-docto-ptu.dat-protocolo-prestador = oGpsPtuUtils:ptuCharToDate(dadosGuia.dt_Protocolo)
        tmp-docto-ptu.dat-conhecim-aviso      = oGpsPtuUtils:ptuCharToDate(dadosGuia.dt_Conhecimento)
        tmp-docto-ptu.ind-tipo-acidente       = dadosGuia.tp_IndAcidente
        tmp-docto-ptu.ds-data-atend-completa  = dadosGuia.dt_Atendimento    
        tmp-docto-ptu.ind-liminar             = dadosGuia.id_Liminar        
        tmp-docto-ptu.ind-continuado          = dadosGuia.id_Continuado     
        tmp-docto-ptu.ind-aviso               = dadosGuia.id_Avisado        
        tmp-docto-ptu.cod-excecao             = dadosGuia.cd_Excecao        
        tmp-docto-ptu.ind-glosa-total         = dadosGuia.id_GlosaTotal
        tmp-docto-ptu.idi-tipo-guia-ptu       = NOTA_CONSULTA
        tmp-docto-ptu.coberturaEspecial       = int(dadosGuia.coberturaEspecial)
        tmp-docto-ptu.regimeAtendimento       = int(dadosGuia.regimeAtendimento)
        tmp-docto-ptu.saudeOcupacional        = int(dadosGuia.saudeOcupacional).

    assign 
        tmp-docto-ptu.cod-guia-tiss-prestador = nr_Guias.nr_GuiaTissPrestador
        tmp-docto-ptu.cod-guia-tiss-operadora = nr_Guias.nr_GuiaTissOperadora.

end procedure.

procedure ptu-dadosGuia1-sadt:
    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for dadosGuia1. 
    define input        parameter table for nr_Guias1.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find dadosGuia1 where dadosGuia1.guiaSADT_id = r-guia-par no-error.
    if not avail dadosGuia1
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosGuia1' em uma guia de SADT do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign tmp-docto-ptu.idi-tipo-guia-ptu = NOTA_SADT.

    run atribui-dados-guia(
        buffer dadosGuia1,
        buffer tmp-docto-ptu,
        input table nr_Guias1,
        input-output table rowErrors).

end procedure.

procedure ptu-dadosGuia1-internacao:   
    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for dadosGuia1. 
    define input        parameter table for nr_Guias1.
    define input-output parameter table for tmp-docto-ptu.    
    define input-output parameter table for rowErrors.

    find dadosGuia1 where dadosGuia1.guiaInternacao_id = r-guia-par no-error.
    if not avail dadosGuia1
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosGuia1' em uma guia de internacao do arquivo PTU.",
	        input-output table rowErrors).
    end. 

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign tmp-docto-ptu.idi-tipo-guia-ptu = NOTA_INTERNACAO.

    run atribui-dados-guia(
        buffer dadosGuia1,
        buffer tmp-docto-ptu,   
        input table nr_Guias1,
        input-output table rowErrors).
        
end procedure.

procedure ptu-dadosGuia-honorarios:
    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for dadosGuiaHonorario. 
    define input        parameter table for nr_Guias1.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find dadosGuiaHonorario where dadosGuiaHonorario.guiaHonorarios_id = r-guia-par no-error.
    if not avail dadosGuiaHonorario
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosGuiaHonorario' em uma guia de honorarios do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign tmp-docto-ptu.idi-tipo-guia-ptu = NOTA_HONORARIO.

    run atribui-dados-guia-honorario(
        buffer dadosGuiaHonorario,
        buffer tmp-docto-ptu,
        input table nr_Guias1,
        input-output table rowErrors).

end procedure.

procedure atribui-dados-guia-honorario: 
    define              parameter buffer b-dadosGuiaHonorario for dadosGuiaHonorario.    
    define              parameter buffer b-tmp-docto-ptu for tmp-docto-ptu.   
    define input        parameter table for nr_Guias1.
    define input-output parameter table for rowErrors.

    find first nr_Guias1 where nr_Guias1.dadosGuiaHonorario_id = recid(b-dadosGuiaHonorario) no-error.
    if not avail nr_Guias1
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'nr_Guias1' em 'dadosGuiaHonorario' em uma guia do arquivo PTU.",
	        input-output table rowErrors).
    end. 

    run valida-dados-mandatorios(
        input nr_Guias1.nr_GuiaTissOperadora). 

    assign 
        b-tmp-docto-ptu.cod-versao-tiss         = b-dadosGuiaHonorario.nr_Ver_TISS                                  
        b-tmp-docto-ptu.cod-lote-prestador      = b-dadosGuiaHonorario.nr_LotePrestador
        b-tmp-docto-ptu.dat-protocolo-prestador = oGpsPtuUtils:ptuCharToDate(b-dadosGuiaHonorario.dt_Protocolo)
        b-tmp-docto-ptu.dat-conhecim-aviso      = oGpsPtuUtils:ptuCharToDate(b-dadosGuiaHonorario.dt_Conhecimento)
        b-tmp-docto-ptu.cod-guia-tiss-prestador = nr_Guias1.nr_GuiaTissPrestador
        b-tmp-docto-ptu.cod-guia-tiss-operadora = nr_Guias1.nr_GuiaTissOperadora
        b-tmp-docto-ptu.ds-data-atend-completa  = b-dadosGuiaHonorario.dt_Atendimento
        b-tmp-docto-ptu.ind-liminar             = b-dadosGuiaHonorario.id_Liminar
        b-tmp-docto-ptu.ind-continuado          = b-dadosGuiaHonorario.id_Continuado
        b-tmp-docto-ptu.ind-aviso               = b-dadosGuiaHonorario.id_Avisado
        b-tmp-docto-ptu.cod-excecao             = b-dadosGuiaHonorario.cd_Excecao
        b-tmp-docto-ptu.ind-glosa-total         = b-dadosGuiaHonorario.id_GlosaTotal
        b-tmp-docto-ptu.dat-ultima-autoriz      = oGpsPtuUtils:ptuCharToDate(b-dadosGuiaHonorario.dt_UltimaAutorizacao)
        b-tmp-docto-ptu.cod-guia-tiss-principal = nr_Guias1.nr_GuiaTissPrincipal.
        
end procedure.

procedure atribui-dados-guia: 
    define              parameter buffer b-dadosGuia1 for dadosGuia1.    
    define              parameter buffer b-tmp-docto-ptu for tmp-docto-ptu.   
    define input        parameter table for nr_Guias1.
    define input-output parameter table for rowErrors.

    find first nr_Guias1 where nr_Guias1.dadosGuia1_id = recid(b-dadosGuia1) no-error.
    if not avail nr_Guias1
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'nr_Guias1' em 'dadosGuia1' em uma guia do arquivo PTU.",
	        input-output table rowErrors).
    end. 

    run valida-dados-mandatorios(
        input nr_Guias1.nr_GuiaTissOperadora). 

    assign 
        b-tmp-docto-ptu.cod-versao-tiss         = b-dadosGuia1.nr_Ver_TISS
        b-tmp-docto-ptu.cod-lote-prestador      = b-dadosGuia1.nr_LotePrestador
        b-tmp-docto-ptu.dat-protocolo-prestador = oGpsPtuUtils:ptuCharToDate(b-dadosGuia1.dt_Protocolo)
        b-tmp-docto-ptu.dat-conhecim-aviso      = oGpsPtuUtils:ptuCharToDate(b-dadosGuia1.dt_Conhecimento)
        b-tmp-docto-ptu.cod-guia-tiss-prestador = nr_Guias1.nr_GuiaTissPrestador
        b-tmp-docto-ptu.cod-guia-tiss-operadora = nr_Guias1.nr_GuiaTissOperadora
        b-tmp-docto-ptu.ds-data-atend-completa  = b-dadosGuia1.dt_Atendimento
        b-tmp-docto-ptu.ind-liminar             = b-dadosGuia1.id_Liminar
        b-tmp-docto-ptu.ind-continuado          = b-dadosGuia1.id_Continuado
        b-tmp-docto-ptu.ind-aviso               = b-dadosGuia1.id_Avisado
        b-tmp-docto-ptu.cod-excecao             = b-dadosGuia1.cd_Excecao
        b-tmp-docto-ptu.ind-glosa-total         = b-dadosGuia1.id_GlosaTotal
        b-tmp-docto-ptu.ind-guia-principal      = b-dadosGuia1.id_GuiaPrincipal
        b-tmp-docto-ptu.dat-ultima-autoriz      = oGpsPtuUtils:ptuCharToDate(b-dadosGuia1.dt_UltimaAutorizacao)
        b-tmp-docto-ptu.cod-guia-tiss-principal = nr_Guias1.nr_GuiaTissPrincipal.
        
    if  b-tmp-docto-ptu.idi-tipo-guia-ptu   = NOTA_SADT
    and b-tmp-docto-ptu.ind-guia-principal <> "S"
    then assign b-tmp-docto-ptu.num-livre-1 = setaPrioridade(
                                                    input b-tmp-docto-ptu.idi-tipo-guia-ptu,
                                                    input no).

end procedure.

procedure ptu-dadosHospital:
    define input parameter r-guia-par as recid no-undo.        
    define input        parameter table for dadosHospital. 
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find dadosHospital where dadosHospital.guiaHonorarios_id = r-guia-par no-error.
    if not avail dadosHospital
    then return.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign tmp-docto-ptu.cdn-unidade-hospital = dec(dadosHospital.cd_uniHospitalar)
        tmp-docto-ptu.cdn-hospital            = dadosHospital.cd_Hospitalar
        tmp-docto-ptu.cdd-cnpj-hospital       = dec(dadosHospital.CNPJHospital)
        tmp-docto-ptu.nom-hospital            = dadosHospital.nm_Hospital
        tmp-docto-ptu.cod-cnes-hospital       = dadosHospital.CNES.

end procedure.

procedure ptu-dadosAtendimento-sadt:

    define input parameter r-guia-par as recid no-undo.    
    define input        parameter table for dadosAtendimento. 
    define input-output parameter table for rowErrors.

    find first dadosAtendimento where dadosAtendimento.guiaSADT_id = r-guia-par no-error.

    if not avail dadosAtendimento
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosAtendimento' em uma guia de SADT do arquivo PTU.",
	        input-output table rowErrors).
    end. 

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign 
        tmp-docto-ptu.cdn-tipo-atend          = int(dadosAtendimento.tp_Atendimento) 
        tmp-docto-ptu.ind-tipo-acidente       = dadosAtendimento.tp_IndAcidente   
        tmp-docto-ptu.cdn-tipo-consulta       = dadosAtendimento.tp_Consulta   
        tmp-docto-ptu.idi-carater-atend       = dadosAtendimento.caraterAtendimento  
        tmp-docto-ptu.cod-motivo-encerramento = dadosAtendimento.mv_Encerramento  
        tmp-docto-ptu.coberturaEspecial       = int(dadosAtendimento.coberturaEspecial)
        tmp-docto-ptu.regimeAtendimento       = int(dadosAtendimento.regimeAtendimento)
        tmp-docto-ptu.saudeOcupacional        = int(dadosAtendimento.saudeOcupacional).             

end procedure.

procedure ptu-procedimentos-consulta:

    define input parameter r-guia-par                     as recid no-undo.
    define input parameter r-tmp-servico-corrente-ptu-par as recid no-undo.
    define input        parameter table for dadosGuia.
    define input        parameter table for procedimentos.    
    define input-output parameter table for tmp-servico-ptu. 
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par
        exclusive-lock no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    find first dadosGuia where dadosGuia.guiaConsulta_id = r-guia-par no-lock no-error.
    if not avail dadosGuia
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosGuia' em uma guia de consulta do arquivo PTU.",
            input-output table rowErrors).
    end.

    if dadosGuia.id_GlosaTotal = "S"
    then return.

    find first procedimentos where procedimentos.dadosGuia_id = recid(dadosGuia) no-lock no-error.
    if not avail procedimentos
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'procedimentos' em 'dadosGuia' em uma guia de consulta do arquivo PTU.",
	        input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.idi-seq-item         = procedimentos.seq_item
           b-tmp-servico-ptu.cod-item-unico       = procedimentos.id_itemUnico
           b-tmp-servico-ptu.ind-aviso-item       = procedimentos.id_AvisadoItem
           b-tmp-servico-ptu.cod-tip-tab          = procedimentos.tp_Tabela
           b-tmp-servico-ptu.cod-servico          = procedimentos.cd_Servico
           b-tmp-servico-ptu.val-servico-cobrado  = oGpsPtuUtils:ptuCharToDec(procedimentos.vl_ServCobrado)
           b-tmp-servico-ptu.val-taxa-adm-servico = oGpsPtuUtils:ptuCharToDec(procedimentos.tx_AdmServico)
           b-tmp-servico-ptu.cod-ato              = procedimentos.cd_Ato
           b-tmp-servico-ptu.qtd-cobrado          = 1
           b-tmp-servico-ptu.dat-execucao         = oGpsPtuUtils:ptuCharToDate(dadosGuia.dt_atendimento).   

    run indicador-movimento (
        input procedimentos.tp_Tabela,
        input procedimentos.cd_Servico,
        output b-tmp-servico-ptu.ind-movto).
   
end procedure.

procedure ptu-procedimentosExecutados:

    define              parameter buffer b-procedimentosExecutados for procedimentosExecutados.
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par exclusive-lock no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.dat-execucao          = oGpsPtuUtils:ptuCharToDate(b-procedimentosExecutados.dt_Execucao)
        b-tmp-servico-ptu.hra-inicial              = b-procedimentosExecutados.hr_Inicial
        b-tmp-servico-ptu.hra-final                = b-procedimentosExecutados.hr_Final
        b-tmp-servico-ptu.cod-via-acesso           = b-procedimentosExecutados.via_Acesso
        b-tmp-servico-ptu.cod-tecnica-utilizada    = b-procedimentosExecutados.tc_Utilizada
        b-tmp-servico-ptu.ind-acrescimo            = b-procedimentosExecutados.id_Acrescimo
        b-tmp-servico-ptu.cod-unidade-medida       = b-procedimentosExecutados.un_Medida
        b-tmp-servico-ptu.val-fator-multiplic-serv = b-procedimentosExecutados.ft_MultiplicadorServico
        b-tmp-servico-ptu.ind-aviso-item           = b-procedimentosExecutados.id_AvisadoItem
        b-tmp-servico-ptu.ind-id-pacote            = b-procedimentosExecutados.id_Pacote
        b-tmp-servico-ptu.cdn-pacote               = b-procedimentosExecutados.cd_Pacote
        b-tmp-servico-ptu.cod-porte-anest          = b-procedimentosExecutados.cd_PorteAnestesico
        b-tmp-servico-ptu.cod-ato                  = b-procedimentosExecutados.cd_Ato.

end procedure.

procedure ptu-procedimentosExecutadosHono:

    define              parameter buffer b-procedimentosExecutadosHono for procedimentosExecutadosHono.
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par exclusive-lock no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.dat-execucao             = oGpsPtuUtils:ptuCharToDate(b-procedimentosExecutadosHono.dt_Execucao)
           b-tmp-servico-ptu.hra-inicial              = b-procedimentosExecutadosHono.hr_Inicial
           b-tmp-servico-ptu.hra-final                = b-procedimentosExecutadosHono.hr_Final
           b-tmp-servico-ptu.cod-via-acesso           = b-procedimentosExecutadosHono.via_Acesso
           b-tmp-servico-ptu.cod-tecnica-utilizada    = b-procedimentosExecutadosHono.tc_Utilizada
           b-tmp-servico-ptu.ind-acrescimo            = b-procedimentosExecutadosHono.id_Acrescimo
           b-tmp-servico-ptu.val-servico-cobrado      = oGpsPtuUtils:ptuCharToDec(b-procedimentosExecutadosHono.vl_ServCobrado)
           b-tmp-servico-ptu.val-taxa-adm-servico     = oGpsPtuUtils:ptuCharToDec(b-procedimentosExecutadosHono.tx_AdmServico)
           b-tmp-servico-ptu.val-fator-multiplic-serv = b-procedimentosExecutadosHono.ft_MultiplicadorServico
           b-tmp-servico-ptu.ind-aviso-item           = b-procedimentosExecutadosHono.id_AvisadoItem
           b-tmp-servico-ptu.cod-porte-anest          = b-procedimentosExecutadosHono.cd_PorteAnestesico
           b-tmp-servico-ptu.cod-ato                  = b-procedimentosExecutadosHono.cd_Ato.

end procedure.

procedure ptu-procedimentos1:

    define              parameter buffer b-procedimentos1   for procedimentos1.
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.    

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.idi-seq-item   = b-procedimentos1.seq_item
           b-tmp-servico-ptu.cod-item-unico = b-procedimentos1.id_itemUnico
           b-tmp-servico-ptu.cod-tip-tab    = b-procedimentos1.tp_Tabela
           b-tmp-servico-ptu.cod-servico    = b-procedimentos1.cd_Servico
           b-tmp-servico-ptu.des-servico    = (if trim(b-procedimentos1.ds_Servico) <> ?
                                               then b-procedimentos1.ds_Servico
                                               else "")
           b-tmp-servico-ptu.qtd-cobrado    = b-procedimentos1.qt_Cobrada.

    run indicador-movimento (
        input b-procedimentos1.tp_Tabela,
        input b-procedimentos1.cd_Servico,
        output b-tmp-servico-ptu.ind-movto).

end procedure.

procedure ptu-dadosProcedimentos:
    define              parameter buffer b-dadosProcedimentos for dadosProcedimentos.
    define input        parameter r-tmp-servico-corrente-ptu-par as recid no-undo.
    define input        parameter table for procedimentos22.
    define output parameter r-procedimentos-corrente-par as recid no-undo.
    define input-output parameter table for tmp-servico-ptu.    
    define input-output parameter table for rowErrors.
    
    define buffer b-tmp-servico-ptu for tmp-servico-ptu.
    
    find procedimentos22 where procedimentos22.dadosProcedimentos_id = recid(b-dadosProcedimentos) no-error.
    if not avail procedimentos22
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'procedimentos22' em 'dadosProcedimentos' em uma guia do arquivo PTU.",
	        input-output table rowErrors).
    end.    

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par exclusive-lock no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.    

    if containsAnyError(input table RowErrors)
    then return.
    
    assign b-tmp-servico-ptu.cdd-autorizacao = b-dadosProcedimentos.nr_Autorizacao
        b-tmp-servico-ptu.val-restituir      = b-dadosProcedimentos.vl_a_restituir
        b-tmp-servico-ptu.val-reembol-benef  = b-dadosProcedimentos.vl_reemb_benef
        b-tmp-servico-ptu.val-pago-benef     = b-dadosProcedimentos.vl_pago_benef
        b-tmp-servico-ptu.idi-seq-item       = procedimentos22.seq_item
        b-tmp-servico-ptu.cod-item-unico     = procedimentos22.id_itemUnico
        b-tmp-servico-ptu.cod-tip-tab        = procedimentos22.tp_Tabela
        b-tmp-servico-ptu.cod-servico        = procedimentos22.cd_Servico
        b-tmp-servico-ptu.dat-execucao       = oGpsPtuUtils:ptuCharToDate(procedimentos22.dt_Execucao)
        b-tmp-servico-ptu.des-servico        = (if trim(procedimentos22.ds_Servico) <> ?
                                                 then procedimentos22.ds_Servico
                                                 else "")
        b-tmp-servico-ptu.qtd-cobrado        = procedimentos22.qt_Cobrada
        b-tmp-servico-ptu.dat-execucao       = oGpsPtuUtils:ptuCharToDate(procedimentos22.dt_Execucao)
        r-procedimentos-corrente-par        = recid(procedimentos22).         

    run indicador-movimento (
        input procedimentos22.tp_Tabela,
        input procedimentos22.cd_Servico,
        output b-tmp-servico-ptu.ind-movto).

end procedure.

procedure ptu-dadosProcedimentos1:
    define              parameter buffer b-dadosProcedimentos1 for dadosProcedimentos1.
    define input        parameter r-tmp-servico-corrente-ptu-par as recid no-undo.
    define input        parameter table for procedimentos22.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.
    
    define buffer b-tmp-servico-ptu for tmp-servico-ptu.
    
    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.    

    if containsAnyError(input table RowErrors)
    then return.
    
    assign b-tmp-servico-ptu.cod-item-unico  = b-dadosProcedimentos1.id_itemUnico
        b-tmp-servico-ptu.dat-execucao       = oGpsPtuUtils:ptuCharToDate(b-dadosProcedimentos1.dt_Execucao)
        b-tmp-servico-ptu.cod-servico        = b-dadosProcedimentos1.cd_Servico
        b-tmp-servico-ptu.des-servico        = b-dadosProcedimentos1.ds_Servico
        b-tmp-servico-ptu.qtd-cobrado        = b-dadosProcedimentos1.qt_Cobrada
        b-tmp-servico-ptu.val-pago-sus       = b-dadosProcedimentos1.vl_pagoSUS.

end.

procedure ptu-valores:

    define              parameter buffer b-procedimentosExecutados   for procedimentosExecutados.    
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input        parameter table for valores.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find valores where valores.procedimentosExecutados_id = recid(b-procedimentosExecutados) no-error.
    if not avail valores
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'valores' em 'procedimentosExecutados' em uma guia do arquivo PTU.",
	    input-output table rowErrors).
    end.    

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.val-servico-cobrado = oGpsPtuUtils:ptuCharToDec(valores.vl_ServCobrado)
        b-tmp-servico-ptu.val-filme-cobrado      = oGpsPtuUtils:ptuCharToDec(valores.vl_FilmeCobrado)
        b-tmp-servico-ptu.val-co-cobrado         = oGpsPtuUtils:ptuCharToDec(valores.vl_CO_Cobrado).

end procedure.

procedure ptu-taxas:

    define              parameter buffer b-procedimentosExecutados   for procedimentosExecutados.    
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input        parameter table for taxas.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find taxas where taxas.procedimentosExecutados_id = recid(b-procedimentosExecutados) no-error.
    if not avail taxas
    then return.

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.
    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.val-taxa-adm-servico = oGpsPtuUtils:ptuCharToDec(taxas.tx_AdmServico)
        b-tmp-servico-ptu.val-taxa-adm-filme      = oGpsPtuUtils:ptuCharToDec(taxas.tx_AdmFilme)
        b-tmp-servico-ptu.val-taxa-adm-co         = oGpsPtuUtils:ptuCharToDec(taxas.tx_AdmCO).

end procedure.

procedure ptu-dadosOPME:

    define              parameter buffer b-procedimentosExecutados   for procedimentosExecutados.    
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input        parameter table for dadosOPME.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find dadosOPME where dadosOPME.procedimentosExecutados_id = recid(b-procedimentosExecutados) no-error.
    if not avail dadosOPME
    then return.

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.cod-det-registro-anvisa = dadosOPME.det_RegistroAnvisa
        b-tmp-servico-ptu.cod-registro-anvisa        = dadosOPME.nr_RegistroAnvisa
        b-tmp-servico-ptu.des-refer-mater-fabrican   = dadosOPME.cd_ReferenciaMat_Fab.

end procedure.

procedure ptu-Pago_FornecedorOPME:
    define              parameter buffer b-procedimentosExecutados   for procedimentosExecutados.    
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input        parameter table for dadosOPME.
    define input        parameter table for Pago_FornecedorOPME.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.    

    find dadosOPME where dadosOPME.procedimentosExecutados_id = recid(b-procedimentosExecutados) no-error.
    if not avail dadosOPME
    then return.

    find Pago_FornecedorOPME where Pago_FornecedorOPME.dadosOPME_id = recid(dadosOPME) no-error.
    if not avail Pago_FornecedorOPME
    then return.

    run atribui-dados-Pago_FornecedorOPME(
        buffer Pago_FornecedorOPME,
        input r-tmp-servico-corrente-ptu-par,
        input-output table  tmp-servico-ptu,
        input-output table  rowErrors).

end procedure.

procedure ptu-Pago_Fornecedor-notaFiscal:
    define              parameter buffer b-notaFiscal_Fornecedor  for notaFiscal_Fornecedor.
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input        parameter table for Pago_Fornecedor.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    find Pago_Fornecedor where Pago_Fornecedor.notaFiscal_Fornecedor_id = recid(b-notaFiscal_Fornecedor) no-error.
    if not avail Pago_Fornecedor
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'Pago_Fornecedor' em 'notaFiscal_Fornecedor' na 'nota fiscal fornecedor' do arquivo PTU.",
	    input-output table rowErrors).
    end.

    run atribui-dados-Pago_Fornecedor(
        buffer Pago_Fornecedor,
        input r-tmp-servico-corrente-ptu-par,
        input-output table  tmp-servico-ptu,
        input-output table  rowErrors).

end procedure.

procedure atribui-dados-Pago_Fornecedor:

    define              parameter buffer b-Pago_Fornecedor   for Pago_Fornecedor.    
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.cdd-cnpj-fornec   = dec(b-Pago_Fornecedor.CNPJ_Fornecedor)
        b-tmp-servico-ptu.nom-fornec-material  = b-Pago_Fornecedor.nm_FornecedorMatMed
        b-tmp-servico-ptu.cod-nota-fisc-fornec = b-Pago_Fornecedor.nr_NotaFiscalFornecedor.

end procedure.

procedure atribui-dados-Pago_FornecedorOPME:

    define              parameter buffer b-Pago_FornecedorOPME   for Pago_FornecedorOPME.    
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign 
        b-tmp-servico-ptu.cdd-cnpj-fornec      = dec(b-Pago_FornecedorOPME.CNPJ_Fornecedor)
        b-tmp-servico-ptu.nom-fornec-material  =     b-Pago_FornecedorOPME.nm_FornecedorMaterial
        b-tmp-servico-ptu.cod-nota-fisc-fornec =     b-Pago_FornecedorOPME.nr_NotaFiscalFornecedor.

end procedure.

procedure ptu-Infor_OPME:

    define              parameter buffer b-notaFiscal_Fornecedor  for notaFiscal_Fornecedor.
    define              parameter buffer b-Infor_OPME  for Infor_OPME_Med.
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.dat-execucao          = oGpsPtuUtils:ptuCharToDate(b-Infor_OPME.dt_Execucao)
        b-tmp-servico-ptu.cod-det-registro-anvisa  = b-Infor_OPME.det_RegistroAnvisa
        b-tmp-servico-ptu.cod-registro-anvisa      = b-Infor_OPME.nr_RegistroAnvisa
        b-tmp-servico-ptu.des-refer-mater-fabrican = b-Infor_OPME.cd_Referencia_Fab.

    /* COMO CAMPO E GRAVADO NOS MOVIMENTOS FOI NECESSARIO FAZER ESSE ASSIGN AQUI */
    assign b-tmp-servico-ptu.cdd-autorizacao       = b-notaFiscal_Fornecedor.nr_Autorizacao.        

end procedure.

procedure ptu-Procedimentos2:

    define              parameter buffer b-Infor_OPME   for Infor_OPME_Med.    
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input        parameter table for Procedimentos2.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find Procedimentos2 where Procedimentos2.Infor_OPME_Med_id = recid(b-Infor_OPME) no-error.
    if not avail Procedimentos2
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'Procedimentos2' na 'nota fiscal fornecedor' do arquivo PTU.",
	        input-output table rowErrors).
    end.    

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.    

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.idi-seq-item = Procedimentos2.seq_item
        b-tmp-servico-ptu.cod-item-unico  = Procedimentos2.id_itemUnico
        b-tmp-servico-ptu.cod-tip-tab     = Procedimentos2.tp_Tabela
        b-tmp-servico-ptu.cod-servico     = Procedimentos2.cd_Servico
        b-tmp-servico-ptu.des-servico     = (if trim(Procedimentos2.ds_Servico) <> ?
                                             then Procedimentos2.ds_Servico
                                             else "")
        b-tmp-servico-ptu.qtd-cobrado     = Procedimentos2.qt_Cobrada.

        run indicador-movimento (
            input Procedimentos2.tp_Tabela,
            input Procedimentos2.cd_Servico,
            output b-tmp-servico-ptu.ind-movto).

end procedure.

procedure ptu-valores_fornecedor:

    define              parameter buffer b-Infor_OPME   for Infor_OPME_Med.    
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input        parameter table for valores_fornecedor.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find valores_fornecedor where valores_fornecedor.Infor_OPME_Med_id = recid(b-Infor_OPME) no-error.
    if not avail valores_fornecedor
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'valores_fornecedor' na 'nota fiscal fornecedor' do arquivo PTU.",
	    input-output table rowErrors).
    end.    

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par no-error.
    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-servico-ptu.val-servico-cobrado = valores_fornecedor.vl_ServCobrado
        b-tmp-servico-ptu.val-taxa-adm-servico   = valores_fornecedor.tx_AdmServico.

end procedure.

procedure cdCnpjCpf:
    define input  parameter r-equipe-profissional-par as recid  no-undo.
    define parameter buffer b-tmp-equipe-ptu      for tmp-equipe-ptu.    

    for each cdCnpjCpf
       where cdCnpjCpf.equipe_Profissional_id = r-equipe-profissional-par:

        assign b-tmp-equipe-ptu.cod-cpf-prof-exec   = cdCnpjCpf.cd_cpf
               b-tmp-equipe-ptu.cod-cnpj-prof-exec  = cdCnpjCpf.cd_cnpj.
        
        leave.
    end.
end.
    
procedure ptu-equipe_Profissional:
    define input        parameter h-equipe-profissional-par as handle  no-undo.
    define input        parameter r-equipe-profissional-par as recid   no-undo.
    define input        parameter r-tmp-equipe-ptu-par      as recid   no-undo.
    define input-output parameter table for tmp-equipe-ptu.
    define input-output parameter table for rowErrors.

    if h-equipe-profissional-par = ?
    then return.

    define buffer b-tmp-equipe-ptu for tmp-equipe-ptu.

    find first b-tmp-equipe-ptu where recid(b-tmp-equipe-ptu) = r-tmp-equipe-ptu-par no-error.
    if not avail b-tmp-equipe-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-equipe-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-equipe-ptu.cod-tip-particip  = h-equipe-profissional-par:buffer-field("tp_Participacao"):buffer-value
           b-tmp-equipe-ptu.nom-prof-exec     = h-equipe-profissional-par:buffer-field("nm_Profissional"):buffer-value
           b-tmp-equipe-ptu.cod-cbo-prof-exec = h-equipe-profissional-par:buffer-field("CBO"):buffer-value.
    
    run cdCnpjCpf(r-equipe-profissional-par,
                  buffer b-tmp-equipe-ptu).

end procedure.

procedure valida-equipe_Profissional:

    define input        parameter h-equipe-profissional-par as handle  no-undo.    
    define input-output parameter table for rowErrors.    

    if h-equipe-profissional-par = ?
    or h-equipe-profissional-par:buffer-field("tp_Participacao"):buffer-value = ?
    or h-equipe-profissional-par:buffer-field("tp_Participacao"):buffer-value = ""
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Para Guias de Honorario, obrigatorio informar o campo 'tp_Participacao' da tag 'equipe_Profissional'.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

end procedure.

procedure ptu-Prestador2:

    define input        parameter cd-unid-prestador-par like Prestador2.cd_Uni_Prest.
    define input        parameter cd-prestador-par      like Prestador2.cd_Prest.    
    define input        parameter r-tmp-equipe-ptu-par as recid no-undo.
    define input        parameter table for Prestador2.
    define input-output parameter table for tmp-equipe-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-equipe-ptu for tmp-equipe-ptu.

    find first b-tmp-equipe-ptu where recid(b-tmp-equipe-ptu) = r-tmp-equipe-ptu-par no-error.
    if not avail b-tmp-equipe-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-equipe-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-equipe-ptu.cdn-unid-prestador = cd-unid-prestador-par
           b-tmp-equipe-ptu.cdn-prestador      = cd-prestador-par.

end procedure.

procedure ptu-dadosConselho:

    define input        parameter cod-conselho-par     like dadosConselho.sg_Conselho no-undo.
    define input        parameter num-conselho-par     like dadosConselho.nr_Conselho no-undo.
    define input        parameter cdn-uf-conselho-par  like dadosConselho.UF          no-undo.
    define input        parameter r-tmp-equipe-ptu-par as recid        no-undo.
    define input        parameter table for dadosConselho.
    define input-output parameter table for tmp-equipe-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-equipe-ptu for tmp-equipe-ptu.

    find first b-tmp-equipe-ptu where recid(b-tmp-equipe-ptu) = r-tmp-equipe-ptu-par no-error.
    if not avail b-tmp-equipe-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-equipe-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP], 
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign b-tmp-equipe-ptu.cod-sigla-cons-prof-exec = cod-conselho-par   
        b-tmp-equipe-ptu.cod-registro-prof-exe       = num-conselho-par   
        b-tmp-equipe-ptu.cdn-uf-cons-prof-exec       = cdn-uf-conselho-par.

end procedure.

procedure ptu-dadosAutorizacao-consulta:
    define input parameter r-guia-par as recid no-undo.
    define input parameter r-tmp-servico-corrente-ptu-par as recid no-undo.
    define input        parameter table for dadosGuia.
    define input        parameter table for dadosAutorizacao.
    define input-output parameter table for tmp-servico-ptu. 
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find first dadosGuia where dadosGuia.guiaConsulta_id = r-guia-par no-lock no-error.
    if not avail dadosGuia
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosGuia' em uma guia de consulta do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find first dadosAutorizacao where dadosAutorizacao.dadosGuia_id = recid(dadosGuia) no-lock no-error.
    if not avail dadosAutorizacao
    then return.

    run atribui-dados-autorizacao(
        buffer dadosAutorizacao,
        input r-tmp-servico-corrente-ptu-par,
        input-output table tmp-servico-ptu,
        input-output table rowErrors).

end procedure.

procedure ptu-dadosAutorizacao:
    define              parameter buffer b-procedimentosExecutados for procedimentosExecutados.  
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input        parameter table for dadosAutorizacao.
    define input-output parameter table for tmp-servico-ptu. 
    define input-output parameter table for rowErrors.    

    find first dadosAutorizacao where dadosAutorizacao.procedimentosExecutados_id = recid(b-procedimentosExecutados) no-lock no-error.
    if not avail dadosAutorizacao
    then return.    

    run atribui-dados-autorizacao(
        buffer dadosAutorizacao,
        input r-tmp-servico-corrente-ptu-par,
        input-output table tmp-servico-ptu,
        input-output table rowErrors).

end procedure.

procedure atribui-dados-autorizacao private:

    define              parameter buffer b-dadosAutorizacao   for dadosAutorizacao.
    define input        parameter r-tmp-servico-corrente-ptu-par as recid        no-undo.
    define input-output parameter table for tmp-servico-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-servico-ptu for tmp-servico-ptu.

    find first b-tmp-servico-ptu where recid(b-tmp-servico-ptu) = r-tmp-servico-corrente-ptu-par 
        exclusive-lock no-error.

    if not avail b-tmp-servico-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-servico-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    assign tmp-servico-ptu.dat-solicitacao       = oGpsPtuUtils:ptuCharToDate(b-dadosAutorizacao.dt_Solicitacao)
           tmp-servico-ptu.cdd-autorizacao       = b-dadosAutorizacao.nr_Autorizacao
           tmp-servico-ptu.cdn-unid-autorizadora = b-dadosAutorizacao.cd_UniAutorizadora
           tmp-servico-ptu.dat-autorizacao       = oGpsPtuUtils:ptuCharToDate(b-dadosAutorizacao.dt_Autorizacao)
           tmp-servico-ptu.idi-tip-autorizacao   = b-dadosAutorizacao.tp_Autorizacao.

end procedure.

procedure ptu-complemento-consulta:
    define input parameter r-guia-par as recid no-undo.    
    define input parameter table for dadosGuia.
    define input parameter table for complemento.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find first dadosGuia where dadosGuia.guiaConsulta_id = r-guia-par no-lock no-error.
    if not avail dadosGuia
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'dadosGuia' em uma guia de consulta do arquivo PTU.",
	        input-output table rowErrors).
    end.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    if containsAnyError(input table RowErrors)
    then return.

    for each complemento where complemento.dadosGuia_id = recid(dadosGuia):
        case int(complemento.tp_RegCPL):
            when 1 then assign tmp-docto-ptu.ds-indicacao-clinica = complemento.nm_DescComplemento.
            when 2 then assign tmp-docto-ptu.ds-observacao = complemento.nm_DescComplemento.  
            when 3 then assign tmp-docto-ptu.ds-justificativa-tecnica = complemento.nm_DescComplemento.
            when 4 then assign tmp-docto-ptu.ds-especif-material = complemento.nm_DescComplemento.
        end case.
    end.

end procedure.

/* indicacao-clinica
   Responsavel pela atribuicao do campos ds-indicacao-clinica, ds-observacao, ds-justificativa-tecnica, ds-especif-material
   das guias de SADT, honorario e internacao 
 */
procedure ptu-complemento:
    define       parameter buffer b-dadosGuia1   for dadosGuia1.    
    define input parameter r-guia-par as recid no-undo.    
    define input parameter table for complemento.
    define input-output parameter table  for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find first tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
        return.
    end.     

    for each complemento where complemento.dadosGuia1_id =  recid(b-dadosGuia1):
        case int(complemento.tp_RegCPL):
            when 1 then assign tmp-docto-ptu.ds-indicacao-clinica = complemento.nm_DescComplemento.
            when 2 then assign tmp-docto-ptu.ds-observacao = complemento.nm_DescComplemento.  
            when 3 then assign tmp-docto-ptu.ds-justificativa-tecnica = complemento.nm_DescComplemento.
            when 4 then assign tmp-docto-ptu.ds-especif-material = complemento.nm_DescComplemento.
        end case.
    end.

end procedure.

procedure ptu-complemento-honorario:
    define       parameter buffer b-dadosGuiaHonorario   for dadosGuiaHonorario.    
    define input parameter r-guia-par as recid no-undo.    
    define input parameter table for complemento.
    define input-output parameter table  for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find first tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
        return.
    end.     

    for each complemento where complemento.dadosGuiaHonorario_id =  recid(b-dadosGuiaHonorario):
        case int(complemento.tp_RegCPL):
            when 1 then assign tmp-docto-ptu.ds-indicacao-clinica     = complemento.nm_DescComplemento.
            when 2 then assign tmp-docto-ptu.ds-observacao            = complemento.nm_DescComplemento.  
            when 3 then assign tmp-docto-ptu.ds-justificativa-tecnica = complemento.nm_DescComplemento.
            when 4 then assign tmp-docto-ptu.ds-especif-material      = complemento.nm_DescComplemento.
        end case.
    end.

end procedure.

procedure ptu-reapresentacaoGlosado-consulta:

    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for reapresentacaoGlosado. 
    define input        parameter table for DadosLoteGuia.
    define input        parameter table for TXT.
    define input        parameter table for XML.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find first reapresentacaoGlosado where reapresentacaoGlosado.guiaConsulta_id = r-guia-par no-error.

    if not avail reapresentacaoGlosado
    then return. //nao eh obrigatorio
    
    run atribui-dados-reapresentacao(
        input r-guia-par,
        buffer reapresentacaoGlosado,
        input table DadosLoteGuia,
        input table TXT,
        input table XML,
        input-output table tmp-docto-ptu, 
        input-output table rowErrors).
    
end procedure.

procedure ptu-reapresentacaoGlosado-sadt:

    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for reapresentacaoGlosado. 
    define input        parameter table for DadosLoteGuia.
    define input        parameter table for TXT.
    define input        parameter table for XML.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find first reapresentacaoGlosado where reapresentacaoGlosado.guiaSADT_id = r-guia-par no-error.

    if not avail reapresentacaoGlosado
    then return. //nao eh obrigatorio
    
    run atribui-dados-reapresentacao(
        input r-guia-par,
        buffer reapresentacaoGlosado,
        input table DadosLoteGuia,
        input table TXT,
        input table XML,
        input-output table tmp-docto-ptu, 
        input-output table rowErrors).
    
end procedure.

procedure ptu-reapresentacaoGlosado-inter:

    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for reapresentacaoGlosado. 
    define input        parameter table for DadosLoteGuia.
    define input        parameter table for TXT.
    define input        parameter table for XML.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find first reapresentacaoGlosado where reapresentacaoGlosado.guiaInternacao_id = r-guia-par no-error.

    if not avail reapresentacaoGlosado
    then return. //nao eh obrigatorio
    
    run atribui-dados-reapresentacao(
        input r-guia-par,
        buffer reapresentacaoGlosado,
        input table DadosLoteGuia,
        input table TXT,
        input table XML,
        input-output table tmp-docto-ptu, 
        input-output table rowErrors).
    
end procedure.

procedure ptu-reapresentacaoGlosado-hono:

    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for reapresentacaoGlosado. 
    define input        parameter table for DadosLoteGuia.
    define input        parameter table for TXT.
    define input        parameter table for XML.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    find first reapresentacaoGlosado where reapresentacaoGlosado.guiaHonorarios_id = r-guia-par no-error.

    if not avail reapresentacaoGlosado
    then return. //nao eh obrigatorio
    
    run atribui-dados-reapresentacao(
        input r-guia-par,
        buffer reapresentacaoGlosado,
        input table DadosLoteGuia,
        input table TXT,
        input table XML,
        input-output table tmp-docto-ptu, 
        input-output table rowErrors).
    
end procedure.

procedure atribui-dados-reapresentacao:
    define input parameter r-guia-par as recid no-undo.
    define parameter buffer b-reapresentacaoGlosado for reapresentacaoGlosado. 
    define input        parameter table for DadosLoteGuia.
    define input        parameter table for TXT.
    define input        parameter table for XML.
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-docto-ptu for tmp-docto-ptu.
    define buffer b-DadosLoteGuia for DadosLoteGuia.

    find first b-tmp-docto-ptu where b-tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail b-tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
            return.
        end.
        
    assign b-tmp-docto-ptu.cod-doc-glosado1 = (if b-reapresentacaoGlosado.nr_DOC1Glosado <> ?
                                                then trim(b-reapresentacaoGlosado.nr_DOC1Glosado)
                                                else "")
        b-tmp-docto-ptu.cod-doc-glosado2    = (if b-reapresentacaoGlosado.nr_DOC2Glosado <> ?
                                                then trim(b-reapresentacaoGlosado.nr_DOC2Glosado)
                                                else "").

    find first b-DadosLoteGuia where b-DadosLoteGuia.reapresentacaoGlosado_id = recid(b-reapresentacaoGlosado) no-error.
    if not avail b-DadosLoteGuia
    then do:
        run cria-erro-ptu(
            input 0,
            input "", 
            input ERROR_SUBTYPE[ERROR], 
            "Nao foi possivel ler o elemento 'DadosLoteGuia' em 'reapresentacaoGlosado' em uma guia de consulta do arquivo PTU.",
            input-output table rowErrors).
            return.
    end.
        
    for first TXT where TXT.DadosLoteGuia_id = recid(b-DadosLoteGuia):

        assign b-tmp-docto-ptu.cod-lote-glosado-txt = TXT.nr_Lote
            b-tmp-docto-ptu.cod-nota-glosada-txt    = TXT.nr_Nota.
    end.

    for first XML where XML.DadosLoteGuia_id = recid(b-DadosLoteGuia):

        assign b-tmp-docto-ptu.cod-lote-prest-glosado = XML.nr_LotePrestador 
            b-tmp-docto-ptu.cod-guia-prest-glosada    = XML.nr_GuiaTissPrestador.
    end.

end procedure.

procedure ptu-reapresentacaoGlosado-nota:

    define input parameter r-guia-par as recid no-undo.
    define input        parameter table for reapresentacaoGlosado1.     
    define input-output parameter table for tmp-docto-ptu.
    define input-output parameter table for rowErrors.

    define buffer b-tmp-docto-ptu for tmp-docto-ptu.

    find first reapresentacaoGlosado1 where reapresentacaoGlosado1.notaFiscal_Fornecedor_id = r-guia-par no-error.

    if not avail reapresentacaoGlosado1
    then return. //nao eh obrigatorio
    

    find first b-tmp-docto-ptu where b-tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail b-tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
            return.
        end.
        
    assign b-tmp-docto-ptu.cod-doc-glosado1 = (if reapresentacaoGlosado1.nr_DOC1Glosado <> ?
                                                    then trim(reapresentacaoGlosado1.nr_DOC1Glosado)
                                                    else "").

    assign b-tmp-docto-ptu.cod-doc-glosado2 = (if reapresentacaoGlosado1.nr_DOC2Glosado <> ?
                                                    then trim(reapresentacaoGlosado1.nr_DOC2Glosado)
                                                    else "").

    assign b-tmp-docto-ptu.cod-nota-fisc-fornec = reapresentacaoGlosado1.nr_NotaFiscalFornecedor.
            
    
end procedure.

procedure indicador-movimento:

    def input  parameter tp-tabela-par  as char no-undo.
    def input  parameter cd-servico-par as char no-undo.
    def output parameter ind-movto-par  as char no-undo.

    case tp-tabela-par:
        when TP_TABELA_TUSS_PROCED then assign ind-movto-par = TP_SERV_PROCEDIMENTO.
        when TP_TABELA_PACOTES     then assign ind-movto-par = TP_SERV_PACOTE.
        when TP_TABELA_PROPRIA
        then do:
            if substring(cd-servico-par,1,2) = TP_TABELA_TUSS_PROCED
            then assign ind-movto-par = TP_SERV_PROCEDIMENTO.
            else assign ind-movto-par = TP_SERV_INSUMO.
        end.
        otherwise assign ind-movto-par = TP_SERV_INSUMO.
    end case.

end procedure.

procedure atualiza-docto-ptu-ressus:
    define input        parameter r-guia-par as recid no-undo.
    define input-output parameter table for tmp-docto-ptu.

    find tmp-docto-ptu where tmp-docto-ptu.recidGuia = r-guia-par exclusive-lock no-error.
    if not avail tmp-docto-ptu
    then do:
        run insertOtherError(
            input 1015, //Registro nao encontrado
            input "Nao foi encontrado registro na tabela tmp-docto-ptu.",
            input NM-LAYOUT,
            input ERROR_TYPE[GP],
            input ERROR_SUBTYPE[ERROR],
            input "",
            input-output table rowErrors).
    end.

    assign tmp-docto-ptu.idi-tipo-guia-ptu  = RESSARCIMENTO_SUS.
end procedure.

procedure valida-dados-mandatorios:
    def input parameter nr_GuiaTissOperadora as char no-undo.

        if nr_GuiaTissOperadora = ""
        then do:
            run cria-erro-ptu(
                input 2459, 
                input "", 
                input ERROR_SUBTYPE[ERROR], 
                input "Nao foi possivel ler o elemento 'nr_GuiaTissOperadora' em 'nr_Guias' do arquivo PTU.",
                input-output table rowErrors).
    end.
end.    


/* -------------------------------------- EOF --------------------------------- */
