Árvore de páginas

Carteira e Tipo de planos

Características do Requisito

Linha de Produto:

Microsiga Protheus

Segmento:

Saúde

Módulo:

Plano de Saúde

Rotina:

Rotina

Nome Técnico

Geração de Lote de Cartão

PLSA262

Imprime Carteirinha e Mostra Tipo de PlanosPPLCHAMCB

Ponto de Entrada:

PLRRN360.

País(es):

Todos

Banco(s) de Dados:

Todos

Tabelas Utilizadas:

BA1 - Beneficiarios

Sistema(s) Operacional(is):

Todos

Versão Expedida:11.80


Descrição

Implementação de melhoria para visualização e impressão da carteira, bem como apresentação de informações sobre diferença entre tipos de planos conforme determinação da ANS.

 

Procedimento para Configuração

 

CONFIGURAÇÃO DE PARÂMETROS 

  1. No Configurador (SIGACFG), acesse Ambientes/Cadastros/Parâmetros (CFGX017). Crie o(s) parâmetro(s) a seguir:

Nome da Variável

Descrição

Nome:

MV_PLSFRE

Tipo:

Caracter

Cont. Por.:

frente.png

Descrição:

Informar o nome do arquivo da frente do cartão

Nome da VariávelDescrição
Nome:MV_PLSVER
Tipo:Caracter
Cont. Por.:verso.png
Descrição:Informar o nome do arquivo de verso do cartão
Nome da VariávelDescrição
Nome:

MV_LRN360

Tipo:Caracter
Cont. Por.:

Informar o link referente a normativa RN-360 e/ou RN-379

Descrição:

URL do site

Procedimento para Utilização

  • Para impressão 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 ser exibido é 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:
  1. Acesse o menu Atualizações/Cartão Identific./Lotes de Cartão (PLSA262).
  2. Informe os parâmetros solicitados e click em Exportar.
  3. Observação: Tipo Geração = Impressão.
  4. Clique em Confirmar e clique em "Sim" conforme a tela abaixo.
  5. Selecione a impressora e clique em OK.

  • Abaixo a imagem com a impressão das informação do arquivo de fundo frente e verso. 

  • Abaixo a imagem com a impressão sem a informação do arquivo de fundo frente e verso.


Para Impressão via Porta do Beneficiário.

  1. Acesse o menu Principal/Carteirinha.
  2. Informe os parâmetros solicitados.
  3. Clique em Tipos de Planos, o sistema e redirecionará para URL informada no parâmetro (MV_LRN360). 

  4. Essa opção é exibida quando o parâmetro for criado e conter conteúdo.

  5. Clique em Confirmar para a impressão.

  • Abaixo a imagem com a impressão com informação do arquivo de fundo frente e verso.

  • Abaixo a imagem com a impressão sem informação do arquivo de fundo frente e verso.

  • Redirecionamento ao clicar em Tipo de Planos.

  • Sem o parâmetro ou com conteúdo em branco na opção Tipo de Planos não é exibida.

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:

Carteirinha

Programa Fonte:

PLRRN360

Função:

Plano de Saúde

Retorno:

Nome

Tipo

Descrição

Obrigatório

 cFileName

Caracter

Nome do Arquivo PDF

Sim

 cMsg

Caracter

Mensagem de erro

Sim

 

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 := ''
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:box((nLinIni + 0000)/nTweb, (nColIni + 0000)/nTweb, (nLinIni + nLinMax)/nTweb, (nColIni + nColMax)/nTweb)

nColA4 := -0335

//titulo
oPrint:Say((nLinIni + 0080)/nTweb, ((nColIni + nColMax)*0.47)/nTweb, "Carteirinha", oFont05n,,,, 2)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 60, 80)

//linha abaixo do titulo
AddTBrush(oPrint, (nLinIni + 190)/nTweb, (nColIni + 0010)/nTweb, (nLinIni + 191)/nTweb, (nColIni + nColMax)/nTweb)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 110, 80)

//FRENTE

if file(cImgFrente)
//imagem de fundo da frente do cartao
oPrint:SayBitmap((nLinIni + 110)/nTweb, (nColIni + 230)/nTweb, cImgFrente, (1200)/nTweb, (600)/nTweb)
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)

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)

//11 - padrao de acomodacao
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 600)/nTweb, aDados[nX,11], oFont02)

//12 - tipo de contratacao
oPrint:Say((nLinIni + 195)/nTweb, (nColIni + 1000)/nTweb, aDados[nX,12], oFont02)
fSomaLin(nLinMax, nColMax, @nLinIni, nColIni, 165, 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 } )