24
Tarifação em Planos de Tarifação em Planos de Saúde Saúde Laboratório Prof. Sérgio Cardoso www.sergiocardoso.pro.br/saude

Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Embed Size (px)

Citation preview

Page 1: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Tarifação em Planos de Tarifação em Planos de SaúdeSaúdeLaboratório

Prof. Sérgio Cardosowww.sergiocardoso.pro.br/saude

Page 2: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

BASE DE DADOSBASE DE DADOS

Page 3: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Base de Dados: Base de Dados: Banco: DadosSaudeSergio.mdbTabelas:

◦Beneficiários◦Notas◦TipoEvento

Período:◦2005/01 a 2007/11

Page 4: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Laboratório 1Laboratório 1Criar um Banco de Dados VazioVincular as Tabelas do

DadosSaudeSergio.mdb ao novo banco

Criar consultas para uma análise superficial das tabelas Beneficiários e Notas

Criar Tabela de ExpostosPreencher Tabela de Expostos a

partir do VBA com Access.

Page 5: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Criar consultas (exemplos)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");

Page 6: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Criar Tabela de ExpostosCriar Tabela de ExpostosCriar Tabela de Expostos com a

seguintes estrutura:

(*) Chave primária.

Page 7: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Preencher Tabela de Expostos a Preencher Tabela de Expostos a partir do VBA com Accesspartir do VBA com AccessCriar módulo no VBAAdicionar ADO nas referências:

Criar Sub PreencheExpostos()

Page 8: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub PreencheExpostos()Sub PreencheExpostos() Acesse a Base de Dados

Dim cn As ADODB.ConnectionDim rs As ADODB.RecordsetSet cn = CurrentProject.ConnectionSet rs = New ADODB.Recordset

Defina datas de competência inicial e finalDim DtCompIni as DateDim DtCompFin as DateDtCompIni = DateSerial(2005, 1, 1) ‘ #1/1/2005#DtCompFin = DateSerial(2007, 11, 1) ‘ #11/1/2007#

Inclua laço Do-While para a competênciaDtComp = DtCompIniDo While DtComp <= DtCompFin

(*)DtComp = DateAdd("m", 1, DtComp)

Loop Teste o código

Page 9: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub PreencheExpostos() – Sub PreencheExpostos() – (*)(*) Crie um consula Sql para selecionar os beneficiários dentro da

competência desejadaComp = 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

Page 10: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub PreencheExpostos() – (*) – Sub PreencheExpostos() – (*) – cont.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"))

Page 11: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Function FaixaEtaria(DtComp As Function FaixaEtaria(DtComp As Date, DtNasc As Date) As ByteDate, DtNasc As Date) As Byte

Dim Idade As IntegerIdade = Round(DateDiff("M", DtNasc, DtComp) / 12, 0)Select Case (Idade)

Case Is <= 18FaixaEtaria = 1

Case Is <= 23FaixaEtaria = 2

Case Is <= 28FaixaEtaria = 3

Case Is <= 33FaixaEtaria = 4

Case Is <= 38FaixaEtaria = 5

Case Is <= 43FaixaEtaria = 6

Case Is <= 48FaixaEtaria = 7

Case Is <= 53FaixaEtaria = 8

Case Is <= 58FaixaEtaria = 9

Case ElseFaixaEtaria = 10

End Select

Page 12: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub PreencheExpostos() – (*) – Sub PreencheExpostos() – (*) – cont.cont.Dentro do laço Beneficiários

◦Some QtdExp para a faixa etária correspondente do beneficiárioDim Exp_FE() As LongQtdExp = 1If Format(rs("Inclusao"), "yyyymm") = Comp Then

QtdExp = (30 - Day(rs("Inclusao")) + 1) / 30

End IfIf Format(rs("Exclusao"), "yyyymm") = Comp Then

QtdExp = (Day(rs("Exclusao")) - 1) / 30End IfIf QtdExp < 0 Then QtdExp = 0Exp_FE(FE) = Exp_FE(FE) + QtdExp

Page 13: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub PreencheExpostos() – (*) – Sub PreencheExpostos() – (*) – cont.cont.Após percorrer todo o laço excluir

os resultados na tabela Expostos para a competência que, eventualmente, possa ocorrercn.Execute "Delete * from Expostos

where Competencia = '" & Comp & "'"

Page 14: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub PreencheExpostos() – (*) - Sub PreencheExpostos() – (*) - cont.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áriosrs.Close

Page 15: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Feche a conexão e os objetos de Banco de Dadoscn.CloseSet rs = NothingSet cn = Nothing

Teste o códigoValide os resultados

Page 16: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Laboratório 1ILaboratório 1ICriar Tabela de GastosPreencher Tabela de Gastos a

partir do VBA com Access.

Page 17: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Criar Tabela de GastosCriar Tabela de GastosCriar Tabela de Expostos com a

seguintes estrutura:

(*) Chave primária.

Page 18: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub PreencheGastosInc()Sub PreencheGastosInc() Acesse a Base de Dados

Dim cn As ADODB.ConnectionDim rs As ADODB.RecordsetSet cn = CurrentProject.ConnectionSet rs = New ADODB.Recordset

Defina datas de competência inicial e finalDim CompIni As StringDim CompFin As StringDim Comp As StringCompIni = Format(DateSerial(2005, 1, 1), "yyyymm") ' #1/1/2005#CompFin = Format(DateSerial(2007, 11, 1), "yyyymm") ' #11/1/2007#

Excluir registros anteriorescn.Execute "Delete * from Gastos“

Redimensionar Vetores Dim Inc_FE() As Single Dim Gas_FE() As SingleReDim Gas_FE(1 To 10)ReDim Inc_FE(1 To 10)

Page 19: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub PreencheGastosInc()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 BooleanCalcula = TrueDo While Not rs.EOF And Calcula#Looprs.CloseMsgBox "Fim de processamento!", vbInformation

Page 20: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub Sub PreencheGastosInc(#)PreencheGastosInc(#) Dentro laço Do-While para a Notas

FE = FaixaEtaria(rs("Atendimento"), rs("Nascimento"))Inc_FE(FE) = Inc_FE(FE) + 1Gas_FE(FE) = Gas_FE(FE) + rs("Valor")Servico = rs("servico")Comp = rs("competencia")rs.MoveNext#2

Teste o código

Page 21: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub Sub PreencheGastosInc(#3)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

NextReDim Gas_FE(1 To 10)ReDim Inc_FE(1 To 10)'Servico = rs("servico")

Else#4End If

Page 22: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Sub Sub PreencheGastosInc(#4)PreencheGastosInc(#4) Dentro laço Do-While para a Notas (gravar

vetores quando mudar de competência) If rs.EOF ThenElse#4 If Servico <> rs("servico") Or Comp <> rs("competencia") Then

For FE = 1 To 10SQL = "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

NextReDim Gas_FE(1 To 10)ReDim Inc_FE(1 To 10)

End IfEnd If

Page 23: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

Laboratório 1IILaboratório 1IIPreencher planilha ANS com

resultados obtidos nos laboratórios I e II.

Page 24: Tarifação em Planos de Saúde Laboratório Prof. Sérgio Cardoso

FIMFIM