| Versões: | Advanced Protheus 7.10 , Microsiga Protheus 8.11 |
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 eventualUser 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]
EndifIf 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
EndifIf ! lSistemaAut .And. Type('M->BE1_TIPADM') == 'C' .And. AllTrim(M->BE1_TIPADM) $ '4,5'
aRetFuncao := {.T.,'1','ESP',''}
EndifIf 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 direitoIf ( ! 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)
.PRW
PLSAUT02 - Cobertura de Procedimentos ( < aRet> , < dData> , < cHora> , < cCdTbPd> , < cCdTbPd> , < nQtd> , < cCid> , < cLocalExec> , < cOpeSol> , < cCodPRFSol> , < cOpeRDA> , < cCodRDA> , < cCodLoc> , < cLocal> , < cCodEsp> , < cOpeUsr> , < cMatrUsr> ) --> aRet
| 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 |
-
aRet(vetor)
- O Retorno tem a mesma estrutura do parametro de entrada a Ret.
aRet - {lOK, aCriticas,cNivAut,cNivCri}