Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Devido a adequação da quantidade de dígitos dos insumos para 10 dígitos foi alterado o segmento de envio de serviços ao à rotina AC1006D.

O código foi alterado para receber os dados do serviços através de uma temp table tabela temporária e retornar uma temp table uma tabela temporária para facilitar as alterações no envio e recebimento tráfego de dados pelo AC1006D.

Será Para o funcionamento correto, será necessário adaptar programas específicos que realizam a chamada do AC1006Ddesta rotina (acp/ac1006d.p).

Segue a baixo a definição da temp-table e conversão do segmento para temp-table. Esta definição das tabelas temporárias é apenas informativa dos campos disponíveis, nas rotinas específicas deverá ser utilizado a include "{acp/ac1006d.i}"

Na prática, o cliente deverá substituir a criação do segmento pela criação da temp tmp-servicos-req, atribuindo os valores do segmento nas respectivas posições da temp conforme exemplo a seguir.

Bloco de código
titleDefinição da temp-table e de-para dos campos para o segmento AC1006D
linenumberstrue
{acp/ac1006d.i}

/*
def temp-table tmp-servicos-req
Bloco de código
titleParâmetros AC1006D
/*01*/ def input  param lg-mens-tela-par          no-undo
    field asin-ordem log                      no-undo. 
/*02*/ def input  param lg-simulacao-paras int /* Não utilizado */
    field tp-servico                as log    as char format "x(12)"
    field tp-insumo          no-undo.
/*03*/ def input  param r-maquclin-par       as char format "99"
    field qt-servico  as recid                  as char no-undo. 
/*04*/ def input  param in-tipo-proces-parformat "999"
    field qt-servico-dec                 as char format "x(01)999"
    field  no-undo.
/*05*/ def input  param segmento-req-parcd-servico                     as char format "x(8000)99999999"
    no-undo. /* Segmento com os dados do documento (sem o serviço) */
/*06*/ def input  param id-aplicativo-parfield cd-tipo-percentual             as char format "99"
    field vl-servico               like paramint.id-aplicativo no-undo.
/*07*/ def output param segmento-res-par      as char format "x(9)"
    field cd-prest-exec                  as char format "x(800015)"
    field no-undo. /* Segmento com retorno dos dados do documento (sem o serviço) */
/*08*/ def output param cd-erro-sistema-par            as charcd-prest-divisao               as char format "x(15)"
    field cd-grau-part                   as char      no-undo.
/*09*/ def input  param lg-trata-comb-nao-perm-wac-par as intformat "x(2)"
    field cd-via-acesso                  as char
    field no-undo.
/*10*/ def output param ds-erro-sistema-ptu-parcd-tecnica            as char   init ""    as char
    field  no-undo.
/*11*/ def output param ds-erro-comb-nao-perm-parcd-servico-generico			 as char format "99999999" 
    field nm-prof-exec      as char             as char format "x(70)"
    field no-undo. 
/*12*/ def input  param table for tmp-servicos-req. /* Solicitação de serviços, substitui parte do segmento */
/*13*/ def output param table for tmp-docusos.  /* Retorno temp igual a docusos para acesso em caso de simulação */
/*14*/ def output param table for tmp-procusos. /* Retorno temp igual a procusos para acesso em caso de simulação */
/*15*/ def output param table for tmp-insuusos. /* Retorno temp igual a insuusos para acesso em caso de simulação */
/*16*/ def output param table for tmp-retorno-serv. /* Retorno do resultado do registro por movimento */

Na prática, o cliente deverá substituir a criação do segmento pela criação da temp tmp-servicos-req, atribuindo os valores do segmento nas respectivas posições da temp conforme exemplo a seguir.

Bloco de código
titleDefinição da temp-table e de-para dos campos para o segmento AC1006D
linenumberstrue
{acp/ac1006d.i}

/*
def temp-table tmp-servicos-req          no-undo
    field in-ordemcons-prof-compl                as char
    field num-cons-compl                 as char
    field uf-compl                       as char
    field cd-cbos-compl                  as char
    field nr-cpf-compl                   as char
    field hr-inicial                     as char
    field hr-final    as int /* Não utilizado */
    field tp-servico                     as char format "x(12)"
    field tpdt-insumo  realizacao                    as char format "99"date
    field qtcd-servicovariacao                     as char format "999"int
    field qtcd-servico-decprincipal-pacote    as char /* Serviço principal utilizado no pacote, caso deseje utilizar um procedimento alternativo asao charinvés format "999"do principal */
    field cdcr-servicosolicitacao                 as char /* U - asUrgência E char- format "99999999"Eletivo */
    field cd-tipo-percentualtp-comb                        as char format "99"
    field vlds-servico                     as char format "x(9)".

def temp-table tmp-retorno-serv no-undo
    field cdid-prest-execautoriza as char
    field in-servico as char
        field tp-servico as char format "x(15)"
    field cd-prest-divisaoservico as int64
    field qt-ser-per as dec
    field vl-part-cob as char format "x(15)"dec
    field cd-grauerro-partsistema as char
    field cd-pacote as char.
*/

def var in-prox-pos as int no-undo.
def     var nr-ver-tra-imp as char format "x(2)"
    field cd-via-acesso      no-undo.
def var segmento-req-par as char no-undo.

assign nr-ver-tra-imp  = substr(segmento-req-par, 81, 2).

case nr-ver-tra-imp:
    when "22" then assign in-prox-pos =   as3399. char
    field cd-tecnica      when "24" then assign in-prox-pos = 3393. 
    when "25" then assign in-prox-pos = 3409.
end case.
 
repeat:   as char
    field cd-servico-generico			 as char format "99999999" 
    field nm-prof-exec                   as char format "x(70)"
    field cons-prof-compl                as char
    field num-cons-compl                 as char
    field uf-complcase nr-ver-tra-imp:
        when "22" or when "25" then assign in-prox-pos = in-prox-pos + 29.     as char
    field cd-cbos-compl                  as char
    field nr-cpf-compl               
    as char
   when field hr-inicial      "24" then assign in-prox-pos = in-prox-pos + 35.               as char
    field hr-final                       as char
    field dt-realizacao
    end case.
    
    create tmp-servicos-req.
    as/* date
    fieldCampo cd-variacaoda temp                   as int
    field cd-servico-principal-pacote    as char *//* ServiçoPosição principalque utilizadoa noinformação pacote,estava casono deseje utilizar um procedimento alternativo ao invés do principalsegmento *//* Descrição */
    field cr-solicitacaoassign tmp-servicos-req.tp-servico                 as char /* U - Urgência E - Eletivo */
    field tp-comb    = substr(segmento-req-par,in-prox-pos + 01, 1)  //I - Insumos, P - Procedimentos e A - Pacote
           tmp-servicos-req.tp-insumo         as char
    field ds-servico     = substr(segmento-req-par,in-prox-pos + 02, 2)  //Tipo insumo
         as char.

def temptmp-table tmp-retorno-serv no-undo
servicos-req.qt-servico     field id-autoriza as char
    field in-servico as char
    field tp-servico as char
    field cd-servico as int64
    field qt-ser-per as dec
    field vl-part-cob as dec
    field cd-erro-sistema as char
    field cd-pacote as char.
*/

def var = substr(segmento-req-par,in-prox-pos + 12,5)   //Quantidade inteira do serviço (Ex: Qtd: 12,5, este campo fica 12)
           tmp-servicos-req.qt-servico-dec               = substr(segmento-req-par,in-prox-pos as int no-undo.
def var nr-ver-tra-imp as char no-undo.
def var segmento-req-par as char no-undo.

assign nr-ver-tra-imp  = substr(segmento-req-par, 81, 2).

case nr-ver-tra-imp:
    when "22" then assign in-prox-pos = 3399. 
    when "24" then assign in-prox-pos = 3393. 
    when "25" then assign + 17,3)   //Quantidade fracionada do serviço (Ex: Qtd: 12,5, este campo fica 5)
           tmp-servicos-req.cd-servico                   = substr(segmento-req-par,in-prox-pos = 3409.
end case.
 
repeat:                              + 04, 8)  //Código do serviço, 8 dígitos para procedimentos ou pacotes e 10 dígitos para insumos. No caso de 10 dígitos é possível dar um assign no campo com os 10 dígitos.
           tmp-servicos-req.cd-tipo-percentual                  = substr(segmento-req-par,in-prox-pos + 34,2)   //45-Fator Red/Acr
           tmp-servicos-req.vl-servico               
    case nr-ver-tra-imp:
        when "22" or when "25" then assign in-prox-pos = in-prox-pos + 29.= substr(segmento-req-par,in-prox-pos + 20,14)  //Valor do serviço informado em tela sem a virgula (Ex: Valor 100,10, este campo fica 10010)
           tmp-servicos-req.cd-prest-exec                = substr(segmento-req-par,in-prox-pos + 51,15)  //Unidade do prestador exec (4 dígitos) + código do prestador exec (8 dígitos) + código especialidade do prestador exec (3 dígitos)
        when "24" then assign intmp-prox-pos = in-prox-pos + 35.servicos-req.cd-prest-divisao             = substr(segmento-req-par,in-prox-pos + 36,15)  //Unidade do prestador divisão (4 dígitos) + código do prestador divisão (8 dígitos) + código especialidade do prestador divisão (3 dígitos)
           tmp-servicos-req.cd-grau-part    
    end case.
    
    create= tmpsubstr(segmento-servicos-req.
  req-par,in-prox-pos + 152,2)  /*/Grau de participação do membro Campode daequipe
 temp          tmp-servicos-req.cd-via-acesso                = substr(segmento-req-par,in-prox-pos + 149,2)  *//*Via Posiçãode queacesso
 a informação estava no segmento *//* Descrição */
    assign tmp-servicos-req.tpcd-servicotecnica                   = substr(segmento-req-par,in-prox-pos + 01151, 1)  //ITécnica -utilizada
 Insumos, P - Procedimentos e A - Pacote
           tmp-servicos-req.tp-insumo   nm-prof-exec                 = substr(segmento-req-par,in-prox-pos + 0267, 270)  //Tipo insumoNome do profissional pf executante
           tmp-servicos-req.qt-servico     cons-prof-compl              = substr(segmento-req-par,in-prox-pos + 12154,57)   //QuantidadeSigla inteira do serviçoconselho (Ex: Qtd: 12,5, este campo fica 12)do profissional pf executante
           tmp-servicos-req.qtnum-servicocons-deccompl               = substr(segmento-req-par,in-prox-pos + 17161,315)   //Quantidade fracionadaNumero do serviçoconselho (Ex: Qtd: 12,5, este campo fica 5)do profissional pf executante
           tmp-servicos-req.cduf-servicocompl                     = substr(segmento-req-par,in-prox-pos + 04176, 82)  //CódigoNumero do serviço,conselho 8do dígitosprofissional para procedimentos ou pacotes e 10 dígitos para insumospf executante
           tmp-servicos-req.cd-tipo-percentualcbos-compl                = substr(segmento-req-par,in-prox-pos + 34178,27)   //45-Fator Red/Acr
   CBOS do profissional pf executante
           tmp-servicos-req.vl-serviconr-cpf-compl                 = /*  Não = substr(segmento-req-par,in-prox-pos + 20,14)  //Valor do serviço informado em tela sem a virgula (Ex: Valor 100,10, este campo fica 10010)era passado por segmento          */  //Cpf do conselho do profissional pf executante
           tmp-servicos-req.cd-prest-exechr-inicial                   = substr(segmento-req-par,in-prox-pos + 51145,154)  //Unidade do prestador exec (4 dígitos) + código do prestador exec (8 dígitos) + código especialidade do prestador exec (3 dígitosHora inicial do registro (Ex: 12:57, este campo fica 1257)
           tmp-servicos-req.cd-prest-divisaohr-final                     = substr(segmento-req-par,in-prox-pos + 36145,154)  //UnidadeHora final do prestadorregistro divisão (4 dígitos) + código do prestador divisão (8 dígitos) + código especialidade do prestador divisão (3 dígitos)
   (Ex: 12:57, este campo fica 1257)
           tmp-servicos-req.cddt-grau-partrealizacao                 = substr(segmento-req-par,in-prox-pos + 152141,28)  //Grau de participação do membro de equipeData do registro (Ex: 25/05/2021, este campo fica 25052021)
           tmp-servicos-req.cd-via-acessovariacao                  = substr(segmento-req-par,in-prox-pos + 149189,24)  //Via de acessoCódigo da variação do procedimento
           tmp-servicos-req.cdcr-tecnicasolicitacao                   = substr(segmento-req-par,in-prox-pos + 15166,1)   //TécnicaCaráter da utilizadasolicitação
           tmp-servicos-req.nm-prof-exectp-comb                      = substr(segmento-req-par,in-prox-pos + 67193,706)  //NomeTipo doda profissionalcombinação pfnão executantepermitida
           /*tmp-servicos-req.consds-prof-complservico              = substr(segmento-req-par,in-prox-pos + 154,7)  //Sigla= do conselhoApenas doversão profissional pf executante
>= 12.1.33            tmp-servicos-req.num-cons-compl   */  //Descrição do insumo genérico realizado, utilizado para controlar a quantidade utilizada =corretamente substr(segmentomov-reqinsu.char-par,in-prox-pos + 161,15) //Numero do conselho do profissional pf executante21, insuusos.char-21, insuguia.char-4)

    if   nr-ver-tra-imp = "22" or tmpnr-servicosver-req.uftra-complimp = "24" or nr-ver-tra-imp = "25"
    then           = substr(segmento-req-par,assign in-prox-pos = in-prox-pos + 176,2)  //Numero do conselho do profissional pf executante
   165. 
end.

//Retorno
if  length (LinhaDeVolta-par) < 174
then leave.

assign in-prox-pos-aux = 174.

repeat:
    create    tmp-servicosretorno-req.cd-cbos-complserv.
          assign tmp-retorno-serv.id-autoriza      = substr(segmento-reqLinhaDeVolta-par,in-prox-pos-aux +, 178,71)     //CBOSStatus do profissional pf executanteregistro
           tmp-servicosretorno-reqserv.nrin-cpf-complservico      = substr(LinhaDeVolta-par,in-prox-pos-aux + 1, 1)  //I - Insumos, P - =Procedimentos
 /*  Não era passado por segmento    tmp-retorno-serv.tp-servico      */  //Cpf do conselho do profissional pf executante= substr(LinhaDeVolta-par,in-prox-pos-aux + 3,2)   //Tipo insumo
           tmp-servicosretorno-reqserv.hrcd-inicial servico                  = substr(segmento-reqLinhaDeVolta-par,in-prox-pos-aux + 1455,4 8)  //HoraServiço, inicialé doretornado registrocom (Ex: 12:57, este campo fica 1257)8 ou 10 dígitos dependendo do tipo
           tmp-servicosretorno-reqserv.hr-final       qt-ser-per              = substr(segmentoLinhaDeVolta-req-par,in-prox-pos-aux + 14513,48)  //Hora finalQuantidade do registroserviço (Ex: 12:57Qtd: 12,5, este campo fica 125712500)
           tmp-servicosretorno-reqserv.dt-realizacao   vl-part-cob             = substr(segmentoLinhaDeVolta-req-par,in-prox-pos-aux + 14121,814)  //Data do registroValor da participação no prestador (Ex: 25/05/2021100,15, este campo fica com 2505202110015)
           tmp-servicosretorno-reqserv.cd-variacao                 -erro-sistema = substr(segmento-reqLinhaDeVolta-par,in-prox-pos-aux + 18935, 4)  //CódigoMensagem dade variaçãoerro dono procedimentosistema
           tmp-servicosretorno-reqserv.crcd-solicitacaopacote               = substr(segmentoLinhaDeVolta-req-parpar,in-prox-pos-aux + 6647,1)   //Caráter da solicitação 8).//Código do pacote do procedimento ou insumo
   
           assign tmpin-servicosprox-req.tppos-combaux = in-prox-pos-aux + 56.                  = substr(segmento-req-par,in-prox-pos + 193,6)  //Tipo da combinação não permitida
           /*tmp-servicos-req.ds-servico                   =  Apenas versão >= 12.1.33               */  //Descrição do insumo genérico realizado, utilizado para controlar a quantidade utilizada corretamente (mov-insu.char-21, insuusos.char-21, insuguia.char-4)

 
end.                 if   nr-ver-tra-imp = "22" or nr-ver-tra-imp = "24" or nr-ver-tra-imp = "25"

       then assign 

Após deve ser feito a chamada para o AC1006D passando os paramento conforme definição a seguir.

Bloco de código
titleParâmetros AC1006D
/*01*/ def input  param lg-mens-tela-par               as log                      no-undo. 
/*02*/ def input  param lg-simulacao-par               as log                      no-undo.
/*03*/ def input  param r-maquclin-par                 as recid                    no-undo. 
/*04*/ def input  param in-tipo-proces-par             as char format "x(01)"      no-undo.
/*05*/ def input  param segmento-req-par               as char format "x(8000)"    no-undo. /* Segmento com os dados do documento (sem o serviço) */
/*06*/ def input  param id-aplicativo-par              like paramint.id-aplicativo no-undo.
/*07*/ def output param segmento-res-par               as char format "x(8000)"    no-undo. /* Segmento com retorno dos dados do documento (sem o serviço) */
/*08*/ def output param cd-erro-sistema-par            as char                     no-undo.
/*09*/ def input  param lg-trata-comb-nao-perm-wac-par as int                      no-undo.
/*10*/ def output param ds-erro-sistema-ptu-par        as char   init ""           no-undo.
/*11*/ def output param ds-erro-comb-nao-perm-par      as char                     no-undo. 
/*12*/ def input  param table for tmp-servicos-req. /* Solicitação de serviços, substitui parte do segmento */
/*13*/ def output param table for tmp-docusos.  /* Retorno temp igual a docusos para acesso em caso de simulação */
/*14*/ def output param table for tmp-procusos. /* Retorno temp igual a procusos para acesso em caso de simulação */
/*15*/ def output param table for tmp-insuusos. /* Retorno temp igual a insuusos para acesso em caso de simulação */
/*16*/ def output param table for tmp-retorno-serv. /* Retorno do resultado do registro por movimento */

Outros programas:

AC1000: Adicionado 4 parâmetros igual aos 4 últimos do AC1006D (Parâmetro 11 ao 15 do exemplo abaixo). Deve-se enviar da mesma forma que descrito a cima utilizando temp-table, porém, somente é necessário alterar o específico caso o segmento seja enviado com o código 80190260 no substr(segmento-req-par,56,08).

Bloco de código
titleParâmetros AC1000
/*01*/ def input param lg-mens-tela-par       as log                         no-undo.
/*02*/ def input param in-tipo-proces-par     as char format "x(01)"         no-undo.
/*03*/ def input param nm-arq-ent-par         as char                        no-undo. 
/*04*/ def input param segmento-req-par       as char format "x(8000)"       no-undo.
/*05*/ def input param nm-diret-entra-par     as char format "x(100)"        no-undo.
/*06*/ def input param nm-diret-saida-par     as char format "x(100)"        no-undo.
/*07*/ def input param id-aplicativo-par      as char format "x(20)"         no-undo.
/*08*/ def output param segmento-res-par      as char format "x(8000)"       no-undo.
/*09*/ def output param cd-erro-sistema-par   as char format "x(04)"         no-undo.
/*10*/ def input param lg-trata-comb-nao-perm-wac-par as int                   no-undo.

/*11*/ def input  param table for tmp-servicos-req.
/*12*/ def output param table for tmp-docusos.
/*13*/ def output param table for tmp-procusos.
/*14*/ def output param table for tmp-insuusos.
/*15*/ def output param table for tmp-retorno-serv.


Programas AC1000D até AC1000Z, ACURASERIOUS e ACURASIEMENS - Não foi passado os parâmetros novos pois os fontes foram considerados descontinuados.


AC1008D

Para o funcionamento correto, será necessário adaptar programas específicos que realizam a chamada desta rotina (acp/ac1008d.p).

Segue a baixo a definição da temp-table e conversão do segmento para temp-table. Esta definição das tabelas temporárias é apenas informativa dos campos disponíveis, nas rotinas específicas deverá ser utilizado a include "{acp/ac1008d.i}"

Na prática, o cliente deverá substituir a criação do segmento pela criação da temp tmp-servicos-req, atribuindo os valores do segmento nas respectivas posições da temp conforme exemplo a seguir.

Bloco de código
titleDefinição da temp-table e de-para dos campos para o segmento AC1008D
linenumberstrue
{acp/ac1008d.i}

/*
def temp-table tmp-servicos-req          no-undo
    field in-ordem                       as int /* Não utilizado */
    field tp-servico                     as char format "x(12)"
    field tp-insumo                      as char format "99"
    field qt-servico                     as char format "999"
    field qt-servico-dec                 as char format "999"
    field cd-servico                     as char format "99999999"
    field cd-tipo-percentual             as char format "99"
    field vl-servico                     as char format "x(9)"
    field cd-prest-exec                  as char format "x(15)"
    field cd-prest-divisao               as char format "x(15)"
    field cd-grau-part                   as char format "x(2)"
    field cd-via-acesso                  as char
    field cd-tecnica                     as char
    field cd-servico-generico			 as char format "99999999" 
    field nm-prof-exec                   as char format "x(70)"
    field cons-prof-compl                as char
    field num-cons-compl                 as char
    field uf-compl                       as char
    field cd-cbos-compl                  as char
    field nr-cpf-compl                   as char
    field hr-inicial                     as char
    field hr-final                       as char
    field dt-realizacao                  as date
    field cd-variacao                    as int
    field cd-servico-principal-pacote    as char /* Serviço principal utilizado no pacote, caso deseje utilizar um procedimento alternativo ao invés do principal */
    field cr-solicitacao                 as char /* U - Urgência E - Eletivo */
    field cd-unid-medida                 as char /* Removido na 12.1.33 */
    field tp-comb                        as char
    field tp-dente-regiao                as char
    field qt-us                          as dec
    field id-face-dente                  as char format "x(25)".

def temp-table tmp-retorno-serv no-undo
    field id-autoriza     as char
    field in-servico      as char
    field tp-servico      as char
    field cd-servico      as int64
    field qt-ser-per      as dec
    field vl-part-cob     as dec
    field cd-pacote       as char. 
*/

def var in-prox-pos as int no-undo.
def var nr-ver-tra-imp as char no-undo.
def var segmento-req-par as char no-undo.

assign nr-ver-tra-imp  = substr(segmento-req-par, 81, 2).

assign in-prox-pos      = 554.

if nr-ver-tra-imp = "04" 
then in-prox-pos      = 551.
              
 
repeat:                                                                                     
    assign in-prox-pos = in-prox-pos + 29.
    
    create tmp-servicos-req.
    /*     Campo da temp                               *//* Posição que a informação estava no segmento *//* Descrição */
    assign tmp-servicos-req.tp-servico                   = substr(segmento-req-par,in-prox-pos + 01, 1)  //I - Insumos, P - Procedimentos e A - Pacote
           tmp-servicos-req.tp-insumo                    = substr(segmento-req-par,in-prox-pos + 02, 2)  //Tipo insumo
           tmp-servicos-req.qt-servico                   = substr(segmento-req-par,in-prox-pos + 12,5)   //Quantidade inteira do serviço (Ex: Qtd: 12,5, este campo fica 12)
           tmp-servicos-req.qt-servico-dec               = substr(segmento-req-par,in-prox-pos + 17,3)   //Quantidade fracionada do serviço (Ex: Qtd: 12,5, este campo fica 5)
           tmp-servicos-req.cd-servico                   = substr(segmento-req-par,in-prox-pos + 04, 8)  //Código do serviço, 8 dígitos para procedimentos ou pacotes e 10 dígitos para insumos. No caso de 10 dígitos é possível dar um assign no campo com os 10 dígitos.
           tmp-servicos-req.vl-servico                   = substr(segmento-req-par,in-prox-pos + 20,14)  //Valor do serviço informado em tela sem a virgula (Ex: Valor 100,10, este campo fica 10010)
           tmp-servicos-req.cd-prest-exec                = substr(segmento-req-par,in-prox-pos + 49,15)  //Unidade do prestador exec (4 dígitos) + código do prestador exec (8 dígitos) + código especialidade do prestador exec (3 dígitos)
           tmp-servicos-req.nm-prof-exec                 = substr(segmento-req-par,in-prox-pos + 77,70)  //Nome do profissional pf executante
           tmp-servicos-req.cons-prof-compl              = substr(segmento-req-par,in-prox-pos + 208,5)  //Sigla do conselho do profissional pf executante
           tmp-servicos-req.num-cons-compl               = substr(segmento-req-par,in-prox-pos + 147,15) //Numero do conselho do profissional pf executante
           tmp-servicos-req.uf-compl                     = substr(segmento-req-par,in-prox-pos + 162,2)  //Numero do conselho do profissional pf executante
           tmp-servicos-req.cd-cbos-compl                = substr(segmento-req-par,in-prox-pos + 164,7)  //CBOS do profissional pf executante
           tmp-servicos-req.hr-inicial                   = substr(segmento-req-par,in-prox-pos + 73,4)  //Hora inicial do registro (Ex: 12:57, este campo fica 1257)
           tmp-servicos-req.hr-final                     = substr(segmento-req-par,in-prox-pos + 73,4)  //Hora final do registro (Ex: 12:57, este campo fica 1257)
           tmp-servicos-req.dt-realizacao                = substr(segmento-req-par,in-prox-pos + 65,8)  //Data do registro (Ex: 25/05/2021, este campo fica 25052021)
           tmp-servicos-req.tp-comb                      = substr(segmento-req-par,in-prox-pos + 212,6)  //Tipo da combinação não permitida
           tmp-servicos-req.tp-dente-regiao              = substr(segmento-req-par,in-prox-pos + 171,4)  //Tipo de dente regiao 
    	   tmp-servicos-req.qt-us                        = substr(segmento-req-par,in-prox-pos + 200,7)  //Qt us
		   tmp-servicos-req.id-face-dente                = substr(segmento-req-par,in-prox-pos + 175,25). //Id face dente


    assign in-prox-pos = in-prox-pos + 219. 
end.

//Retorno
if  length (LinhaDeVolta-par) < 225
then leave.

assign in-prox-pos-aux = 225.

repeat:
    create tmp-retorno-serv.
    assign tmp-retorno-serv.id-autoriza     = substr(LinhaDeVolta-par,in-prox-pos-aux , 1)     //Status do registro
           tmp-retorno-serv.in-servico      = substr(LinhaDeVolta-par,in-prox-pos-aux + 1, 1)  //I - Insumos, P - Procedimentos
           tmp-retorno-serv.tp-servico      = substr(LinhaDeVolta-par,in-prox-pos-aux + 3,2)   //Tipo insumo
           tmp-retorno-serv.cd-servico      = substr(LinhaDeVolta-par,in-prox-pos-aux + 5, 8)  //Serviço, é retornado com 8 ou 10 dígitos dependendo do tipo
           tmp-retorno-serv.qt-ser-per      = substr(LinhaDeVolta-par,in-prox-pos-aux + 13,8)  //Quantidade do serviço (Ex: Qtd: 12,5, este campo fica 12500)
           tmp-retorno-serv.vl-part-cob in-prox-pos = in-prox-pos + 165. 
end.

//Retorno
if  length (LinhaDeVolta-par) < 174
then leave.

assign in-prox-pos-aux = 174.

repeat:
    create tmp-retorno-serv.
    assign tmp-retorno-serv.id-autoriza     = substr(LinhaDeVolta-par,in-prox-pos-aux + 21, 1)     //Status do registro14) //Valor da participação no prestador (Ex: 100,15, este campo fica com 10015)
           tmp-retorno-serv.incd-servicopacote       = substr(LinhaDeVolta-par,in-prox-pos-aux + 135, 18)  //ICodigo - Insumos, P - Procedimentos
do pacote

           assign tmpin-retorno-serv.tp-servico      = substr(LinhaDeVolta-par,prox-pos-aux = in-prox-pos-aux + 3,2)56.         //Tipo insumo
           tmp-retorno-serv.cd-servico      = substr(LinhaDeVolta-par,in-prox-pos-aux + 5, 8)  //Serviço, é retornado com 8 ou 10 dígitos dependendo do tipo
           tmp-retorno-serv.qt-ser-per      = substr(LinhaDeVolta-par,in-prox-pos-aux + 13,8)  //Quantidade do serviço (Ex: Qtd: 12,5, este campo fica 12500)
           tmp-retorno-serv.vl-part-cob                    
end.     

Após deve ser feito a chamada para o AC1008D passando os paramento conforme definição a seguir.

Bloco de código
titleParâmetros AC1008D
/*01*/def input  param lg-mens-tela-par     as log       = substr(LinhaDeVolta-par,in-prox-pos-aux + 21,14) //Valor da participação no prestador (Ex: 100,15, este campo fica com 10015)
     no-undo.
/*02*/def input  param lg-simulacao-par     as log   tmp-retorno-serv.cd-erro-sistema = substr(LinhaDeVolta-par,in-prox-pos-aux + 35, 4) //Mensagem de erro no sistema
                   no-undo.
/*03*/def input  param tmpr-retorno-serv.cd-pacotemaquclin-par       = substr(LinhaDeVolta-par,in-prox-pos-aux + 47, 8).//Código do pacote do procedimento ou insumo
   
as recid                    no-undo.
/*04*/def input  assignparam in-proxtipo-posproces-auxpar  = in-prox-pos-aux + 56. as char format "x(01)"      no-undo.
/*05*/def input  param segmento-req-par     as char format "x(8000)"    no-undo. /* Segmento com os dados do documento (sem o serviço) */
/*06*/def input  param id-aplicativo-par    like paramint.id-aplicativo no-undo.
/*07*/def output param segmento-res-par     as char format "x(8000)"    no-undo. /* Segmento com retorno dos dados do documento (sem o serviço) */
/*08*/def output param cd-erro-sistema-par  as char    
end.                 no-undo.
/*09*/def  input param lg-trata-comb-nao-perm-wac-par as int    
         no-undo.