Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Carteirinha

Carteira e Tipo de planos

Características do Requisito

Linha de Produto:

Microsiga Protheus

Segmento:

Saúde

Módulo:

Plano de Saúde

Rotina:

PLSA262PPLCHAMCB

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ões/Release:

11.80

Versão Corrigida:11.80Versão Expedida:11.80


Descrição

Implementado Implementação de melhoria para visualização e impressão da carteirinha carteira, bem como exibi 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:

Itens/PastasNome da Variável

Descrição

Nome:

MV_PLSFRE

Tipo:

Caracter

Cont. Por.:

frente.png

Descrição:

 Informar Informar o nome do arquivo da frente do cartão

Itens/PastasNome 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
Itens/PastasNome da VariávelDescrição
Nome:

MV_LRN360

Tipo:Caracter
Cont. Por.:

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

Descrição:

URL do site

Procedimento para Utilizaçã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
  • na STARTPATH
do
  •  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
  • 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
.
  1. Acesse o menu
  2. /
  3. Atualizações/Cartão Identific./Lotes de Cartão (PLSA262).
  4. Informe os parâmetros solicitados e click em
  5. exportar.  Obs.
  6. Exportar.
  7. Observação: Tipo Geração = Impressão.
    Image Modified

3. Click no botão Confirmar e confirmar a tela com Sim a tela abaixo.

Image Removed

4. Selecione a impressora e click em OK.

Image Removed

Impressão com informação do arquivo de fundo frente e verso. 

Image Removed

Impressão sem informação do arquivo de fundo frente e verso.

Image Removed

Para Impressão via Porta do Beneficiário.

        1.  Acesse o menu /Principal/Carteirinha.
        2. Informe os parâmetros solicitados.
          Image Removed
        3. 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.

        4. Click em Confirmar para a impressão.

Image Removed

Impressão com informação do arquivo de fundo frente e verso.

Image Removed

Impressão sem informação do arquivo de fundo frente e verso.

Image Removed

Redirecionamento ao clicar no Link tipo de planos.

Image Removed

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

Image Removed

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 } )

Carteirinha 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

PLSA262

Geração de Lote de Cartão

PPLCHAMCBImprime Carteirinha e Mostra Tipo de Planos

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 bem como exibi informações sobre diferença entre tipos de planos conforme determinação da ANS.

 

  1. Clique em Confirmar e clique em "Sim" conforme a tela abaixo.
    Image Added
  2. Selecione a impressora e clique em OK.
    Image Added
  • Abaixo a imagem com a impressão das

 

Procedimento para Configuração

 

CONFIGURAÇÃO DE PARÂMETROS 

 

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

 

Itens/Pastas

Descrição

Nome:

MV_PLSFRE

Tipo:

Lógico

Cont. Por.:

.T.

Descrição:

 Bloqueio do cabeçalho da Autorização SADT (BE1) apos a digitação do procedimento, caso o seu valor for verdadeiro (default)

Procedimento para Utilizaçã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:

  1. Acesse o menu /Atualizações/Cartão Identific./Lotes de Cartão (PLSA262)
  2. Informe os parâmetros solicitados e click em exportar.  Obs.: Tipo Geração = Impressão

Image Removed

3. Click no botão Confirmar e confirmar a tela com Sim a tela abaixo.

Image Removed

4. Selecione a impressora e click em OK.

Image Removed

Impressão com
  • informação do arquivo de fundo frente e verso. 

Image Modified

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

Image Modified


Para Impressão via Porta do Beneficiário.

  1.  Acesse o menu / Principal/Carteirinha.
  2. Informe os parâmetros solicitados.
      1. Image Modified
  3. Clicando no link Clique em Tipos de Planos e redirecionado , o sistema e redirecionará para URL informada no parâmetro (MV_LRN360). Esta opção só aparece  

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

  5. Click Clique em Confirmar para a impressão.

Image Modified

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

Image Modified

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

Image Modified

  • Redirecionamento ao clicar
no Link tipo de planos
  • em Tipo de Planos.

Image Modified

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

Image Modified

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 } )