Tarifação em Planos de Saúde
Laboratório
Prof. Sérgio Cardoso
www.sergiocardoso.pro.br/saude
BASE DE DADOS
Base de Dados:
Banco: DadosSaudeSergio.mdb
 Tabelas:

◦ Beneficiários
◦ Notas
◦ TipoEvento

Período:
◦ 2005/01 a 2007/11
Laboratório 1
Criar um Banco de Dados Vazio
 Vincular as Tabelas do
DadosSaudeSergio.mdb ao novo banco
 Criar consultas para uma análise
superficial das tabelas Beneficiários e
Notas
 Criar Tabela de Expostos
 Preencher Tabela de Expostos a partir do
VBA com Access.

Criar consultas (exemplos)

Beneficiários (Datas mín. e máx. de inclusão e
exclusão:
◦ SELECT Min(Format([Inclusao],"yyyy/mm")) AS
CompInclusãoMin, Min(Format([Inclusao],"yyyy/mm"))
AS CompExclusãoMin,
Max(Format([Inclusao],"yyyy/mm")) AS
CompInclusãoMax,
Max(Format([Inclusao],"yyyy/mm")) AS
CompExclusãoMax FROM Beneficiarios;

Notas (Quantidade de notas por competência)
◦ SELECT Format([Atendimento],"yyyy/mm") AS
[Comp], Count(Notas.Matricula) AS
ContarDeMatricula FROM Notas GROUP BY
Format([Atendimento],"yyyy/mm");
Criar Tabela de Expostos

Criar Tabela de Expostos com a seguintes
estrutura:
Nome do Campo Tipo de Dados
COMPETENCIA *
Texto
FE *
Número
EXP
Número
(*) Chave primária.
Tamanho
6
Byte
Single
Preencher Tabela de Expostos a partir
do VBA com Access


Criar módulo no VBA
Adicionar ADO nas referências:

Criar Sub PreencheExpostos()
Sub PreencheExpostos()

Acesse a Base de Dados
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset

Defina datas de competência inicial e final
Dim DtCompIni as Date
Dim DtCompFin as Date
DtCompIni = DateSerial(2005, 1, 1) ‘ #1/1/2005#
DtCompFin = DateSerial(2007, 11, 1) ‘ #11/1/2007#

Inclua laço Do-While para a competência
DtComp = DtCompIni
Do While DtComp <= DtCompFin
(*)
DtComp = DateAdd("m", 1, DtComp)
Loop

Teste o código
Sub PreencheExpostos() – (*)

Crie um consula Sql para selecionar os beneficiários dentro da
competência desejada
Comp = Year(DtComp) & Format(Month(DtComp), "00")
SQL = "SELECT Nascimento, Inclusao, Exclusao " & _
" FROM Beneficiarios WHERE " & _
"((Inclusao<#" & _
Format(DateAdd("m", 1, DtComp), "mm/dd/yyyy") & _
"# AND Exclusao Is Null) OR (Inclusao<#" & _
Format(DateAdd("m", 1, DtComp), "mm/dd/yyyy") & "# AND Exclusao>#" & _
Format(DtComp, "mm/dd/yyyy") & "#))"

Abra a consulta
rs.Open sql, cn, adOpenKeyset

Redimencione o Vetor para receber os expostos por faixa etária
Dim Exp_FE() As Long
Inclua laço Do-While para a consulta beneficiários e percorra por todos
os beneficiários da consulta

ReDim Exp_FE(1 To 10) ‘Apaga o vetor
Do While Not rs.EOF
(*)
rs.MoveNext
loop
Sub PreencheExpostos() – (*) – cont.

Dentro do laço Beneficiários
◦ Determine a Faixa Etária do Participante
 Crie uma função que, recebendo a data de
nascimento e a data do cálculo, retorne o número
da faixa etária do participante
FE = FaixaEtaria(DtComp, rs("Nascimento"))
Function FaixaEtaria(DtComp As Date,
DtNasc As Date) As Byte
Dim Idade As Integer
Idade = Round(DateDiff("M", DtNasc, DtComp) / 12, 0)
Select Case (Idade)
Case Is <= 18
FaixaEtaria = 1
Case Is <= 23
FaixaEtaria = 2
Case Is <= 28
FaixaEtaria = 3
Case Is <= 33
FaixaEtaria = 4
Case Is <= 38
FaixaEtaria = 5
Case Is <= 43
FaixaEtaria = 6
Case Is <= 48
FaixaEtaria = 7
Case Is <= 53
FaixaEtaria = 8
Case Is <= 58
FaixaEtaria = 9
Case Else
FaixaEtaria = 10
End Select
Sub PreencheExpostos() – (*) – cont.

Dentro do laço Beneficiários
◦ Some QtdExp para a faixa etária correspondente
do beneficiário
Dim Exp_FE() As Long
QtdExp = 1
If Format(rs("Inclusao"), "yyyymm") = Comp Then
QtdExp = (30 - Day(rs("Inclusao")) + 1) / 30
End If
If Format(rs("Exclusao"), "yyyymm") = Comp Then
QtdExp = (Day(rs("Exclusao")) - 1) / 30
End If
If QtdExp < 0 Then QtdExp = 0
Exp_FE(FE) = Exp_FE(FE) + QtdExp
Sub PreencheExpostos() – (*) – cont.

Após percorrer todo o laço excluir os
resultados na tabela Expostos para a
competência que, eventualmente, possa
ocorrer
cn.Execute "Delete * from Expostos where
Competencia = '" & Comp & "'"
Sub PreencheExpostos() – (*) - cont.

Incluir os resultados na tabela Expostos

Criar a Consulta
For FE = 1 To 10
SQL = "INSERT INTO EXPOSTOS ([COMP], FE, EXP ) SELECT " & _
Comp & " AS A, " & FE & " AS B, " & Str(Exp_FE(FE)) & " AS C"
cn.Execute SQL
Next

Fechar a Consulta Beneficiários
rs.Close

Feche a conexão e os objetos de Banco
de Dados
cn.Close
Set rs = Nothing
Set cn = Nothing
Teste o código
 Valide os resultados

Laboratório 1I
Criar Tabela de Gastos
 Preencher Tabela de Gastos a partir do
VBA com Access.

Criar Tabela de Gastos

Criar Tabela de Expostos com a seguintes
estrutura:
Nome do Campo Tipo de Dados
COMPETENCIA *
Texto
FE *
Número
Servico *
Texto
INC
Número
GAS
Número
(*) Chave primária.
Tamanho
6
Byte
255
Single
Single
Sub PreencheGastosInc()

Acesse a Base de Dados
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset

Defina datas de competência inicial e final
Dim CompIni As String
Dim CompFin As String
Dim Comp As String
CompIni = Format(DateSerial(2005, 1, 1), "yyyymm") ' #1/1/2005#
CompFin = Format(DateSerial(2007, 11, 1), "yyyymm") ' #11/1/2007#

Excluir registros anteriores
cn.Execute "Delete * from Gastos“

Redimensionar Vetores
Dim Inc_FE() As Single
Dim Gas_FE() As Single
ReDim Gas_FE(1 To 10)
ReDim Inc_FE(1 To 10)
Sub PreencheGastosInc()

Abrir Consulta Notas / Beneficiarios
SQL = "SELECT Format([Atendimento],'yyyymm') AS competencia, Notas.Atendimento,
"&_
"Notas.Servico, Beneficiarios.Nascimento, Notas.Alta, Notas.Valor " & _
"FROM Notas INNER JOIN Beneficiarios ON Notas.Matricula =
Beneficiarios.Matricula " & _
"WHERE (((Format([Atendimento], 'yyyymm')) >= '" & CompIni & "' And
(Format([Atendimento], 'yyyymm')) <= '" & _
CompFin & "')) ORDER BY Format([Atendimento],'yyyymm'), Notas.Servico;"
rs.Open SQL, cn, adOpenKeyset

Inclua laço Do-While para a consulta
Dim Calcula As Boolean
Calcula = True
Do While Not rs.EOF And Calcula
#
Loop
rs.Close
MsgBox "Fim de processamento!", vbInformation
Sub PreencheGastosInc(#)

Dentro laço Do-While para a Notas
FE = FaixaEtaria(rs("Atendimento"), rs("Nascimento"))
Inc_FE(FE) = Inc_FE(FE) + 1
Gas_FE(FE) = Gas_FE(FE) + rs("Valor")
Servico = rs("servico")
Comp = rs("competencia")
rs.MoveNext
#2
Teste o código
Sub PreencheGastosInc(#3)

Dentro laço Do-While para a Notas (gravar vetores quando
fim de arquivo)
If rs.EOF Then
For FE = 1 To 10
SQL = "INSERT INTO GASTOS ([COMP], FE, SERVICO, INC, GAS ) SELECT " & _
Comp & " AS A, " & FE & " AS B, '" & Servico & "' as C, " & Str(Inc_FE(FE)) & " AS
D, " & _
Str(Gas_FE(FE)) & " AS E"
cn.Execute SQL
Next
ReDim Gas_FE(1 To 10)
ReDim Inc_FE(1 To 10)
'Servico = rs("servico")
Else
#4
End If
Sub PreencheGastosInc(#4)

Dentro laço Do-While para a Notas (gravar vetores quando
mudar de competência)
If rs.EOF Then
Else
#4
If Servico <> rs("servico") Or Comp <> rs("competencia") Then
For FE = 1 To 10
SQL = "INSERT INTO GASTOS ([COMP], FE, SERVICO, INC, GAS )
SELECT " & _
Comp & " AS A, " & FE & " AS B, '" & Servico & "' as C, " &
Str(Inc_FE(FE)) & " AS D, " & _
Str(Gas_FE(FE)) & " AS E"
cn.Execute SQL
Next
ReDim Gas_FE(1 To 10)
ReDim Inc_FE(1 To 10)
End If
End If
Laboratório 1II

Preencher planilha ANS com resultados
obtidos nos laboratórios I e II.
FIM
Download

Laboratório 1 (atualizado 2)