logoSQLug.se Challenge officiell hemsida

Start | Tävlingsuppgift 2017 | Skicka in svar | Resultat | Tidigare resultat

Tävlingsuppgift 2014

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

TaxekodBelopp
A01500
A021000
B01200
B02300
K01250
K02350
K03700
K041100
T01600
T02450

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ökDessa följer huvudregeln.
B - BehandlingsbesökDessa 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ökDessa 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ökDessa 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

BesokNrint
PatientIDuniqueidentifier
Taxekodchar(3)
DatumOchTiddatetime2(0)
Vardenhetchar(5)

Tabell: Prislista

Taxekodchar(3)
Prisint

Tabell: Ersattning

Utresultatet skall lagras i en tabell med en rad för varje dag som en vårdenhet får betalt.
Vardenhetchar(5)
Datumdate
Beloppint

Exempel

BesokNrPatientIDTaxekodDatumOchTidVardenhet
1AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAA012014-01-01 08:00:00AAAAA
2AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAT012014-01-01 15:00:00BBBBB
3AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAT012014-01-01 09:00:00AAAAA
4AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAB012014-01-01 10:00:00AAAAA
5AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAB012014-01-01 12:00:00AAAAA
6BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBBT012014-01-01 08:00:00AAAAA
7BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBBA022014-01-01 16:00:00AAAAA
8AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAA022014-01-02 08:00:00AAAAA
9AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAK012014-01-02 09:00:00AAAAA
10AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAK022014-01-02 10:00:00AAAAA
11AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAK032014-01-02 11:00:00AAAAA
12AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAT022014-01-03 08:00:00AAAAA
13AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAT012014-01-04 07:30:00AAAAA
14AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAA012014-01-04 08:00:00AAAAA
15BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBBA012014-01-04 09:00:00AAAAA
16BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBBA012014-01-04 10:00:00BBBBB
17BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBBB022014-01-04 11:00:00BBBBB
18BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBBT012014-02-01 08:00:00AAAAA
19AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAT012014-04-01 08:00:00AAAAA
20AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAT012014-04-02 08:00:00BBBBB
21AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAT022014-05-01 09:00:00AAAAA

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

DatumErsättning
2014-01-012000 kr (T01 + A02 + B01 + B01)
2014-01-021050 kr (K02 + K03)
2014-01-03450 kr (T02)
2014-01-041000 kr (A01 + A01)
2014-02-01600 kr (T01)
2014-05-01450 kr (T02)

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

DatumErsättning
2014-01-01600 kr (T01)
2014-01-04800 kr (B02 + A01)
2014-04-02600 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