using classes.utils.GpsUtils.
using classes.ptu.GpsPtuUtils.
/*****************************************************************************************
** Copyright DATASUL S.A. (1997)
** Todos os Direitos Reservados.
**
** Este fonte e de propriedade exclusiva da DATASUL, sua reproducao
** parcial ou total por qualquer meio, so podera ser feita mediante
** autorizacao expressa.
******************************************************************************************/
{include/i-prgvrs.i LAPTUA500E-011V2 1.00.00.014 } /*** "010014" ***/

&IF "{&EMSFND_VERSION}" >= "1.00" &THEN
{include/i-license-manager.i laptua500e-011v2 HRC}
&ENDIF

/*****************************************************************************************
    Programa .....: laptua500e-011v2.p
    Data .........: 13/01/2022
    Empresa ......: TOTVS Saude
    Programador...: Jean Malvessi
    Objetivo .....: PTU 1.1 - XML A500 EXPORTACAO (nrVerTra_PTU "02")
******************************************************************************************/

/* --------------------------------------------------- DEFINICAO DE TABELAS DE DADOS --- */
{bosau/hfp/bosaubillet.i}
{lap/includes/a500xml011v2.i}
{hrc/bosau/bosau-export-a500.i}
{bosau/bosaugenericroutines.i}
{rtp/rtrowerror.i}
{enum/enum-ptu-xml.i}
{rtp/rtfuncoes.i}
{cpc/cpc-laptua500e.i}

/* --- DECLARACAO DE VARIAVEIS UTILIZADAS POR HDRUNPERSIS E HDDELPERSIS --- */
{hdp/hdrunpersis.iv "new"}

/* -------------------------------------- DEFINICAO DE PARAMETROS DE ENTRADA E SAIDA --- */
def input  parameter table for tmp-cabecalho.
def input  parameter table for tmp-fatura.
def input  parameter table for tmp-ndr.
def input  parameter table for tmp-documento.
def input  parameter table for tmp-procedimento.
def input  parameter table for tmp-insumo.
def input  parameter table for tmp-pacotes.
def input  parameter table for tmp-equipe.
def input  parameter table for tmp-declaracoes.
def output parameter table for rowErrors.
def output parameter nm-arquivo-ptu-par        as char                             no-undo.
def output parameter cdd-anexo-par like anexo.cdd-anexo no-undo.

/* -------------------------------------- VARIAVEIS ------------------------------------ */
def var oGpsPtuUtils                           as GpsPtuUtils                      no-undo.
def var oGpsUtils                              as GpsUtils                         no-undo.
def var nm-arquivo-xml-aux                     as char                             no-undo.
def var nm-diretorio-exp-aux                   as char                             no-undo.
def var h-billet-generation-aux                as handle                           no-undo.
def var h-bosaugenericroutines-aux             as handle                           no-undo.
def var ds-pdf-boleto-fat-aux                  as char                             no-undo.
def var ds-pdf-boleto-ndr-aux                  as char                             no-undo.
def var nr-recid-dadosGuia-par                 as recid                            no-undo.
def var nr-recid-dadosGuia1-par                as recid                            no-undo.

function getParamGlobal return char (cod-indic-tab-par as char, cod-param-par as char):
    
    for first param-geral fields(param-geral.des-param) 
        where param-geral.cod-indic-tab = cod-indic-tab-par
          and param-geral.cod-param     = cod-param-par    
              no-lock:
        return param-geral.des-param.
    end.
    
    return "".

end function.

function busca-sequencial-arq-aviso returns int (cod-indic-tab-par as char, cod-param-par as char):

    for first param-geral fields(param-geral.des-param) 
        where param-geral.cod-indic-tab = cod-indic-tab-par
          and param-geral.cod-param     = cod-param-par    
              exclusive-lock:

        if param-geral.des-param <> ""
        then do:
            if date(entry(1, param-geral.des-param, ";")) = today
            then do:
                assign entry(2, param-geral.des-param, ";") = string(int(entry(2, param-geral.des-param, ";")) + 1).

                if int(entry(2, param-geral.des-param, ";")) = 999
                then assign entry(2, param-geral.des-param, ";") = "1".

                return int(entry(2, param-geral.des-param, ";")).
            end.            
        end.
                
        assign param-geral.des-param = string(today, "99/99/9999") + ";" + "1".
        return 1.
    end.

    if not avail param-geral 
    then do:
        create param-geral.
        assign param-geral.cod-indic-tab = cod-indic-tab-par
               param-geral.cod-param     = cod-param-par
               param-geral.des-param     = string(today, "99/99/9999") + ";" + "1".

        return 1.
    end.

end.

function converteValor returns character(input vl-conversao-par as decimal).

    define variable vl-conversao-aux as character no-undo.

    if vl-conversao-par = ?
    then return vl-conversao-aux.

    assign vl-conversao-aux = string(vl-conversao-par, ">>>>>>>>>>>9.99")
           vl-conversao-aux = replace(string(vl-conversao-aux), SESSION:NUMERIC-DECIMAL-POINT, ".":U).

    return trim(vl-conversao-aux).

end function.

function formataCPF returns char (input cddCpf as dec):
    def var cod-cpf-formatado-aux as char no-undo.

    assign cod-cpf-formatado-aux = string(cddCpf, "99999999999") no-error.
    
    dec(cod-cpf-formatado-aux) no-error.
    if error-status:error
    then return "".

    if dec(cod-cpf-formatado-aux) > 0 
    then return cod-cpf-formatado-aux.
    else return "".

end function.

function formataCNPJ returns char (input cddCNPJ as dec):
    def var cod-cnpj-formatado-aux as char no-undo.

    assign cod-cnpj-formatado-aux = string(cddCNPJ, "99999999999999") no-error.

    dec(cod-cnpj-formatado-aux) no-error.
    if error-status:error
    then return "".


    if dec(cod-cnpj-formatado-aux) > 0
    then return cod-cnpj-formatado-aux.
    else return "".
end function.

function verificaCPCAtiva returns logical private(input nm-ponto-chamada-cpc-par as char):
    if not can-find(first dzlibprx
                    where dzlibprx.nm-ponto-chamada-cpc = nm-ponto-chamada-cpc-par
                      and dzlibprx.nm-programa          = "LAPTUA500E"
                      and dzlibprx.lg-ativo-cpc)
    then return no.

    if  search("cpc/cpc-laptua500e.p") = ?
    and search("cpc/cpc-laptua500e.r") = ?
    then do:
        run insertOtherError(
            input 2585,
            input "Ponto de CPC ~"" + nm-ponto-chamada-cpc-par + "~" ativo, mas a ~"CPC-LAPTUA500E~" nao foi encontrada.",
            input " LAPTUA500E",
            input "GP",
            input "ERROR",
            input "",
            input-output table rowErrors).

        return no.
    end.

    return yes.
end function.

/* Verifica, para um determinado campo, se ira enviar o valor da 
 * guia de cobranca normal ou da guia reapresentada (quando glosada no Ajius)
 */
function buscaValorGuiaReap returns char (input cd-excecao-par       as char,  //Cd_excecao conforme manual PTU
                                          input vl-guia-cobranca-par as char,  //Valor da guia de cobranca normal
                                          input vl-guia-reap-par     as char): //Valor a guia de reapresentacao
    if  cd-excecao-par = "J" //Reapresentacao Ajius
    and vl-guia-reap-par <> ""
    then return vl-guia-reap-par.
    return vl-guia-cobranca-par.
end function.

function salvar-json return log:
    def var mp-json-aux as memptr no-undo.
    
    if not oGpsUtils:gpsLogger()
    then return no.

    dataset ptuA500Dset:handle:write-json("memptr", mp-json-aux) no-error.

    create anexo.
    assign anexo.cdd-anexo = next-value(seq-anexo) no-error.

    if error-status:error
    then do:
        run insertErrorGP(
            input 0,
            input "Erro na criacao da tabela 'anexo'",
            input error-status:get-message(error-status:num-messages),
            input-output table rowErrors).
        return false.
    end.

    copy-lob from mp-json-aux to anexo.blb-anexo.
    
    assign anexo.nom-anexo             = nm-arquivo-xml-aux
           anexo.dat-ult-atualiz       = today
           anexo.cdn-tip-anexo         = 0
           anexo.cod-usuar-ult-atualiz = v_cod_usuar_corren.
        
    assign cdd-anexo-par = anexo.cdd-anexo.
    
    return true.
end function.

/* -------------------------------------------------------------- INICIO DO PROCESSO --- */
do on stop undo, return error:
    
    run inicializa-dados.
    if containsAnyError(input table rowErrors)
    then return.
    
    run gera-a500.

    run salva-arquivo.

end.

finally:
    if valid-object(oGpsPtuUtils)
    then delete object oGpsPtuUtils.

    if valid-object(oGpsUtils)
    then delete object oGpsUtils.

    {hdp/hddelpersis.i}
end finally.


/* ------------------------------------------------------------------------------------- */
procedure gera-a500:

    run exporta-cabecalho.

    create arquivoA500.
    assign arquivoA500.ptuA500_id = recid(ptuA500).

    if tmp-cabecalho.tipoTransacao = NM_TRANS_A500_COBRANCA
    then do:
        if not tmp-fatura.lg-reembolso
        then run exporta-guias.
        else run exporta-reembolso.
    end.
    else run exporta-guias.    

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure exporta-guias:

    create Tipoguia.
    assign Tipoguia.arquivoA500_id = recid(arquivoA500).

    for each tmp-documento use-index doc5
       where not tmp-documento.lg-glosa-total:

        case tmp-documento.tp-documento:
            when NOTA_CONSULTA        then run processa-nota-consulta.
            when NOTA_SADT            then run processa-nota-sadt.
            when NOTA_INTERNACAO      then run processa-nota-internacao.
            when NOTA_HONORARIO       then run processa-nota-honorario.
            when NOTA_FISC_FORNEC_EXP then run processa-nota-fiscal-fornecedor.
        end case.

    end.

    for each tmp-documento use-index doc5
       where tmp-documento.lg-glosa-total:

        case tmp-documento.tp-documento:
            when NOTA_CONSULTA   then run processa-nota-consulta.
            when NOTA_SADT       then run processa-nota-sadt.
            when NOTA_INTERNACAO then run processa-nota-internacao.
            when NOTA_HONORARIO  then run processa-nota-honorario.
        end case.

    end.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure exporta-reembolso:

    create CobrancaReembolso.
	assign CobrancaReembolso.arquivoA500_id = recid(arquivoA500).

    run processa-reembolso.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure processa-nota-fiscal-fornecedor: 

	create notaFiscal_Fornecedor.
	assign notaFiscal_Fornecedor.nr_GuiaTissPrincipal = tmp-documento.nr-guia-tiss-princ
		   notaFiscal_Fornecedor.id_Liminar           = oGpsPtuUtils:formataBooleanPTU(tmp-documento.lg-liminar)
		   notaFiscal_Fornecedor.nr_Autorizacao       = tmp-documento.nr-autorizacao
		   notaFiscal_Fornecedor.Tipoguia_id          = recid(Tipoguia).

	run cria-tag-dadosBeneficiario1(
		input tmp-documento.cd-unidade-carteira,
		input tmp-documento.cd-carteira,
		input "", /* Nome Benef. */
		input ?,  /* Data Nascimento */
		input ?,  /* Sexo Benef. */
		input ?,  /* Atend RN */
        input "notaFiscal_Fornecedor_id",
        input recid(notaFiscal_Fornecedor)).	

    run cria-tag-Pago-Fornecedor (
        input tmp-documento.nr-cgc-cpf-fornecedor,
        input tmp-documento.nm-fornecedor,
        input tmp-documento.nr-nota-fiscal-fornec,
        input "notaFiscal_Fornecedor_id",
        input recid(notaFiscal_Fornecedor)).

    for each tmp-insumo
       where tmp-insumo.id-docto = tmp-documento.id-docto
             no-lock:
		run cria-tag-Infor_OPME(
			input tmp-insumo.dt-realizacao,
			input tmp-insumo.ds-fabricante,
			input tmp-insumo.cd-anvisa,
			input tmp-insumo.des-refer-mater-fabrican,
			input tmp-insumo.nr-seq-item,
            input tmp-insumo.nr-seq-item-unico,
            input tmp-insumo.tp-tabela,
            input tmp-insumo.cd-servico,
            input tmp-insumo.ds-insumo,
            input tmp-insumo.qt-insumo,
			input tmp-insumo.vl-cobrado-sem-taxa,
			input tmp-insumo.vl-taxa,
			input "notaFiscal_Fornecedor_id",
			input recid(notaFiscal_Fornecedor)).
	end.	

	if tmp-documento.cd-excecao = "J" /* Nota Reapresentacao AJIUS */
	then run cria-tag-reapresentacaoGlosado1( 
             input tmp-documento.nr-doc-glosado1,
             input tmp-documento.nr-doc-glosado2,
			 input tmp-documento.nr-nota-fiscal-fornec,
			 input "notaFiscal_Fornecedor_id",
			 input recid(notaFiscal_Fornecedor)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure processa-nota-honorario:

    create guiaHonorarios.
    assign guiaHonorarios.Tipoguia_id = recid(Tipoguia).

    run cria-tag-dadosBeneficiario(
        input tmp-documento.cd-unidade-carteira,
        input tmp-documento.cd-carteira,
        input tmp-documento.nm-beneficiario,
        input tmp-documento.log-atendim-rn,
        input tmp-documento.tp-paciente,
        input "guiaHonorarios_id",
        input recid(guiaHonorarios)).

    /* Na guia de honorarios, os dados do hospital ficam no prestador principal */
    run cria-tag-dadosHospital(
        input tmp-documento.cd-unidade-contrat-exec,
        input tmp-documento.cd-prest-contrat-exec,
        input tmp-documento.cd-cnpj-contrat-exec,
        input tmp-documento.nm-prest-contrat-exec,
        input tmp-documento.cd-cnes-contrat-exec,
        input "guiaHonorarios_id",
        input recid(guiaHonorarios)).

    run cria-tag-dadosExecutante(
        input tmp-documento.cd-unidade-exec-hono,
        input tmp-documento.cd-prest-exec-hono,
        input tmp-documento.nm-prest-exec-hono,
        input tmp-documento.cd-cpf-exec-hono,
        input tmp-documento.cd-cnpj-exec-hono,
        input tmp-documento.cd-cnes-exec-hono,
        input tmp-documento.cd-ibge-exec-hono,
        input tmp-documento.tp-rede-exec-hono,
        input tmp-documento.tp-prest-exec-hono,
        input tmp-documento.lg-rec-proprio-exec-hono,
        input "guiaHonorarios_id",
        input recid(guiaHonorarios)).

    run cria-tag-dataFaturamento(
        input tmp-documento.dt-internacao,
        input tmp-documento.hr-internacao,
        input tmp-documento.dt-alta,
        input tmp-documento.hr-alta,
        input "guiaHonorarios_id",      
        input recid(guiaHonorarios)).      

    run cria-tag-dadosGuia1(
        input tmp-documento.char-23, /* Versao TISS */
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-lote-prest,tmp-documento.nr-lote-glosado),
        input tmp-documento.dt-protocolo,
        input tmp-documento.dt-conhecimento,
        input tmp-documento.dt-atendimento,
        input tmp-documento.hr-atendimento,              
        input tmp-documento.lg-liminar,
        input tmp-documento.lg-continuado,
        input tmp-documento.lg-aviso,
        input tmp-documento.cd-excecao,
        input tmp-documento.lg-glosa-total,
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-guia-tiss-prestador,tmp-documento.nr-nota-glosada),
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-nota,tmp-documento.ds-guia-tiss-operadora),
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-guia-tiss-princ,tmp-documento.nr-guia-tiss-princ-glosada),
        input tmp-documento.dt-ult-autorizacao,
        input ?, /* Id Nota principal */
        input tmp-documento.ds-ind-clinica,
        input tmp-documento.ds-observacao,
        input tmp-documento.des-justif-tec,
        input tmp-documento.des-espcif-mater,
        input "guiaHonorarios_id",
        input recid(guiaHonorarios),
        output nr-recid-dadosGuia1-par).

    if not tmp-documento.lg-glosa-total
    then run procedimentos-executados-honorarios(
             input nr-recid-dadosGuia1-par,
             buffer tmp-documento).

    if tmp-documento.cd-excecao = "J"
    then run cria-tag-reapresentacaoGlosado (
            input tmp-documento.lg-a500-xml,
            input tmp-documento.nr-lote-glosado,
            input tmp-documento.nr-nota-glosada,
            input tmp-documento.nr-doc-glosado1,
            input tmp-documento.nr-doc-glosado2,
            input tmp-documento.ds-guia-tiss-operadora,
            input "guiaHonorarios_id",      
            input recid(guiaHonorarios)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure processa-nota-internacao:

    create guiaInternacao.
    assign guiaInternacao.Tipoguia_id = recid(Tipoguia).

    run cria-tag-dadosBeneficiario(
        input tmp-documento.cd-unidade-carteira,
        input tmp-documento.cd-carteira,
        input tmp-documento.nm-beneficiario,
        input tmp-documento.log-atendim-rn,
        input tmp-documento.tp-paciente,
        input "guiaInternacao_id",
        input recid(guiaInternacao)).

    run cria-tag-dadosSolicitante(
        input tmp-documento.cd-unidade-solicitante,  
        input tmp-documento.cd-prestador-solicitante,
        input tmp-documento.nr-cpf-req,
        input tmp-documento.nr-cnpj-req,
        input tmp-documento.nm-prestador-solicitante,
        input tmp-documento.nm-prof-sol,
        input tmp-documento.char-16, /* Conselho Profissional */
        input tmp-documento.char-17, /* Nr. Registro */
        input tmp-documento.char-18, /* UF Conselho */
        input tmp-documento.char-19, /* CBO */
        input "guiaInternacao_id",
        input recid(guiaInternacao)).

    run cria-tag-dadosExecutante1(
        input tmp-documento.cd-unidade-contrat-exec,
        input tmp-documento.cd-prest-contrat-exec,
        input tmp-documento.nm-prest-contrat-exec,
        input tmp-documento.cd-cnpj-contrat-exec,
        input tmp-documento.cd-cnes-contrat-exec,
        input tmp-documento.cd-ibge-contrat-exec,
        input tmp-documento.tp-rede-contrat-exec,
        input tmp-documento.tp-prest-contrat-exec,
        input tmp-documento.lg-rec-proprio-contrat-exec,
        input "guiaInternacao_id",
        input recid(guiaInternacao)).

    run cria-tag-dadosInternacao(
        input tmp-documento.cd-tipo-acomodacao,
        input tmp-documento.ft-multiplicador-amb,
        input tmp-documento.tp-inter,
        input string(tmp-documento.cd-regime-internacao),
        input int(tmp-documento.tp-carater-atend),
        input tmp-documento.cd-faturamento,
        input tmp-documento.dt-internacao,
        input tmp-documento.hr-internacao,
        input tmp-documento.dt-alta,
        input tmp-documento.hr-alta,
        input tmp-documento.id-docto,
        input "guiaInternacao_id",
        input recid(guiaInternacao)).

    run cria-tag-dadosSaidaInternacao(
        input tmp-documento.in-acidente,
        input tmp-documento.cd-motivo-alta,
        input tmp-documento.cd-cid,
        input tmp-documento.cd-cid1,
        input tmp-documento.cd-cid2,
        input tmp-documento.cd-cid3,
        input "guiaInternacao_id",
        input recid(guiaInternacao)).

    run cria-tag-dadosAuditoria(
        input tmp-documento.nm-medico-audit,
        input tmp-documento.nr-crm-medico-audit,
        input tmp-documento.cd-uf-medico-audit,
        input tmp-documento.nm-enferm-audit,
        input tmp-documento.nr-coren-enferm,
        input tmp-documento.cd-uf-enferm-audit,
        input "guiaInternacao_id",
        input recid(guiaInternacao)).

    run cria-tag-dadosGuia1(
        input tmp-documento.char-23, /* Versao TISS */
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-lote-prest,tmp-documento.nr-lote-glosado),
        input tmp-documento.dt-protocolo,
        input tmp-documento.dt-conhecimento,
        input tmp-documento.dt-atendimento,
        input tmp-documento.hr-atendimento,              
        input tmp-documento.lg-liminar,
        input tmp-documento.lg-continuado,
        input tmp-documento.lg-aviso,
        input tmp-documento.cd-excecao,
        input tmp-documento.lg-glosa-total,
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-guia-tiss-prestador,tmp-documento.nr-nota-glosada),
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-nota,tmp-documento.ds-guia-tiss-operadora),
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-guia-tiss-princ,tmp-documento.nr-guia-tiss-princ-glosada),
        input tmp-documento.dt-ult-autorizacao,
        input ?,
        input tmp-documento.ds-ind-clinica,
        input tmp-documento.ds-observacao,
        input tmp-documento.des-justif-tec,
        input tmp-documento.des-espcif-mater,
        input "guiaInternacao_id",
        input recid(guiaInternacao),
        output nr-recid-dadosGuia1-par).

    if not tmp-documento.lg-glosa-total
    then run procedimentos-executados(
             input nr-recid-dadosGuia1-par,
             buffer tmp-documento).

    if tmp-documento.cd-excecao = "J"
    then run cria-tag-reapresentacaoGlosado (
            input tmp-documento.lg-a500-xml,
            input tmp-documento.nr-lote-glosado,
            input tmp-documento.nr-nota-glosada,
            input tmp-documento.nr-doc-glosado1,
            input tmp-documento.nr-doc-glosado2,
            input tmp-documento.ds-guia-tiss-operadora,
            input "guiaInternacao_id",
            input recid(guiaInternacao)).
    
end procedure.

/* ------------------------------------------------------------------------------------- */
procedure processa-nota-sadt:

    create guiaSADT.
    assign guiaSADT.Tipoguia_id = recid(Tipoguia).

    run cria-tag-dadosBeneficiario(
        input tmp-documento.cd-unidade-carteira,
        input tmp-documento.cd-carteira,
        input tmp-documento.nm-beneficiario,
        input tmp-documento.log-atendim-rn,
        input tmp-documento.tp-paciente,
        input "guiaSADT_id",
        input recid(guiaSADT)).

    run cria-tag-dadosSolicitante(
        input tmp-documento.cd-unidade-solicitante,  
        input tmp-documento.cd-prestador-solicitante,
        input tmp-documento.nr-cpf-req,
        input tmp-documento.nr-cnpj-req,
        input tmp-documento.nm-prestador-solicitante,
        input tmp-documento.nm-prof-sol,
        input tmp-documento.char-16, /* Conselho Profissional */
        input tmp-documento.char-17, /* Nr. Registro */
        input tmp-documento.char-18, /* UF Conselho */
        input tmp-documento.char-19, /* CBO */
        input "guiaSADT_id",
        input recid(guiaSADT)).

    run cria-tag-dadosExecutante(
        input tmp-documento.cd-unidade-contrat-exec,
        input tmp-documento.cd-prest-contrat-exec,
        input tmp-documento.nm-prest-contrat-exec,
        input tmp-documento.cd-cpf-contrat-exec,
        input tmp-documento.cd-cnpj-contrat-exec,
        input tmp-documento.cd-cnes-contrat-exec,
        input tmp-documento.cd-ibge-contrat-exec,
        input tmp-documento.tp-rede-contrat-exec,
        input tmp-documento.tp-prest-contrat-exec,
        input tmp-documento.lg-rec-proprio-contrat-exec,
        input "guiaSADT_id",
        input recid(guiaSADT)).

    run cria-tag-dadosAtendimento(
        input tmp-documento.tp-atend,
        input tmp-documento.in-acidente,
        input tmp-documento.tp-consulta,
        input tmp-documento.tp-carater-atend,
        input tmp-documento.cd-motivo-alta,
        input "guiaSADT_id",
        input recid(guiaSADT)).

    run cria-tag-dadosGuia1(
        input tmp-documento.char-23, /* Versao TISS */
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-lote-prest,tmp-documento.nr-lote-glosado),
        input tmp-documento.dt-protocolo,
        input tmp-documento.dt-conhecimento,
        input tmp-documento.dt-atendimento,
        input tmp-documento.hr-atendimento,              
        input tmp-documento.lg-liminar,
        input tmp-documento.lg-continuado,
        input tmp-documento.lg-aviso,
        input tmp-documento.cd-excecao,
        input tmp-documento.lg-glosa-total,
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-guia-tiss-prestador,tmp-documento.nr-nota-glosada),
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-nota,tmp-documento.ds-guia-tiss-operadora),
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-guia-tiss-princ,tmp-documento.nr-guia-tiss-princ-glosada),
        input tmp-documento.dt-ult-autorizacao,
        input tmp-documento.lg-nota-principal,
        input tmp-documento.ds-ind-clinica,
        input tmp-documento.ds-observacao,
        input tmp-documento.des-justif-tec,
        input tmp-documento.des-espcif-mater,
        input "guiaSADT_id",
        input recid(guiaSADT),
        output nr-recid-dadosGuia1-par).

    if not tmp-documento.lg-glosa-total
    then run procedimentos-executados(
             input nr-recid-dadosGuia1-par,
             buffer tmp-documento).

    if tmp-documento.cd-excecao = "J"
    then run cria-tag-reapresentacaoGlosado (
            input tmp-documento.lg-a500-xml,
            input tmp-documento.nr-lote-glosado,
            input tmp-documento.nr-nota-glosada,
            input tmp-documento.nr-doc-glosado1,
            input tmp-documento.nr-doc-glosado2,
            input tmp-documento.ds-guia-tiss-operadora,
            input "guiaSADT_id",
            input recid(guiaSADT)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure processa-nota-consulta:

    create guiaConsulta.
    assign guiaConsulta.Tipoguia_id = recid(Tipoguia).

    run cria-tag-dadosBeneficiario(
        input tmp-documento.cd-unidade-carteira,
        input tmp-documento.cd-carteira,
        input tmp-documento.nm-beneficiario,
        input tmp-documento.log-atendim-rn,
        input tmp-documento.tp-paciente,
        input "guiaConsulta_id",
        input recid(guiaConsulta)).

    run cria-contratado-executante-consulta(
        input tmp-documento.nm-prest-contrat-exec,
        input tmp-documento.cd-unidade-contrat-exec,
        input tmp-documento.cd-prest-contrat-exec,
        input tmp-documento.cd-cpf-contrat-exec,
        input tmp-documento.cd-cnpj-contrat-exec,
        input tmp-documento.cd-ibge-contrat-exec,
        input tmp-documento.tp-rede-contrat-exec,
        input tmp-documento.tp-prest-contrat-exec,
        input tmp-documento.lg-rec-proprio-contrat-exec,
        input "guiaConsulta_id",
        input recid(guiaConsulta)).

    run cria-profissional-executante-consulta(
        input tmp-documento.nm-prof-exec,
        input tmp-documento.cd-cbo-prof-exec,
        input tmp-documento.cd-unid-prof-exec,
        input tmp-documento.cd-prest-prof-exec,
        input tmp-documento.cd-conselho-prof-exec,
        input tmp-documento.nr-registro-prof-exec,
        input tmp-documento.cd-uf-conselho-prof-exec,
        input "guiaConsulta_id",
        input recid(guiaConsulta)).
    
    run cria-tag-dadosGuia(
        input tmp-documento.char-23, /* Versao TISS */
        input int(tmp-documento.tp-consulta),
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-lote-prest,tmp-documento.nr-lote-glosado),
        input tmp-documento.dt-protocolo,
        input tmp-documento.dt-conhecimento,
        input tmp-documento.in-acidente,
        input tmp-documento.dt-atendimento,
        input tmp-documento.hr-atendimento,              
        input tmp-documento.lg-liminar,
        input tmp-documento.lg-continuado,
        input tmp-documento.lg-aviso,
        input tmp-documento.cd-excecao,
        input tmp-documento.lg-glosa-total,
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-guia-tiss-prestador,tmp-documento.nr-nota-glosada),
        input buscaValorGuiaReap(tmp-documento.cd-excecao,tmp-documento.nr-nota,tmp-documento.ds-guia-tiss-operadora),
        input tmp-documento.ds-ind-clinica,
        input tmp-documento.ds-observacao,
        input tmp-documento.des-justif-tec,
        input tmp-documento.des-espcif-mater,
        input "guiaConsulta_id",
        input recid(guiaConsulta),
        output nr-recid-dadosGuia-par).

    /* tag dadosAutorizacao */
    if tmp-documento.nr-autorizacao > 0
    then run cria-tag-dadosAutorizacao(
             input tmp-documento.dt-solicitacao,
             input tmp-documento.nr-autorizacao,
             input tmp-documento.cd-unid-autoriz,
             input tmp-documento.dt-autorizacao,
             input tmp-documento.tp-autorizacao,
             input "dadosGuia_id",
             input nr-recid-dadosGuia-par).

    if not tmp-documento.lg-glosa-total
    then for each tmp-procedimento
            where tmp-procedimento.id-docto = tmp-documento.id-docto
                  no-lock:
         
             run cria-tag-procedimentos-consulta (
                 input tmp-procedimento.nr-seq-item,
                 input tmp-procedimento.nr-seq-item-unico,
                 input tmp-procedimento.id-aviso-item,
                 input tmp-procedimento.tp-tabela,
                 input tmp-procedimento.cd-servico,
                 input converteValor( tmp-procedimento.vl-honorario-medico
                                    + tmp-procedimento.vl-operacional     
                                    + tmp-procedimento.vl-filme),
                input (if tmp-procedimento.vl-taxa-honorario   > 0
                       or tmp-procedimento.vl-taxa-operacional > 0
                       or tmp-procedimento.vl-taxa-filme       > 0
                       then converteValor(  tmp-procedimento.vl-taxa-honorario  
                                          + tmp-procedimento.vl-taxa-operacional
                                          + tmp-procedimento.vl-taxa-filme)
                       else ""),
                 input tmp-procedimento.in-ato-medico,
                 input "dadosGuia_id",
                 input nr-recid-dadosGuia-par).
         end.

    if tmp-documento.cd-excecao = "J"
    then run cria-tag-reapresentacaoGlosado (
            input tmp-documento.lg-a500-xml,
            input tmp-documento.nr-lote-glosado,
            input tmp-documento.nr-nota-glosada,
            input tmp-documento.nr-doc-glosado1,
            input tmp-documento.nr-doc-glosado2,
            input tmp-documento.ds-guia-tiss-operadora,
            input "guiaConsulta_id",
            input recid(guiaConsulta)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure processa-reembolso:

    def var nr-recid-dadosProcedimentos-par as recid no-undo.
    def var nr-recid-procedimentos-par      as recid no-undo.

    for each tmp-documento use-index doc5:

        create reembolso.
	    assign reembolso.CobrancaReembolso_id = recid(CobrancaReembolso).

        run cria-tag-dadosBeneficiario1(
            input tmp-documento.cd-unidade-carteira,
            input tmp-documento.cd-carteira,
            input tmp-documento.nm-beneficiario,
            input tmp-documento.dt-nascimento,
            input tmp-documento.lg-sexo,
            input tmp-documento.log-atendim-rn,
            input "reembolso_id",
            input recid(reembolso)).

        run cria-tag-dadosReembolso (
            input tmp-documento.nr-guia-tiss-prestador,
            input tmp-documento.tp-carater-atend,
            input tmp-documento.dt-pagto-prest,
            input (if tmp-documento.lg-cobranca-integral
                   then 2
                   else 1),
            input "reembolso_id",
            input recid(reembolso)).

        run cria-tag-prestador-reembolso (
            input tmp-documento.tp-pessoa-reembolso,
            input tmp-documento.cd-cpf-cnpj-reembolso,
            input tmp-documento.nm-prest-reembolso,
            input "reembolso_id",
            input recid(reembolso)).

        for each tmp-procedimento
           where tmp-procedimento.id-docto = tmp-documento.id-docto
                 no-lock:

            run cria-tag-dadosProcedimentos (
                input tmp-documento.nr-autorizacao,
                input tmp-procedimento.vl-dif-reemb-interc,
                input tmp-procedimento.vl-cobrado,
                input tmp-procedimento.vl-cobrado,
                input "reembolso_id",
                input recid(reembolso),
                output nr-recid-dadosProcedimentos-par). 

            run cria-tag-procedimentos-reembolso (
                input tmp-procedimento.dt-realizacao,
                input tmp-procedimento.nr-seq-item,
                input tmp-procedimento.nr-seq-item-unico,
                input tmp-procedimento.tp-tabela,
                input tmp-procedimento.cd-servico,
                input "",
                input tmp-procedimento.qt-procedimentos,
                input "dadosProcedimentos_id",
                input nr-recid-dadosProcedimentos-par,
                output nr-recid-procedimentos-par).

            run cria-tag-equipe_reembolso (
                input tmp-procedimento.nm-profiss-reembolso,
                input tmp-procedimento.cd-tipo-part,
                input tmp-procedimento.cd-conselho-reembolso,
                input tmp-procedimento.nr-registro-reembolso,
                input tmp-procedimento.cd-uf-conselho-reembolso,
                input "procedimentos22_id",
                input nr-recid-procedimentos-par).
        end.

        for each tmp-insumo
           where tmp-insumo.id-docto = tmp-documento.id-docto
                 no-lock:

            run cria-tag-dadosProcedimentos (
                input tmp-documento.nr-autorizacao,
                input tmp-insumo.vl-dif-reemb-interc,
                input tmp-insumo.vl-cobrado,
                input tmp-insumo.vl-cobrado,                
                input "reembolso_id",
                input recid(reembolso),
                output nr-recid-dadosProcedimentos-par). 

            run cria-tag-procedimentos-reembolso (
                input tmp-insumo.dt-realizacao,
                input tmp-insumo.nr-seq-item,
                input tmp-insumo.nr-seq-item-unico,
                input tmp-insumo.tp-tabela,
                input tmp-insumo.cd-servico,
                input tmp-insumo.ds-insumo,
                input tmp-insumo.qt-insumo,
                input "dadosProcedimentos_id",
                input nr-recid-dadosProcedimentos-par,
                output nr-recid-procedimentos-par).

            run cria-tag-equipe_reembolso (
                input tmp-insumo.nm-profiss-reembolso,
                input tmp-insumo.cd-tipo-part,
                input tmp-insumo.cd-conselho-reembolso,
                input tmp-insumo.nr-registro-reembolso,
                input tmp-insumo.cd-uf-conselho-reembolso,
                input "procedimentos22_id",
                input nr-recid-procedimentos-par).
        end.

    end.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosReembolso:

    def input parameter id-reembolso-par        as char  no-undo.
    def input parameter tp-carater-atend-par    as int   no-undo.
    def input parameter dt-reembolso-par        as date  no-undo.
    def input parameter id-reembols-par-int-par as int   no-undo.
    def input parameter nm-campo-pai-par        as char  no-undo.
    def input parameter nr-recid-pai-par        as recid no-undo.

    create dadosReembolso.
	assign dadosReembolso.idReembolso        = oGpsPtuUtils:formataTexto(trim(id-reembolso-par),20)     
           dadosReembolso.caraterAtendimento = tp-carater-atend-par
           dadosReembolso.dt_Reembolso       = oGpsPtuUtils:formataData(dt-reembolso-par)
           dadosReembolso.id_ReemParInt      = id-reembols-par-int-par.

    assign temp-table dadosReembolso:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-prestador-reembolso:

    def input parameter tp-pessoa-par          as char  no-undo.
    def input parameter cd-cpf-cnpj-par        as char  no-undo.
    def input parameter nm-prest-reembolso-par as char  no-undo.
    def input parameter nm-campo-pai-par       as char  no-undo.
    def input parameter nr-recid-pai-par       as recid no-undo.

    create Prestador1.
	assign Prestador1.nomePrestador = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-prest-reembolso-par)),60).

    assign temp-table Prestador1:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    run cria-tag-nr_CNPJouCPF(
        input tp-pessoa-par,
        input cd-cpf-cnpj-par,
        input "Prestador1_id",
        input recid(Prestador1)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosProcedimentos:

    def input  parameter nr-autorizacao-par     as dec   no-undo.
    def input  parameter vl-a-restituir-par     as dec   no-undo.
    def input  parameter vl-reemb-benef-par     as dec   no-undo.
    def input  parameter vl-pago-benef-par      as dec   no-undo.
    def input  parameter nm-campo-pai-par       as char  no-undo.
    def input  parameter nr-recid-pai-par       as recid no-undo.
    def output parameter nr-recid-filho-par     as recid no-undo.    

    create dadosProcedimentos.
	assign dadosProcedimentos.nr_Autorizacao = nr-autorizacao-par
           dadosProcedimentos.vl_a_restituir = vl-a-restituir-par
	       dadosProcedimentos.vl_reemb_benef = vl-reemb-benef-par
	       dadosProcedimentos.vl_pago_benef  = vl-pago-benef-par.

    assign temp-table dadosProcedimentos:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    assign nr-recid-filho-par = recid(dadosProcedimentos).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-procedimentos-reembolso:

    def input  parameter dt-execucao-par       as date  no-undo.
    def input  parameter nr-seq-item-par       as dec   no-undo.
    def input  parameter nr-seq-item-unico-par as char  no-undo.   
    def input  parameter tp-tabela-par         as char  no-undo. 
    def input  parameter cd-servicao-par       as char  no-undo.
    def input  parameter ds-servico-par        as char  no-undo.
    def input  parameter qt-cobrada-par        as dec   no-undo.
    def input  parameter nm-campo-pai-par      as char  no-undo.
    def input  parameter nr-recid-pai-par      as recid no-undo.
    def output parameter nr-recid-filho-par    as recid no-undo.

    create procedimentos22.
	assign procedimentos22.dt_Execucao  = oGpsPtuUtils:formataData(dt-execucao-par)
	       procedimentos22.seq_item     = nr-seq-item-par
	       procedimentos22.id_itemUnico = oGpsPtuUtils:formataTexto(nr-seq-item-unico-par,28)
	       procedimentos22.tp_Tabela    = oGpsPtuUtils:formataTexto(tp-tabela-par,2)       
	       procedimentos22.cd_Servico   = oGpsPtuUtils:formataTexto(cd-servicao-par,10)
           procedimentos22.ds_Servico   = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(ds-servico-par)),80)
	       procedimentos22.qt_Cobrada   = qt-cobrada-par.

    assign temp-table procedimentos22:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    assign nr-recid-filho-par = recid(procedimentos22).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-equipe_reembolso:

    def input parameter nm-profissional-par      as char  no-undo.
    def input parameter tp-participacao-par      as char  no-undo.
    def input parameter cd-conselho-prof-exec    as char  no-undo.
    def input parameter nr-registro-prof-exec    as char  no-undo.
    def input parameter cd-uf-conselho-prof-exec as char  no-undo.
    def input parameter nm-campo-pai-par         as char  no-undo.
    def input parameter nr-recid-pai-par         as recid no-undo.

    create equipe_reembolso.
    assign equipe_reembolso.nm_Profissional  = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-profissional-par)),60)
	       equipe_reembolso.tp_Particip_Reem = oGpsPtuUtils:formataTexto(tp-participacao-par,2). 

    assign temp-table equipe_reembolso:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    run cria-tag-dadosConselho(
        input cd-conselho-prof-exec,
        input nr-registro-prof-exec,
        input cd-uf-conselho-prof-exec,
        input "equipe_reembolso_id",
        input recid(equipe_reembolso)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-nr_CNPJouCPF:

    def input parameter tp-pessoa-par    as char  no-undo.
    def input parameter cd-cpf-cnpj-par  as char  no-undo.
    def input parameter nm-campo-pai-par as char  no-undo.
    def input parameter nr-recid-pai-par as recid no-undo.

    create nr_CNPJouCPF.

    if tp-pessoa-par = "F"
    then assign nr_CNPJouCPF.cd_cpf  = formataCPF(dec(oGpsUtils:removeCharEspecExporta(cd-cpf-cnpj-par))).
    else assign nr_CNPJouCPF.cd_cnpj = formataCNPJ(dec(oGpsUtils:removeCharEspecExporta(cd-cpf-cnpj-par))). 

    assign temp-table nr_CNPJouCPF:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-contratado-executante-consulta:

    def input parameter nm-prest-contrat-exec-par       as char  no-undo.
    def input parameter cd-unidade-contrat-exec         as int   no-undo.
    def input parameter cd-prest-contrat-exec           as int   no-undo.
    def input parameter cd-cpf-contrat-exec-par         as dec   no-undo.
    def input parameter cd-cnpj-contrat-exec-par        as dec   no-undo.
    def input parameter cd-ibge-contrat-exec-par        as int   no-undo.
    def input parameter tp-rede-contrat-exec-par        as int   no-undo.
    def input parameter tp-prest-contrat-exec-par       as int   no-undo.
    def input parameter lg-rec-proprio-contrat-exec-par as log   no-undo.
    def input parameter nm-campo-pai-par                as char  no-undo.
    def input parameter nr-recid-pai-par                as recid no-undo.

    create contratadoExecutante.
    assign contratadoExecutante.nome            = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-prest-contrat-exec-par)),60)
           contratadoExecutante.CNES            = tmp-documento.cd-cnes-contrat-exec
           contratadoExecutante.guiaConsulta_id = ?.

    assign temp-table contratadoExecutante:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    run cria-tag-UnimedPrestador(
        input cd-unidade-contrat-exec,
        input cd-prest-contrat-exec,
        input "contratadoExecutante_id",
        input recid(contratadoExecutante)).

    run cria-tag-CPF_CNPJ(
        input cd-cpf-contrat-exec-par ,
        input cd-cnpj-contrat-exec-par,
        input "contratadoExecutante_id",
        input recid(contratadoExecutante)).

    run cria-tag-prestador-dadosExecutante(
        input cd-ibge-contrat-exec-par,
        input tp-rede-contrat-exec-par,
        input tp-prest-contrat-exec-par,
        input lg-rec-proprio-contrat-exec-par,
        input "contratadoExecutante_id",
        input recid(contratadoExecutante)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-profissional-executante-consulta:

    def input parameter nm-prof-exec-par         as char  no-undo.
    def input parameter cd-cbo-prof-exec-par     as char  no-undo.
    def input parameter cd-unid-prof-exec        as int   no-undo.
    def input parameter cd-prest-prof-exec       as int   no-undo.
    def input parameter cd-conselho-prof-exec    as char  no-undo.
    def input parameter nr-registro-prof-exec    as char  no-undo.
    def input parameter cd-uf-conselho-prof-exec as char  no-undo.
    def input parameter nm-campo-pai-par         as char  no-undo.
    def input parameter nr-recid-pai-par         as recid no-undo.

    create profissionalExecutante.
    assign profissionalExecutante.nome            = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-prof-exec-par)),60)
           profissionalExecutante.CBO             = oGpsPtuUtils:formataTexto(replace(cd-cbo-prof-exec-par,".",""),6)
           profissionalExecutante.guiaConsulta_id = ?.

    assign temp-table profissionalExecutante:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    if  cd-unid-prof-exec  > 0
    and cd-prest-prof-exec > 0
    then run cria-tag-UnimedPrestador(
             input cd-unid-prof-exec ,
             input cd-prest-prof-exec,
             input "profissionalExecutante_id",
             input recid(profissionalExecutante)).

    run cria-tag-dadosConselho(
        input cd-conselho-prof-exec,
        input nr-registro-prof-exec,
        input cd-uf-conselho-prof-exec,
        input "profissionalExecutante_id",
        input recid(profissionalExecutante)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure exporta-cabecalho:

    create ptuA500.

    create cabecalho.
    assign cabecalho.nrVerTra_PTU = 02
           cabecalho.ptuA500_id   = recid(ptuA500).

    create unimed.
    assign unimed.cd_Uni_Destino = tmp-cabecalho.codUniDestino
           unimed.cd_Uni_Origem  = tmp-cabecalho.codUniOrigem
           unimed.cabecalho_id   = recid(cabecalho).
          
    create dadosAvisoCobranca.
    assign dadosAvisoCobranca.cabecalho_id = recid(cabecalho).

    if tmp-cabecalho.tipoTransacao = "ENVIO_COBRANCA"
    then do:
           create Cobranca.
           assign Cobranca.dt_Geracao            = oGpsPtuUtils:formataData(tmp-cabecalho.dtaGeracao)
                  Cobranca.nr_Competencia        = tmp-cabecalho.nroCompetencia
                  Cobranca.tp_Cobranca           = tmp-cabecalho.tipoCobranca
                  Cobranca.dadosAvisoCobranca_id = recid(dadosAvisoCobranca).

           create documento1.
           assign documento1.tp_Documento     = tmp-fatura.tipoDocumento
                  documento1.nr_Documento     = tmp-fatura.nroDocumento
                  documento1.dt_VencimentoDoc = oGpsPtuUtils:formataData(tmp-fatura.dtaVencimento)
                  documento1.dt_EmissaoDoc    = oGpsPtuUtils:formataData(tmp-fatura.dtaEmissao)
                  documento1.vl_TotalDoc      = tmp-fatura.vlrTotal
                  documento1.doc_Fiscal       = tmp-fatura.nroDocFiscal
                  documento1.VL_IR            = tmp-fatura.valIr
                  documento1.Cobranca_id      = recid(Cobranca).

           if (    tmp-fatura.nroNotaFiscal <> ""
               and tmp-fatura.nroNotaFiscal <> ?)
           or (    tmp-fatura.linkNFE       <> ""
               and tmp-fatura.linkNFE       <> ?)
           then do:
                  run cria-tag-NFE(input tmp-fatura.nroNotaFiscal,
                                   input tmp-fatura.linkNFE,
                                   input "documento1_id",
                                   input recid(documento1)).
                end.

           find first tmp-ndr no-lock no-error.
           if avail tmp-ndr
           then do:
                  create documento2.
                  assign documento2.tp_Documento     = tmp-ndr.tipoDocumento                
                         documento2.nr_Documento     = tmp-ndr.nroDocumento                 
                         documento2.dt_VencimentoDoc = oGpsPtuUtils:formataData(tmp-ndr.dtaVencimento)   
                         documento2.dt_EmissaoDoc    = oGpsPtuUtils:formataData(tmp-ndr.dtaEmissao)      
                         documento2.vl_TotalDoc      = tmp-ndr.vlrTotal                     
                         documento2.doc_Fiscal       = tmp-ndr.nroDocFiscal                 
                         documento2.Cobranca_id      = recid(Cobranca).

                  if (    tmp-ndr.nroNotaFiscal <> ""
                      and tmp-ndr.nroNotaFiscal <> ?)
                  or (    tmp-ndr.linkNFE       <> ""
                      and tmp-ndr.linkNFE       <> ?)
                  then do:
                         run cria-tag-NFE(input tmp-ndr.nroNotaFiscal,
                                          input tmp-ndr.linkNFE,
                                          input "documento2_id",
                                          input recid(documento2)).
                       end.
                end.
         end.
    /* "ENVIO_AVISO" */
    else do:
           create Aviso.
           assign Aviso.dt_Geracao            = oGpsPtuUtils:formataData(tmp-cabecalho.dtaGeracao)
                  Aviso.nr_Competencia        = tmp-cabecalho.nroCompetencia          
                  Aviso.dadosAvisoCobranca_id = recid(dadosAvisoCobranca).
         end.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure inicializa-dados:

    def var nro-documento-aux as char init "" no-undo.

    oGpsPtuUtils = new GpsPtuUtils().
    oGpsUtils = new GpsUtils(). 

    empty temp-table rowErrors.
    empty temp-table tmpBilletParameterGeneration.

    empty temp-table ptuA500.
    empty temp-table cabecalho.
    empty temp-table unimed.
    empty temp-table dadosAvisoCobranca.
    empty temp-table Aviso.
    empty temp-table Cobranca.
    empty temp-table documento1.
    empty temp-table NFE.
    empty temp-table documento2.
    empty temp-table arquivoA500.
    empty temp-table Tipoguia.
    empty temp-table guiaConsulta.
    empty temp-table dadosBeneficiario.
    empty temp-table contratadoExecutante.
    empty temp-table UnimedPrestador.
    empty temp-table CPF_CNPJ.
    empty temp-table prestador.
    empty temp-table profissionalExecutante.
    empty temp-table dadosConselho.
    empty temp-table dadosGuia.
    empty temp-table nr_Guias.
    empty temp-table procedimentos.
    empty temp-table dadosAutorizacao.
    empty temp-table complemento.
    empty temp-table reapresentacaoGlosado.
    empty temp-table DadosLoteGuia.
    empty temp-table TXT.
    empty temp-table XML.
    empty temp-table guiaSADT.
    empty temp-table dadosSolicitante.
    empty temp-table contratadoSolicitante.
    empty temp-table cpf_cnpj2.
    empty temp-table profissional.
    empty temp-table dadosExecutante.
    empty temp-table dadosAtendimento.
    empty temp-table guiaInternacao.
    empty temp-table dadosExecutante1.
    empty temp-table dadosInternacao.
    empty temp-table dadosFaturamento.
    empty temp-table dadosDeclaracoes.
    empty temp-table dadosSaidaInternacaoExportacao.
    empty temp-table dadosAuditoria.
    empty temp-table dadosGuia1.
    empty temp-table nr_Guias1.
    empty temp-table procedimentosExecutados.
    empty temp-table procedimentos1.
    empty temp-table valores.
    empty temp-table taxas.
    empty temp-table dadosOPME.
    empty temp-table Pago_Fornecedor.
    empty temp-table equipe_Profissional.
    empty temp-table Prestador2.
    empty temp-table guiaHonorarios.
    empty temp-table dadosHospital.
    empty temp-table dataFaturamento.
    empty temp-table notaFiscal_Fornecedor.
    empty temp-table dadosBeneficiario1.
    empty temp-table Infor_OPME.
    empty temp-table Procedimentos2.
    empty temp-table valores_fornecedor.
    empty temp-table reapresentacaoGlosado1.
    empty temp-table CobrancaReembolso.
    empty temp-table reembolso.
    empty temp-table dadosReembolso.
    empty temp-table Prestador1.
    empty temp-table nr_CNPJouCPF.
    empty temp-table dadosProcedimentos.
    empty temp-table procedimentos22.
    empty temp-table equipe_reembolso.
    empty temp-table RessarcimentoSus.
    empty temp-table Prestador3.
    empty temp-table dadosProcedimentos1.
    empty temp-table carimboCMB.

    find first paramrc no-lock no-error.
    if not avail paramrc
    then do:
           run insertOtherError(input 0,
                                input "Parametros do modulo RC nao cadastrados.",
                                input "",
                                input "GP",
                                input "ERROR",
                                input "",
                                input-output table rowErrors).
           return.
         end.

    find first tmp-cabecalho no-error.
    if not avail tmp-cabecalho
    then do:
           run insertOtherError(input 0,
                                input "Tabela tmp-cabecalho nao possui registro.",
                                input "",
                                input "GP",
                                input "ERROR",
                                input "",
                                input-output table rowErrors).
           return.
         end.

    if tmp-cabecalho.tipoTransacao = NM_TRANS_A500_COBRANCA
    then do:
           find first tmp-fatura no-lock no-error.
           if not avail tmp-fatura
           then do:
                  run insertOtherError(
                      input 0,
                      input "Tabela tmp-fatura nao possui registro.",
                      input "",
                      input "GP",
                      input "ERROR",
                      input "",
                      input-output table rowErrors).
                  return.
                end.
           
           assign nro-documento-aux = tmp-fatura.nroDocumento.
    end.

    if tmp-cabecalho.tipoTransacao = NM_TRANS_A500_AVISO
    and not can-find(first tmp-documento)
    then do:
           run insertOtherError(
               input 0,
               input "Tabela tmp-documento nao possui registro para exportar.",
               input "",
               input "GP",
               input "ERROR",
               input "",
               input-output table rowErrors).
           return.
    end.

    run monta-nome-arquivo(input  tmp-cabecalho.tipoTransacao,
                           input  nro-documento-aux,
                           output nm-arquivo-xml-aux,
                           output nm-diretorio-exp-aux).

    /* Valida diretorio */
    file-info:file-name = nm-diretorio-exp-aux.
    if file-info:file-type = ?
    then do:
           run insertOtherError(input 0,
                                input "Diretorio para geracao do arquivo A500 nao cadastrado nos parametros do modulo RC.",
                                input "",
                                input "GP",
                                input "ERROR",
                                input "",
                                input-output table rowErrors).
           return.
         end.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure salva-arquivo:

    def var lc-text-aux        as longchar            no-undo.
    def var mp-text-aux        as memptr              no-undo.
    def var mFileAux           as memptr              no-undo.
    def var h-dataset-aux      as handle              no-undo.
    def var lg-escreve-xml-aux as logical initial yes no-undo.

    /* Gera Boleto */
    run gera-boleto.

    if verificaCPCAtiva("ANT-ESCR-XML")
    then do:
        assign h-dataset-aux = dataset ptuA500Dset:handle.

        run p-cpc-ant-escr-xml(
            input        h-dataset-aux,
            output       mp-text-aux,
            output       lc-text-aux,
            input-output lg-escreve-xml-aux).
    end.

    if lg-escreve-xml-aux
    then do:
        // calcula hash
        dataset ptuA500Dset:handle:write-xml("memptr", mp-text-aux, false, "ISO-8859-1", "", false, true, false, true) no-error.

        fix-codepage(lc-text-aux)= "ISO8859-1".

        assign lc-text-aux = oGpsUtils:removeXmlTags(mp-text-aux).
    end.

    // tratamentos especificos do calculo de hash da Unimed Brasil
    assign lc-text-aux = replace(lc-text-aux, "&quot;", "~"")
           lc-text-aux = replace(lc-text-aux, "&amp;", "&")
           lc-text-aux = replace(lc-text-aux, "&apos;", "~'")
           lc-text-aux = replace(lc-text-aux, "&lt;", "<")
           lc-text-aux = replace(lc-text-aux, "&gt;", ">").
    
	for first ptuA500:
        assign ptuA500.hash = string(hex-encode(md5-digest(lc-text-aux))).

        lc-text-aux = "".

        mFileAux = oGpsUtils:putStringAfter(mp-text-aux, "</ptu:arquivoA500>", "<ptu:hash>" + ptuA500.hash + "</ptu:hash>").
        set-size(mp-text-aux) = 0. 
        copy-lob from mFileAux to file nm-diretorio-exp-aux + nm-arquivo-xml-aux convert target codepage "ISO8859-1".
    end.

    salvar-json().

    set-size(mFileAux) = 0.

    run gera-arquivo-zip(input nm-diretorio-exp-aux + nm-arquivo-xml-aux).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure monta-nome-arquivo:

    def input  parameter nm-transacao-a500-par as char no-undo.
    def input  parameter nr-fatura-par        as char no-undo.
    def output parameter nm-arquivo-xml-par   as char no-undo.
    def output parameter nm-diretorio-exp-par as char no-undo.

    if nm-transacao-a500-par = NM_TRANS_A500_COBRANCA
    then do:
           assign nm-diretorio-exp-par = paramrc.char-28.
           run cria-nome-a500-cobranca
               (input nr-fatura-par,
                output nm-arquivo-xml-par).
    end.
    else do:
        assign nm-diretorio-exp-par = getParamGlobal("RC","dir-export-ptu-xml-A500-aviso").
        run cria-nome-a500-aviso 
            (output nm-arquivo-xml-par ).
    end.

    /* Ajusta Diretorio Exportacao */
    if  nm-diretorio-exp-par <> ""
    and nm-diretorio-exp-par <> ?
    then do:
           if  substring(nm-diretorio-exp-par,length(nm-diretorio-exp-par),1) <> "~/"
           and substring(nm-diretorio-exp-par,length(nm-diretorio-exp-par),1) <> "~\"
           then assign nm-diretorio-exp-par = nm-diretorio-exp-par + "/".
           
           if opsys <> "UNIX"
           then assign nm-diretorio-exp-par = replace(nm-diretorio-exp-par,"~/","~\").
         end.

end procedure.

procedure cria-nome-a500-cobranca:

    def input  parameter nr-fatura-par         as char no-undo.
    def output parameter nm-arquivo-xml-par    as char no-undo.
    
    /* Nome do arquivo A500 */
    if length(trim(nr-fatura-par)) > 7
    then assign nm-arquivo-xml-par = trim(substr(trim(nr-fatura-par),length(trim(nr-fatura-par)) - 6,7)).
    else assign nm-arquivo-xml-par = trim(nr-fatura-par).

    assign nm-arquivo-xml-par =  fill("_",7 - length(nm-arquivo-xml-par)) + nm-arquivo-xml-par.

    assign nm-arquivo-xml-par = "N" + nm-arquivo-xml-par + "." + substr(string(tmp-cabecalho.codUniOrigem,"9999"),02,03).
end.

procedure cria-nome-a500-aviso:

    def output parameter nm-arquivo-xml-par    as char no-undo.
    
    def var num-seq-arquivo-aux as int no-undo.

    /*Nome do arquivo: AVddmmaasss.uuu
    Sendo: AV = fixo indicando arquivo de aviso; ddmmaa a data da geracao do arquivo; sss uma sequencia de arquivos de 1 a 999 no mesmo dia, e uuu o codigo da Unimed Prestadora */
    assign num-seq-arquivo-aux = busca-sequencial-arq-aviso("RC", "SEQ_ARQUIVO_A500_AVISO").

    assign nm-arquivo-xml-par = string(day(today),"99")
                                + string(month(today),"99")
                                + substr(string(year(today),"9999"),03,02)
                                + string(num-seq-arquivo-aux, "999").
           
    assign nm-arquivo-xml-par = "AV" + nm-arquivo-xml-par + "."  + substr(string(tmp-cabecalho.codUniOrigem,"9999"),02,03).

end.

/* ------------------------------------------------------------------------------------- */
procedure gera-boleto:

    def var nome-arquivo-pdf-aux     as char no-undo.
    def var ds-caminho-boleto-aux    as char no-undo.

    empty temp-table tmpFilesList.

    /* Chama o webservice para geracao dos boletos */
    {hdp/hdrunpersis.i "hfp/bosau/bosau-billet-generation.p" "h-billet-generation-aux"}

    if avail tmp-fatura
    then do:
           assign nome-arquivo-pdf-aux = tmp-fatura.nroDocumento + fill("_", 20 - length(tmp-fatura.nroDocumento)).
           
           create tmpBilletParameterGeneration.
           assign tmpBilletParameterGeneration.cd-contratante-ini    = tmp-fatura.cdContratante
                  tmpBilletParameterGeneration.nr-fatura-ini         = tmp-fatura.nroFatura
                  tmpBilletParameterGeneration.cd-contratante-fim    = tmp-fatura.cdContratante
                  tmpBilletParameterGeneration.nr-fatura-fim         = tmp-fatura.nroFatura
                  tmpBilletParameterGeneration.nr-titulo-acr-ini     = tmp-fatura.nroDocumento
                  tmpBilletParameterGeneration.nr-titulo-acr-fim     = tmp-fatura.nroDocumento
                  tmpBilletParameterGeneration.nm-pdf-arquivo-ptu    = "N"
                                                                     + string(tmp-cabecalho.codUniOrigem,"999")
                                                                     + nome-arquivo-pdf-aux
                                                                     + string(tmp-cabecalho.codUniDestino,"999")
                                                                     + "01"
                                                                     + ".pdf".

           run p-grava-dados-boleto(input "FAT",
                                    input tmpBilletParameterGeneration.nm-pdf-arquivo-ptu).
    end.

    if avail tmp-ndr
    then do:
           empty temp-table tmpBilletParameterGeneration.
           assign nome-arquivo-pdf-aux = tmp-ndr.nroDocumento + fill("_", 20 - length(tmp-ndr.nroDocumento)).

           create tmpBilletParameterGeneration.
           assign tmpBilletParameterGeneration.cd-contratante-ini = tmp-ndr.cdContratante
                  tmpBilletParameterGeneration.nr-fatura-ini      = tmp-ndr.nroFatura
                  tmpBilletParameterGeneration.cd-contratante-fim = tmp-ndr.cdContratante
                  tmpBilletParameterGeneration.nr-fatura-fim      = tmp-ndr.nroFatura
                  tmpBilletParameterGeneration.nr-titulo-acr-ini  = tmp-ndr.nroDocumento
                  tmpBilletParameterGeneration.nr-titulo-acr-fim  = tmp-ndr.nroDocumento
                  tmpBilletParameterGeneration.nm-pdf-arquivo-ptu = "N"
                                                                  + string(tmp-cabecalho.codUniOrigem,"999")
                                                                  + nome-arquivo-pdf-aux
                                                                  + string(tmp-cabecalho.codUniDestino,"999")
                                                                  + "01"
                                                                  + ".pdf".

           run p-grava-dados-boleto(input "NDR",
                                    input tmpBilletParameterGeneration.nm-pdf-arquivo-ptu).
    end.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure p-grava-dados-boleto:

   define input parameter in-tipo-fatura-par     as char       no-undo.
   define input parameter nm-pdf-arquivo-ptu-par as char       no-undo.

   def var ds-caminho-boleto-aux                 as char       no-undo.

   assign tmpBilletParameterGeneration.idi-tipo-chamador     = WEBSERVICE_PROCESS
          tmpBilletParameterGeneration.idi-programa-chamador = PTU
          tmpBilletParameterGeneration.idi-tip-boleto        = 1
          tmpBilletParameterGeneration.idi-tip-layout        = DEFAULT_LAYOUT
          tmpBilletParameterGeneration.idi-tipo-geracao      = BILLET_PDF_GENERATION
          tmpBilletParameterGeneration.dt-emissao-ini        = 01/01/1999
          tmpBilletParameterGeneration.dt-emissao-fim        = 12/31/9999
          tmpBilletParameterGeneration.dt-vencimento-ini     = 01/01/1999
          tmpBilletParameterGeneration.dt-vencimento-fim     = 12/31/9999
          tmpBilletParameterGeneration.aa-referencia-ini     = 1900
          tmpBilletParameterGeneration.aa-referencia-fim     = 9999
          tmpBilletParameterGeneration.cd-portador-fim       = 99999
          tmpBilletParameterGeneration.mm-referencia-ini     = 1
          tmpBilletParameterGeneration.mm-referencia-fim     = 12
          tmpBilletParameterGeneration.nr-ter-adesao-ini     = 0
          tmpBilletParameterGeneration.nr-ter-adesao-fim     = 999999
          tmpBilletParameterGeneration.cd-modalidade-ini     = 0
          tmpBilletParameterGeneration.cd-modalidade-fim     = 99
          tmpBilletParameterGeneration.cd-convenio-ini 	     = 1
          tmpBilletParameterGeneration.cd-convenio-fim       = 99999999
          tmpBilletParameterGeneration.idi-ordenacao-processo = BILLET_ORDER_BY_CONTRACTING_PARTY.

   assign ds-caminho-boleto-aux = nm-diretorio-exp-aux.
           
   run billetDownloadProcess in h-billet-generation-aux(
       input "fatura",
       input "0", //cdd-config-layout-par
       input table tmpBilletParameterGeneration,
       input-output ds-caminho-boleto-aux,
       input-output table rowErrors) no-error.
   
   if containsAnyError(input table rowErrors)
   then return.

   /* Indica que ocorreu erro na geracao do PDF do Boleto */
   if index(ds-caminho-boleto-aux,".txt") <> 0
   then assign nm-pdf-arquivo-ptu-par = replace(nm-pdf-arquivo-ptu-par, ".pdf", ".txt").

   if in-tipo-fatura-par = "FAT"
   then assign ds-pdf-boleto-fat-aux = nm-diretorio-exp-aux + nm-pdf-arquivo-ptu-par.
   else assign ds-pdf-boleto-ndr-aux = nm-diretorio-exp-aux + nm-pdf-arquivo-ptu-par.
          
   os-copy value(ds-caminho-boleto-aux) value(nm-diretorio-exp-aux + nm-pdf-arquivo-ptu-par).
   os-delete value(ds-caminho-boleto-aux) no-error.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure gera-arquivo-zip:

    def input parameter ds-xml-ptu-par    as char no-undo.

    empty temp-table tmpTotvsCompactadorParameters.

    /* Parametro que devolve no LAP o ZIP contendo o arquivo PTU */
    assign nm-arquivo-ptu-par = ds-xml-ptu-par + ".zip".
    
    //Arquivo Boleto PDF
    create tmpFilesList.
    assign tmpFilesList.nm-arquivo = ds-pdf-boleto-fat-aux.

    if trim(ds-pdf-boleto-ndr-aux) <> ""
    then do:
           create tmpFilesList.
           assign tmpFilesList.nm-arquivo = ds-pdf-boleto-ndr-aux.
    end.

    //Arquivo PTU
    create tmpFilesList.
    assign tmpFilesList.nm-arquivo = ds-xml-ptu-par.

    create tmpTotvsCompactadorParameters.
    assign tmpTotvsCompactadorParameters.id-metodo           = 1 /*zipar*/
           tmpTotvsCompactadorParameters.nm-zip-final        = nm-arquivo-ptu-par
           tmpTotvsCompactadorParameters.lg-remove-arquivos  = yes.

    {hdp/hdrunpersis.i "bosau/bosaugenericroutines.p" "h-bosaugenericroutines-aux"}

    run callTotvsCompactador in h-bosaugenericroutines-aux (input  table tmpTotvsCompactadorParameters,
                                                            input  table tmpFilesList,
                                                            output table rowErrors) no-error.
    if error-status:error                                                                 
    then run insertErrorProgress(input "",                                                
                                 input "",                                              
                                 input-output table rowErrors).                         

    if containsAnyError(input table rowErrors)
    then return.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-UnimedPrestador:

    def input parameter cd-unidade-par   as int   no-undo.
    def input parameter cd-prestador-par as int   no-undo.
    def input parameter nm-campo-pai-par as char  no-undo.
    def input parameter nr-recid-pai-par as recid no-undo.

    create UnimedPrestador.
    assign UnimedPrestador.cd_Uni_Prest              = cd-unidade-par
           UnimedPrestador.cd_Prest                  = cd-prestador-par
           UnimedPrestador.contratadoExecutante_id   = ?
           UnimedPrestador.profissionalExecutante_id = ?
           UnimedPrestador.contratadoSolicitante_id  = ?
           UnimedPrestador.dadosExecutante_id        = ?
           UnimedPrestador.dadosExecutante1_id       = ?.

    assign temp-table UnimedPrestador:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosConselho:

    def input parameter cd-conselho-par    as char  no-undo.
    def input parameter nr-registro-par    as char  no-undo.
    def input parameter cd-uf-conselho-par as char  no-undo.
    def input parameter nm-campo-pai-par   as char  no-undo.
    def input parameter nr-recid-pai-par   as recid no-undo.

    create dadosConselho.
    assign dadosConselho.sg_Conselho               = trim(upper(cd-conselho-par))
           dadosConselho.nr_Conselho               = oGpsUtils:removeCharEspecialTodos(removeCharEspecialTodos(nr-registro-par))
           dadosConselho.UF                        = oGpsPtuUtils:converteUf(cd-uf-conselho-par)
           dadosConselho.profissionalExecutante_id = ?
           dadosConselho.profissional_id           = ?
           dadosConselho.equipe_Profissional_id    = ?
           dadosConselho.equipe_reembolso_id       = ?.

    assign temp-table dadosConselho:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-CPF_CNPJ:

    def input parameter cd-cpf-par       as dec   no-undo.
    def input parameter cd-cnpj-par      as dec   no-undo.
    def input parameter nm-campo-pai-par as char  no-undo.
    def input parameter nr-recid-pai-par as recid no-undo.

    create CPF_CNPJ.
    assign CPF_CNPJ.cd_cpf                  = formataCPF(cd-cpf-par)
           CPF_CNPJ.cd_cnpj                 = formataCNPJ(cd-cnpj-par)
           CPF_CNPJ.contratadoExecutante_id = ?
           CPF_CNPJ.dadosExecutante_id      = ?.

    assign temp-table CPF_CNPJ:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-prestador-dadosExecutante:

    def input parameter cd-ibge-par        as int   no-undo.
    def input parameter tp-rede-par        as int   no-undo.
    def input parameter tp-prest-par       as int   no-undo.
    def input parameter lg-rec-proprio-par as log   no-undo.
    def input parameter nm-campo-pai-par   as char  no-undo.
    def input parameter nr-recid-pai-par   as recid no-undo.

    create prestador.
    assign prestador.cd_MunicipioCont        = cd-ibge-par
           prestador.tp_RedeMin              = tp-rede-par
           prestador.tp_Prestador            = string(tp-prest-par,"99")
           prestador.id_RecProprio           = oGpsPtuUtils:formataBooleanPTU(lg-rec-proprio-par)
           prestador.contratadoExecutante_id = ?
           prestador.dadosExecutante_id      = ?
           prestador.dadosExecutante1_id     = ?.

    assign temp-table prestador:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosBeneficiario:

    def input parameter cd-unidade-carteira-par as int   no-undo.
    def input parameter cd-carteira-par         as dec   no-undo.
    def input parameter nm-usuario-par          as char  no-undo.
    def input parameter lg-rn-par               as log   no-undo.
    def input parameter tp-paciente-par         as int   no-undo.
    def input parameter nm-campo-pai-par        as char  no-undo.
    def input parameter nr-recid-pai-par        as recid no-undo.

    create dadosBeneficiario.
    assign dadosBeneficiario.cd_Unimed         = cd-unidade-carteira-par
           dadosBeneficiario.id_Benef          = string(cd-carteira-par,"9999999999999")
           dadosBeneficiario.nm_Benef          = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-usuario-par)),25)
           dadosBeneficiario.id_RN             = oGpsPtuUtils:formataBooleanPTU(lg-rn-par)
           dadosBeneficiario.tp_Paciente       = tp-paciente-par
           dadosBeneficiario.guiaConsulta_id   = ?
           dadosBeneficiario.guiaSADT_id       = ?
           dadosBeneficiario.guiaInternacao_id = ?
           dadosBeneficiario.guiaHonorarios_id = ?.

    assign temp-table dadosBeneficiario:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosBeneficiario1:

    def input parameter cd-unidade-carteira-par as int   no-undo.
    def input parameter cd-carteira-par         as dec   no-undo.
    def input parameter nm-usuario-par          as char  no-undo.
    def input parameter dt-nascimento-par       as date  no-undo.
    def input parameter lg-sexo-par             as log   no-undo.
    def input parameter lg-rn-par               as log   no-undo.
    def input parameter nm-campo-pai-par        as char  no-undo.
    def input parameter nr-recid-pai-par        as recid no-undo.

    create dadosBeneficiario1.
	assign dadosBeneficiario1.cd_Unimed = cd-unidade-carteira-par
	       dadosBeneficiario1.id_Benef  = string(cd-carteira-par,"9999999999999")    
           dadosBeneficiario1.nm_Benef  = if nm-usuario-par <> ""
		                                  then oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-usuario-par)),25)
										  else ""
           dadosBeneficiario1.dt_Nasc   = if dt-nascimento-par <> ?
		                                  then oGpsPtuUtils:formataData(dt-nascimento-par)
										  else ""
           dadosBeneficiario1.tp_Sexo   = if lg-sexo-par = ?
		                                  then ""
										  else if lg-sexo-par
                                               then "M"
                                               else "F"
           dadosBeneficiario1.id_RN     = if lg-rn-par <> ?
		                                  then oGpsPtuUtils:formataBooleanPTU(lg-rn-par)
										  else ""
	       dadosBeneficiario1.notaFiscal_Fornecedor_id = ? 
	       dadosBeneficiario1.reembolso_id             = ? 
	       dadosBeneficiario1.RessarcimentoSus_id      = ?.

    assign temp-table dadosBeneficiario1:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-NFE:

    def input parameter nr-nota-fiscal-par as char  no-undo.
    def input parameter ds-link-nfe-par    as char  no-undo.
    def input parameter nm-campo-pai-par   as char  no-undo.
    def input parameter nr-recid-pai-par   as recid no-undo.

    create NFE.
    assign NFE.nr_NotaFiscalDoc = nr-nota-fiscal-par
           NFE.link_NFeDoc      = ds-link-nfe-par
           NFE.documento1_id    = ?
           NFE.documento2_id    = ?.

    assign temp-table NFE:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosGuia:

    def input  parameter nr-versao-tiss-par         as char  no-undo.
    def input  parameter tp-consulta-par            as int   no-undo.
    def input  parameter nr-lote-prest-par          as char  no-undo.
    def input  parameter dt-protocolo-par           as date  no-undo.
    def input  parameter dt-conhecimento-par        as date  no-undo.
    def input  parameter in-acidente-par            as int   no-undo.
    def input  parameter dt-atendimento-par         as date  no-undo.
    def input  parameter hr-atendimento-par         as char  no-undo.
    def input  parameter lg-liminar-par             as log   no-undo.
    def input  parameter lg-continuado-par          as log   no-undo.
    def input  parameter lg-aviso-par               as log   no-undo.
    def input  parameter cd-excecao-par             as char  no-undo.
    def input  parameter lg-glosa-total-par         as log   no-undo.
    def input  parameter nr-guia-tiss-prest-par     as char  no-undo.
    def input  parameter nr-guia-tiss-operadora-par as char  no-undo.
    def input  parameter ds-ind-clinica-par         as char  no-undo.
    def input  parameter ds-observacao-par          as char  no-undo.
    def input  parameter des-justif-tec-par         as char  no-undo.
    def input  parameter des-espcif-mater-par       as char  no-undo.
    def input  parameter nm-campo-pai-par           as char  no-undo.
    def input  parameter nr-recid-pai-par           as recid no-undo.
    def output parameter nr-recid-dadosGuia-par     as recid no-undo.

    create dadosGuia.
    assign dadosGuia.nr_Ver_TISS      = (if nr-versao-tiss-par = "" then "2.02.03" else nr-versao-tiss-par)
           dadosGuia.tp_Consulta      = tp-consulta-par
	       dadosGuia.nr_LotePrestador = oGpsPtuUtils:formataTexto(trim(nr-lote-prest-par),12)
	       dadosGuia.dt_Protocolo     = oGpsPtuUtils:formataData(dt-protocolo-par)
	       dadosGuia.dt_Conhecimento  = oGpsPtuUtils:formataData(dt-conhecimento-par)
	       dadosGuia.tp_IndAcidente   = oGpsPtuUtils:formataTexto(trim(string(in-acidente-par)),1)
	       dadosGuia.dt_Atendimento   = oGpsPtuUtils:formataData1(dt-atendimento-par,hr-atendimento-par)
	       dadosGuia.id_Liminar       = oGpsPtuUtils:formataBooleanPTU(lg-liminar-par)
	       dadosGuia.id_Continuado    = oGpsPtuUtils:formataBooleanPTU(lg-continuado-par)
	       dadosGuia.id_Avisado       = oGpsPtuUtils:formataBooleanPTU(lg-aviso-par)
	       dadosGuia.cd_Excecao       = oGpsPtuUtils:formataTexto(trim(cd-excecao-par),1)
	       dadosGuia.id_GlosaTotal    = oGpsPtuUtils:formataBooleanPTU(lg-glosa-total-par)
           dadosGuia.guiaConsulta_id  = ?.

    assign temp-table dadosGuia:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    assign nr-recid-dadosGuia-par = recid(dadosGuia).

    /* tag nr_Guias */
    run cria-tag-dadosGuia-guias (
        input nr-guia-tiss-prest-par,
        input nr-guia-tiss-operadora-par,
        input cd-excecao-par,
        input "dadosGuia_id",
        input nr-recid-dadosGuia-par).

    /* tag Complemento */
    run cria-tag-dadosGuia-complemento (
        input ds-ind-clinica-par,
        input ds-observacao-par,
        input des-justif-tec-par,
        input des-espcif-mater-par,
        input "dadosGuia_id",
        input nr-recid-dadosGuia-par).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosGuia-guias:

    def input parameter nr-guia-tiss-prest-par     as char  no-undo.
    def input parameter nr-guia-tiss-operadora-par as char  no-undo.
    def input parameter cd-excecao-par             as char  no-undo.
    def input parameter nm-campo-pai-par           as char  no-undo.
    def input parameter nr-recid-pai-par           as recid no-undo.

    if cd-excecao-par = "J" 
    then do:
           find first nr_Guias where nr_Guias.nr_GuiaTissPrestador = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-prest-par),20)       
                                 and nr_Guias.nr_GuiaTissOperadora = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-operadora-par),20) no-lock no-error.
           if avail nr_Guias 
           then assign nr-guia-tiss-operadora-par = nr-guia-tiss-operadora-par + "_J"
                       nr-guia-tiss-prest-par     = nr-guia-tiss-prest-par + "_J". 
         end.

    create nr_Guias.
	assign nr_Guias.nr_GuiaTissPrestador = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-prest-par),20)    
	       nr_Guias.nr_GuiaTissOperadora = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-operadora-par),20).

    assign temp-table nr_Guias:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosGuia-complemento:

    def input parameter ds-ind-clinica-par   as char  no-undo.
    def input parameter ds-observacao-par    as char  no-undo.
    def input parameter des-justif-tec-par   as char  no-undo.
    def input parameter des-espcif-mater-par as char  no-undo.
    def input parameter nm-campo-pai-par     as char  no-undo.
    def input parameter nr-recid-pai-par     as recid no-undo.

    assign ds-ind-clinica-par   = oGpsUtils:removeCharEspecExporta(oGpsPtuUtils:formataTexto(trim(ds-ind-clinica-par),500))
           ds-observacao-par    = oGpsUtils:removeCharEspecExporta(oGpsPtuUtils:formataTexto(trim(ds-observacao-par),500))
           des-justif-tec-par   = oGpsUtils:removeCharEspecExporta(oGpsPtuUtils:formataTexto(trim(des-justif-tec-par),500))
           des-espcif-mater-par = oGpsUtils:removeCharEspecExporta(oGpsPtuUtils:formataTexto(trim(des-espcif-mater-par),500)).

    if  trim(ds-ind-clinica-par) <> ""
    and trim(ds-ind-clinica-par) <> ?
    then run cria-tag-complemento (
            input 1,
            input ds-ind-clinica-par,
            input nm-campo-pai-par,
            input nr-recid-pai-par).

    if  trim(ds-observacao-par) <> ""
    and trim(ds-observacao-par) <> ?
    then run cria-tag-complemento (
            input 2,
            input ds-observacao-par,
            input nm-campo-pai-par,
            input nr-recid-pai-par).

    if  trim(des-justif-tec-par) <> ""
    and trim(des-justif-tec-par) <> ?
    then run cria-tag-complemento (
            input 3,
            input des-justif-tec-par,
            input nm-campo-pai-par,
            input nr-recid-pai-par).

    if  trim(des-espcif-mater-par) <> ""
    and trim(des-espcif-mater-par) <> ?
    then run cria-tag-complemento (
            input 4,
            input des-espcif-mater-par,
            input nm-campo-pai-par,
            input nr-recid-pai-par).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-complemento:

    def input parameter tp-registro-par      as int   no-undo.
    def input parameter ds-complemento-par   as char  no-undo.
    def input parameter nm-campo-pai-par     as char  no-undo.
    def input parameter nr-recid-pai-par     as recid no-undo.
    
    create complemento.
    assign complemento.tp_RegCPL          = tp-registro-par
	       complemento.nm_DescComplemento = ds-complemento-par.

    assign temp-table complemento:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosAutorizacao:

    def input parameter dt-solicitacao-par         as date  no-undo.
    def input parameter nr-autorizacao-par         as dec   no-undo.
    def input parameter cd-unidade-autor-par       as int   no-undo.
    def input parameter dt-autorizacao-par         as date  no-undo.
    def input parameter tp-autorizacao-par         as int    no-undo.
    def input parameter nm-campo-pai-par           as char  no-undo.
    def input parameter nr-recid-pai-par           as recid no-undo.

    create dadosAutorizacao.
	assign dadosAutorizacao.dt_Solicitacao             = oGpsPtuUtils:formataData(dt-solicitacao-par)
           dadosAutorizacao.nr_Autorizacao             = nr-autorizacao-par
	       dadosAutorizacao.cd_UniAutorizadora         = cd-unidade-autor-par
	       dadosAutorizacao.dt_Autorizacao             = oGpsPtuUtils:formataData(dt-autorizacao-par)
	       dadosAutorizacao.tp_Autorizacao             = dec(tp-autorizacao-par)
	       dadosAutorizacao.dadosGuia_id               = ?
	       dadosAutorizacao.procedimentosExecutados_id = ?.

    assign temp-table dadosAutorizacao:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosSolicitante:

    def input parameter cd-unidade-solic-par       as int   no-undo.
    def input parameter cd-prest-solic-par         as int   no-undo.
    def input parameter nr-cpf-solic-par           as dec   no-undo.
    def input parameter nr-cnpj-solic-par          as dec   no-undo.
    def input parameter nm-solic-par               as char  no-undo.
    def input parameter nm-profissional-par        as char  no-undo.
    def input parameter cd-conselho-req-par        as char  no-undo.
    def input parameter nr-conselho-req-par        as char  no-undo.
    def input parameter uf-conselho-req-par        as char  no-undo.
    def input parameter cd-cbo-req-par             as char  no-undo.
    def input parameter nm-campo-pai-par           as char  no-undo.
    def input parameter nr-recid-pai-par           as recid no-undo.

    create dadosSolicitante.
    assign dadosSolicitante.guiaSADT_id       = ?
           dadosSolicitante.guiaInternacao_id = ?.

    assign temp-table dadosSolicitante:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    run cria-tag-contratadoSolicitante(
        input cd-unidade-solic-par,
        input cd-prest-solic-par,
        input nr-cpf-solic-par,
        input nr-cnpj-solic-par,
        input nm-solic-par,
        input "dadosSolicitante_id",
        input recid(dadosSolicitante)).
    
    run cria-tag-profissional(
        input nm-profissional-par,
        input cd-conselho-req-par,
        input nr-conselho-req-par,
        input uf-conselho-req-par,
        input cd-cbo-req-par,
        input "dadosSolicitante_id",
        input recid(dadosSolicitante)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-contratadoSolicitante:

    def input parameter cd-unidade-solic-par       as int   no-undo.
    def input parameter cd-prest-solic-par         as int   no-undo.
    def input parameter nr-cpf-solic-par           as dec   no-undo.
    def input parameter nr-cnpj-solic-par          as dec   no-undo.
    def input parameter nm-solic-par               as char  no-undo.
    def input parameter nm-campo-pai-par           as char  no-undo.
    def input parameter nr-recid-pai-par           as recid no-undo.

    create contratadoSolicitante.
    assign contratadoSolicitante.nome                = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-solic-par)),60)
           contratadoSolicitante.dadosSolicitante_id = ?.

    assign temp-table contratadoSolicitante:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    run cria-tag-cpf_cnpj2(
        input nr-cpf-solic-par,
        input nr-cnpj-solic-par,
        input "contratadoSolicitante_id",
        input recid(contratadoSolicitante)).

    run cria-tag-UnimedPrestador(
        input cd-unidade-solic-par,
        input cd-prest-solic-par,
        input "contratadoSolicitante_id",
        input recid(contratadoSolicitante)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-cpf_cnpj2:

    def input parameter nr-cpf-solic-par           as dec   no-undo.
    def input parameter nr-cnpj-solic-par          as dec   no-undo.
    def input parameter nm-campo-pai-par           as char  no-undo.
    def input parameter nr-recid-pai-par           as recid no-undo.

    if  formataCPF(nr-cpf-solic-par)   = ""
    and formataCNPJ(nr-cnpj-solic-par) = ""    
    then return.

    create cpf_cnpj2.
    assign cpf_cnpj2.cd_cpf                   = formataCPF(nr-cpf-solic-par)
           cpf_cnpj2.cd_cnpj                  = formataCNPJ(nr-cnpj-solic-par)
           cpf_cnpj2.contratadoSolicitante_id = ?.

    assign temp-table cpf_cnpj2:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-profissional:

    def input parameter nm-profissional-par as char  no-undo.
    def input parameter cd-conselho-req-par as char  no-undo.
    def input parameter nr-conselho-req-par as char  no-undo.
    def input parameter uf-conselho-req-par as char  no-undo.
    def input parameter cd-cbo-req-par      as char  no-undo.
    def input parameter nm-campo-pai-par    as char  no-undo.
    def input parameter nr-recid-pai-par    as recid no-undo.

    create profissional.
    assign profissional.nm_Profissional     = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-profissional-par)),60)
		   profissional.CBO                 = oGpsPtuUtils:formataTexto(replace(cd-cbo-req-par,".",""),6)
           profissional.dadosSolicitante_id = ?.

    assign temp-table profissional:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    run cria-tag-dadosConselho(
        input cd-conselho-req-par,
        input nr-conselho-req-par,
        input uf-conselho-req-par,
        input "profissional_id",
        input recid(profissional)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosExecutante:

    def input parameter cd-unidade-exec-par     as int   no-undo.
    def input parameter cd-prestador-exec-par   as int   no-undo.
    def input parameter nm-prest-exec-par       as char  no-undo.
    def input parameter cd-cpf-exec-par         as dec   no-undo.
    def input parameter cd-cnpj-exec-par        as dec   no-undo.
    def input parameter cd-cnes-exec-par        as char  no-undo.
    def input parameter cd-ibge-exec-par        as int   no-undo.
    def input parameter tp-rede-exec-par        as int   no-undo.
    def input parameter tp-prest-exec-par       as int   no-undo.
    def input parameter lg-rec-proprio-exec-par as log   no-undo.
    def input parameter nm-campo-pai-par        as char  no-undo.
    def input parameter nr-recid-pai-par        as recid no-undo.
    
    create dadosExecutante.
    assign dadosExecutante.nome              = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-prest-exec-par)),60)    
           dadosExecutante.CNES              = cd-cnes-exec-par
           dadosExecutante.guiaSADT_id       = ?
           dadosExecutante.guiaHonorarios_id = ?.

    assign temp-table dadosExecutante:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    if  cd-unidade-exec-par   > 0
    and cd-prestador-exec-par > 0
    then run cria-tag-UnimedPrestador(
        input cd-unidade-exec-par,
        input cd-prestador-exec-par,
        input "dadosExecutante_id",
        input recid(dadosExecutante)).

    run cria-tag-CPF_CNPJ(
        input cd-cpf-exec-par,
        input cd-cnpj-exec-par,
        input "dadosExecutante_id",
        input recid(dadosExecutante)).

    run cria-tag-prestador-dadosExecutante(
        input cd-ibge-exec-par,
        input tp-rede-exec-par,
        input tp-prest-exec-par,
        input lg-rec-proprio-exec-par,
        input "dadosExecutante_id",
        input recid(dadosExecutante)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosExecutante1:

    def input parameter cd-unidade-exec-par     as int   no-undo.
    def input parameter cd-prestador-exec-par   as int   no-undo.
    def input parameter nm-prest-exec-par       as char  no-undo.
    def input parameter cd-cnpj-exec-par        as dec   no-undo.
    def input parameter cd-cnes-exec-par        as char  no-undo.
    def input parameter cd-ibge-exec-par        as int   no-undo.
    def input parameter tp-rede-exec-par        as int   no-undo.
    def input parameter tp-prest-exec-par       as int   no-undo.
    def input parameter lg-rec-proprio-exec-par as log   no-undo.
    def input parameter nm-campo-pai-par        as char  no-undo.
    def input parameter nr-recid-pai-par        as recid no-undo.
    
    create dadosExecutante1.
    assign dadosExecutante1.nome              = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-prest-exec-par)),60)
           dadosExecutante1.CNES              = cd-cnes-exec-par
           dadosExecutante1.CNPJ              = formataCNPJ(cd-cnpj-exec-par)
           dadosExecutante1.guiaInternacao_id = ?.

    assign temp-table dadosExecutante1:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    run cria-tag-UnimedPrestador(
        input cd-unidade-exec-par,
        input cd-prestador-exec-par,
        input "dadosExecutante1_id",
        input recid(dadosExecutante1)).

    run cria-tag-prestador-dadosExecutante(
        input cd-ibge-exec-par,
        input tp-rede-exec-par,
        input tp-prest-exec-par,
        input lg-rec-proprio-exec-par,
        input "dadosExecutante1_id",
        input recid(dadosExecutante1)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosAtendimento:

    def input parameter tp-atend-par            as int   no-undo.
    def input parameter in-acidente-par         as char  no-undo.
    def input parameter tp-consulta-par         as char  no-undo.
    def input parameter tp-carater-atend-par    as int   no-undo.
    def input parameter cd-mot-encerramento-par as int   no-undo.
    def input parameter nm-campo-pai-par        as char  no-undo.
    def input parameter nr-recid-pai-par        as recid no-undo.
    
    create dadosAtendimento.
    assign dadosAtendimento.tp_Atendimento     = string(tp-atend-par,"99")
           dadosAtendimento.tp_IndAcidente     = oGpsPtuUtils:formataTexto(trim(string(in-acidente-par)),1)
           dadosAtendimento.tp_Consulta        = int(tp-consulta-par)
           dadosAtendimento.caraterAtendimento = tp-carater-atend-par
           dadosAtendimento.mv_Encerramento    = (if cd-mot-encerramento-par > 0
                                                  then string(cd-mot-encerramento-par,"99")
                                                  else "")
           dadosAtendimento.guiaSADT_id        = ?.

    assign temp-table dadosAtendimento:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosGuia1:

    def input  parameter nr-versao-tiss-par         as char  no-undo.
    def input  parameter nr-lote-prest-par          as char  no-undo.
    def input  parameter dt-protocolo-par           as date  no-undo.
    def input  parameter dt-conhecimento-par        as date  no-undo.
    def input  parameter dt-atendimento-par         as date  no-undo.
    def input  parameter hr-atendimento-par         as char  no-undo.
    def input  parameter lg-liminar-par             as log   no-undo.
    def input  parameter lg-continuado-par          as log   no-undo.
    def input  parameter lg-aviso-par               as log   no-undo.
    def input  parameter cd-excecao-par             as char  no-undo.
    def input  parameter lg-glosa-total-par         as log   no-undo.
    def input  parameter nr-guia-tiss-prest-par     as char  no-undo.
    def input  parameter nr-guia-tiss-operadora-par as char  no-undo.
    def input  parameter nr-guia-tiss-principal-par as char  no-undo.
    def input  parameter dt-ult-autorizacao-par     as date  no-undo.
    def input  parameter lg-nota-principal-par      as log   no-undo.
    def input  parameter ds-ind-clinica-par         as char  no-undo.
    def input  parameter ds-observacao-par          as char  no-undo.
    def input  parameter des-justif-tec-par         as char  no-undo.
    def input  parameter des-espcif-mater-par       as char  no-undo.
    def input  parameter nm-campo-pai-par           as char  no-undo.
    def input  parameter nr-recid-pai-par           as recid no-undo.
    def output parameter nr-recid-dadosGuia1-par    as recid no-undo.

    create dadosGuia1.
    assign dadosGuia1.nr_Ver_TISS          = (if nr-versao-tiss-par = "" then "2.02.03" else nr-versao-tiss-par)
	       dadosGuia1.nr_LotePrestador     = oGpsPtuUtils:formataTexto(trim(nr-lote-prest-par),12)
	       dadosGuia1.dt_Protocolo         = oGpsPtuUtils:formataData(dt-protocolo-par)
	       dadosGuia1.dt_Conhecimento      = oGpsPtuUtils:formataData(dt-conhecimento-par)
	       dadosGuia1.dt_Atendimento       = oGpsPtuUtils:formataData1(dt-atendimento-par,hr-atendimento-par)
	       dadosGuia1.id_Liminar           = oGpsPtuUtils:formataBooleanPTU(lg-liminar-par)
	       dadosGuia1.id_Continuado        = oGpsPtuUtils:formataBooleanPTU(lg-continuado-par)
	       dadosGuia1.id_Avisado           = oGpsPtuUtils:formataBooleanPTU(lg-aviso-par)
	       dadosGuia1.cd_Excecao           = oGpsPtuUtils:formataTexto(trim(cd-excecao-par),1)
	       dadosGuia1.id_GlosaTotal        = oGpsPtuUtils:formataBooleanPTU(lg-glosa-total-par)
           dadosGuia1.dt_UltimaAutorizacao = oGpsPtuUtils:formataData(dt-ult-autorizacao-par)
           dadosGuia1.guiaInternacao_id    = ?
           dadosGuia1.guiaHonorarios_id    = ?
           dadosGuia1.guiaSADT_id          = ?.

    if lg-nota-principal-par <> ?
    then assign dadosGuia1.id_GuiaPrincipal = oGpsPtuUtils:formataBooleanPTU(lg-nota-principal-par).
    else assign dadosGuia1.id_GuiaPrincipal = "".

    assign temp-table dadosGuia1:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    assign nr-recid-dadosGuia1-par = recid(dadosGuia1).

    /* tag nr_Guias */
    run cria-tag-nr_Guias1 (
        input nr-guia-tiss-prest-par,
        input nr-guia-tiss-operadora-par,
        input nr-guia-tiss-principal-par,
        input cd-excecao-par,
        input "dadosGuia1_id",
        input nr-recid-dadosGuia1-par).

    /* tag Complemento */
    run cria-tag-dadosGuia-complemento (
        input ds-ind-clinica-par,
        input ds-observacao-par,
        input des-justif-tec-par,
        input des-espcif-mater-par,
        input "dadosGuia1_id",
        input nr-recid-dadosGuia1-par).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-nr_Guias1:

    def input parameter nr-guia-tiss-prest-par     as char  no-undo.
    def input parameter nr-guia-tiss-operadora-par as char  no-undo.
    def input parameter nr-guia-tiss-principal-par as char  no-undo.
    def input parameter cd-excecao-par             as char  no-undo.
    def input parameter nm-campo-pai-par           as char  no-undo.
    def input parameter nr-recid-pai-par           as recid no-undo.

    if cd-excecao-par = "J" 
    then do:
           find first nr_Guias1 where nr_Guias1.nr_GuiaTissPrestador = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-prest-par),20)       
                                  and nr_Guias1.nr_GuiaTissOperadora = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-operadora-par),20) 
                                  and nr_Guias1.nr_GuiaTissPrincipal = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-principal-par),20) no-lock no-error.
           if avail nr_Guias1 
           then assign nr-guia-tiss-operadora-par = nr-guia-tiss-operadora-par + "_J"
                       nr-guia-tiss-prest-par     = nr-guia-tiss-prest-par + "_J". 

           find first nr_Guias1 where nr_Guias1.nr_GuiaTissPrestador = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-prest-par),20)       
                                  and nr_Guias1.nr_GuiaTissOperadora = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-operadora-par),20) 
                                  and nr_Guias1.nr_GuiaTissPrincipal = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-principal-par),20) no-lock no-error.
           if avail nr_Guias1 
           then assign nr-guia-tiss-operadora-par = nr-guia-tiss-operadora-par + "_J1"
                       nr-guia-tiss-prest-par     = nr-guia-tiss-prest-par + "_J1". 

         end.

    create nr_Guias1.
	assign nr_Guias1.nr_GuiaTissPrestador = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-prest-par),20)    
	       nr_Guias1.nr_GuiaTissOperadora = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-operadora-par),20)
           nr_Guias1.nr_GuiaTissPrincipal = oGpsPtuUtils:formataTexto(trim(nr-guia-tiss-principal-par),20)
           nr_Guias1.dadosGuia1_id        = ?.

    assign temp-table nr_Guias1:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-procedimentos-consulta:

    def input parameter nr-seq-item-par       as dec   no-undo.
    def input parameter nr-seq-item-unico-par as char  no-undo.
    def input parameter id-aviso-item-par     as log   no-undo.
    def input parameter tp-tabela             as char  no-undo.
    def input parameter cd-servicao-par       as char  no-undo.
    def input parameter vl-servico-cob-par    as char  no-undo.
    def input parameter vl-taxa-cobrado-par   as char  no-undo. 
    def input parameter in-ato-medicopar      as int   no-undo.      
    def input parameter nm-campo-pai-par      as char  no-undo.
    def input parameter nr-recid-pai-par      as recid no-undo.

    create procedimentos.
	assign procedimentos.seq_item       = nr-seq-item-par
           procedimentos.id_itemUnico   = oGpsPtuUtils:formataTexto(nr-seq-item-unico-par,28)
           procedimentos.id_AvisadoItem = oGpsPtuUtils:formataBooleanPTU(id-aviso-item-par)
	       procedimentos.tp_Tabela      = oGpsPtuUtils:formataTexto(tp-tabela,2)          
	       procedimentos.cd_Servico     = oGpsPtuUtils:formataTexto(cd-servicao-par,10)    
	       procedimentos.vl_ServCobrado = vl-servico-cob-par                   
	       procedimentos.tx_AdmServico  = vl-taxa-cobrado-par                
           procedimentos.cd_Ato         = string(in-ato-medicopar,"9").   

    assign temp-table procedimentos:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-procedimentos:

    def input parameter nr-seq-item-par       as dec   no-undo.
    def input parameter nr-seq-item-unico-par as char  no-undo.
    def input parameter tp-tabela             as char  no-undo.
    def input parameter cd-servico-par        as char  no-undo.
    def input parameter ds-servico-par        as char  no-undo.
    def input parameter qt-cobrado-par        as dec   no-undo.
    def input parameter nm-campo-pai-par      as char  no-undo.
    def input parameter nr-recid-pai-par      as recid no-undo.

    create procedimentos1.
	assign procedimentos1.seq_item    = nr-seq-item-par
           procedimentos1.id_itemUnico= oGpsPtuUtils:formataTexto(nr-seq-item-unico-par,28)
	       procedimentos1.tp_Tabela   = oGpsPtuUtils:formataTexto(tp-tabela,2)          
	       procedimentos1.cd_Servico  = oGpsPtuUtils:formataTexto(cd-servico-par,10)
           procedimentos1.ds_Servico  = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(ds-servico-par)),80)
           procedimentos1.qt_Cobrada  = qt-cobrado-par.

    assign temp-table procedimentos1:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure procedimentos-executados-honorarios:

    def input parameter nr-recid-dadosGuia1-par as recid no-undo.
    def parameter buffer b-tmp-documento for tmp-documento.

    def var nr-recid-procedimentosExecutados-par as recid no-undo.

    for each tmp-procedimento
       where tmp-procedimento.id-docto = tmp-documento.id-docto
             no-lock:

        run cria-tag-procedimentosExecutados (
            input tmp-procedimento.dt-realizacao,
            input tmp-procedimento.hr-realizacao,
            input tmp-procedimento.hr-realizacao-fin,
            input tmp-procedimento.cd-via-acesso,   
            input tmp-procedimento.tp-tec-util,    
            input tmp-procedimento.lg-urgencia,
            input 0, /*unidade medida*/
            input tmp-procedimento.qt-fat-mult,
            input tmp-procedimento.id-aviso-item,
            input tmp-procedimento.cd-porte-anestesico,
            input tmp-procedimento.in-ato-medico,
            input converteValor(  tmp-procedimento.vl-honorario-medico
                                + tmp-procedimento.vl-operacional     
                                + tmp-procedimento.vl-filme),
            input (if tmp-procedimento.vl-taxa-honorario   > 0
                   or tmp-procedimento.vl-taxa-operacional > 0
                   or tmp-procedimento.vl-taxa-filme       > 0
                   then converteValor(  tmp-procedimento.vl-taxa-honorario  
                                      + tmp-procedimento.vl-taxa-operacional
                                      + tmp-procedimento.vl-taxa-filme)
                   else ""),
            input ?, 
            input "", /*cd pacote*/
            input "dadosGuia1_id",
            input nr-recid-dadosGuia1-par,
            output nr-recid-procedimentosExecutados-par).

        run cria-tag-procedimentos (
            input tmp-procedimento.nr-seq-item,
            input tmp-procedimento.nr-seq-item-unico,
            input tmp-procedimento.tp-tabela,
            input tmp-procedimento.cd-servico,
            input "",
            input tmp-procedimento.qt-procedimentos,
            input "procedimentosExecutados_id",
            input nr-recid-procedimentosExecutados-par).  

        for each tmp-equipe 
           where tmp-equipe.nr-seq-item-unico-proc = tmp-procedimento.nr-seq-item-unico 
             and tmp-equipe.nr-processo            = tmp-procedimento.nr-processo
             and tmp-equipe.nr-seq-digitacao       = tmp-procedimento.nr-seq-digitacao
                 no-lock:
     
            run cria-tag-equipe_profissional(
	            input tmp-equipe.cd-tipo-part, 
	            input tmp-equipe.cd-unidade-prestador,
	            input tmp-equipe.cd-prestador,            
	            input tmp-equipe.nm-prest-exec,      
	            input tmp-equipe.cd-cpf-profis-exec, 
	            input tmp-equipe.cd-cbo-prof-exec,   
	            input tmp-equipe.cd-conselho,        
	            input tmp-equipe.nr-registro,        
	            input tmp-equipe.cd-uf-conselho,    
	       	 input "procedimentosExecutados_id",
	            input nr-recid-procedimentosExecutados-par).
        end.

        if b-tmp-documento.nr-autorizacao > 0
        then run cria-tag-dadosAutorizacao(
                 input b-tmp-documento.dt-solicitacao,
                 input b-tmp-documento.nr-autorizacao,
                 input b-tmp-documento.cd-unid-autoriz,
                 input b-tmp-documento.dt-autorizacao,
                 input b-tmp-documento.tp-autorizacao,
                 input "procedimentosExecutados_id",
                 input nr-recid-procedimentosExecutados-par).          
    end.
end procedure.

/* ------------------------------------------------------------------------------------- */
procedure procedimentos-executados:

    def input parameter nr-recid-dadosGuia1-par as recid no-undo.
    def parameter buffer b-tmp-documento for tmp-documento.

    def var nr-recid-procedimentosExecutados-par as recid no-undo.

    for each tmp-procedimento
       where tmp-procedimento.id-docto = tmp-documento.id-docto
             no-lock:

        run cria-tag-procedimentosExecutados (
            input tmp-procedimento.dt-realizacao,
            input tmp-procedimento.hr-realizacao,
            input tmp-procedimento.hr-realizacao-fin,
            input tmp-procedimento.cd-via-acesso,   
            input tmp-procedimento.tp-tec-util,    
            input tmp-procedimento.lg-urgencia,
            input 0, /*unidade medida*/
            input tmp-procedimento.qt-fat-mult,
            input tmp-procedimento.id-aviso-item,
            input tmp-procedimento.cd-porte-anestesico,
            input tmp-procedimento.in-ato-medico,
            input "",
            input "",
            input tmp-procedimento.id-pacote,
            input "", /*cd pacote*/
            input "dadosGuia1_id",
            input nr-recid-dadosGuia1-par,
            output nr-recid-procedimentosExecutados-par).

        run cria-tag-procedimentos (
            input tmp-procedimento.nr-seq-item,
            input tmp-procedimento.nr-seq-item-unico,
            input tmp-procedimento.tp-tabela,
            input tmp-procedimento.cd-servico,
            input "",
            input tmp-procedimento.qt-procedimentos,
            input "procedimentosExecutados_id",
            input nr-recid-procedimentosExecutados-par).  

        run cria-tag-valores (
            input tmp-procedimento.vl-honorario-medico,
            input tmp-procedimento.vl-filme,
            input tmp-procedimento.vl-operacional,
            input "procedimentosExecutados_id",
            input nr-recid-procedimentosExecutados-par).  

        if tmp-procedimento.vl-taxa-honorario   <> 0
        or tmp-procedimento.vl-taxa-operacional <> 0
        or tmp-procedimento.vl-taxa-filme       <> 0
        then run cria-tag-taxas (
                input tmp-procedimento.vl-taxa-honorario,
                input tmp-procedimento.vl-taxa-filme,
                input tmp-procedimento.vl-taxa-operacional,
                input "procedimentosExecutados_id",
                input nr-recid-procedimentosExecutados-par). 

        for each tmp-equipe 
           where tmp-equipe.nr-seq-item-unico-proc = tmp-procedimento.nr-seq-item-unico 
             and tmp-equipe.nr-processo            = tmp-procedimento.nr-processo
             and tmp-equipe.nr-seq-digitacao       = tmp-procedimento.nr-seq-digitacao
                 no-lock:
     
           run cria-tag-equipe_profissional(
	                 input tmp-equipe.cd-tipo-part, 
	                 input tmp-equipe.cd-unidade-prestador,
	                 input tmp-equipe.cd-prestador,            
	                 input tmp-equipe.nm-prest-exec,      
	                 input tmp-equipe.cd-cpf-profis-exec, 
	                 input tmp-equipe.cd-cbo-prof-exec,   
	                 input tmp-equipe.cd-conselho,        
	                 input tmp-equipe.nr-registro,        
	                 input tmp-equipe.cd-uf-conselho,    
	            	 input "procedimentosExecutados_id",
	                 input nr-recid-procedimentosExecutados-par).
        end.

        if b-tmp-documento.nr-autorizacao > 0
        then run cria-tag-dadosAutorizacao(
                 input b-tmp-documento.dt-solicitacao,
                 input b-tmp-documento.nr-autorizacao,
                 input b-tmp-documento.cd-unid-autoriz,
                 input b-tmp-documento.dt-autorizacao,
                 input b-tmp-documento.tp-autorizacao,
                 input "procedimentosExecutados_id",
                 input nr-recid-procedimentosExecutados-par).          
    end.

    for each tmp-insumo
       where tmp-insumo.id-docto = b-tmp-documento.id-docto
             no-lock:

        run cria-tag-procedimentosExecutados (
            input tmp-insumo.dt-realizacao,
            input tmp-insumo.hr-realizacao,
            input tmp-insumo.hr-realizacao-fin,
            input ?,         /*via acesso*/
            input "",        /*tec utilizada*/
            input no,        /*urgencia*/
            input tmp-insumo.cd-unid-medida,
            input tmp-insumo.qt-fat-mult,
            input tmp-insumo.id-aviso-item,
            input "",         /*porte anestesico*/
            input tmp-insumo.in-ato-medico,
            input "",
            input "",
            input tmp-insumo.id-pacote, 
            input "",        /*cd pacote*/
            input "dadosGuia1_id",
            input nr-recid-dadosGuia1-par,
            output nr-recid-procedimentosExecutados-par).

        run cria-tag-procedimentos (
            input tmp-insumo.nr-seq-item,
            input tmp-insumo.nr-seq-item-unico,
            input tmp-insumo.tp-tabela,
            input tmp-insumo.cd-servico,
            input tmp-insumo.ds-insumo,
            input tmp-insumo.qt-insumo,
            input "procedimentosExecutados_id",
            input nr-recid-procedimentosExecutados-par). 

        run cria-tag-valores (
            input tmp-insumo.vl-cobrado-sem-taxa,
            input 0,
            input 0,
            input "procedimentosExecutados_id",
            input nr-recid-procedimentosExecutados-par).  

        if tmp-insumo.vl-taxa <> 0
        then run cria-tag-taxas (
                input tmp-insumo.vl-taxa,
                input ?,
                input ?,
                input "procedimentosExecutados_id",
                input nr-recid-procedimentosExecutados-par).  

        if tmp-insumo.lg-opme
        then run cria-tag-dadosOPME (
                input tmp-insumo.nr-cgc-cpf-fornecedor,
                input tmp-insumo.nm-fornecedor,
                input tmp-insumo.nr-nota-fiscal-fornec,
                input tmp-insumo.ds-fabricante,
                input tmp-insumo.cd-anvisa,
                input tmp-insumo.des-refer-mater-fabrican,
                input "procedimentosExecutados_id",
                input nr-recid-procedimentosExecutados-par).

        if b-tmp-documento.nr-autorizacao > 0
        then run cria-tag-dadosAutorizacao(
                 input b-tmp-documento.dt-solicitacao,
                 input b-tmp-documento.nr-autorizacao,
                 input b-tmp-documento.cd-unid-autoriz,
                 input b-tmp-documento.dt-autorizacao,
                 input b-tmp-documento.tp-autorizacao,
                 input "procedimentosExecutados_id",
                 input nr-recid-procedimentosExecutados-par).   
    end.

    for each tmp-pacotes
       where tmp-pacotes.id-docto = b-tmp-documento.id-docto
             no-lock:

        run cria-tag-procedimentosExecutados (
            input tmp-pacotes.dt-realizacao,
            input tmp-pacotes.hr-realizacao,
            input tmp-pacotes.hr-realizacao-fin,
            input tmp-pacotes.cd-via-acesso,   
            input tmp-pacotes.tp-tec-util,    
            input tmp-pacotes.lg-urgencia,
            input tmp-pacotes.cd-unid-medida,
            input tmp-pacotes.qt-fat-mult,
            input tmp-pacotes.id-aviso-item,
            input "",
            input tmp-pacotes.in-ato-medico,
            input "",
            input "",
            input tmp-pacotes.id-pacote, 
            input tmp-pacotes.cd-pacote, 
            input "dadosGuia1_id",
            input nr-recid-dadosGuia1-par,
            output nr-recid-procedimentosExecutados-par).

        run cria-tag-procedimentos (
            input tmp-pacotes.nr-seq-item,
            input tmp-pacotes.nr-seq-item-unico,
            input tmp-pacotes.tp-tabela,
            input tmp-pacotes.cd-servico,
            input tmp-pacotes.ds-servico,
            input tmp-pacotes.qt-pacote,
            input "procedimentosExecutados_id",
            input nr-recid-procedimentosExecutados-par).  

        run cria-tag-valores-pacote (
            input tmp-pacotes.vl-pacote,
            input 0,
            input 0,
            input "procedimentosExecutados_id",
            input nr-recid-procedimentosExecutados-par).  

        if tmp-pacotes.vl-taxa <> 0
        then run cria-tag-taxas-pacote (
                 input tmp-pacotes.vl-taxa,
                 input 0,
                 input 0,
                 input "procedimentosExecutados_id",
                 input nr-recid-procedimentosExecutados-par). 

        for each tmp-equipe 
           where tmp-equipe.nr-seq-item-unico-proc = tmp-pacotes.nr-seq-item-unico 
                 no-lock:
     
        		 run cria-tag-equipe_profissional(
	                 input tmp-equipe.cd-tipo-part, 
	                 input tmp-equipe.cd-unidade-prestador,
	                 input tmp-equipe.cd-prestador,            
	                 input tmp-equipe.nm-prest-exec,      
	                 input tmp-equipe.cd-cpf-profis-exec, 
	                 input tmp-equipe.cd-cbo-prof-exec,   
	                 input tmp-equipe.cd-conselho,        
	                 input tmp-equipe.nr-registro,        
	                 input tmp-equipe.cd-uf-conselho,    
	            	 input "procedimentosExecutados_id",
	                 input nr-recid-procedimentosExecutados-par).
        end.

        if tmp-pacotes.nr-cgc-cpf-fornecedor <> ""
        then run cria-tag-dadosOPME (
                input tmp-pacotes.nr-cgc-cpf-fornecedor,
                input tmp-pacotes.nm-fornecedor,
                input tmp-pacotes.nr-nota-fiscal-fornec,
                input tmp-pacotes.ds-fabricante,
                input tmp-pacotes.cd-anvisa,
                input tmp-pacotes.des-refer-mater-fabrican,
                input "procedimentosExecutados_id",
                input nr-recid-procedimentosExecutados-par).

        if b-tmp-documento.nr-autorizacao > 0
        then run cria-tag-dadosAutorizacao(
                 input b-tmp-documento.dt-solicitacao,
                 input b-tmp-documento.nr-autorizacao,
                 input b-tmp-documento.cd-unid-autoriz,
                 input b-tmp-documento.dt-autorizacao,
                 input b-tmp-documento.tp-autorizacao,
                 input "procedimentosExecutados_id",
                 input nr-recid-procedimentosExecutados-par).
    end.

end procedure.

procedure cria-tag-equipe_profissional:
 
    def input parameter tp-participacao-par  as char  no-undo.
    def input parameter cd-unidade-par       as int   no-undo.
    def input parameter cd-prestador-par     as int   no-undo.
    def input parameter nm-profissional-par  as char  no-undo.
    def input parameter cgc-cpf-par          as char  no-undo.
    def input parameter cd-cbo-par           as char  no-undo.
    def input parameter sg-conselho-par      as char  no-undo.
    def input parameter nr-conselho-par      as char  no-undo.
    def input parameter cd-uf-par            as char  no-undo.
    def input parameter nm-campo-pai-par     as char  no-undo.
    def input parameter nr-recid-pai-par     as recid no-undo.

    create equipe_Profissional.
	assign equipe_Profissional.tp_Participacao = oGpsPtuUtils:formataTexto(tp-participacao-par,2)   
	       equipe_Profissional.nm_Profissional = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-profissional-par)),60)
	       equipe_Profissional.cd_cpf          = formataCPF(dec(oGpsUtils:removeCharEspecExporta(cgc-cpf-par)))
	       equipe_Profissional.CBO             = oGpsPtuUtils:formataTexto(replace(cd-cbo-par,".",""),6).

    assign temp-table equipe_Profissional:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    if  cd-unidade-par   <> 0
    and cd-prestador-par <> 0
    then run cria-tag-Prestador-equipe_profissional (
        input cd-unidade-par,
        input cd-prestador-par,
        input "equipe_Profissional_id",
        input recid(equipe_Profissional)).

    if  sg-conselho-par <> ""
    and nr-conselho-par <> ""
    and cd-uf-par       <> ""
    then run cria-tag-dadosConselho (
        input sg-conselho-par,
        input nr-conselho-par,
        input cd-uf-par,
        input "equipe_Profissional_id",
        input recid(equipe_Profissional)).

end procedure.

procedure cria-tag-Prestador-equipe_profissional:

    def input parameter cd-unidade-par    as int   no-undo.
    def input parameter cd-prestador-par  as int   no-undo.
    def input parameter nm-campo-pai-par  as char  no-undo.
    def input parameter nr-recid-pai-par  as recid no-undo.

    create Prestador2.
	assign Prestador2.cd_Uni_Prest = dec(cd-unidade-par)
	       Prestador2.cd_Prest     = dec(cd-prestador-par).

    assign temp-table Prestador2:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.        

end procedure.

procedure cria-tag-procedimentosExecutados:

    def input  parameter dt-execucao-par                      as date  no-undo.
    def input  parameter hr-inicial-par                       as char  no-undo.
    def input  parameter hr-final-par                         as char  no-undo.
    def input  parameter cd-via-acesso-par                    as int   no-undo.
    def input  parameter tp-tec-util-par                      as char  no-undo.
    def input  parameter lg-urgencia-par                      as log   no-undo.
    def input  parameter cd-unid-medida-par                   as int   no-undo.
    def input  parameter ft-multiplicador-par                 as dec   no-undo.
    def input  parameter id-aviso-item-par                    as log   no-undo.
    def input  parameter cd-porte-anes-par                    as char  no-undo.
    def input  parameter cd-ato-medico-par                    as int   no-undo.    
    def input  parameter vl-serv-cobrado-par                  as char  no-undo.
    def input  parameter vl-taxa-par                          as char  no-undo.
    def input  parameter id-pacote-par                        as log   no-undo.
    def input  parameter cd-pacote-par                        as char  no-undo.
    def input  parameter nm-campo-pai-par                     as char  no-undo.
    def input  parameter nr-recid-pai-par                     as recid no-undo.
    def output parameter nr-recid-procedimentosExecutados-par as recid no-undo.
    
    create procedimentosExecutados.
    assign procedimentosExecutados.dt_Execucao             = oGpsPtuUtils:formataData(dt-execucao-par)
	       procedimentosExecutados.hr_Inicial              = hr-inicial-par                                 
	       procedimentosExecutados.hr_Final                = hr-final-par                                   
	       procedimentosExecutados.id_Acrescimo            = oGpsPtuUtils:formataBooleanPTU(lg-urgencia-par)               
	       procedimentosExecutados.ft_MultiplicadorServico = ft-multiplicador-par
	       procedimentosExecutados.id_AvisadoItem          = oGpsPtuUtils:formataBooleanPTU(id-aviso-item-par)      	       
	       procedimentosExecutados.cd_Ato                  = string(cd-ato-medico-par,"9")
           procedimentosExecutados.vl_ServCobrado          = vl-serv-cobrado-par
           procedimentosExecutados.tx_AdmServico           = vl-taxa-par.

    assign nr-recid-procedimentosExecutados-par = recid(procedimentosExecutados).

    if id-pacote-par <> ?
    then do:
        assign procedimentosExecutados.id_Pacote = oGpsPtuUtils:formataBooleanPTU(id-pacote-par).

        if cd-pacote-par <> ""      	 
        then assign procedimentosExecutados.cd_Pacote = dec(cd-pacote-par).
    end.

    if cd-unid-medida-par <> 0
    then assign procedimentosExecutados.un_Medida = string(cd-unid-medida-par,"999").
    
    /* Quando nao houver porte anestesico para o procedimento, o campo nao deve ser enviado ja que 0 (zero) significa a existencia de anestesia local. */
    if cd-porte-anes-par <> ""
    then assign procedimentosExecutados.cd_PorteAnestesico = cd-porte-anes-par. 
    
    if cd-via-acesso-par <> ?
    then assign procedimentosExecutados.via_Acesso = string(cd-via-acesso-par,"9"). 
    
    if tp-tec-util-par <> "0" 
    or tp-tec-util-par <> "" 
    then assign procedimentosExecutados.tc_Utilizada = oGpsPtuUtils:formataTexto(tp-tec-util-par,1).

    assign temp-table procedimentosExecutados:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosOPME:

    def input  parameter nr-cgc-cpf-fornecedor-par as char  no-undo.
    def input  parameter nm-fornecedor-par         as char  no-undo.
    def input  parameter nr-nota-fiscal-fornec-par as char  no-undo.
    def input  parameter ds-fornecedor-par         as char  no-undo.
    def input  parameter nr-registro-anvisa-par    as char  no-undo.
    def input  parameter cd-referencia-mat-par     as char  no-undo.
    def input  parameter nm-campo-pai-par          as char  no-undo.
    def input  parameter nr-recid-pai-par          as recid no-undo.

    if trim(ds-fornecedor-par     ) <> ""
    or trim(nr-registro-anvisa-par) <> ""
    or trim(cd-referencia-mat-par ) <> ""
    then do:
        create dadosOPME.
        assign dadosOPME.det_RegistroAnvisa   = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(ds-fornecedor-par)),50)
               dadosOPME.nr_RegistroAnvisa    = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nr-registro-anvisa-par)),15)
               dadosOPME.cd_ReferenciaMat_Fab = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(cd-referencia-mat-par)),60).
        
        assign temp-table dadosOPME:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

        if  nr-cgc-cpf-fornecedor-par <> ""
        and nm-fornecedor-par         <> ""
        and nr-nota-fiscal-fornec-par <> ""
        then run cria-tag-Pago-Fornecedor (
                    input nr-cgc-cpf-fornecedor-par,
                    input nm-fornecedor-par,
                    input nr-nota-fiscal-fornec-par,
                    input "dadosOPME_id",
                    input recid(dadosOPME)).
    end.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-Pago-Fornecedor:

    def input  parameter nr-cgc-cpf-fornecedor-par as char  no-undo.
    def input  parameter nm-fornecedor-par         as char  no-undo.
    def input  parameter nr-nota-fiscal-fornec-par as char  no-undo.
    def input  parameter nm-campo-pai-par as char  no-undo.
    def input  parameter nr-recid-pai-par as recid no-undo.

    create Pago_Fornecedor.
    assign Pago_Fornecedor.CNPJ_Fornecedor         = formataCNPJ(dec(oGpsUtils:removeCharEspecExporta(nr-cgc-cpf-fornecedor-par)))
           Pago_Fornecedor.nm_FornecedorMaterial   = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-fornecedor-par)),60)
           Pago_Fornecedor.nr_NotaFiscalFornecedor = oGpsPtuUtils:formataTexto(nr-nota-fiscal-fornec-par,20).

    assign temp-table Pago_Fornecedor:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-valores:

    def input parameter vl-serv-cobrado-par  as dec   no-undo.
    def input parameter vl-filme-cob-par     as dec   no-undo.
    def input parameter vl-oper-cobrado-par  as dec   no-undo.
    def input parameter nm-campo-pai-par     as char  no-undo.
    def input parameter nr-recid-pai-par     as recid no-undo.

    create valores.
    assign valores.vl_ServCobrado  =  converteValor(vl-serv-cobrado-par)    
           valores.vl_FilmeCobrado = if vl-filme-cob-par > 0 
                                     then converteValor(vl-filme-cob-par)
                                     else ""
           valores.vl_CO_Cobrado   = if vl-oper-cobrado-par > 0 
                                     then converteValor(vl-oper-cobrado-par)
                                     else "".

    assign temp-table valores:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.
        
end procedure.

procedure cria-tag-valores-pacote:

    def input parameter vl-serv-cobrado-par  as dec   no-undo.
    def input parameter vl-filme-cob-par     as dec   no-undo.
    def input parameter vl-oper-cobrado-par  as dec   no-undo.
    def input parameter nm-campo-pai-par     as char  no-undo.
    def input parameter nr-recid-pai-par     as recid no-undo.

    create valores.
    assign valores.vl_ServCobrado  = converteValor(vl-serv-cobrado-par)
           valores.vl_FilmeCobrado = if vl-filme-cob-par > 0 
                                     then converteValor(vl-filme-cob-par)
                                     else ""
           valores.vl_CO_Cobrado   = if vl-oper-cobrado-par > 0 
                                     then converteValor(vl-oper-cobrado-par)
                                     else "".

    assign temp-table valores:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.
        
end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-taxas:

    def input parameter vl-tx-serv-cobrado-par  as dec   no-undo.
    def input parameter vl-tx-filme-cob-par     as dec   no-undo.
    def input parameter vl-tx-oper-cobrado-par  as dec   no-undo.
    def input parameter nm-campo-pai-par        as char  no-undo.
    def input parameter nr-recid-pai-par        as recid no-undo.

    create taxas.
    assign taxas.tx_AdmServico = if vl-tx-serv-cobrado-par > 0
                                 then converteValor(vl-tx-serv-cobrado-par)
                                 else ""
           taxas.tx_AdmFilme   = if vl-tx-filme-cob-par > 0 
                                 then converteValor(vl-tx-filme-cob-par)
                                 else ""
           taxas.tx_AdmCO      = if vl-tx-oper-cobrado-par > 0 
                                 then converteValor(vl-tx-oper-cobrado-par)
                                 else "".

    assign temp-table taxas:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.
        
end procedure.

procedure cria-tag-taxas-pacote:

    def input parameter vl-tx-serv-cobrado-par  as dec   no-undo.
    def input parameter vl-tx-filme-cob-par     as dec   no-undo.
    def input parameter vl-tx-oper-cobrado-par  as dec   no-undo.
    def input parameter nm-campo-pai-par        as char  no-undo.
    def input parameter nr-recid-pai-par        as recid no-undo.

    create taxas.
    assign taxas.tx_AdmServico = converteValor(vl-tx-serv-cobrado-par)
           taxas.tx_AdmFilme   = if vl-tx-filme-cob-par > 0 
                                 then converteValor(vl-tx-filme-cob-par)
                                 else ""
           taxas.tx_AdmCO      = if vl-tx-oper-cobrado-par > 0
                                 then converteValor(vl-tx-oper-cobrado-par)
                                 else "". 

    assign temp-table taxas:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.
        
end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosInternacao:

    def input parameter cd-acomodacao-par        as char  no-undo.
    def input parameter ft-multiplicador-amb-par as int   no-undo.
    def input parameter tp-inter-par             as int   no-undo.
    def input parameter cd-regime-internacao-par as char  no-undo.
    def input parameter tp-carater-atend-par     as int   no-undo.
    def input parameter cd-faturamento-par       as int   no-undo.
    def input parameter dt-internacao-par        as date  no-undo.
    def input parameter hr-internacao-par        as char  no-undo.
    def input parameter dt-alta-par              as date  no-undo.
    def input parameter hr-alta-par              as char  no-undo.
    def input parameter id-docto-par             as dec   no-undo.
    def input parameter nm-campo-pai-par         as char  no-undo.
    def input parameter nr-recid-pai-par         as recid no-undo.

    create dadosInternacao.
    assign dadosInternacao.tp_Acomodacao        = oGpsPtuUtils:formataTexto(cd-acomodacao-par,60)
           dadosInternacao.ft_Multiplicador_AMB = ft-multiplicador-amb-par
           dadosInternacao.tp_Internacao        = tp-inter-par
           dadosInternacao.rg_Internacao        = cd-regime-internacao-par
           dadosInternacao.caraterAtendimento   = tp-carater-atend-par
           dadosInternacao.guiaInternacao_id    = ?.

    assign temp-table dadosInternacao:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    run cria-tag-dadosFaturamento(
        input cd-faturamento-par,
        input dt-internacao-par,
        input hr-internacao-par,
        input dt-alta-par,
        input hr-alta-par,
        input "dadosInternacao_id",
        input recid(dadosInternacao)).

    run cria-tag-dadosDeclaracoes (
        input id-docto-par,
        input "dadosInternacao_id",
        input recid(dadosInternacao)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosDeclaracoes:

    def input parameter id-docto-par     as dec   no-undo.
    def input parameter nm-campo-pai-par as char  no-undo.
    def input parameter nr-recid-pai-par as recid no-undo.

    for each tmp-declaracoes
       where tmp-declaracoes.id-docto = id-docto-par
             no-lock:

        create dadosDeclaracoes.

        if tmp-declaracoes.nm-decl-nasc-viv <> ""
        then assign dadosDeclaracoes.declaracao_Nascido = oGpsPtuUtils:formataTexto(trim(tmp-declaracoes.nm-decl-nasc-viv),11).
        else assign dadosDeclaracoes.CID_Obito          = oGpsPtuUtils:formataTexto(trim(tmp-declaracoes.cd-cid-obito),4) 
                    dadosDeclaracoes.declaracao_Obito   = oGpsUtils:removeCharEspecialTodos(oGpsPtuUtils:formataTexto(trim(tmp-declaracoes.nm-decl-obito),11))
                    dadosDeclaracoes.indicadorDO_RN     = oGpsPtuUtils:formataBooleanPTU(tmp-declaracoes.in-obito-rn).

        assign temp-table dadosDeclaracoes:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    end.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosFaturamento:

    def input parameter cd-faturamento-par       as int   no-undo.
    def input parameter dt-internacao-par        as date  no-undo.
    def input parameter hr-internacao-par        as char  no-undo.
    def input parameter dt-alta-par              as date  no-undo.
    def input parameter hr-alta-par              as char  no-undo.
    def input parameter nm-campo-pai-par         as char  no-undo.
    def input parameter nr-recid-pai-par         as recid no-undo.

    create dadosFaturamento.
    assign dadosFaturamento.tp_Faturamento     = cd-faturamento-par
           dadosFaturamento.dt_IniFaturamento  = oGpsPtuUtils:formataData1(dt-internacao-par,hr-internacao-par)
           dadosFaturamento.dt_FimFaturamento  = oGpsPtuUtils:formataData1(dt-alta-par,hr-alta-par)
           dadosFaturamento.dadosInternacao_id = ?.

    assign temp-table dadosFaturamento:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosSaidaInternacao:

    def input parameter in-acidente-par         as int   no-undo.
    def input parameter cd-mot-encerramento-par as int   no-undo.
    def input parameter cd-cid-par              as char  no-undo.
    def input parameter cd-cid1-par             as char  no-undo.
    def input parameter cd-cid2-par             as char  no-undo.
    def input parameter cd-cid3-par             as char  no-undo.
    def input parameter nm-campo-pai-par        as char  no-undo.
    def input parameter nr-recid-pai-par        as recid no-undo.

    create dadosSaidaInternacaoExportacao.
	assign dadosSaidaInternacaoExportacao.tp_IndAcidente    = string(in-acidente-par,"9")
	       dadosSaidaInternacaoExportacao.mv_Encerramento   = string(cd-mot-encerramento-par,"99")
           dadosSaidaInternacaoExportacao.CID               = ""
           dadosSaidaInternacaoExportacao.CID1              = ""
           dadosSaidaInternacaoExportacao.CID2              = ""
           dadosSaidaInternacaoExportacao.CID3              = ""
           dadosSaidaInternacaoExportacao.guiaInternacao_id = ?.

    if cd-cid-par <> ""
    then assign dadosSaidaInternacaoExportacao.CID = trim(string(caps(cd-cid-par),"x999xx")).
    if cd-cid1-par <> ""
    then assign dadosSaidaInternacaoExportacao.CID1 = trim(string(caps(cd-cid1-par),"x999xx")).
    if cd-cid2-par <> ""
    then assign dadosSaidaInternacaoExportacao.CID2 = trim(string(caps(cd-cid2-par),"x999xx")).
    if cd-cid3-par <> ""
    then assign dadosSaidaInternacaoExportacao.CID3 = trim(string(caps(cd-cid3-par),"x999xx")).

    assign temp-table dadosSaidaInternacaoExportacao:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosAuditoria:

    def input parameter nm-medico-audit-par     as char  no-undo.
    def input parameter nr-crm-medico-audit-par as char  no-undo.
    def input parameter cd-uf-medico-audit-par  as char  no-undo.
    def input parameter nm-enferm-audit-par     as char  no-undo.
    def input parameter nr-coren-enferm-par     as char  no-undo.
    def input parameter cd-uf-enferm-audit-par  as char  no-undo.
    def input parameter nm-campo-pai-par        as char  no-undo.
    def input parameter nr-recid-pai-par        as recid no-undo.

    create dadosAuditoria.
	assign dadosAuditoria.nm_MedicoAuditor = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-medico-audit-par)),40)
	       dadosAuditoria.nr_CrmAuditor    = oGpsPtuUtils:formataTexto(nr-crm-medico-audit-par,15) 
	       dadosAuditoria.cd_UFCRM         = oGpsPtuUtils:converteUf(cd-uf-medico-audit-par)       
	       dadosAuditoria.nm_EnfAuditor    = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-enferm-audit-par)),40)
	       dadosAuditoria.nr_CorenAuditor  = oGpsPtuUtils:formataTexto(nr-coren-enferm-par,15)     
	       dadosAuditoria.cd_UFCoren       = oGpsPtuUtils:converteUf(cd-uf-enferm-audit-par).      

    assign temp-table dadosAuditoria:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dataFaturamento:

    def input parameter dt-ini-faturamento-par as date  no-undo.
    def input parameter hr-ini-faturamento-par as char  no-undo.
    def input parameter dt-fim-faturamento-par as date  no-undo.
    def input parameter hr-fim-faturamento-par as char  no-undo.
    def input parameter nm-campo-pai-par       as char  no-undo.
    def input parameter nr-recid-pai-par       as recid no-undo.

    create dataFaturamento.
    assign dataFaturamento.dt_IniFaturamento = oGpsPtuUtils:formataData1(dt-ini-faturamento-par,hr-ini-faturamento-par)
           dataFaturamento.dt_FimFaturamento = oGpsPtuUtils:formataData1(dt-fim-faturamento-par,hr-fim-faturamento-par)
           dataFaturamento.guiaHonorarios_id = ?.

    assign temp-table dataFaturamento:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosHospital:

    def input parameter cd-unidade-par         as int   no-undo.
    def input parameter cd-prestador-par       as int   no-undo.
    def input parameter cd-cnpj-hosp-par       as dec   no-undo.
    def input parameter nm-hosp-par            as char  no-undo.
    def input parameter cd-cnes-hosp-par       as char  no-undo.
    def input parameter nm-campo-pai-par       as char  no-undo.
    def input parameter nr-recid-pai-par       as recid no-undo.

    create dadosHospital.
    assign dadosHospital.cd_uniHospitalar  = cd-unidade-par
           dadosHospital.cd_Hospitalar     = cd-prestador-par
           dadosHospital.CNPJHospital      = formataCNPJ(cd-cnpj-hosp-par)
           dadosHospital.nm_Hospital       = oGpsUtils:removeCharEspecialTodos(oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nm-hosp-par)),40))
           dadosHospital.CNES              = cd-cnes-hosp-par
           dadosHospital.guiaHonorarios_id = ?.

    assign temp-table dadosHospital:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-reapresentacaoGlosado:

    def input parameter lg-a500-xml-par            as log                       no-undo.
    def input parameter nr-lote-glosado-par        as char                      no-undo.
    def input parameter nr-nota-glosada-par        as char                      no-undo.
    def input parameter nr-doc-glosado1-par        as int64                     no-undo.
    def input parameter nr-doc-glosado2-par        as int64                     no-undo.
    def input parameter nr-guia-tiss-operadora-par as char                      no-undo.
    def input parameter nm-campo-pai-par           as char                      no-undo.
    def input parameter nr-recid-pai-par           as recid                     no-undo.

    create reapresentacaoGlosado.
	assign reapresentacaoGlosado.nr_DOC1Glosado    = string(nr-doc-glosado1-par)
           reapresentacaoGlosado.guiaConsulta_id   = ?
	       reapresentacaoGlosado.guiaSADT_id       = ?
	       reapresentacaoGlosado.guiaInternacao_id = ?
	       reapresentacaoGlosado.guiaHonorarios_id = ?.

    if nr-doc-glosado2-par <> 0
    then assign reapresentacaoGlosado.nr_DOC2Glosado    = string(nr-doc-glosado2-par).

    assign temp-table reapresentacaoGlosado:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    run cria-tag-dadosLoteGuia (
        input lg-a500-xml-par,
        input nr-lote-glosado-par,
        input nr-nota-glosada-par,
        input "reapresentacaoGlosado_id",
        input nr-guia-tiss-operadora-par,
        input recid(reapresentacaoGlosado)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-dadosLoteGuia:

    def input parameter lg-a500-xml-par            as log             no-undo.
    def input parameter nr-lote-glosado-par        as char            no-undo.
    def input parameter nr-nota-glosada-par        as char            no-undo.
    def input parameter nm-campo-pai-par           as char            no-undo.
    def input parameter nr-guia-tiss-operadora-par as char            no-undo.
    def input parameter nr-recid-pai-par           as recid           no-undo.

    create DadosLoteGuia.
	assign DadosLoteGuia.reapresentacaoGlosado_id = ?.

    assign temp-table DadosLoteGuia:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

    if lg-a500-xml-par
    then run cria-tag-xml (
            input nr-lote-glosado-par,
            input nr-nota-glosada-par,
            input "DadosLoteGuia_id",
            input nr-guia-tiss-operadora-par,
            input recid(DadosLoteGuia)).
    else run cria-tag-txt (
            input nr-lote-glosado-par,
            input nr-nota-glosada-par,
            input "DadosLoteGuia_id",
            input recid(DadosLoteGuia)).

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-txt:

    def input parameter nr-lote-par      as int64                     no-undo.
    def input parameter nr-guia-par      as char format "99999999999" no-undo.
    def input parameter nm-campo-pai-par as char                      no-undo.
    def input parameter nr-recid-pai-par as recid                     no-undo.

    create TXT.
	assign TXT.nr_Lote = string(nr-lote-par)
	       TXT.nr_Nota = string(nr-guia-par)
	       TXT.DadosLoteGuia_id = ?.

    assign temp-table TXT:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-xml:

    def input parameter nr-lote-par                as char        no-undo.
    def input parameter nr-guia-par                as char        no-undo.
    def input parameter nm-campo-pai-par           as char        no-undo.
    def input parameter nr-guia-tiss-operadora-par as char        no-undo.
    def input parameter nr-recid-pai-par           as recid       no-undo.

    create XML.
	assign XML.nr_LotePrestador     = nr-lote-par
	       XML.nr_GuiaTissPrestador = nr-guia-par
           XML.nr_GuiaTissOperadora = nr-guia-tiss-operadora-par
	       XML.DadosLoteGuia_id     = ?.

    assign temp-table XML:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-Infor_OPME:

	def input parameter dt-execucao-par        as date  no-undo.
    def input parameter ds-fornecedor-par      as char  no-undo.
    def input parameter nr-registro-anvisa-par as char  no-undo.
    def input parameter cd-referencia-mat-par  as char  no-undo.
    def input parameter nr-seq-item-par        as dec   no-undo.
    def input parameter nr-seq-item-unico-par  as char  no-undo.   
    def input parameter tp-tabela-par          as char  no-undo. 
    def input parameter cd-servicao-par        as char  no-undo.
    def input parameter ds-servico-par         as char  no-undo.
    def input parameter qt-cobrada-par         as dec   no-undo.
	def input parameter vl-serv-cobrado-par    as dec   no-undo.
	def input parameter vl-taxa-cob-par        as dec   no-undo.
    def input parameter nm-campo-pai-par       as char  no-undo.
    def input parameter nr-recid-pai-par       as recid no-undo.

	create Infor_OPME.
	assign Infor_OPME.dt_Execucao              = oGpsPtuUtils:formataData(dt-execucao-par)
	       Infor_OPME.det_RegistroAnvisa       = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(ds-fornecedor-par)),50)
	       Infor_OPME.nr_RegistroAnvisa        = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(nr-registro-anvisa-par)),15)
	       Infor_OPME.cd_ReferenciaMat_Fab     = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(cd-referencia-mat-par)),60)
	       Infor_OPME.notaFiscal_Fornecedor_id = ?.

	assign temp-table Infor_OPME:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

	run cria-tag-Procedimentos2(
		input nr-seq-item-par,
		input nr-seq-item-unico-par,
		input tp-tabela-par,
		input cd-servicao-par,
		input ds-servico-par,
		input qt-cobrada-par,
		input "Infor_OPME_id",
		input recid(Infor_OPME)).

	run cria-tag-valores_fornecedor(
		input vl-serv-cobrado-par,
		input vl-taxa-cob-par,
		input "Infor_OPME_id",
		input recid(Infor_OPME)).	

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-valores_fornecedor:

	def input parameter vl-serv-cobrado-par    as dec   no-undo.
	def input parameter vl-taxa-cob-par        as dec   no-undo.
    def input parameter nm-campo-pai-par       as char  no-undo.
    def input parameter nr-recid-pai-par       as recid no-undo.

	create valores_fornecedor.
	assign valores_fornecedor.vl_ServCobrado = vl-serv-cobrado-par
		   valores_fornecedor.tx_AdmServico  = vl-taxa-cob-par
		   valores_fornecedor.Infor_OPME_id  = ?.

	assign temp-table valores_fornecedor:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-Procedimentos2:

    def input parameter nr-seq-item-par        as dec   no-undo.
    def input parameter nr-seq-item-unico-par  as char  no-undo.   
    def input parameter tp-tabela-par          as char  no-undo. 
    def input parameter cd-servicao-par        as char  no-undo.
    def input parameter ds-servico-par         as char  no-undo.
    def input parameter qt-cobrada-par         as dec   no-undo.
    def input parameter nm-campo-pai-par       as char  no-undo.
    def input parameter nr-recid-pai-par       as recid no-undo.

	create Procedimentos2.
	assign Procedimentos2.seq_item      = nr-seq-item-par
		   Procedimentos2.id_itemUnico  = oGpsPtuUtils:formataTexto(nr-seq-item-unico-par,28)
	       Procedimentos2.tp_Tabela     = oGpsPtuUtils:formataTexto(tp-tabela-par,2)       
	       Procedimentos2.cd_Servico    = oGpsPtuUtils:formataTexto(cd-servicao-par,10)
	       Procedimentos2.ds_Servico    = oGpsPtuUtils:formataTexto(trim(oGpsUtils:removeCharEspecExporta(ds-servico-par)),80)
	       Procedimentos2.qt_Cobrada    = qt-cobrada-par
	       Procedimentos2.Infor_OPME_id = ?.

	assign temp-table Procedimentos2:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

/* ------------------------------------------------------------------------------------- */
procedure cria-tag-reapresentacaoGlosado1:

    def input parameter nr-doc-glosado1-par       as int64               no-undo.
    def input parameter nr-doc-glosado2-par       as int64               no-undo.
	def input parameter nr-nota-fiscal-fornec-par as char                no-undo.
    def input parameter nm-campo-pai-par          as char                no-undo.
    def input parameter nr-recid-pai-par          as recid               no-undo.

	create reapresentacaoGlosado1.
	assign reapresentacaoGlosado1.nr_DOC1Glosado           = string(nr-doc-glosado1-par)
	       reapresentacaoGlosado1.nr_DOC2Glosado           = if nr-doc-glosado2-par > 0
		                                                     then string(nr-doc-glosado2-par)
															 else ""
	       reapresentacaoGlosado1.nr_NotaFiscalFornecedor  = nr-nota-fiscal-fornec-par
	       reapresentacaoGlosado1.notaFiscal_Fornecedor_id = ?.

	assign temp-table reapresentacaoGlosado1:default-buffer-handle:buffer-field(nm-campo-pai-par):buffer-value() = nr-recid-pai-par.

end procedure.

procedure p-cpc-ant-escr-xml:
    def input        parameter h-dataset-par      as handle   no-undo.
    def output       parameter mp-text-par        as memptr   no-undo.
    def output       parameter lc-text-par        as longchar no-undo.
    def input-output parameter lg-escreve-xml-par as logical  no-undo.

    empty temp-table tmp-cpc-laptua500e-entrada.
    empty temp-table tmp-cpc-laptua500e-saida.

    create tmp-cpc-laptua500e-entrada.
    assign tmp-cpc-laptua500e-entrada.nm-ponto-chamada-cpc = "ANT-ESCR-XML"
           tmp-cpc-laptua500e-entrada.h-dataset            = h-dataset-par.

    run cpc/cpc-laptua500e.p(
        input  table tmp-cpc-laptua500e-entrada,
        output table tmp-cpc-laptua500e-saida) no-error.

    if error-status:error
    then do:
        run insertErrorGP(
            input 1819,
            input "Erro na execucao da CPC-LAPTUA500E, ponto ~"ANT-ESCR-XML~"",
            input error-status:get-message(error-status:num-messages),
            input-output table rowErrors).

        return.
    end.

    find first tmp-cpc-laptua500e-saida no-error.
    if not available tmp-cpc-laptua500e-saida
    then do:
        run insertErrorGP(
            input 1819,
            input "Erro na CPC-LAPTUA500E, ponto ~"ANT-ESCR-XML~"",
            input "Tabela temporaria de saida nao disponivel",
            input-output table rowErrors).

        return.
    end.

    if tmp-cpc-laptua500e-saida.lg-erro
    then do:
        run insertOtherError(
            input 1819,
            input tmp-cpc-laptua500e-saida.ds-mensagem,
            input "",
            input "GP",
            input "ERROR",
            input " Erro na CPC-LAPTUA500E, ponto ~"ANT-ESCR-XML~"",
            input-output table rowErrors).

        return.
    end.

    copy-lob from tmp-cpc-laptua500e-saida.mp-text to mp-text-par.
    copy-lob from tmp-cpc-laptua500e-saida.lc-text to lc-text-par.

    assign lg-escreve-xml-par = tmp-cpc-laptua500e-saida.lg-escreve-xml.
end procedure.

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