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.