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: |
| ||||||||
Retorno |
|
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:
#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:
- PTU A500 EXPORTAÇÃO - PTU A500 - PLSUA500X
05. ASSUNTOS RELACIONADOS
- Não se aplica.