Home

Linha Microsiga Protheus

Páginas filhas
  • PLSAUT02 - Cobertura de Procedimentos

Ponto-de-Entrada: PLSAUT02 - Cobertura de Procedimentos
Versões: Advanced Protheus 7.10 , Microsiga Protheus 8.11
Descrição:

Validade de Cobertura de procedimentos do usuário, execução pela rede de atendimento e solicitação feita pelo Médico

 

Ponto de Entrada: PLSAUT02

 

Parametros de Entrada:

 

                                   aRet (A)            Todas as criticas que o PLS ja fez ate o momento. A documentacao do aRet sera descrita logo abaixo.

 

                                   dData (D)          Data do Evento

                                                           10/10/2003

 

                                   cHora (C 4)       Hora do Evento

                                                           1012

                                                           (horaminuto)

 

                                   cCdTbPd (C 2)  Codigo Tipo de Tabela

                                                           01

 

                                   cCdTbPd (C 16) Codigo do Procedimento

                                                           00010014

 

                                   nQtd (N 4)         Quantidade de eventos

                                                           1

 

                                   cCid (C 8)         Cid

                                                           A20

 

                                   cLocalExec (C1)'1' Esta sendo executado no processamento de contas

                                                           '2' Esta sendo executado da rotina de autorizacao (on-line)

                                   1

 

                                   cOpeSol (C 4)   Operadora do medico solicitante

                                                           0176

 

                                   cCodPRFSol (C 6) Codigo do medico solicitante (BB0_CODIGO)

                                                               (nao e o CRM e sim o codigo unico dele como profissional de saude)

                                                              000200

 

                                   cOpeRDA (C 4) Operadora da Rede de Atendimento

                                                           0176

 

                                   cCodRDA (C 6) Codigo da Rede de Atendimento

                                                           000300

 

                                   cCodLoc (C 3)   Codigo sequencial do local de atendimento da Rede de Atendimento

                                                           001

 

                                   cLocal (C 3)      Codigo do local de atendimento da Rede de Atendimento

                                                           001

 

                                   cCodEsp (C 4)  Codigo da Especialidade

                                                           0001

           

                                   cOpeUsr (C 4)   Operadora do Usuario

                                                           0176

 

                                   cMatrUsr (C 12) Matricula do usuario (empresa, matricula e tipo registro)

                                                           000100000100

 

 

 

Retorno e aRet - O Retorno tem a mesma estrutura do parametro de entrada a Ret.

 

aRet - {lOK, aCriticas,cNivAut,cNivCri}

 

sendo:  lOK - Autorizada ou nao (.T. ou .F.)

            aCriticas - Matriz na estrutura abaixo

           

 

                            [1] Codigo da Critica C 3

                            [2] Descricao da Critica C 120

                            [3] Informacao da critica C 120

                            [4] Nivel C 1

                            [5] Tipo C 1

                            [6] Cod.TpProced C 2                      

                            [7] Codigo do Procedimento C 16

            cNivAut - Nivel onde foi autorizado na codificacao abaixo. Este campo no retorno so deve ser atualizado quando lOK for .T.

 

                           1 - Cobertura Usuario

                           2 - Grupo de Cobertura do Usuario

                           3 - Cobertura Familia

                           4 - Grupo de Cobertura Familia                                                         

                           5 - Cobertura Produto

                           6 - Grupo de Cobertura Produto

                           7 - Cobertura SubContrato

                           8 - Grupo de Cobertura SubContrato

                           9 - Tabela Padrao

 

            cNivCri - Nivel onde foi autorizado na codificacao abaixo. Este campo no retorno so deve ser atualizado quando lOK for .F.

 

                           1 - Usuario/Empresa/Familia

                           2 - Rede de Atendimento

                           3 - Especialidade

                           4 - Solicitante

 

           

 

            Exemplo de montagem de um aRet:

 

     aCriticas := {}

     PLSPOSGLO('0176','501','Desc Critica','1')          

     //Funcao PLSPOSGLO posiciona em uma critica previamente cadastrada no cadastro de critica. Se a critica nao existir no cadastro o sistema inclui automaticamente...

     //0176                     Operadora

     //501                       Codigo da critica cadastrada

     //Desc Critica           Descricao da critica

     //1                           '1' Esta sendo executado do processamento de contas

   

     //funcao PLSBCTDESC() retorna a descricao de uma critica

     cCdTbPd := '01'

     cCodPro := '00010014'

 

      aadd(aCriticas,{'501',PLSBCTDESC(),'',BCT->BCT_NIVEL,BCT->BCT_TIPO,cCdTbPd,cCodPro})

      aadd(aCriticas,{''   ,'Idade Minima',AllTrim(Str(nIdaMin)),'','',cCdTbPd,cCodPro})

      aadd(aCriticas,{''   ,'Idade Maxima',AllTrim(Str(nIdaMax)),'','',cCdTbPd,cCodPro})

      aadd(aCriticas,{''   ,'Idade Usuario',AllTrim(Str(nIdade)),'','',cCdTbPd,cCodPro})

 

      aRet := {.F.,aCriticas,'','3'}

 

Importante!!!!

 

1) O aRet tem a mesma estrutura no primeiro parametro de entrada e deve ter o mesmo no Retorno, a incorreta devolucao do Retorno pelo ponto de entrada ira ocasionar erro de sistema (erro de implementacao de ponto de entrada no cliente)

                                                           

1 - EXEMPLO DA IMPLEMENTAÇÃO:

 

//Objetivo: Regra de autorizacao Espeficica
//Conceito: Usuario de fundacao da unimed tubarao que for a outra unimed do estado nao pode ser cobrado como
//intercambio eventual

User Function PLSAUT02
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Define variaveis da rotina...                                            ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
LOCAL aDadosPar  := aClone(paramixb)

LOCAL aRetPad    := aClone(aDadosPar[1]) //Retorno padrao, e o que o sistema ja criticou ate o momento com suas regras padroes...
LOCAL dData      := aDadosPar[2]         //Data do Evento
LOCAL cHora      := aDadosPar[3]         //Hora do Evento                                        
LOCAL cCdTbPd    := aDadosPar[4]         //Codigo do Tipo de Tabela
LOCAL cCodPro    := aDadosPar[5]         //Codigo do Procedimento
LOCAL nQtd       := aDadosPar[6]         //Quantidade
LOCAL cCid       := aDadosPar[7]         //Cid
LOCAL cLocalExec := aDadosPar[8]         //"1" processamento via atendimento
                                         //"2" processameto via cotas medicas (mudanca de fase)
LOCAL cOpeSol    := aDadosPar[9]         //Operadora do Solicitante
LOCAL cCodPRFSol := aDadosPar[10]        //Codigo do Profissional de Saude do Medico Solicitante
LOCAL cOpeRDA    := aDadosPar[11]        //Operadora da RDA
LOCAL cCodRDA    := aDadosPar[12]        //Codigo da RDA
LOCAL cCodLoc    := aDadosPar[13]        //Codigo do Local de Atendimento
LOCAL cLocal     := aDadosPar[14]        //Local
LOCAL cCodEsp    := aDadosPar[15]        //Codigo da Especialidade
LOCAL cOpeUsr    := aDadosPar[16]        //Codigo da Operadora do Usuario                               
LOCAL cMatricUsr := aDadosPar[17]        //Matricula do Usuario
LOCAL cPadInt    := aDadosPar[18]        //Padrao de internacao...
LOCAL aDadUsr    := If(Len(aDadosPar)>=19,aDadosPar[19],{}) //Dados Gerais do Usuario
LOCAL cOpeOri    := If(Len(aDadUsr)>=45,aDadUsr[45],"")     //Operadora Origem                        
LOCAL cCodEmp    := If(Len(aDadUsr)>=2,Subs(aDadUsr[2],5,4),BA1->BA1_CODEMP) //Codigo Grupo Empresa
LOCAL aDadRda    := If(Len(aDadosPar)>=20,aDadosPar[20],{}) //Dados Gerais da RDA   
LOCAL cTipPre    := If(Len(aDadRda)>=27,aDadRda[27],"")                             
LOCAL cCodOpe    := If(Len(aDadRda)>=28,aDadRda[28],"")                             

LOCAL nOrdBA0    := BA0->(IndexOrd())
LOCAL nRecBA0    := BA0->(Recno())

LOCAL lSistemaAut:= aRetPad[1]      //Sistema no padrao autorizou ou nao????
                                     //esta variavel vai conter se o sistema nas suas regras padroes autorizou o procedimento ou nao...
LOCAL aRetFuncao := aClone(aRetPad) //retorno padrao desta funcao...                              

LOCAL lSuaRegra
LOCAL aCriticas  := {}   

LOCAL cCodCriEsp := "702"                      
LOCAL cDesCriEsp := "Usuario de fundacao nao pode ser cobrado como intercambio eventual estadual"
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Sua regra especifica...                                                  ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If  lSistemaAut .And. PLSPOSGLO(PLSINTPAD(),cCodCriEsp,cDesCriEsp,cLOCALExec)

    //Somemte vai negar se e um usuario de fundacao e o atendimento e feito por outra unimed...
    lSuaRegra := UsrFundac(cOpeOri,cCodEmp) .And. ( cTipPre <> GetNewPar("MV_PLSTPIN","OPE") )
    //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    //³ Se sua regra barrou nega...                                              ³
    //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    If ! lSuaRegra
       cNivel := "FUN" //coloque aqui o nivel que vc criticou, como BR8, BB2 etc...
       aadd(aCriticas,{cCodCriEsp,cDesCriEsp,"",BCT->BCT_NIVEL,BCT->BCT_TIPO,cCdTbPd,cCodPro})
       aRetFuncao := {.F.,aCriticas,cNivel,"",.F.}
    Endif 
Endif      
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Fim da rotina principal...                                               ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Return(aRetFuncao)

 

2 - EXEMPLO DA IMPLEMENTAÇÃO:

 

User Function PLSAUT02
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Define variaveis da rotina...                                            ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
LOCAL aDadosPar  := aClone(paramixb)

LOCAL aRetPad    := aClone(aDadosPar[1]) //Retorno padrao, e o que o sistema ja criticou ate o momento com suas regras padroes...
LOCAL dData      := aDadosPar[2] //Data do Evento
LOCAL cHora      := aDadosPar[3] //Hora do Evento                                        
LOCAL cCdTbPd    := aDadosPar[4] //Codigo do Tipo de Tabela
LOCAL cCodPro    := aDadosPar[5] //Codigo do Procedimento
LOCAL nQtd       := aDadosPar[6] //Quantidade
LOCAL cCid       := aDadosPar[7] //Cid
LOCAL cLocalExec := aDadosPar[8] //'1' processamento via atendimento
                                 //'2' processameto via cotas medicas (mudanca de fase)
LOCAL cOpeSol    := aDadosPar[9] //Operadora do Solicitante
LOCAL cCodPRFSol := aDadosPar[10]//Codigo do Profissional de Saude do Medico Solicitante
LOCAL cOpeRDA    := aDadosPar[11]//Operadora da RDA
LOCAL cCodRDA    := aDadosPar[12]//Codigo da RDA
LOCAL cCodLoc    := aDadosPar[13]//Codigo do Local de Atendimento
LOCAL cLocal     := aDadosPar[14]//Local
LOCAL cCodEsp    := aDadosPar[15]//Codigo da Especialidade
LOCAL cOpeUsr    := aDadosPar[16]//Codigo da Operadora do Usuario                               
LOCAL cMatricUsr := aDadosPar[17]//Matricula do Usuario
LOCAL cPadInt    := aDadosPar[18]//Padrao de internacao...
LOCAL aDadUsr    := If(Len(aDadosPar)>=19,aDadosPar[19],{}) //Dados Gerais do Usuario
LOCAL cOpeOri    := If(Len(aDadUsr)>=45,aDadUsr[45],'')                             
LOCAL aDadRda    := If(Len(aDadosPar)>=20,aDadosPar[20],{}) //Dados Gerais da RDA   
LOCAL cTipPre    := ''
LOCAL cCodOpe    := ''
LOCAL nOrdBA0    := BA0->(IndexOrd())
LOCAL nRecBA0    := BA0->(Recno())

LOCAL lSistemaAut:= aRetPad[1] //Sistema no padrao autorizou ou nao????
                               //esta variavel vai conter se o sistema nas suas regras padroes autorizou o procedimento ou nao...
LOCAL aRetFuncao := aClone(aRetPad) //retorno padrao desta funcao...                              

LOCAL lSuaRegra
LOCAL aCriticas  := {}   

LOCAL cCodCriEsp := '701'                       //Codigo de sua critica especifica...
LOCAL cDesCriEsp := 'Cobertura somente para paciente internado.'  //Descricao de sua critica especifica...
LOCAL cNivel   
LOCAL lPlanoHost := IIF(BI3->BI3_YHOSP=='S',.T.,.F.)
LOCAL lAteIntEsp := IIF(BQC->BQC_YINTES=='S',.T.,.F.) //Um determinado subcontrato somente pode ter atendimento em SC e RS
LOCAL cEstadosEsp:= BQC->BQC_YESTIN//Estados SC e RS (no caso de chapeco)
LOCAL cCodCriEp2 := '702'                       //Codigo de sua critica especifica...
LOCAL cDesCriEp2 := 'Para este contrato atendimento intercambio eventual somente em SC e RS.'  //Descricao de sua critica especifica...

If Type('aDadRda') == 'A' .And. Len(aDadRda) >= 27
   cTipPre := aDadRda[27]
Endif

If Type('aDadRda') == 'A' .And. Len(aDadRda) >= 28
   cCodOpe := aDadRda[28]
Endif
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Sua regra especifica...                                                  ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If  lPlanoHost .And. lSistemaAut .And. PLSPOSGLO(PLSINTPAD(),cCodCriEsp,cDesCriEsp,cLOCALExec)
    //o sistema autorizou, vou fazer minha regra especifica...... a funcao PLSPOSGLO cria uma critica com uma descricao padrao...
    //BCT-> Arquivo de critica. Apos o sistema criar ele vai deixar posicionado para uso abaixo... a funcao plsposglo faz isso...
    //se a critica ja existir, ele somente posiciona (seek) e ve se o campo ativo esta como sim...
    //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    //³ Sua regra especifica...                                                  ³
    //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    If ! Empty(cPadInt) //e uma internacao, pode internar...
       lSuaRegra := .T.
    Else
       //nao e internacao, so pode ter cobertura se esta internado ou e consulta
       lSuaRegra := ( PLSUSRINTE(cMatricUsr,dData) .Or. AllTrim(cCodPro) = '00010073' )
    Endif  
    //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    //³ Se sua regra barrou nega...                                              ³
    //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    If ! lSuaRegra
       cNivel := 'ESP' //coloque aqui o nivel que vc criticou, como BR8, BB2 etc...
       aadd(aCriticas,{cCodCriEsp,cDesCriEsp,'',BCT->BCT_NIVEL,BCT->BCT_TIPO,cCdTbPd,cCodPro})
       aRetFuncao := {.F.,aCriticas,cNivel,'',.F.}
    Endif 
Endif      

If ! lSistemaAut .And. Type('M->BE1_TIPADM') == 'C' .And. AllTrim(M->BE1_TIPADM) $ '4,5'
   aRetFuncao := {.T.,'1','ESP',''}
Endif

If lAteIntEsp .And. PLSPOSGLO(PLSINTPAD(),cCodCriEp2,cDesCriEp2,cLOCALExec) .And. cTipPre == getmv('MV_PLSTPIN')
   BA0->(DbSetOrder(1))
   If BA0->(DbSeek(xFilial('BA0')+cCodOpe))
      If ! (BA0->BA0_EST $ cEstadosEsp)
         lSuaRegra := .F.
      Endif            
   Endif
   BA0->(DbGoTo(nRecBA0))
   BA0->(DbSetOrder(nOrdBA0))
   //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   //³ Se sua regra barrou nega...                                              ³
   //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
   If ! lSuaRegra
      cNivel := 'ESP' //coloque aqui o nivel que vc criticou, como BR8, BB2 etc...
      aadd(aCriticas,{cCodCriEp2,cDesCriEp2,'',BCT->BCT_NIVEL,BCT->BCT_TIPO,cCdTbPd,cCodPro})
      aRetFuncao := {.F.,aCriticas,cNivel,'',.F.}
   Endif             
Endif
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Fim da rotina principal...                                               ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Return(aRetFuncao)

 

3 - EXEMPLO DA IMPLEMENTAÇÃO:

 

User Function PLSAUT02
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Define variaveis da rotina...                                            ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
LOCAL aDadosPar  := aClone(paramixb)

LOCAL aRetPad    := aClone(aDadosPar[1]) //Retorno padrao, e o que o sistema ja criticou ate o momento com suas regras padroes...
LOCAL dData      := aDadosPar[2]  //Data do Evento
LOCAL cHora      := aDadosPar[3]  //Hora do Evento                                        
LOCAL cCdTbPd    := aDadosPar[4]  //Codigo do Tipo de Tabela
LOCAL cCodPro    := aDadosPar[5]  //Codigo do Procedimento
LOCAL nQtd       := aDadosPar[6]  //Quantidade
LOCAL cCid       := aDadosPar[7]  //Cid
LOCAL cLocalExec := aDadosPar[8]  //"1" processamento via atendimento
                                   //"2" processameto via cotas medicas (mudanca de fase)
LOCAL cOpeSol    := aDadosPar[9]  //Operadora do Solicitante
LOCAL cCodPRFSol := aDadosPar[10] //Codigo do Profissional de Saude do Medico Solicitante
LOCAL cOpeRDA    := aDadosPar[11] //Operadora da RDA
LOCAL cCodRDA    := aDadosPar[12] //Codigo da RDA
LOCAL cCodLoc    := aDadosPar[13] //Codigo do Local de Atendimento
LOCAL cLocal     := aDadosPar[14] //Local
LOCAL cCodEsp    := aDadosPar[15] //Codigo da Especialidade
LOCAL cOpeUsr    := aDadosPar[16] //Codigo da Operadora do Usuario                               
LOCAL cMatricUsr := aDadosPar[17] //Matricula do Usuario
LOCAL cPadInt    := aDadosPar[18] //Padrao de internacao...
LOCAL aDadUsr    := If(Len(aDadosPar)>=19,aDadosPar[19],"") //Dados Gerais do Usuario
LOCAL cOpeOri    := If(Len(aDadUsr)>=45,aDadUsr[45],"")                             
LOCAL aDadRda    := If(Len(aDadosPar)>=20,aDadosPar[20],"") //Dados Gerais da RDA   
LOCAL cTipPre    := If(Len(aDadRda)>=27,aDadRda[27],"")                             
LOCAL cCodOpe    := If(Len(aDadRda)>=28,aDadRda[28],"")                             
LOCAL nOrdBA0    := BA0->(IndexOrd())
LOCAL nRecBA0    := BA0->(Recno())

LOCAL lSistemaAut:= aRetPad[1]       //Sistema no padrao autorizou ou nao????
                                      //esta variavel vai conter se o sistema nas suas regras padroes autorizou o procedimento ou nao...
LOCAL aRetFuncao := aClone(aRetPad)  //retorno padrao desta funcao...                              

LOCAL lSuaRegra
LOCAL aCriticas  := {}   

LOCAL cCodCriEsp := "701"                       //Codigo de sua critica especifica...
LOCAL cDesCriEsp := "Para esta singular nao e possivel ser atendido."  //Descricao de sua critica especifica...
LOCAL cNivel   
LOCAL cUnimeds   := "" 

If     ! Empty(BQC->BQC_YUNIM)
       cUnimeds := BQC->BQC_YUNIM
ElseIf ! Empty(BI3->BI3_YUNIM)
       cUnimeds := BI3->BI3_YUNIM
Else
       cUnimeds := ""
Endif      

//cTipPre == "OPE" -> e porque e um usuario da minha Unimed sendo atendido em outra unimed...                           
//cCodOpe          -> Em qual unimed ele esta sendo atendido
//cUnimeds         -> as Unimeds que o plano ou subcontrato do usuario atual tem direito

If ( ! AllTrim(cUnimeds) ) .And. ;
   ( lSistemaAut ) .And. ;
   ( PLSPOSGLO(PLSINTPAD(),cCodCriEsp,cDesCriEsp,cLOCALExec) ) .And. ;
   ( cTipPre == "OPE" ) .And. ;
   ( ! cCodOpe $ cUnimeds )           
   cNivel := "ESP" //coloque aqui o nivel que vc criticou, como BR8, BB2 etc...
   aadd(aCriticas,{cCodCriEsp,cDesCriEsp,"",BCT->BCT_NIVEL,BCT->BCT_TIPO,cCdTbPd,cCodPro})
   aRetFuncao := {.F.,aCriticas,cNivel,"",.F.}
Endif
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Fim da rotina principal...                                               ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Return(aRetFuncao)

 

4- EXEMPLO DA IMPLEMENTAÇÃO:

 

/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄ¿±±
±±³ Rdmake    ³ PLSAUT02 ³ Autor ³ Equipe Desenvolvimento SIGAPLS ³ Data ³ 21.02.2005 ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Descri‡„o ³ Ponto de entrada para checar regras especificas (modelo)              ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/
User Function PLSAUT02
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Define variaveis da rotina...                                            ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
LOCAL aDadosPar  := aClone(paramixb)

LOCAL aRetPad    := aClone(aDadosPar[1]) //Retorno padrao, e o que o sistema ja criticou ate o momento com suas regras padroes...
LOCAL dData      := aDadosPar[2] //Data do Evento
LOCAL cHora      := aDadosPar[3] //Hora do Evento                                        
LOCAL cCdTbPd    := aDadosPar[4] //Codigo do Tipo de Tabela
LOCAL cCodPro    := aDadosPar[5] //Codigo do Procedimento
LOCAL nQtd       := aDadosPar[6] //Quantidade
LOCAL cCid       := aDadosPar[7] //Cid
LOCAL cLocalExec := aDadosPar[8] //"1" processamento via atendimento
                                  //"2" processameto via cotas medicas (mudanca de fase)
LOCAL cOpeSol    := aDadosPar[9] //Operadora do Solicitante
LOCAL cCodPRFSol := aDadosPar[10]//Codigo do Profissional de Saude do Medico Solicitante
LOCAL cOpeRDA    := aDadosPar[11]//Operadora da RDA
LOCAL cCodRDA    := aDadosPar[12]//Codigo da RDA
LOCAL cCodLoc    := aDadosPar[13]//Codigo do Local de Atendimento
LOCAL cLocal     := aDadosPar[14]//Local
LOCAL cCodEsp    := aDadosPar[15]//Codigo da Especialidade
LOCAL cOpeUsr    := aDadosPar[16]//Codigo da Operadora do Usuario                               
LOCAL cMatricUsr := aDadosPar[17]//Matricula do Usuario


LOCAL lSistemaAut:= aRetPad[1] //Sistema no padrao autorizou ou nao????
                               //esta variavel vai conter se o sistema nas suas regras padroes autorizou o procedimento ou nao...
LOCAL aRetFuncao := aClone(aRetPad) //retorno padrao desta funcao...                              

LOCAL lSuaRegra
LOCAL aCriticas  := {}   

LOCAL cCodCriEsp := "703"                       //Codigo de sua critica especifica...
LOCAL cDesCriEsp := "MINHA REGRA CRIADA SOZINHA"  //Descricao de sua critica especifica...
LOCAL cNivel    
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Sua regra especifica...                                                  ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If lSistemaAut .And. PLSPOSGLO(PLSINTPAD(),cCodCriEsp,cDesCriEsp,cLOCALExec)
   //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   //³ Sua regra especifica...                                                  ³
   //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
   lSuaRegra := MSGYESNO("VOCE QUER AUTORIZAR OU NAO")
   //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   //³ Se sua regra barrou nega...                                              ³
   //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
   If ! lSuaRegra
      cNivel := "BI3" //coloque aqui o nivel que vc criticou, como BR8, BB2 etc...
      aadd(aCriticas,{cCodCriEsp,PLSBCTDESC(),"",BCT->BCT_NIVEL,BCT->BCT_TIPO,cCdTbPd,cCodPro})
      aRetFuncao := {.F.,aCriticas,cNivel,"",.F.}
   Endif
Endif
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Fim da rotina principal...                                               ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Return(aRetFuncao)

Programa Fonte
.PRW
Sintaxe

PLSAUT02 - Cobertura de Procedimentos ( < aRet> , < dData> , < cHora> , < cCdTbPd> , < cCdTbPd> , < nQtd> , < cCid> , < cLocalExec> , < cOpeSol> , < cCodPRFSol> , < cOpeRDA> , < cCodRDA> , < cCodLoc> , < cLocal> , < cCodEsp> , < cOpeUsr> , < cMatrUsr> ) --> aRet

Parâmetros:
Nome Tipo Descrição Default Obrigatório Referência
aRet Array of Record Todas as criticas que o PLS ja fez ate o momento. A documentacao do aRet sera descrita logo abaixo.
aRet - {lOK, aCriticas,cNivAut,cNivCri}

sendo: lOK - Autorizada ou nao (.T. ou .F.)
aCriticas - Matriz na estrutura abaixo


[1] Codigo da Critica C 3
[2] Descricao da Critica C 120
[3] Informacao da critica C 120
[4] Nivel C 1
[5] Tipo C 1
[6] Cod.TpProced C 2
[7] Codigo do Procedimento C 16
cNivAut - Nivel onde foi autorizado na codificacao abaixo. Este campo no retorno so deve ser atualizado quando lOK for .T.
1 - Cobertura Usuario
2 - Grupo de Cobertura do Usuario
3 - Cobertura Familia
4 - Grupo de Cobertura Familia
5 - Cobertura Produto
6 - Grupo de Cobertura Produto
7 - Cobertura SubContrato
8 - Grupo de Cobertura SubContrato
9 - Tabela Padrao

cNivCri - Nivel onde foi autorizado na codificacao abaixo. Este campo no retorno so deve ser atualizado quando lOK for .F.

1 - Usuario/Empresa/Familia
2 - Rede de Atendimento
3 - Especialidade
4 - Solicitante
X
dData Array of Record Data do Evento X
cHora Array of Record Hora do Evento X
cCdTbPd Array of Record Codigo Tipo de Tabela X
cCdTbPd Array of Record Codigo do Procedimento X
nQtd Array of Record Quantidade de eventos X
cCid Array of Record CID X
cLocalExec Array of Record "1" Esta sendo executado no processamento de contas
"2" Esta sendo executado da rotina de autorizacao (on-line)
X
cOpeSol Array of Record Operadora do medico solicitante X
cCodPRFSol Array of Record Codigo do medico solicitante (BB0_CODIGO)
nao e o CRM e sim o codigo unico dele como profissional de saude)
X
cOpeRDA Array of Record Operadora da Rede de Atendimento X
cCodRDA Array of Record Codigo da Rede de Atendimento X
cCodLoc Array of Record Codigo sequencial do local de atendimento da Rede de Atendimento X
cLocal Array of Record Codigo do local de atendimento da Rede de Atendimento
X
cCodEsp Array of Record Codigo da Especialidade X
cOpeUsr Array of Record Operadora do Usuario X
cMatrUsr Array of Record Matricula do usuario (empresa, matricula e tipo registro) X
Retorno
    aRet(vetor)
  • O Retorno tem a mesma estrutura do parametro de entrada a Ret.
    aRet - {lOK, aCriticas,cNivAut,cNivCri}