Árvore de páginas


01. DADOS GERAIS

Produto:

TOTVS Saúde Planos

Linha de Produto:

Linha Protheus

Segmento:

Saúde

Módulo:SIGAPLS
Função:PLSUA500X
Ticket:11577481
Requisito/Story/Issue (informe o requisito relacionado) :DSAUPC-15073


02. SITUAÇÃO/REQUISITO

Implementar o ponto de entrada PLSPACOTE para que o usuário possa personalizar o envio do XML PTU A500 com pacote aberto, sem enviar o pacote principal e enviando todos itens contidos nesse pacote.

O envio personalizado com pacote aberto está fora do padrão Unimed vigente, porém o PE foi criado para suprir necessidade do envio desta maneira devido a acordos de exceções a norma.


03. SOLUÇÃO

Implementado Ponto de Entrada PLSPACOTE.

Ponto de Entrada PLSPACOTE

Programa fonte:PLSUA500X
Função:Enviar XML PTU A500 personalizado (pacote aberto)
Parâmetros:
NomeTipoDescriçãoObrigatório
cAliasCaractereAlias com informações da guiaSim
Retorno
NomeTipoDescriçãoObrigatório
aRetArrayInformações do pacote (detalhes a seguir)Sim


Funcionamento:

O Ponto de Entrada PLSPACOTE permite a personalização da query que retorna os dados da tabela B43-(Aut x Proc x Pacote). O programa sem customização retorna os itens do pacote obrigatórios que são do tipo 0-Procedimentos e 5-Orteses/Próteses. Também é possível aplicar uma regra para distribuição de valores e taxas de cada procedimento em separado, além da quantidade ocorrida. É possível também escolher se o código do pacote será enviado ou não.


Detalhamento do Parâmetro:

cAlias possui os dados da informação da guia para fazer a consulta na tabela B43, onde:

(cAlias)→CODOPE = Código da Operadora
(cAlias)→CODLDP = Local de Digitação
(cAlias)→CODPEG = Código PEG
(cAlias)→NUMERO = Número da Guia
(cAlias)→BD6_ORIMOV = Origem do Movimento
(cAlias)->BD6_SEQUEN= Sequencial do Evento


Detalhamento do Retorno:


Posição 1

aRet[1] é uma Flag, onde 1-Envia Pacote principal e 2-Não envia Pacote principal.

Na primeira posição do array de retorno aRet, fica a Flag que sinaliza que a exportação do XML deverá ocorrer com ou sem o pacote principal. 

Com a Flag = 1, será enviado o pacote principal como um dos procedimentos, além da sua composição que será retornada de forma personalizada no Ponto de Entrada PLSPACOTE.

Com a Flag = 2, o envio será feito sem o pacote principal, apenas com sua composição que será retornada de forma personalizada no Ponto de Entrada PLSPACOTE.

Note que o valor da Flag é um numérico não um caractere

Retornos possíveis para aRet[1]:

aRet = {1,...} ou aRet = {2,...}

Demais posições

Após a primeira posição, cada posição "nX" é um item do pacote
aRet[nX][1]:Código da Tabela
aRet[nX][2]:Código do Procedimento
aRet[nX][3]:Descrição do Procedimento
aRet[nX][4]:Tipo do Procedimento
aRet[nX][5]:Nível no Pacote
aRet[nX][6]:Id do item
aRet[nX][7]:Sequecial do item
aRet[nX][8]:Recno na Tabela
aRet[nX][9]:Valores
     aRet[nX][9][1] vl_ServCobrado
     aRet[nX][9][2] vl_FilmeCobrado
     aRet[nX][9][3] vl_CO_Cobrado
aRet[nX][10]:Taxas
     aRet[nX][10][1] tx_AdmServico
     aRet[nX][10][2] tx_AdmFilme
     aRet[nX][10][3] tx_AdmCO
aRet[nX][11]:Quantidade

Exemplo de Implementação PLSPACOTE:

Exemplo
#Include 'Protheus.ch'

User Function PLSPACOTE()

local aRet      := {2} // 1-Exporta pacote principal (processo sem customização)  2-Não exporta o código do pacote
local aValores  := {0,0,0} // {ServCobrado,vl_FilmeCobrado,vl_CO_Cobrado}
local aValTaxa  := {0,0,0} // {tx_AdmServico,tx_AdmFilme,tx_AdmCO}
local cSql      := ""
local cAlias    := ParamIxb
local cB43Name  := retSqlName("B43")
local nQtd      := 0      

//Extração de informações da tabela B43
cSql += " SELECT B43_CODPAD, B43_CODPRO, B43_NIVPAC, B43_DESPRO, B43_TIPO, B43_IDUNIC, B43_SEQPTU, R_E_C_N_O_ Recno, B43_VALFIX"
cSql += " FROM " + cB43Name + " B43 "
cSql += " WHERE  B43_FILIAL = '" + xfilial("B43") + "' "
cSql += " AND B43_CODOPE = '" +  (cAlias)->CODOPE + "' "
cSql += " AND B43_CODLDP = '" +  (cAlias)->CODLDP + "' "
cSql += " AND B43_CODPEG = '" +  (cAlias)->CODPEG + "' "
cSql += " AND B43_NUMERO = '" +  (cAlias)->NUMERO + "' "
cSql += " AND B43_ORIMOV = '" +  (cAlias)->BD6_ORIMOV + "' "
cSql += " AND B43_SEQUEN = '" +  (cAlias)->BD6_SEQUEN + "' "
cSql += " AND B43.D_E_L_E_T_ = ' ' "
dbUseArea(.T.,"TOPCONN",TCGENQRY(,,cSql),'TMPB43',.F.,.T.)

while !TMPB43->(eof())
	if TMPB43->B43_TIPO == "0"
		BR8->(msseek(xFilial("BR8")+TMPB43->(B43_CODPAD+B43_CODPRO)))
		if BR8->BR8_TIPROL == "2"
			TMPB43->(dbskip())
			loop
		endif
	endif

    //Regra dos valores - APENAS EXEMPLO
    aValores := calculaValores()
    aValTaxa := calculaTaxa()

    //Regra da Quantidade - APENAS EXEMPLO
    nQtd := regraQuantidade()

	aadd(aRet,{TMPB43->B43_CODPAD, alltrim(TMPB43->B43_CODPRO), TMPB43->B43_DESPRO, TMPB43->B43_TIPO, TMPB43->B43_NIVPAC, TMPB43->B43_IDUNIC,;
			   TMPB43->B43_SEQPTU, TMPB43->Recno, aValores, aValTaxa, nQtd})
	
	TMPB43->(dbskip())
enddo

TMPB43->(dbclosearea())

return aRet 

04. DEMAIS INFORMAÇÕES

Para maiores informações da rotina, consulte a documentação no link:

05. ASSUNTOS RELACIONADOS

  • Não se aplica.