Árvore de páginas

Versões comparadas

Chave

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

...

Segue a baixo a definição da temp-table e conversão do segmento para temp-table. 

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
titleParâmetros AC1006DDefinição da temp-table e de-para dos campos para o segmento AC1006D
linenumberstrue
{acp/ac1006d.i}

/*
def temp-table tmp-servicos-req/*01*/ def input  param lg-mens-tela-par          no-undo
    field asin-ordem  log                     as no-undo.int 
/*02 Não utilizado */
 def input  paramfield lgtp-simulacao-parservico               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(8000)"    no-undo. /* Segmento com retorno dos dadosas dochar documentoformat (sem o serviço) */
/*08*/ def output param"x(15)"
    field cd-erroprest-sistema-pardivisao            as   as char format "x(15)"
    field cd-grau-part                   as  no-undo.
/*09*/ def input  param lg-trata-comb-nao-perm-wac-par as intchar format "x(2)"
    field cd-via-acesso                  as char
    field no-undo.
/*10*/ def output param ds-erro-sistema-ptu-par  cd-tecnica           as char   init ""     as char
    field no-undo.
/*11*/ def output param ds-erro-comb-nao-perm-par cd-servico-generico			 as char format "99999999" 
    field asnm-prof-exec char                  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 */

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-reqformat "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 no-undochar
    field inhr-ordemfinal                       as int /* Não utilizado */char
    field tpdt-servicorealizacao                     as char format "x(12)"date
    field tpcd-insumovariacao                      as char format "99"int
    field qtcd-servico-principal-pacote    as char /* Serviço principal utilizado no   pacote, caso deseje utilizar um procedimento alternativo ao asinvés chardo format "999"principal */
    field qtcr-servico-decsolicitacao                 as char format "999"
    field cd-servico  /* U - Urgência E - Eletivo */
               field tp-comb    as char format "99999999"
    field cd-tipo-percentual             as char format "99"
    field vlds-servico                     as char format "x(9)".

def temp-table tmp-retorno-serv no-undo
    field cd-prest-execid-autoriza as char
    field in-servico as char
    field tp-servico as char
    asfield charcd-servico format "x(15)"as int64
    field cdqt-prestser-divisaoper as dec
    field vl-part-cob as dec
    field cd-erro-sistema  as char format "x(15)"
    field cd-grau-partpacote 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 format "x(2)"
    field cd-via-acesso   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. 
    as 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
case nr-ver-tra-imp:
       field uf-compl         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     
        when "24" then assign in-prox-pos = as char
 in-prox-pos + 35.   field hr-inicial                     as char
    field hr-final                   
    asend charcase.
    field
 dt-realizacao   create tmp-servicos-req.
    /*     Campo da temp   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 tp-comb*//* 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 +  as char
02, 2)  //Tipo insumo
 field ds-servico         tmp-servicos-req.qt-servico            as char.

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= substr(segmento-req-par,in-prox-pos + 12,5)   //Quantidade inteira do serviço (Ex: Qtd: 12,5, este campo fica 12)
    field qt-ser-per as dec
    field vl-part-cob as dec
 tmp-servicos-req.qt-servico-dec    field cd-erro-sistema as char
    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).

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 in-prox-pos = 3409.
end case.
 
repeat:               = 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.cd-tipo-percentual           = substr(segmento-req-par,in-prox-pos + 34,2)   //45-Fator Red/Acr
           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 case nr-ver-tra-imp:
    100,10, este campo fica 10010)
    when "22" or when "25" then assign in-prox-pos = in-prox-pos + 29. 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)
           tmp-servicos-req.cd-prest-divisao  
        when "24" then assign= insubstr(segmento-prox-pos = req-par,in-prox-pos + 35.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 tmp-servicos-req.
    /*     Campo da temp= substr(segmento-req-par,in-prox-pos + 152,2)  //Grau de participação do membro de equipe
           tmp-servicos-req.cd-via-acesso                = substr(segmento-req-par,in-prox-pos     + 149,2)  *//*Via Posiçãode que a informação estava no segmento *//* Descrição */
acesso
          assign tmp-servicos-req.tpcd-servicotecnica                   = substr(segmento-req-par,in-prox-pos + 01151, 1)  //I - Insumos, P - Procedimentos e A - PacoteTécnica utilizada
           tmp-servicos-req.tpnm-prof-insumoexec                    = substr(segmento-req-par,in-prox-pos + 0267, 270)  //Tipo insumoNome do profissional pf executante
           tmp-servicos-req.qtcons-prof-servicocompl                   = substr(segmento-req-par,in-prox-pos + 12154,57)   //Quantidade inteiraSigla 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)   //QuantidadeNumero fracionada 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/AcrCBOS do profissional pf executante
           tmp-servicos-req.vl-serviconr-cpf-compl                 = /*  Não era passado =por 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) //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 do prestador divisão (4 dígitos) + código final do prestadorregistro divisão (8 dígitos) + código especialidade do prestador divisão (3 dígitosEx: 12:57, este campo fica 1257)
           tmp-servicos-req.cd-grau-part dt-realizacao                = 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.cons-prof-compl              = substr(segmento-req-par,in-prox-pos + 154,7)  //Sigla do conselho do profissional pf executanteds-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)

    if   nr-ver-tra-imp = "22" or tmp-servicos-req.num-cons-compl      nr-ver-tra-imp = "24" or nr-ver-tra-imp = "25"
    then assign in-prox-pos   = substr(segmento-req-par,in-prox-pos + 161,15) //Numero do conselho do profissional pf executante
           tmp-servicos-req.uf-compl                     = substr(segmento-req-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 +, 176,21)     //NumeroStatus do conselho do profissional pf executante registro
           tmp-servicosretorno-reqserv.cd-cbos-compl        in-servico        = substr(segmento-reqLinhaDeVolta-par,in-prox-pos-aux + 1781,7 1)  //CBOS do profissional pf executanteI - Insumos, P - Procedimentos
           tmp-servicosretorno-reqserv.nrtp-cpf-complservico                 = /*  Não era passado por segmento= substr(LinhaDeVolta-par,in-prox-pos-aux + 3,2)   //Tipo insumo
           tmp-retorno-serv.cd-servico    */  //Cpf do conselho do profissional pf executante
           tmp-servicos-req.hr-inicial   = 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(segmento-reqLinhaDeVolta-par,in-prox-pos-aux + 14513,48)  //HoraQuantidade inicial do registroserviço (Ex: 12:57Qtd: 12,5, este campo fica 125712500)
           tmp-servicosretorno-reqserv.hr-final      vl-part-cob               = substr(segmento-reqLinhaDeVolta-par,in-prox-pos-aux + 14521,414)  //HoraValor da finalparticipação dono registroprestador (Ex: 12:57100,15, este campo fica com 125710015)
           tmp-servicosretorno-req.dt-realizacaoserv.cd-erro-sistema = substr(LinhaDeVolta-par,in-prox-pos-aux + 35, 4) //Mensagem de erro no sistema
           tmp-retorno-serv.cd-pacote       = substr(segmentoLinhaDeVolta-req-par,in-prox-pos-aux + 14147, 8)  .//DataCódigo do registro (Ex: 25/05/2021, este campo fica 25052021)pacote do procedimento ou insumo
   
           assign in-prox-pos-aux = tmpin-prox-servicos-req.cd-variacaopos-aux + 56.                         = substr(segmento-req-par,in-prox-pos + 189,4)  //Código da variação do procedimento
           tmp-servicos-req.cr-solicitacao               = substr(segmento-req-par,in-prox-pos + 66,1)   //Caráter da solicitação
           tmp-servicos-req.tp-comb  
end.                     = substr(segmento-req-par,in-prox-pos + 193,6)  //Tipo da
 combinação não permitida
      

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 /*tmplg-servicosmens-req.dstela-servicopar               as log   =  Apenas versão >= 12.1.33              no-undo. 
/*02*/ def input  param lg-simulacao-par      //Descrição do insumo genérico realizado, utilizado para controlar a quantidadeas utilizadalog corretamente (mov-insu.char-21, insuusos.char-21, insuguia.char-4)

      if   nr-ver-tra-imp = "22" or nr-ver-tra-imp = "24" or nr-ver-tra-imp = "25"
    then assign 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 no-undo.
/*03*/ def input  param r-maquclin-par                 as recid             = substr(LinhaDeVolta-par,in-prox-pos-aux , 1)    no-undo. 
/*04*/Status def doinput registro
 param in-tipo-proces-par         tmp-retorno-serv.in-servico    as char =format substr(LinhaDeVolta-par,in-prox-pos-aux + 1, 1)  //I - Insumos, P - Procedimentos
"x(01)"      no-undo.
/*05*/ def input  param segmento-req-par            tmp-retorno-serv.tp-servico   as char format = 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
   "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        tmp-retorno-serv.qt-ser-per       as char =format substr(LinhaDeVolta-par,in-prox-pos-aux + 13,8)  //Quantidade do serviço (Ex: Qtd: 12,5, este campo fica 12500)
   "x(8000)"    no-undo. /* Segmento com retorno dos dados do documento (sem o serviço) */
/*08*/ def output param cd-erro-sistema-par        tmp-retorno-serv.vl-part-cob    as = substr(LinhaDeVolta-par,in-prox-pos-aux + 21,14) //Valor da participação no prestador (Ex: 100,15, este campo fica com 10015)
char                     no-undo.
/*09*/ def input  param tmplg-trata-retornocomb-serv.cdnao-erro-sistema = substr(LinhaDeVolta-par,in-prox-pos-aux + 35, 4) //Mensagem de erro no sistema
perm-wac-par as int                  tmp-retorno-serv.cd-pacote    no-undo.
/*10*/ def output =param substr(LinhaDeVolta-par,in-prox-pos-aux + 47, 8).//Código do pacote do procedimento ou insumo
   
 ds-erro-sistema-ptu-par        as char   init ""          assign in-prox-pos-aux = in-prox-pos-aux + 56.  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  
end.                           
         */
/*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 */