*Automatischer Import von §21 Daten für das Jahr 2006. *Autoren: Christian Fischer, Bochum; Jürgen Stausberg, Essen. *Stand: 30.11.2007. *Der Import besteht aus zwei Teilen. *Teil 1: Import der Daten aus den zehn §21 Dateien. *Teil 2: Verarbeitung und Aufbereitung der Daten mit anschließender Zusammenführung. *Bei Fehlen einer Datei werden Fehlermeldungen ausgegeben. *-------------------Teil 1 ---------------------------. *Import der Datei 'abrechung.csv'. GET DATA /TYPE = TXT /FILE = 'abrechnung.csv' /DELCASE = LINE /DELIMITERS = ";" /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /IMPORTCASE = ALL /VARIABLES = IK A9 DRGFällevereinbart F9.0 DRGFälleabgerechnet F9.0 Bewertungsrelationenvereinbart F7.2 Bewertungsrelationenabgerechnet F7.2 Erlösausgleich§3Abs6 F9.2 Erlösausgleich§4Abs9 F9.2 . CACHE. EXECUTE. DATASET NAME abrechnung WINDOW=FRONT. *Speichern der Datei 'abrechnung.sav'. SAVE OUTFILE='abrechnung.sav' /COMPRESSED. *Import der Datei 'ausbildung.csv'. GET DATA /TYPE = TXT /FILE = 'ausbildung.csv' /DELCASE = LINE /DELIMITERS = ";" /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /IMPORTCASE = ALL /VARIABLES = IK A9 Ausbildungsstätte A3 AusbildungsstättenTyp A1 Ausbildungsplätzeinsgesamt F9.0 AusbildungsplätzedesKH F9.0 AusbildungsplätzefürandereKH F9.0 Ausbildende F4.2 AuszubildendeimeigenenKH F7.2 AzubisJ1 F7.2 AzubisJ2 F7.2 AzubisJ3 F7.2 AuszubildendeananderenKH F7.2 Gesamtkosten F8.2 Personalkosten F8.2 Ausbildungsvergütungen F8.2 PersonalkostenjeVK F8.2 . CACHE. EXECUTE. DATASET NAME ausbildung WINDOW=FRONT. *Speichern der Datei 'ausbildung.sav'. SAVE OUTFILE='ausbildung.sav' /COMPRESSED. *Import der Datei 'entgelte.csv'. GET DATA /TYPE = TXT /FILE = 'entgelte.csv' /DELCASE = LINE /DELIMITERS = ";" /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /IMPORTCASE = ALL /VARIABLES = IK A9 EntlassenderStandort F2.0 KHinternesKennzeichen A15 IKKrankenkasse A9 Entgeltart A8 Entgeltbetrag F8.2 Entgeltanzahl F3.0 . CACHE. sort cases by KHinternesKennzeichen (a). EXECUTE. DATASET NAME entgelte WINDOW=FRONT. *Speichern der Datei 'entgelte.sav'. SAVE OUTFILE='entgelte.sav' /COMPRESSED. *Import der Datei fab.csv'. GET DATA /TYPE = TXT /FILE = 'fab.csv' /DELCASE = LINE /DELIMITERS = ";" /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /IMPORTCASE = ALL /VARIABLES = IK A9 EntlassenderStandort F2.0 KHinternesKennzeichen A15 FAB A6 FABAufnahmedatum A12 FABEntlassungsdatum A12 . sort cases by KHinternesKennzeichen (a). CACHE. EXECUTE. DATASET NAME fab WINDOW=FRONT. *Speichern der Datei 'fab.sav'. SAVE OUTFILE='fab.sav' /COMPRESSED. *Import der Datei 'fall.csv'. GET DATA /TYPE = TXT /FILE = 'fall.csv' /DELCASE = LINE /DELIMITERS = ";" /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /IMPORTCASE = ALL /VARIABLES = IK A9 EntlassenderStandort F2.0 KHinternesKennzeichen A15 IKderKrankenkasse A9 Geburtsjahr F4.0 Geburtsmonat F2.0 Geschlecht A1 PLZ A5 Aufnahmedatum A10 Aufnahmeanlass A1 Aufnahmegrund A4 Aufnahmegewicht F5.0 Entlassungsdatum A10 Entlassungsgrund A3 AlterinTagenamAufnahmetag F3.0 AlterinJahrenamAufnahmetag F3.0 Beurlaubungstage F3.0 Patientennummer A15 InterkurrenteDialysen F3.0 Beatmungsstunden A4 Behandlungsbeginnvorstationär A8 Behandlungstagevorstationär F1.0 Behandlungsendenachstationär A8 Behandlungstagenachstationär F2.0 IKVerlegungsKH A9 BelegungstageausserhalbKHEntgG F2.0 . CACHE. sort cases by KHinternesKennzeichen (a). EXECUTE. DATASET NAME Fall WINDOW=FRONT. *Speichern der Datei 'fall.sav'. *Bearbeitung der Datei 'fall.sav'. *Felder für die Verweildauerberechnung und die Umkodierung des Geschlechts werden erstellt. SAVE OUTFILE='fall.sav' /COMPRESSED. STRING Aufnahmejahr (A4). STRING Entlassungsjahr (A4). STRING Aufnahmemonat (A2). STRING Entlassungsmonat (A2). STRING Aufnahmetag (A2). STRING Entlassungstag (A2). STRING VWD (A4). STRING VWD2 (A4). STRING SEX(A1). *Felder für die Verweildauerberechung und die Umkodierung des Geschlechtes werden gefüllt. COMPUTE Aufnahmejahr = substr(ltrim(Aufnahmedatum),1,4). COMPUTE Entlassungsjahr = substr(ltrim(Entlassungsdatum),1,4). COMPUTE Aufnahmemonat = substr(ltrim(Aufnahmedatum),5,2). COMPUTE Entlassungsmonat = substr(ltrim(Entlassungsdatum),5,2). COMPUTE Aufnahmetag = substr(ltrim(Aufnahmedatum),7,2). COMPUTE Entlassungstag = substr(ltrim(Entlassungsdatum),7,2). COMPUTE Aufnahmedatum = CONCAT(ltrim(Aufnahmemonat),"/",ltrim(Aufnahmetag),"/",ltrim(Aufnahmejahr)). COMPUTE Entlassungsdatum = CONCAT(ltrim(Entlassungsmonat),"/",ltrim(Entlassungstag),"/",ltrim(Entlassungsjahr)). IF (Geschlecht = 'm') SEX = '2'. IF (Geschlecht = 'w') SEX = '1'. *Basisdatei für die spätere Datenbasis wird angelegt ('temp1.sav'). SAVE OUTFILE='temp1.sav' /COMPRESSED. *Import der Datei 'fusionen.csv'. GET DATA /TYPE = TXT /FILE = 'fusionen.csv' /DELCASE = LINE /DELIMITERS = ";" /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /IMPORTCASE = ALL /VARIABLES = IK A9 IKF A9 Falldatenvon A8 Falldatenbis A8 . CACHE. EXECUTE. DATASET NAME fusionen WINDOW=FRONT *Speichern der Datei 'fusionen.sav'. SAVE OUTFILE='fusionen.sav' /COMPRESSED. *Import der Datei 'icd.sav'. GET DATA /TYPE = TXT /FILE = 'icd.csv' /DELCASE = LINE /DELIMITERS = ";" /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /IMPORTCASE = ALL /VARIABLES = IK A9 EntlassenderStandort F2.0 KHinternesKennzeichen A15 Diagnoseart A3 ICDVersion A6 ICDKode A9 Lokalisation_A A1 SekundärKode A9 Lokalisation A1 . sort cases by KHinternesKennzeichen (a). CACHE. EXECUTE. DATASET NAME icd WINDOW=FRONT. *Speichern der Datei 'icd.sav'. SAVE OUTFILE='icd.sav' /COMPRESSED. *Import der Datei 'info.csv'. GET DATA /TYPE = TXT /FILE = 'info.csv' /DELCASE = LINE /DELIMITERS = ";" /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /IMPORTCASE = ALL /VARIABLES = IK A9 Datenerhebung A9 DatumderErstellung A12 EMailAdresse A50 DRGGrouper A25 Softwarelösung A25 Versionskennung A8 . CACHE. EXECUTE. DATASET NAME info WINDOW=FRONT. *Speichern der Datei 'info.sav'. SAVE OUTFILE='info.sav' /COMPRESSED. *Import der Datei 'krankenhaus.csv'. GET DATA /TYPE = TXT /FILE = 'krankenhaus.csv' /DELCASE = LINE /DELIMITERS = ";" /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /IMPORTCASE = ALL /VARIABLES = IK A9.0 KHName A50 KHArt A4 KHTräger A1 Betten F4.0 MerkmalZuAbschläge F1.0 . CACHE. EXECUTE. DATASET NAME krankenhaus WINDOW=FRONT. *Speichern der Datei 'krankenhaus.sav'. SAVE OUTFILE='krankenhaus.sav' /COMPRESSED. *Import der Datei 'ops.csv'. GET DATA /TYPE = TXT /FILE = 'ops.csv' /DELCASE = LINE /DELIMITERS = ";" /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /IMPORTCASE = ALL /VARIABLES = IK A9 EntlassenderStandort F2.0 KHinternesKennzeichen A15 OPSVersion A6 OPSKode A11 Lokalisation A1 OPSDatum A12 Belegoperateur A1 Beleganästhesist A1 Beleghebamme A1 . CACHE. sort cases by KHinternesKennzeichen (a). EXECUTE. DATASET NAME ops WINDOW=FRONT. *Speichern der Datei 'ops.sav'. SAVE OUTFILE='ops.sav' /COMPRESSED. *-------------------Teil 2 ---------------------------. *Öfnnen der Datei 'icd.sav'. GET FILE = 'icd.sav'. sort cases by KHinternesKennzeichen (a). EXECUTE. *Selektieren der Datei 'icd.sav'. SELECT IF (Diagnoseart EQ 'HD'). CACHE. EXECUTE. DATASET NAME icdhd WINDOW=FRONT. *Speichern der selektierten Zeilen in der Datei 'temp2.sav' Inhalt: Liste der Hauptdiagnosen zu allen Fällen. SAVE OUTFILE='temp2.sav' /COMPRESSED. *Öffnen der Datei 'entgelte.sav'. GET FILE = 'entgelte.sav'. sort cases by KHinternesKennzeichen (a). EXECUTE. DATASET NAME drgentgelte WINDOW=FRONT. *Erstellen von Bewertungs- und Sortierhilfen. STRING sortierhilfe (A2). STRING bewertung(A3). STRING rest (A2). STRING DRG (A4). *Füllen der erstellten Felder. COMPUTE sortierhilfe = substr(ltrim(Entgeltart),1,2). COMPUTE bewertung = substr(ltrim(Entgeltart),1,3). COMPUTE rest = substr(ltrim(Entgeltart),3,2). COMPUTE DRG = substr(ltrim(Entgeltart),5,4). *Umrechnen der Abschläge in negative Beträge. IF (sortierhilfe='72' OR sortierhilfe='73' OR sortierhilfe='62' OR sortierhilfe='82' OR sortierhilfe='83' OR sortierhilfe='88' OR sortierhilfe='89' OR sortierhilfe='93') Entgeltbetrag=Entgeltbetrag*-1. IF (bewertung='472') Entgeltbetrag=Entgeltbetrag*-1. EXECUTE. *Speichern des aktuellen Datenbestandes für spätere Kontrollmöglichkeiten. SAVE OUTFILE='temp0.sav' /COMPRESSED. *Summierung der Erträge pro Fall und Abspeichern des so entstehenden Datensets in der Datei 'temp8.sav'. AGGREGATE /OUTFILE=temp8.sav /BREAK=KHinternesKennzeichen /Betrag = SUM(Entgeltbetrag). *Selektierung der Ausgangsdatensests, so das nur die DRG's pro Fall gelistet sind. SELECT IF (sortierhilfe EQ '70'). EXECUTE. *Speichern der DRG in der Datei 'temp4.sav'. SAVE OUTFILE='temp4.sav' /COMPRESSED. *Öffnen der Datei 'ops.sav'. GET FILE='ops.sav'. DATASET NAME opsop WINDOW=FRONT. *Erstellen einer Bearbeitungshilfe. STRING codesortierhilfe(A1). *Füllen der Bearbeitungshilfe. COMPUTE codesortierhilfe = substr(ltrim(OPSKode),1,1). *Selektieren ob ein OPS-Code mit 5 vorhanden ist. SELECT IF (codesortierhilfe EQ '5'). EXECUTE. *Speichern der Daten in der Datei 'temp6.sav'. SAVE OUTFILE='temp6.sav' /COMPRESSED. *Schließen aller offenen Datensets. DATASET CLOSE abrechnung. DATASET CLOSE ausbildung. DATASET CLOSE entgelte. DATASET CLOSE icd. DATASET CLOSE icdhd. DATASET CLOSE drgentgelte. DATASET CLOSE fab. DATASET CLOSE fusionen. DATASET CLOSE info. DATASET CLOSE krankenhaus. DATASET CLOSE ops. DATASET CLOSE opsop. DATASET ACTIVATE fall. *Zusammenführen temp1 und temp2 = temp3. MATCH FILES /FILE = 'temp1.sav' /FILE='temp2.sav' /IN=ICDgefunden /BY KHinternesKennzeichen. EXECUTE. DATASET NAME FallMatchHD WINDOW=FRONT. SAVE OUTFILE='temp3.sav' /COMPRESSED. DATASET CLOSE Fall. *Zusammenführen temp3 und temp4 = temp5. MATCH FILES /FILE = 'temp3.sav' /FILE='temp4.sav' /IN=DRGgefunden /BY KHinternesKennzeichen. SELECT IF (Aufnahmejahr GT '1'). EXECUTE. *Ein Fehler an dieser Stelle bedeutet, dass zwei Abrechnungsziffern mit aus dem Bereich 70xxxxxx (§301 SGB V - Anlage B) abgerechnet wurden. DATASET NAME FallMatchHDDRG WINDOW=FRONT. SAVE OUTFILE='temp5.sav' /COMPRESSED. DATASET CLOSE FallMatchHD. *Zusammenführen temp5 und temp6 = temp7. MATCH FILES /FILE = 'temp5.sav' /FILE='temp6.sav' /IN=OPgefunden /DROP OPSVersion /DROP OPSDatum /DROP OPSKode /DROP Belegoperateur /DROP Beleganästhesist /DROP BEleghebamme /DROP codesortierhilfe /DROP bewertung /DROP rest /DROP sortierhilfe /DROP Entgeltart /DROP Entgeltbetrag /DROP Diagnoseart /BY KHinternesKennzeichen. SELECT IF (Aufnahmejahr GT '1'). EXECUTE. *Kommt an dieser Stelle ein Fehler, so bedeutet dies nur, das zu den aufgeführten Patienten mehr als eine OPS mit einer fünf beginnend verschlüsselt wurde. DATASET NAME FallMatchHDDRGOP WINDOW=FRONT. SAVE OUTFILE='temp7.sav' /COMPRESSED. DATASET CLOSE FallMatchHDDRG. *Zusammenführen temp7 und temp8 = temp9. MATCH FILES /FILE = 'temp7.sav' /FILE='temp8.sav' /IN=BETRAGgefunden /BY KHinternesKennzeichen. EXECUTE. SELECT IF (Aufnahmejahr GT '1'). EXECUTE. DATASET NAME FallMatchHDDRGOPBETRAG WINDOW=FRONT. SAVE OUTFILE='temp9.sav' /COMPRESSED. DATASET CLOSE FallMatchHDDRGOP. *Exportieren von temp9 in eine csv Datei mit tabs getrennt Dieser Schritt ist notwendig, um die VWD zu berechnen (Speicherung in der Datei 'zusammenfassung.csv'). SAVE TRANSLATE /TYPE=TAB /REPLACE /OUTFILE='zusammenfassung.csv'. *Import der Datei 'zusammenfassung.csv'. GET DATA /TYPE = TXT /FILE = 'zusammenfassung.csv' /DELCASE = LINE /DELIMITERS = "\t" /ARRANGEMENT = DELIMITED /FIRSTCASE = 1 /IMPORTCASE = ALL /VARIABLES = IK F9.0 EntlassenderStandort F2.0 KHinternesKennzeichen A15 IKderKrankenkasse F9.0 Geburtsjahr F4.0 Geburtsmonat F2.0 Geschlecht A1 PLZ F3.0 Aufnahmedatum ADATE10 Aufnahmeanlass A2.0 Aufnahmegrund F4.0 Aufnahmegewicht F5.0 Entlassungsdatum ADATE10 Entlassungsgrund F3.0 AlterinTagenamAufnahmetag F3.0 AlterinJahrenamAufnahmetag F3.0 Beurlaubungstage F3.0 Patientennummer A15 InterkurrenteDialysen F3.0 Beatmungsstunden F4.0 Behandlungsbeginnvorstationär A8 Behandlungstagevorstationär F1.0 Behandlungsendenachstationär A8 Behandlungstagenachstationär F2.0 IKVerlegungsKH F9.0 BelegungstageausserhalbKHEntgG F2.0 Aufnahmejahr F4.0 Entlassungsjahr F4.0 Aufnahmemonat F2.0 Entlassungsmonat F2.0 Aufnahmetag F2.0 Entlassungstag F2.0 Pflegetage F4.0 Belegungstage F4.0 Geschlecht_Code F1.0 ICDVersion F4.0 ICDKode A7 Lokalisation_A A1 SekundärKode A7 Lokalisation A1 ICDgefunden F1.0 IKKrankenkasse F9.0 Entgeltanzahl F4.0 DRG A4 DRGgefunden F1.0 OP F1.0 Betrag F8.2 BETRAGgefunden F1.0 . CACHE. EXECUTE. DATASET NAME zusammenfassung WINDOW=FRONT. *VWD Berechnungen. COMPUTE Pflegetage=DATEDIFF(Entlassungsdatum, Aufnahmedatum, "days")-Beurlaubungstage. COMPUTE Belegungstage=DATEDIFF(Entlassungsdatum, Aufnahmedatum, "days")-Beurlaubungstage. *Speicherung der Datei 'zusammenfassung.sav'. SAVE OUTFILE='zusammenfassung.sav' /COMPRESSED. DATASET CLOSE FallMatchHDDRGOPBETRAG. *Speicherung des Protokolls. OUTPUT SAVE NAME=Dokument1 OUTFILE='Protokoll2006.spo'.