Tävlingsuppgift 2014

Vårdenheter får betalt för att ta emot patienter enligt en prislista med taxekoder.

Taxekod Belopp
A01 500
A02 1000
B01 200
B02 300
K01 250
K02 350
K03 700
K04 1100
T01 600
T02 450

Huvudregeln är att vårdenheter bara får betalt för ett besök per patient och dag. När det finns flera olika alternativ så får de betalt för det alternativ som ger mest pengar. Priserna är satta så att det alltid blir entydigt vilket besök som ger bäst betalt.

Vissa speciella regler gäller för de olika typerna:

A – vanliga besök Dessa följer huvudregeln.
B – Behandlingsbesök Dessa ger alltid betalt och räknas inte med i gränsen på max ett besök per dag. Vårdenheter kan få betalt för obegränsat antal behandlingsbesök per dag. De förhindrar heller inte att vårdenheter får betalt för några andra besök.
K – Kombinationsbesök Dessa kan kombineras så att vårdenheter kan få betalt för K01 eller K02 i kombination med K03 eller K04. Exempelvis K01 + K04 leder till att man får betalt för båda. K03 + K04 däremot är inte tillåtet så då får man bara betalt för ett av dessa.
T – Tremånadersbesök Dessa ger bara betalt om vårdenheten inte har fått betalt för samma sorts tremånadersbesök för samma patient under senaste 90 dygnen. Brytningstid för nytt dygn är alltid midnatt.

Alla besök utom behandlingsbesök följer huvudregeln, d v s om en vårdenhet exempelvis har både ett vanligt besök och ett tremånadersbesök samma dag för samma patient så ges endast betalt för ett av dessa.

Denna tävlingsuppgift är baserad på ett verkligt vårdersättningssystem, men förenklad jämfört med det verkliga vårdersättningssystemet.

Uppgift

Klicka här för att ladda ned SQL-script så att du kan komma igång med tävlingen.

Du skall skriva en lösning för att beräkna ersättningen per dag till varje vårdenhet. Du skall läsa från en tabell som heter Besok och skriva till en tabell som heter Ersattning. Priserna måste hämtas från tabellen Prislista eftersom de kan komma att ändras. Taxekoderna kommer däremot att vara exakt samma som ovan.

Collation

Collation på databasen är Finnish_Swedish_100_BIN2. Collation på servern är Finnish_Swedish_CI_AS.

Tabell: Besok

BesokNr int
PatientID uniqueidentifier
Taxekod char(3)
DatumOchTid datetime2(0)
Vardenhet char(5)

Tabell: Prislista

Taxekod char(3)
Pris int

Tabell: Ersattning

Utresultatet skall lagras i en tabell med en rad för varje dag som en vårdenhet får betalt.

Vardenhet char(5)
Datum date
Belopp int

Exempel

BesokNr PatientID Taxekod DatumOchTid Vardenhet
1 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA A01 2014-01-01 08:00:00 AAAAA
2 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA T01 2014-01-01 15:00:00 BBBBB
3 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA T01 2014-01-01 09:00:00 AAAAA
4 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA B01 2014-01-01 10:00:00 AAAAA
5 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA B01 2014-01-01 12:00:00 AAAAA
6 BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB T01 2014-01-01 08:00:00 AAAAA
7 BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB A02 2014-01-01 16:00:00 AAAAA
8 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA A02 2014-01-02 08:00:00 AAAAA
9 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA K01 2014-01-02 09:00:00 AAAAA
10 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA K02 2014-01-02 10:00:00 AAAAA
11 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA K03 2014-01-02 11:00:00 AAAAA
12 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA T02 2014-01-03 08:00:00 AAAAA
13 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA T01 2014-01-04 07:30:00 AAAAA
14 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA A01 2014-01-04 08:00:00 AAAAA
15 BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB A01 2014-01-04 09:00:00 AAAAA
16 BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB A01 2014-01-04 10:00:00 BBBBB
17 BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB B02 2014-01-04 11:00:00 BBBBB
18 BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB T01 2014-02-01 08:00:00 AAAAA
19 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA T01 2014-04-01 08:00:00 AAAAA
20 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA T01 2014-04-02 08:00:00 BBBBB
21 AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA T02 2014-05-01 09:00:00 AAAAA

Enligt detta exempel skall vårdenheten AAAAA få följande ersättningar.

Datum Ersättning
2014-01-01 2000 kr (T01 + A02 + B01 + B01)
2014-01-02 1050 kr (K02 + K03)
2014-01-03 450 kr (T02)
2014-01-04 1000 kr (A01 + A01)
2014-02-01 600 kr (T01)
2014-05-01 450 kr (T02)

Vårdenheten BBBBB får följande ersättningar.

Datum Ersättning
2014-01-01 600 kr (T01)
2014-01-04 800 kr (B02 + A01)
2014-04-02 600 kr (T01)

Problemkonstruktör

Årets tävlingsuppgift är konstruerad av Johan Åhlén.

Utvärdering

Vinnare är det tävlingsbidrag som ger rätt resultat och är snabbast, d v s har lägst exekveringstid (”duration”). Högsta tillåtna antal tävlingsbidrag per deltagare är tre. Tävlingsbidragen testkörs på SQL Server 2014 Developer Edition på en dator med SSD-disk, 4-kärnig CPU, hyperthreading och 16 GB RAM (varav 12 GB är maxgränsen för SQL Server). Databasen är förberedd för att köra med memory optimized tables, samt tillåter delayed durability.

Tävlingsbidrag består av två delar:

  • Setup-script. Där får man skapa tabeller, index, vyer, funktioner och procedurer. Det är inte tillåtet att göra några som helst förändringar i tabellerna Besok och Ersattning. Det är heller inte tillåtet att läsa från befintliga tabeller i setup-scriptet.
  • Lösnings-script. Där skall man skriva utresultatet till tabellen Ersattning. Tabellen Ersattning kan innehålla tidigare data och den kan vara delvis felaktig. Större delen kan förmodas vara korrekt. Lösnings-scriptet skall ta bort eventuell felaktig data (det är tillåtet att trunkera tabellen om man vill). Man får skapa tabeller, index, vyer, funktioner och procedurer.

Exekveringstiden mäts endast på Lösnings-scriptet. Setup-scriptet mäts ej.

Klicka här för att lämna ditt tävlingsbidrag