Histórico da Página
Carteirinha e Tipo de
Carteirinhaplanos
Características do Requisito
Linha de Produto: | Microsiga Protheus | ||||||
Segmento: | Saúde | ||||||
Módulo: | Plano de Saúde | ||||||
Rotina: |
| ||||||
Ponto de Entrada: | PLRRN360. | ||||||
País(es): | Todos | ||||||
Banco(s) de Dados: | Todos | ||||||
Tabelas Utilizadas: | BA1 - Beneficiarios | ||||||
Sistema(s) Operacional(is): | Todos | ||||||
Versões/Release: | 11.80 | ||||||
Versão Corrigida: | 11.80 | ||||||
Versão Expedida: | 11.80 |
Descrição
Implementado melhoria para visualização e impressão da carteirinha em papel via remote ou pelo portal do beneficiáriobem como exibi informações sobre diferença entre tipos de planos conforme determinação da ANS.
Procedimento para Utilização
Nesta rotina foi disponibilizado o Ponto de Entrada (PLRRN360), onde o cliente pode configurar o layout do cartão conforme sua preferência.
Para impressão via remote:
- Acesse o menu /Atualizações/Cartão Identific./Lotes de Cartão (PLSA262)
- Informe os parâmetros solicitados e click em exportar. Obs.: Tipo Geração = Impressão
3. Click no botão Confirmar e confirmar a tela com Sim a tela abaixo.
4. Selecione a impressora e click em OK.
Para Impressão via Porta do Beneficiário.
- Acesse o menu /Principal/ Imprimir Carteirinha.
- Informe os parâmetros solicitados.
- Click em Confirmar para a impressão.
Para impressão da frente e verso é necessário informar o nome do arquivo e extensão nos parâmetros MV_PLSFRE (Frente) e MV_PLSVER (Verso)
Os arquivos devem estar localizados na STARTPATH do servidor.
No portal existe a opção tipo de planos para atender a normativa RN-379 que ajusta a RN-360.
Para o link aparecer é necessário informar a URL no parâmetro MV_LRN360. (URL para redirecionamento do Anexo I da RN-379).
Exemplo URL informada no parâmetro.: http://www.ans.gov.br/images/stories/Legislacao/rn/RN_379anexo.pdf.
Para impressão via remote:
- Acesse o menu /Atualizações/Cartão Identific./Lotes de Cartão (PLSA262)
- Informe os parâmetros solicitados e click em exportar. Obs.: Tipo Geração = Impressão
3. Click no botão Confirmar e confirmar a tela com Sim a tela abaixo.
4. Selecione a impressora e click em OK.
Impressão com informação do arquivo de fundo frente e verso.
Impressão sem informação do arquivo de fundo frente e verso.
Para Impressão via Porta do Beneficiário.
- Acesse o menu /Principal/Carteirinha.
- Informe os parâmetros solicitados.
Clicando no link Tipos de Planos e redirecionado para URL informada no parâmetro (MV_LRN360). Esta opção só aparece quando o parâmetro for criado e tiver conteúdo.
- Click em Confirmar para a impressão.
Impressão com informação do arquivo de fundo frente e verso.
Impressão sem informação do arquivo de fundo frente e verso.
Redirecionamento ao clicar no Link tipo de planos.
Sem o parâmetro ou com conteúdo em branco a opção Tipo de Planos não é mostrada.
Ponto de Entrada
Descrição: | Permite mudar o formato da impressão da carteirinha. | ||||||||||||||||
Localização: | Atualizações/Cartão Identific./Lotes de Cartão ou /Principal/Carteirinha | ||||||||||||||||
Eventos: | Impressão de carteirinhaCarteirinha | ||||||||||||||||
Programa Fonte: | PLRRN360 | ||||||||||||||||
Função: | Plano de Saúde | ||||||||||||||||
Retorno: |
|
Exemplo:
#INCLUDE "PROTHEUS.CH"
#INCLUDE "PLSMGER.CH"
#INCLUDE "TOPCONN.CH"
#INCLUDE "TBICONN.CH"
#INCLUDE "fileio.ch"
#DEFINE IMP_PDF 6
#DEFINE lSrvUnix IsSrvUnix()
//-------------------------------------------------------------------
/*/{Protheus.doc} PLRRN360
Ponto de entrada para impressao de Carteirinha do beneficiário. Regras
definidas na RN-360
@author PLS TEAM
@version P11
@since 15.10.15
/*/
//-------------------------------------------------------------------
user function PLRRN360()
local cMatric := paramixb[1]
local aDados := paramixb[2]
local lWeb := paramixb[3]
local cPathSrv := paramixb[4]
local nLinMax := 0
local nColMax := 0
local nLinIni := 0
local nColIni := 0
local nColA4 := 0
local nX := 0
local nWeb := 0
local nTweb := 1
local nLweb := 0
local nLwebC := 0
local cFileName := ''
local cMsg := ''Local cFileLogo := '':= 1
local nLweb := 0
local nLwebC := 0
local cFileName := ''
local cMsg := ''
local cFileLogo := ''
Local cStartPath:= GetSrvProfString("STARTPATH","")
local cImgFrente:= cStartPath + "\" + getNewPar("MV_PLSFRE", "frente.png")
local cImgVerso := cStartPath + "\" + getNewPar("MV_PLSVER", "verso.png")
local cRel := "carbene"
local lContinua := .t.
local oFont02 := nil
local oFont02n := nil
local oFont03n := nil
local oFont05n := nil
local oPrint := nil
local aRet := {}
cTitulo := "Carteirinha do Beneficiário"
//quando for chamada web aciona a funcao para validacao e busca dos dados a serem impresso (lote de carteirinha)
if lWeb
aRet := PLSA261INC(SubStr(cMatric,1,4),cMatric,getNewPar("MV_PLSMP1V","4"),.t.,,.t.,.t.)
if aRet[1]
aDados := aRet[4]
endIf
endIf
//em montagem ou alteracao do layout do relatorio usar esta matriz
/*aDados := { { replicate('A',30),; //01 - nome do beneficiario
replicate('B',21),; //02 - numero da matricula
replicate('C',10),; //03 - data de ascimento do beneficiario
replicate('D',15),; //04 - numero do cartao naciona de saude CNS
replicate('E',12),; //05 - numero do registro do plano ou do cad. do plano na ans
replicate('F',56),; //06 - segmentacao assistencial do plano
replicate('G',6),; //07 - codigo do registro da operadora na ans
replicate('H',30)+replicate('P',15)+replicate('X',30),; //08 - informacao de contato com a operadora
replicate('I',40)+replicate('P',15)+replicate('X',30),; //09 - informacao de contato com a ans
replicate('J',10),; //10 - data de termino da cobertura parcial temporaria
replicate('L',13),; //11 - padrao de acomodacao
replicate('M',17),; //12 - tipo de contratacao
replicate('N',19),; //13 - area de abrangencia geografica
replicate('O',22),; //14 - nome do produto
replicate('P',60),; //15 - nome fantasia da operadora
replicate('Q',20),; //16 - nome fantasia da administradora de beneficios
replicate('R',40),; //17 - nome da p. juridica contratante do plano coletivo ou emp.
replicate('S',10),; //18 - data de inicio da vigencia do plano
replicate('T',10) } } //19 - informacoes
*/
//verifica se tem registro a ser impresso
if len(aDados) == 0
if !lWeb
msgAlert("Não é possível realizar a impressão!")
else
cMsg := "Não é possível realizar a impressão!"
endIf
lContinua := .f.
endIf
if lContinua
//preparando para impressao
nLinMax := 2275
nColMax := 3270
//estilo de fontes
oFont02 := TFont():New("courier new", 10, 10, , .F., , , , .T., .F.) // Normal
oFont02n:= TFont():New("courier new", 10, 10, , .T., , , , .T., .F.) // Negrito
oFont03n:= TFont():New("courier new", 10, 10, , .F., , , , .T., .F.) // Negrito
oFont05n:= TFont():New("Arial", 20, 20, , .T., , , , .T., .F.) // Negrito
//define o arquivo para impressao
if lWeb
cFileName := cRel+lower(CriaTrab(NIL,.F.))+".pdf"
else
cFileName := cRel+CriaTrab(NIL,.F.)
endIf
//New ( < cFilePrintert >, [ nDevice], [ lAdjustToLegacy], [ cPathInServer], [ lDisabeSetup ], [ lTReport], [ @oPrintSetup], [ cPrinter], [ lServer], [ lPDFAsPNG], [ lRaw], [ lViewPDF] )
nH := PLSAbreSem("PPLSIMPCAR.SMF")
if lWeb
oPrint := FWMSPrinter():New( cFileName,,.f.,cPathSrv,.t.,,@oPrint,,,.f.,.f.)
else
oPrint := FWMSPrinter():New( cFileName,,.f.,cPathSrv,.t.,,,,,.f.,,)
endIf
PLSFechaSem(nH,"PPLSIMPCAR.SMF")
if lSrvUnix
ajusPath(@oPrint)
endIf
oPrint:lServer := lWeb
oPrint:cPathPDF := cPathSrv
nTweb := 3.9
nLweb := 10
nLwebC := -3
nWeb := 25
nColMax := iIf(lWeb,2980,3100)
oPrint:setLandscape()// Modo paisagem
oPrint:setPaperSize(9)// Papél A4
//Device
if lWeb
oPrint:setDevice(IMP_PDF)
else
oPrint:Setup()
if !(oPrint:nModalResult == 1)// Botao cancelar da janela de config. de impressoras.
return
endif
endif
//Carrega e Imprime Logotipo da Empresa
fLogoEmp(@cFileLogo)
//dados a serem impressos
For nX := 1 To Len(aDados)
nLinIni := 080
nColIni := 080
nColA4 := 000
//Inicia uma nova pagina
oPrint:startPage()
//Box Principal
oPrint:boxbox((nLinIni + 0000)/nTweb, (nColIni + 0000)/nTweb, (nLinIni + nLinMax)/nTweb, (nColIni + nColMax)/nTweb)
nColA4 := -0335
//titulo
oPrint:Say((nLinIni + 00000080)/nTweb, ((nColIni + 0000nColMax)*0.47)/nTweb, "Carteirinha", oFont05n,,,, 2)
fSomaLin(nLinIni + nLinMax)/nTweb, (nColIni + nColMax)/nTweb)
nColA4 := -0335
//titulo
oPrint:Say((nLinIni + 0080nLinMax, nColMax, @nLinIni, nColIni, 60, 80)
//linha abaixo do titulo
AddTBrush(oPrint, (nLinIni + 190)/nTweb, (nColIni + 0010)/nTweb, (nLinIni + 191)/nTweb, ( (nColIni + nColMax)*0.47)/nTweb, "Carteirinha", oFont05n,,,, 2)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 60110, 80)
//linha abaixo do titulo
AddTBrush(oPrint, FRENTE
if file(cImgFrente)
//imagem de fundo da frente do cartao
oPrint:SayBitmap((nLinIni + 190110)/nTweb, (nColIni + 0010230)/nTweb, cImgFrente, (nLinIni + 1911200)/nTweb, (nColIni + nColMax600)/nTweb)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 110, 80) else
//box marcando a frente do cartao
oPrint:box((nLinIni + 145)/nTweb, (nColIni + 280)/nTweb, (nLinIni + 700)/nTweb, (nColIni + 1430)/nTweb)
endIf
//Tem que estar abaixo do RootPath - logomarca
if file(cFilelogo)
//logo
oPrint:SayBitmap((nLinIni + 160)/nTweb, (nColIni + 300)/nTweb, cFileLogo, (155)/nTweb, (090)/nTweb)
//01 - nome do beneficiario
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 500)/nTweb, aDados[nX,1], oFont02n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 55, 80)
//02 - numero da matricula
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 500)/nTweb, aDados[nX,2], oFont02n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//caso nao tenha logo muda a posicao do nome e matricula
else
//01 - nome do beneficiario
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,1], oFont02n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//02 - numero da matricula
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,2], oFont02n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
endIf
//03 - data de ascimento do beneficiario
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,3], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//04 - numero do cartao naciona de saude CNS
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,4], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//05 - numero do registro do plano ou do cad. do plano na ans
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,5], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//06 - segmentacao assistencial do plano
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,6], oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//07 - codigo do registro da operadora na ans
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,7], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//08 - informacao de contato com a operadora
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, allTrim(left(aDados[nX,8],30)) + iif(!empty(allTrim(left(aDados[nX,8],30))),', ','') , oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 30, 80)
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, allTrim(subStr(aDados[nX,8],31,15)) + iif(!empty(allTrim(subStr(aDados[nX,8],31,15))),' - ','') + allTrim(subStr(aDados[nX,8],46,30)), oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//09 - informacao de contato com a ans
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, allTrim(left(aDados[nX,9],40)) + iif(!empty(allTrim(left(aDados[nX,9],40))),', ',''), oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 30, 80)
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, allTrim(subStr(aDados[nX,9],41,15)) + iif(!empty(allTrim(subStr(aDados[nX,9],41,15))),' - ','') + allTrim(subStr(aDados[nX,8],56,30)), oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 100, 80)
//VERSO
//indicacao para corte entre frente e versao
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 250)/nTweb, replicate('-',130), oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 100, 80), @nLinIni, nColIni, 100, 80)
if file(cImgVerso)
//imagem de fundo do verso do cartao
oPrint:SayBitmap((nLinIni + 130)/nTweb, (nColIni + 230)/nTweb, cImgVerso, (1200)/nTweb, (600)/nTweb)
else
//box marcando o verso do cartao
oPrint:box((nLinIni + 145)/nTweb, (nColIni + 280)/nTweb, (nLinIni + 700)/nTweb, (nColIni + 1430)/nTweb)
endIf
//10 - data de termino da cobertura parcial temporaria
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,10], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//11 - padrao de acomodacao
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300600)/nTweb, aDados[nX,11], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//12 - tipo de contratacao
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 3001000)/nTweb, aDados[nX,12], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50165, 80)
//13 - area de abrangencia geografica
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[1,13], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//14 - nome do produto
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,14], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//15 - nome fantasia da operadora
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,15], oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//16 - nome fantasia da administradora de beneficios
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,16], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//17 - nome da p. juridica contratante do plano coletivo ou emp.
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,17], oFont03n)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//18 - data de inicio da vigencia do plano
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,18], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//19 - informacoes
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 300)/nTweb, aDados[nX,19], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 50, 80)
//Finaliza a pagina
oPrint:endPage()
next
//imprime quando web e mostra o preview no remote
if lWeb
oPrint:Print()
else
oPrint:Preview()
endIf
endIf
return( { cFileName, cMsg } )
...