Browse Source

Upgrade Kettle von 6.0 auf 8.3 und Tomcat 9 auf Tomcat 10 #10

kern_tomcat10_test_his
Daniel Quathamer 1 week ago
parent
commit
42aa7e6f44
  1. 196
      src/de/statspez/plausi/astat/csv/Abschluss2steller.csv
  2. 878
      src/de/statspez/plausi/astat/csv/Abschluss3steller.csv
  3. 16
      src/de/statspez/plausi/astat/csv/BeurlaubungsGrund.csv
  4. 36
      src/de/statspez/plausi/astat/csv/Bundesland.csv
  5. 12
      src/de/statspez/plausi/astat/csv/EinschreibungArt.csv
  6. 20
      src/de/statspez/plausi/astat/csv/ExmaGrund.csv
  7. 44
      src/de/statspez/plausi/astat/csv/FachrichtungenGast.csv
  8. 23
      src/de/statspez/plausi/astat/csv/Faechergruppe.csv
  9. 70
      src/de/statspez/plausi/astat/csv/HZBArt.csv
  10. 18
      src/de/statspez/plausi/astat/csv/HochschulArt.csv
  11. 12
      src/de/statspez/plausi/astat/csv/HochschulTraeger.csv
  12. 1123
      src/de/statspez/plausi/astat/csv/Hochschule.csv
  13. 1521
      src/de/statspez/plausi/astat/csv/HochschuleErsteinschreibung.csv
  14. 1715
      src/de/statspez/plausi/astat/csv/Hochschulfachbereich.csv
  15. 1639
      src/de/statspez/plausi/astat/csv/Hochschulstandort.csv
  16. 12
      src/de/statspez/plausi/astat/csv/Kontinent.csv
  17. 1464
      src/de/statspez/plausi/astat/csv/Kreise.csv
  18. 16
      src/de/statspez/plausi/astat/csv/Note.csv
  19. 30
      src/de/statspez/plausi/astat/csv/Pruefungsgruppe.csv
  20. 2
      src/de/statspez/plausi/astat/csv/ReadMeGasthoererstatistik.txt
  21. 2
      src/de/statspez/plausi/astat/csv/ReadMePromovierendenstatistik.txt
  22. 2
      src/de/statspez/plausi/astat/csv/ReadMeStudentenstatistik_Neu.txt
  23. 128
      src/de/statspez/plausi/astat/csv/STB.csv
  24. 502
      src/de/statspez/plausi/astat/csv/Staat.csv
  25. 540
      src/de/statspez/plausi/astat/csv/Studienfach.csv
  26. 5183
      src/de/statspez/plausi/astat/csv/StudienfachMerkmalsKombination.csv
  27. 3131
      src/de/statspez/plausi/astat/csv/Studienfach_Land.csv
  28. 10
      src/de/statspez/plausi/astat/csv/StudiumArt.csv
  29. 12
      src/de/statspez/plausi/astat/csv/VollTeilzeit.csv
  30. 390
      src/de/statspez/plausi/generated/Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017.java
  31. 3443
      src/de/statspez/plausi/generated/Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017.xml
  32. BIN
      src/de/statspez/plausi/generated/Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017_Descriptor.data
  33. 436
      src/de/statspez/plausi/generated/Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017_Segment1.java
  34. 6262
      src/de/statspez/plausi/generated/Plausi_ERHEBUNG_STUDENTEN_PRUEFUNGEN_AB_2017.java
  35. 12215
      src/de/statspez/plausi/generated/Plausi_ERHEBUNG_STUDENTEN_PRUEFUNGEN_AB_2017.xml
  36. BIN
      src/de/statspez/plausi/generated/Plausi_ERHEBUNG_STUDENTEN_PRUEFUNGEN_AB_2017_Descriptor.data
  37. 1234
      src/de/statspez/plausi/generated/Plausi_ERHEBUNG_STUDENTEN_PRUEFUNGEN_AB_2017_Segment1.java
  38. 18
      src/de/superx/bianalysis/ReportMetadata.java
  39. 9
      src/de/superx/bianalysis/ResultBuilder.java
  40. 499
      src/de/superx/bianalysis/bin/BiAnalysisCLI.java
  41. 278
      src/de/superx/bianalysis/bin/ColumnCollector.java
  42. 10
      src/de/superx/bianalysis/metadata/Identifier.java
  43. 27
      src/de/superx/bianalysis/metadata/MetaImport.java
  44. 161
      src/de/superx/bianalysis/metadata/MetadataImporter.java
  45. 67
      src/de/superx/bianalysis/metadata/UpsertStringBuilder.java
  46. 63
      src/de/superx/bianalysis/metadata/models/json/MetaDimension.java
  47. 94
      src/de/superx/bianalysis/metadata/models/json/MetaDimensionAttribute.java
  48. 25
      src/de/superx/bianalysis/metadata/models/yml/MetaYmlModel.java
  49. 7
      src/de/superx/bianalysis/metadata/models/yml/MetaYmlModelColumns.java
  50. 46
      src/de/superx/bianalysis/models/Condition.java
  51. 41
      src/de/superx/bianalysis/models/CriteriaGroup.java
  52. 15
      src/de/superx/bianalysis/models/Dimension.java
  53. 31
      src/de/superx/bianalysis/models/DimensionAttribute.java
  54. 2
      src/de/superx/bianalysis/models/Filter.java
  55. 4
      src/de/superx/bianalysis/models/Measure.java
  56. 20
      src/de/superx/bianalysis/repository/DimensionAttributeRepository.java
  57. 6
      src/de/superx/bianalysis/repository/DimensionRepository.java
  58. 102
      src/de/superx/bianalysis/repository/dto/AttributeDto.java
  59. 46
      src/de/superx/bianalysis/repository/dto/DimensionDto.java
  60. 30
      src/de/superx/bianalysis/repository/dto/FactDto.java
  61. 24
      src/de/superx/bianalysis/repository/dto/JsonArrayToStringDeserializer.java
  62. 95
      src/de/superx/bianalysis/repository/dto/MeasureDto.java
  63. 43
      src/de/superx/bianalysis/repository/dto/MeasureFilterDto.java
  64. 104
      src/de/superx/bianalysis/rest/BiAnalysisAdminApi.java
  65. 3
      src/de/superx/bianalysis/rest/BiAnalysisApi.java
  66. 19
      src/de/superx/bianalysis/service/BiAnalysisManager.java
  67. 7
      src/de/superx/bianalysis/service/BiAnalysisRightService.java
  68. 561
      src/de/superx/bianalysis/service/DbMetaAdapter.java
  69. 168
      src/de/superx/bianalysis/sqlgeneration/AttributeGroupQueryBuilder.java
  70. 19
      src/de/superx/bianalysis/sqlgeneration/SQLGenerator.java
  71. 5
      src/de/superx/bianalysis/sqlgeneration/SQLGeneratorTotals.java
  72. 18
      src/de/superx/bianalysis/sqlgeneration/SqlQuery.java
  73. 103
      src/de/superx/bin/ComponentAdminCLI.java
  74. 3
      src/de/superx/bin/ExecuteMask.java
  75. 5
      src/de/superx/bin/fm/EtlStarter.java
  76. 11
      src/de/superx/common/SxUser.java
  77. 7
      src/de/superx/conf/ApplicationConfig.java
  78. 18
      src/de/superx/db/HikariSqlExceptionOverride.java
  79. 322
      src/de/superx/dbt/DbtManager.java
  80. 59
      src/de/superx/dbt/DbtMetrics.java
  81. 176
      src/de/superx/dbt/DbtUtils.java
  82. 52
      src/de/superx/etl/biad/DBSource.java
  83. 59
      src/de/superx/etl/biad/DBSourceDeserializer.java
  84. 60
      src/de/superx/etl/biad/SourceTable.java
  85. 22
      src/de/superx/etl/biad/SourcesYML.java
  86. 4
      src/de/superx/jdbc/entity/Sichten.java
  87. 1
      src/de/superx/jdbc/model/TableRef.java
  88. 19
      src/de/superx/jdbc/repository/BiaAdminCrudRepository.java
  89. 4
      src/de/superx/jdbc/repository/HoererstatusRepository.java
  90. 4
      src/de/superx/jdbc/repository/KoepfeOderFaelleRepository.java
  91. 8
      src/de/superx/jdbc/repository/SichtenRepository.java
  92. 4
      src/de/superx/jdbc/repository/SosStatusRepository.java
  93. 4
      src/de/superx/job/ActionNode.java
  94. 13
      src/de/superx/job/ExecuteActionGroupAction.java
  95. 3
      src/de/superx/job/ExecuteSQLFluffAction.java
  96. 23
      src/de/superx/job/ExtractAction.java
  97. 6
      src/de/superx/job/LoadAction.java
  98. 16
      src/de/superx/job/LoadDbtSource.java
  99. 99
      src/de/superx/rest/EtlJobApi.java
  100. 19
      src/de/superx/rest/LogsProvider.java
  101. Some files were not shown because too many files have changed in this diff Show More

196
src/de/statspez/plausi/astat/csv/Abschluss2steller.csv

@ -1,98 +1,98 @@ @@ -1,98 +1,98 @@
01;0512;Mehr-Fächer-Bachelor mit Lehramtsoption ;05
02;0505;Magister;05
03;0520;Lizentiat;05
04;0525;Kirchliche Prüfung;05
05;0565;Akad. geprüfter Übersetzer;05
06;1005;Promotion (Abschlussprüfung vorausgesetzt);10
07;1020;Promotion ohne vorausgesetzte Abschlussprüfung;10
08;0530;Staatsexamen / 1. Staatsprüfung;05
09;0535;Staatsexamen (einphasige Ausbildung);05
10;0540;Fakultätsprüfung;05
11;0545;Diplom (U);05
12;0555;Diplom (U) - Dolmetscher;05
13;0560;Diplom (U) - Übersetzer;05
14;0550;Diplom I (U-GH);05
15;1525;LA Bachelor Grundschulen;15
16;2502;LA Bachelor Hauptschulen;25
17;0599;Abschlussprüfung ohne akad. Grad;05
18;0580;Diplom (U) - Lehrer;05
19;1555;LA Bachelor Grundstufe / Primarstufe;15
20;2000;LA Grund- und Hauptschulen;20
21;1520;LA Grundschulen;15
22;2500;LA Hauptschulen;25
23;2505;LA Realschulen;25
24;2520;LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien;25
25;3505;LA Gymnasien;35
26;4005;LA Sonderschulen / Förderschulen;40
27;4505;LA Berufliche Schulen;45
28;2005;LA Sekundarstufe I / Primarstufe;20
29;5005;Sonstige Staatsprüfungen nach Schularten / Schulstufen;50
30;4805;LA Master (soweit keine Differenzierung möglich);48
31;4705;LA Bachelor (soweit keine Differenzierung möglich);47
32;2010;LA Bachelor Sekundarstufe I / Primarstufe;20
33;2025;LA Bachelor Grundschulen / Sekundarstufe I;20
34;2510;LA Bachelor Realschulen;25
35;2525;LA Bachelor Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien;25
36;2540;LA Bachelor Mittelstufe / Sekundarstufe I;25
37;3010;LA Bachelor Sekundarstufe II / Sekundarstufe I;30
38;3510;LA Bachelor Gymnasien;35
39;3525;LA Bachelor Oberstufe / Sekundarstufe II, allgemeinbildende Schulen;35
40;2020;LA Grundschulen / Sekundarstufe I;20
41;3005;LA Sekundarstufe II / Sekundarstufe I;30
42;1550;LA Grundstufe / Primarstufe;15
43;2535;LA Mittelstufe / Sekundarstufe I;25
44;3520;LA Oberstufe / Sekundarstufe II, allgemeinbildende Schulen;35
45;4520;LA Oberstufe / Sekundarstufe II, berufliche Schulen;45
46;4010;LA Bachelor Sonderschulen / Förderschulen;40
47;4510;LA Bachelor Berufliche Schulen;45
48;4525;LA Bachelor Oberstufe / Sekundarstufe II, berufliche Schulen;45
49;1530;LA Master Grundschulen;15
50;2504;LA Master Hauptschulen;25
51;6005;Diplom (FH);60
52;1560;LA Master Grundstufe / Primarstufe;15
53;6010;Diplom (FH) - Dolmetscher;60
54;6015;Diplom (FH) - Übersetzer;60
55;2015;LA Master Sekundarstufe I / Primarstufe;20
56;6020;Staatl. Laufbahnprüfung (VerwFH);60
57;2030;LA Master Grundschulen / Sekundarstufe I;20
58;2515;LA Master Realschulen;25
59;6040;Sonstiger FH - Abschluss;60
60;2530;LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien;25
61;2545;LA Master Mittelstufe / Sekundarstufe I;25
62;3015;LA Master Sekundarstufe II / Sekundarstufe I;30
63;3530;LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen;35
64;3515;LA Master Gymnasien;35
65;4015;LA Master Sonderschulen / Förderschulen;40
66;4515;LA Master Berufliche Schulen;45
67;4530;LA Master Oberstufe / Sekundarstufe II, berufliche Schulen;45
68;0510;Mehr-Fächer-Bachelor ohne Lehramtsoption ;05
69;0515;Mehr-Fächer-Master;05
70;5540;Staatl. Prüfung für künstlerische Abschlüsse;55
71;5515;Bühnen- / Konzert- / Opernreifeprüfung;55
72;5520;Privatmusiklehrerprüfung;55
73;5525;Kirchenmusikprüfung A;55
74;5530;Kirchenmusikprüfung B;55
75;5505;Diplom (KH);55
76;5545;Meisterschüler;55
77;5550;Kunstpädagogische Prüfung;55
78;0575;Master (U) - Lehrer;05
79;5535;Solistenprüfung;55
80;5555;Sonstiger künstlerischer Abschluss;55
81;5510;Akademiebrief (KH);55
82;0585;Bachelor an Universitäten;05
83;5560;Bachelor an Kunsthochschulen;55
84;6025;Bachelor an Fachhochschulen;60
86;6517;Bachelor o. Ä. noch nicht abgeschlossen;65
87;6513;Abschlüsse von Berufsakademien, die ersten berufsbefähigenden Abschlüssen gleichgestellt sind;65
88;0595;Master an Universitäten (Abschlussprüfung vorausgesetzt);05
89;5570;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt);55
90;6035;Master an Fachhochschulen (Abschlussprüfung vorausgesetzt);60
91;1015;Strukturiertes Promotionsstudium;10
92;1010;Promotion nach FH-Abschluss bzw. wiss. Kurzstudium;10
93;0570;Bachelor (U) - Lehrer;05
94;6505;Abschlusszeugnis / Zertifikat;65
95;6510;Sonstiger Abschluss in Deutschland;65
96;6515;Abschlussprüfung im Ausland;65
97;6520;Keine Abschlussprüfung möglich bzw. angestrebt;65
98;2002;LA Bachelor Grund- und Hauptschulen;20
99;2004;LA Master Grund- und Hauptschulen;20
01;0512;Mehr-Fächer-Bachelor mit Lehramtsoption ;20102;99999;05;
02;0505;Magister;20072;99999;05;
03;0520;Lizentiat;20072;99999;05;
04;0525;Kirchliche Prüfung;20072;99999;05;
05;0565;Akad. geprüfter Übersetzer;20072;99999;05;
06;1005;Promotion (Abschlussprüfung vorausgesetzt);20072;99999;10;
07;1020;Promotion ohne vorausgesetzte Abschlussprüfung;20072;99999;10;
08;0530;Staatsexamen / 1. Staatsprüfung;20072;99999;05;
09;0535;Staatsexamen (einphasige Ausbildung);20072;99999;05;
10;0540;Fakultätsprüfung;20072;99999;05;
11;0545;Diplom (U);20072;99999;05;
12;0555;Diplom (U) - Dolmetscher;20072;99999;05;
13;0560;Diplom (U) - Übersetzer;20072;99999;05;
14;0550;Diplom I (U-GH);20072;99999;05;
15;1525;LA Bachelor Grundschulen;20072;99999;15;
16;2502;LA Bachelor Hauptschulen;20222;99999;25;
17;0599;Abschlussprüfung ohne akad. Grad;20072;99999;05;
18;0580;Diplom (U) - Lehrer;20072;99999;05;
19;1555;LA Bachelor Grundstufe / Primarstufe;20072;99999;15;
20;2000;LA Grund- und Hauptschulen;20222;99999;20;
21;1520;LA Grundschulen;20072;99999;15;
22;2500;LA Hauptschulen;20222;99999;25;
23;2505;LA Realschulen;20072;99999;25;
24;2520;LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien;20072;99999;25;
25;3505;LA Gymnasien;20072;99999;35;
26;4005;LA Sonderschulen / Förderschulen;20072;99999;40;
27;4505;LA Berufliche Schulen;20072;99999;45;
28;2005;LA Sekundarstufe I / Primarstufe;20072;99999;20;
29;5005;Sonstige Staatsprüfungen nach Schularten / Schulstufen;20072;99999;50;
30;4805;LA Master (soweit keine Differenzierung möglich);20072;99999;48;
31;4705;LA Bachelor (soweit keine Differenzierung möglich);20072;99999;47;
32;2010;LA Bachelor Sekundarstufe I / Primarstufe;20072;99999;20;
33;2025;LA Bachelor Grundschulen / Sekundarstufe I;20072;99999;20;
34;2510;LA Bachelor Realschulen;20072;99999;25;
35;2525;LA Bachelor Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien;20072;99999;25;
36;2540;LA Bachelor Mittelstufe / Sekundarstufe I;20072;99999;25;
37;3010;LA Bachelor Sekundarstufe II / Sekundarstufe I;20072;99999;30;
38;3510;LA Bachelor Gymnasien;20072;99999;35;
39;3525;LA Bachelor Oberstufe / Sekundarstufe II, allgemeinbildende Schulen;20072;99999;35;
40;2020;LA Grundschulen / Sekundarstufe I;20072;99999;20;
41;3005;LA Sekundarstufe II / Sekundarstufe I;20072;99999;30;
42;1550;LA Grundstufe / Primarstufe;20072;99999;15;
43;2535;LA Mittelstufe / Sekundarstufe I;20072;99999;25;
44;3520;LA Oberstufe / Sekundarstufe II, allgemeinbildende Schulen;20072;99999;35;
45;4520;LA Oberstufe / Sekundarstufe II, berufliche Schulen;20072;99999;45;
46;4010;LA Bachelor Sonderschulen / Förderschulen;20072;99999;40;
47;4510;LA Bachelor Berufliche Schulen;20072;99999;45;
48;4525;LA Bachelor Oberstufe / Sekundarstufe II, berufliche Schulen;20072;99999;45;
49;1530;LA Master Grundschulen;20072;99999;15;
50;2504;LA Master Hauptschulen;20222;99999;25;
51;6005;Diplom (FH);20072;99999;60;
52;1560;LA Master Grundstufe / Primarstufe;20072;99999;15;
53;6010;Diplom (FH) - Dolmetscher;20072;99999;60;
54;6015;Diplom (FH) - Übersetzer;20072;99999;60;
55;2015;LA Master Sekundarstufe I / Primarstufe;20072;99999;20;
56;6020;Staatl. Laufbahnprüfung (VerwFH);20072;99999;60;
57;2030;LA Master Grundschulen / Sekundarstufe I;20072;99999;20;
58;2515;LA Master Realschulen;20072;99999;25;
59;6040;Sonstiger FH - Abschluss;20072;99999;60;
60;2530;LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien;20072;99999;25;
61;2545;LA Master Mittelstufe / Sekundarstufe I;20072;99999;25;
62;3015;LA Master Sekundarstufe II / Sekundarstufe I;20072;99999;30;
63;3530;LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen;20072;99999;35;
64;3515;LA Master Gymnasien;20072;99999;35;
65;4015;LA Master Sonderschulen / Förderschulen;20072;99999;40;
66;4515;LA Master Berufliche Schulen;20072;99999;45;
67;4530;LA Master Oberstufe / Sekundarstufe II, berufliche Schulen;20072;99999;45;
68;0510;Mehr-Fächer-Bachelor ohne Lehramtsoption ;20102;99999;05;
69;0515;Mehr-Fächer-Master;20102;99999;05;
70;5540;Staatl. Prüfung für künstlerische Abschlüsse;20072;99999;55;
71;5515;Bühnen- / Konzert- / Opernreifeprüfung;20072;99999;55;
72;5520;Privatmusiklehrerprüfung;20072;99999;55;
73;5525;Kirchenmusikprüfung A;20072;99999;55;
74;5530;Kirchenmusikprüfung B;20072;99999;55;
75;5505;Diplom (KH);20072;99999;55;
76;5545;Meisterschüler;20072;99999;55;
77;5550;Kunstpädagogische Prüfung;20072;99999;55;
78;0575;Master (U) - Lehrer;20072;99999;05;
79;5535;Solistenprüfung;20072;99999;55;
80;5555;Sonstiger künstlerischer Abschluss;20072;99999;55;
81;5510;Akademiebrief (KH);20072;99999;55;
82;0585;Bachelor an Universitäten;20072;99999;05;
83;5560;Bachelor an Kunsthochschulen;20072;99999;55;
84;6025;Bachelor an Fachhochschulen;20072;99999;60;
86;6517;Bachelor o. Ä. noch nicht abgeschlossen;20122;99999;65;
87;6513;Abschlüsse von Berufsakademien, die ersten berufsbefähigenden Abschlüssen gleichgestellt sind;20112;99999;65;
88;0595;Master an Universitäten (Abschlussprüfung vorausgesetzt);20072;99999;05;
89;5570;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt);20072;99999;55;
90;6035;Master an Fachhochschulen (Abschlussprüfung vorausgesetzt);20072;99999;60;
91;1015;Strukturiertes Promotionsstudium;20072;99999;10;
92;1010;Promotion nach FH-Abschluss bzw. wiss. Kurzstudium;20072;99999;10;
93;0570;Bachelor (U) - Lehrer;20072;99999;05;
94;6505;Abschlusszeugnis / Zertifikat;20072;99999;65;
95;6510;Sonstiger Abschluss in Deutschland;20072;99999;65;
96;6515;Abschlussprüfung im Ausland;20072;99999;65;
97;6520;Keine Abschlussprüfung möglich bzw. angestrebt;20072;99999;65;
98;2002;LA Bachelor Grund- und Hauptschulen;20222;99999;20;
99;2004;LA Master Grund- und Hauptschulen;20222;99999;20;

1 01 0512 Mehr-Fächer-Bachelor mit Lehramtsoption 20102 99999 05
2 02 0505 Magister 20072 99999 05
3 03 0520 Lizentiat 20072 99999 05
4 04 0525 Kirchliche Prüfung 20072 99999 05
5 05 0565 Akad. geprüfter Übersetzer 20072 99999 05
6 06 1005 Promotion (Abschlussprüfung vorausgesetzt) 20072 99999 10
7 07 1020 Promotion ohne vorausgesetzte Abschlussprüfung 20072 99999 10
8 08 0530 Staatsexamen / 1. Staatsprüfung 20072 99999 05
9 09 0535 Staatsexamen (einphasige Ausbildung) 20072 99999 05
10 10 0540 Fakultätsprüfung 20072 99999 05
11 11 0545 Diplom (U) 20072 99999 05
12 12 0555 Diplom (U) - Dolmetscher 20072 99999 05
13 13 0560 Diplom (U) - Übersetzer 20072 99999 05
14 14 0550 Diplom I (U-GH) 20072 99999 05
15 15 1525 LA Bachelor Grundschulen 20072 99999 15
16 16 2502 LA Bachelor Hauptschulen 20222 99999 25
17 17 0599 Abschlussprüfung ohne akad. Grad 20072 99999 05
18 18 0580 Diplom (U) - Lehrer 20072 99999 05
19 19 1555 LA Bachelor Grundstufe / Primarstufe 20072 99999 15
20 20 2000 LA Grund- und Hauptschulen 20222 99999 20
21 21 1520 LA Grundschulen 20072 99999 15
22 22 2500 LA Hauptschulen 20222 99999 25
23 23 2505 LA Realschulen 20072 99999 25
24 24 2520 LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien 20072 99999 25
25 25 3505 LA Gymnasien 20072 99999 35
26 26 4005 LA Sonderschulen / Förderschulen 20072 99999 40
27 27 4505 LA Berufliche Schulen 20072 99999 45
28 28 2005 LA Sekundarstufe I / Primarstufe 20072 99999 20
29 29 5005 Sonstige Staatsprüfungen nach Schularten / Schulstufen 20072 99999 50
30 30 4805 LA Master (soweit keine Differenzierung möglich) 20072 99999 48
31 31 4705 LA Bachelor (soweit keine Differenzierung möglich) 20072 99999 47
32 32 2010 LA Bachelor Sekundarstufe I / Primarstufe 20072 99999 20
33 33 2025 LA Bachelor Grundschulen / Sekundarstufe I 20072 99999 20
34 34 2510 LA Bachelor Realschulen 20072 99999 25
35 35 2525 LA Bachelor Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien 20072 99999 25
36 36 2540 LA Bachelor Mittelstufe / Sekundarstufe I 20072 99999 25
37 37 3010 LA Bachelor Sekundarstufe II / Sekundarstufe I 20072 99999 30
38 38 3510 LA Bachelor Gymnasien 20072 99999 35
39 39 3525 LA Bachelor Oberstufe / Sekundarstufe II, allgemeinbildende Schulen 20072 99999 35
40 40 2020 LA Grundschulen / Sekundarstufe I 20072 99999 20
41 41 3005 LA Sekundarstufe II / Sekundarstufe I 20072 99999 30
42 42 1550 LA Grundstufe / Primarstufe 20072 99999 15
43 43 2535 LA Mittelstufe / Sekundarstufe I 20072 99999 25
44 44 3520 LA Oberstufe / Sekundarstufe II, allgemeinbildende Schulen 20072 99999 35
45 45 4520 LA Oberstufe / Sekundarstufe II, berufliche Schulen 20072 99999 45
46 46 4010 LA Bachelor Sonderschulen / Förderschulen 20072 99999 40
47 47 4510 LA Bachelor Berufliche Schulen 20072 99999 45
48 48 4525 LA Bachelor Oberstufe / Sekundarstufe II, berufliche Schulen 20072 99999 45
49 49 1530 LA Master Grundschulen 20072 99999 15
50 50 2504 LA Master Hauptschulen 20222 99999 25
51 51 6005 Diplom (FH) 20072 99999 60
52 52 1560 LA Master Grundstufe / Primarstufe 20072 99999 15
53 53 6010 Diplom (FH) - Dolmetscher 20072 99999 60
54 54 6015 Diplom (FH) - Übersetzer 20072 99999 60
55 55 2015 LA Master Sekundarstufe I / Primarstufe 20072 99999 20
56 56 6020 Staatl. Laufbahnprüfung (VerwFH) 20072 99999 60
57 57 2030 LA Master Grundschulen / Sekundarstufe I 20072 99999 20
58 58 2515 LA Master Realschulen 20072 99999 25
59 59 6040 Sonstiger FH - Abschluss 20072 99999 60
60 60 2530 LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien 20072 99999 25
61 61 2545 LA Master Mittelstufe / Sekundarstufe I 20072 99999 25
62 62 3015 LA Master Sekundarstufe II / Sekundarstufe I 20072 99999 30
63 63 3530 LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen 20072 99999 35
64 64 3515 LA Master Gymnasien 20072 99999 35
65 65 4015 LA Master Sonderschulen / Förderschulen 20072 99999 40
66 66 4515 LA Master Berufliche Schulen 20072 99999 45
67 67 4530 LA Master Oberstufe / Sekundarstufe II, berufliche Schulen 20072 99999 45
68 68 0510 Mehr-Fächer-Bachelor ohne Lehramtsoption 20102 99999 05
69 69 0515 Mehr-Fächer-Master 20102 99999 05
70 70 5540 Staatl. Prüfung für künstlerische Abschlüsse 20072 99999 55
71 71 5515 Bühnen- / Konzert- / Opernreifeprüfung 20072 99999 55
72 72 5520 Privatmusiklehrerprüfung 20072 99999 55
73 73 5525 Kirchenmusikprüfung A 20072 99999 55
74 74 5530 Kirchenmusikprüfung B 20072 99999 55
75 75 5505 Diplom (KH) 20072 99999 55
76 76 5545 Meisterschüler 20072 99999 55
77 77 5550 Kunstpädagogische Prüfung 20072 99999 55
78 78 0575 Master (U) - Lehrer 20072 99999 05
79 79 5535 Solistenprüfung 20072 99999 55
80 80 5555 Sonstiger künstlerischer Abschluss 20072 99999 55
81 81 5510 Akademiebrief (KH) 20072 99999 55
82 82 0585 Bachelor an Universitäten 20072 99999 05
83 83 5560 Bachelor an Kunsthochschulen 20072 99999 55
84 84 6025 Bachelor an Fachhochschulen 20072 99999 60
85 86 6517 Bachelor o. Ä. noch nicht abgeschlossen 20122 99999 65
86 87 6513 Abschlüsse von Berufsakademien, die ersten berufsbefähigenden Abschlüssen gleichgestellt sind 20112 99999 65
87 88 0595 Master an Universitäten (Abschlussprüfung vorausgesetzt) 20072 99999 05
88 89 5570 Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) 20072 99999 55
89 90 6035 Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) 20072 99999 60
90 91 1015 Strukturiertes Promotionsstudium 20072 99999 10
91 92 1010 Promotion nach FH-Abschluss bzw. wiss. Kurzstudium 20072 99999 10
92 93 0570 Bachelor (U) - Lehrer 20072 99999 05
93 94 6505 Abschlusszeugnis / Zertifikat 20072 99999 65
94 95 6510 Sonstiger Abschluss in Deutschland 20072 99999 65
95 96 6515 Abschlussprüfung im Ausland 20072 99999 65
96 97 6520 Keine Abschlussprüfung möglich bzw. angestrebt 20072 99999 65
97 98 2002 LA Bachelor Grund- und Hauptschulen 20222 99999 20
98 99 2004 LA Master Grund- und Hauptschulen 20222 99999 20

878
src/de/statspez/plausi/astat/csv/Abschluss3steller.csv

@ -1,439 +1,439 @@ @@ -1,439 +1,439 @@
101;051210;Mehr-Fächer-Bachelor mit Lehramtsoption - Erststudium;01
102;050510;Magister - Erststudium;02
103;052010;Lizentiat - Erststudium;03
104;052510;Kirchliche Prüfung - Erststudium;04
105;056510;Akad. geprüfter Übersetzer - Erststudium;05
107;102010;Promotion ohne vorausgesetzte Abschlussprüfung - Erststudium;07
108;053010;Staatsexamen / 1. Staatsprüfung - Erststudium;08
109;053510;Staatsexamen (einphasige Ausbildung) - Erststudium;09
110;054010;Fakultätsprüfung - Erststudium;10
111;054510;Diplom (U) - Erststudium;11
112;055510;Diplom (U) - Dolmetscher - Erststudium;12
113;056010;Diplom (U) - Übersetzer - Erststudium;13
114;055010;Diplom I (U-GH) - Erststudium;14
115;152510;LA Bachelor Grundschulen - Erststudium;15
116;250210;LA Bachelor Hauptschulen - Erststudium;16
117;059910;Abschlussprüfung ohne akad. Grad - Erststudium;17
118;058010;Diplom (U) - Lehrer - Erststudium;18
119;155510;LA Bachelor Grundstufe / Primarstufe - Erststudium;19
120;200010;LA Grund- und Hauptschulen - Erststudium;20
121;152010;LA Grundschulen - Erststudium;21
122;250010;LA Hauptschulen - Erststudium;22
123;250510;LA Realschulen - Erststudium;23
124;252010;LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Erststudium;24
125;350510;LA Gymnasien - Erststudium;25
126;400510;LA Sonderschulen / Förderschulen - Erststudium;26
127;450510;LA Berufliche Schulen - Erststudium;27
128;200510;LA Sekundarstufe I / Primarstufe - Erststudium;28
129;500510;Sonstige Staatsprüfungen nach Schularten / Schulstufen - Erststudium;29
131;470510;LA Bachelor (soweit keine Differenzierung möglich) - Erststudium;31
132;201010;LA Bachelor Sekundarstufe I / Primarstufe - Erststudium;32
133;202510;LA Bachelor Grundschulen / Sekundarstufe I - Erststudium;33
134;251010;LA Bachelor Realschulen - Erststudium;34
135;252510;LA Bachelor Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Erststudium;35
136;254010;LA Bachelor Mittelstufe / Sekundarstufe I - Erststudium;36
137;301010;LA Bachelor Sekundarstufe II / Sekundarstufe I - Erststudium;37
138;351010;LA Bachelor Gymnasien - Erststudium;38
139;352510;LA Bachelor Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Erststudium;39
140;202010;LA Grundschulen / Sekundarstufe I - Erststudium;40
141;300510;LA Sekundarstufe II / Sekundarstufe I - Erststudium;41
142;155010;LA Grundstufe / Primarstufe - Erststudium;42
143;253510;LA Mittelstufe / Sekundarstufe I - Erststudium;43
144;352010;LA Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Erststudium;44
145;452010;LA Oberstufe / Sekundarstufe II, berufliche Schulen - Erststudium;45
146;401010;LA Bachelor Sonderschulen / Förderschulen - Erststudium;46
147;451010;LA Bachelor Berufliche Schulen - Erststudium;47
148;452510;LA Bachelor Oberstufe / Sekundarstufe II, berufliche Schulen - Erststudium;48
151;600510;Diplom (FH) - Erststudium;51
153;601010;Diplom (FH) - Dolmetscher - Erststudium;53
154;601510;Diplom (FH) - Übersetzer - Erststudium;54
156;602010;Staatl. Laufbahnprüfung (VerwFH) - Erststudium;56
159;604010;Sonstiger FH - Abschluss - Erststudium;59
168;051010;Mehr-Fächer-Bachelor ohne Lehramtsoption - Erststudium;68
170;554010;Staatl. Prüfung für künstlerische Abschlüsse - Erststudium;70
171;551510;Bühnen- / Konzert- / Opernreifeprüfung - Erststudium;71
172;552010;Privatmusiklehrerprüfung - Erststudium;72
173;552510;Kirchenmusikprüfung A - Erststudium;73
174;553010;Kirchenmusikprüfung B - Erststudium;74
175;550510;Diplom (KH) - Erststudium;75
177;555010;Kunstpädagogische Prüfung - Erststudium;77
179;553510;Solistenprüfung - Erststudium;79
180;555510;Sonstiger künstlerischer Abschluss - Erststudium;80
181;551010;Akademiebrief (KH) - Erststudium;81
182;058510;Bachelor an Universitäten - Erststudium;82
183;556010;Bachelor an Kunsthochschulen - Erststudium;83
184;602510;Bachelor an Fachhochschulen - Erststudium;84
186;651710;Bachelor o. Ä. noch nicht abgeschlossen - Erststudium;86
187;651310;Abschlüsse von Berufsakademien, die ersten berufsb. Abschlüssen gleichgestellt sind - Erststudium;87
193;057010;Bachelor (U) - Lehrer - Erststudium;93
194;650510;Abschlusszeugnis / Zertifikat - Erststudium;94
195;651010;Sonstiger Abschluss in Deutschland - Erststudium;95
196;651510;Abschlussprüfung im Ausland - Erststudium;96
198;200210;LA Bachelor Grund- und Hauptschulen - Erststudium;98
201;051220;Mehr-Fächer-Bachelor mit Lehramtsoption - Zweitstudium;01
202;050520;Magister - Zweitstudium;02
203;052020;Lizentiat - Zweitstudium;03
204;052520;Kirchliche Prüfung - Zweitstudium;04
205;056520;Akad. geprüfter Übersetzer - Zweitstudium;05
208;053020;Staatsexamen / 1. Staatsprüfung - Zweitstudium;08
209;053520;Staatsexamen (einphasige Ausbildung) - Zweitstudium;09
210;054020;Fakultätsprüfung - Zweitstudium;10
211;054520;Diplom (U) - Zweitstudium;11
212;055520;Diplom (U) - Dolmetscher - Zweitstudium;12
213;056020;Diplom (U) - Übersetzer - Zweitstudium;13
214;055020;Diplom I (U-GH) - Zweitstudium;14
215;152520;LA Bachelor Grundschulen - Zweitstudium;15
216;250220;LA Bachelor Hauptschulen - Zweitstudium;16
218;058020;Diplom (U) - Lehrer - Zweitstudium;18
219;155520;LA Bachelor Grundstufe / Primarstufe - Zweitstudium;19
220;200020;LA Grund- und Hauptschulen - Zweitstudium;20
221;152020;LA Grundschulen - Zweitstudium;21
222;250020;LA Hauptschulen - Zweitstudium;22
223;250520;LA Realschulen - Zweitstudium;23
224;252020;LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Zweitstudium;24
225;350520;LA Gymnasien - Zweitstudium;25
226;400520;LA Sonderschulen / Förderschulen - Zweitstudium;26
227;450520;LA Berufliche Schulen - Zweitstudium;27
228;200520;LA Sekundarstufe I / Primarstufe - Zweitstudium;28
229;500520;Sonstige Staatsprüfungen nach Schularten / Schulstufen - Zweitstudium;29
230;480520;LA Master (soweit keine Differenzierung möglich) - Zweitstudium;30
231;470520;LA Bachelor (soweit keine Differenzierung möglich) - Zweitstudium;31
232;201020;LA Bachelor Sekundarstufe I / Primarstufe - Zweitstudium;32
233;202520;LA Bachelor Grundschulen / Sekundarstufe I - Zweitstudium;33
234;251020;LA Bachelor Realschulen - Zweitstudium;34
235;252520;LA Bachelor Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Zweitstudium;35
236;254020;LA Bachelor Mittelstufe / Sekundarstufe I - Zweitstudium;36
237;301020;LA Bachelor Sekundarstufe II / Sekundarstufe I - Zweitstudium;37
238;351020;LA Bachelor Gymnasien - Zweitstudium;38
239;352520;LA Bachelor Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Zweitstudium;39
240;202020;LA Grundschulen / Sekundarstufe I - Zweitstudium;40
241;300520;LA Sekundarstufe II / Sekundarstufe I - Zweitstudium;41
242;155020;LA Grundstufe / Primarstufe - Zweitstudium;42
243;253520;LA Mittelstufe / Sekundarstufe I - Zweitstudium;43
244;352020;LA Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Zweitstudium;44
245;452020;LA Oberstufe / Sekundarstufe II, berufliche Schulen - Zweitstudium;45
246;401020;LA Bachelor Sonderschulen / Förderschulen - Zweitstudium;46
247;451020;LA Bachelor Berufliche Schulen - Zweitstudium;47
248;452520;LA Bachelor Oberstufe / Sekundarstufe II, berufliche Schulen - Zweitstudium;48
249;153020;LA Master Grundschulen - Zweitstudium;49
250;250420;LA Master Hauptschulen - Zweitstudium;50
251;600520;Diplom (FH) - Zweitstudium;51
252;156020;LA Master Grundstufe / Primarstufe - Zweitstudium;52
253;601020;Diplom (FH) - Dolmetscher - Zweitstudium;53
254;601520;Diplom (FH) - Übersetzer - Zweitstudium;54
255;201520;LA Master Sekundarstufe I / Primarstufe - Zweitstudium;55
256;602020;Staatl. Laufbahnprüfung (VerwFH) - Zweitstudium;56
257;203020;LA Master Grundschulen / Sekundarstufe I - Zweitstudium;57
258;251520;LA Master Realschulen - Zweitstudium;58
259;604020;Sonstiger FH - Abschluss - Zweitstudium;59
260;253020;LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Zweitstudium;60
261;254520;LA Master Mittelstufe / Sekundarstufe I - Zweitstudium;61
262;301520;LA Master Sekundarstufe II / Sekundarstufe I - Zweitstudium;62
263;353020;LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Zweitstudium;63
264;351520;LA Master Gymnasien - Zweitstudium;64
265;401520;LA Master Sonderschulen / Förderschulen - Zweitstudium;65
266;451520;LA Master Berufliche Schulen - Zweitstudium;66
267;453020;LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Zweitstudium;67
268;051020;Mehr-Fächer-Bachelor ohne Lehramtsoption - Zweitstudium;68
269;051520;Mehr-Fächer-Master - Zweitstudium;69
270;554020;Staatl. Prüfung für künstlerische Abschlüsse - Zweitstudium;70
271;551520;Bühnen- / Konzert- / Opernreifeprüfung - Zweitstudium;71
272;552020;Privatmusiklehrerprüfung - Zweitstudium;72
273;552520;Kirchenmusikprüfung A - Zweitstudium;73
274;553020;Kirchenmusikprüfung B - Zweitstudium;74
275;550520;Diplom (KH) - Zweitstudium;75
276;554520;Meisterschüler - Zweitstudium;76
277;555020;Kunstpädagogische Prüfung - Zweitstudium;77
278;057520;Master (U) - Lehrer - Zweitstudium;78
279;553520;Solistenprüfung - Zweitstudium;79
280;555520;Sonstiger künstlerischer Abschluss - Zweitstudium;80
281;551020;Akademiebrief (KH) - Zweitstudium;81
282;058520;Bachelor an Universitäten - Zweitstudium;82
283;556020;Bachelor an Kunsthochschulen - Zweitstudium;83
284;602520;Bachelor an Fachhochschulen - Zweitstudium;84
288;059520;Master an Universitäten (Abschlussprüfung vorausgesetzt) - Zweitstudium;88
289;557020;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Zweitstudium;89
290;603520;Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Zweitstudium;90
293;057020;Bachelor (U) - Lehrer - Zweitstudium;93
294;650520;Abschlusszeugnis / Zertifikat - Zweitstudium;94
295;651020;Sonstiger Abschluss in Deutschland - Zweitstudium;95
296;651520;Abschlussprüfung im Ausland - Zweitstudium;96
298;200220;LA Bachelor Grund- und Hauptschulen - Zweitstudium;98
299;200420;LA Master Grund- und Hauptschulen - Zweitstudium;99
301;051230;Mehr-Fächer-Bachelor mit Lehramtsoption - Aufbaustudium;01
302;050530;Magister - Aufbaustudium;02
303;052030;Lizentiat - Aufbaustudium;03
308;053030;Staatsexamen / 1. Staatsprüfung - Aufbaustudium;08
311;054530;Diplom (U) - Aufbaustudium;11
317;059930;Abschlussprüfung ohne akad. Grad - Aufbaustudium;17
323;250530;LA Realschulen - Aufbaustudium;23
324;252030;LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Aufbaustudium;24
325;350530;LA Gymnasien - Aufbaustudium;25
326;400530;LA Sonderschulen / Förderschulen - Aufbaustudium;26
329;500530;Sonstige Staatsprüfungen nach Schularten / Schulstufen - Aufbaustudium;29
330;480530;LA Master (soweit keine Differenzierung möglich) - Aufbaustudium;30
331;470530;LA Bachelor (soweit keine Differenzierung möglich) - Aufbaustudium;31
349;153030;LA Master Grundschulen - Aufbaustudium;49
350;250430;LA Master Hauptschulen - Aufbaustudium;50
351;600530;Diplom (FH) - Aufbaustudium;51
352;156030;LA Master Grundstufe / Primarstufe - Aufbaustudium;52
353;601030;Diplom (FH) - Dolmetscher - Aufbaustudium;53
354;601530;Diplom (FH) - Übersetzer - Aufbaustudium;54
355;201530;LA Master Sekundarstufe I / Primarstufe - Aufbaustudium;55
357;203030;LA Master Grundschulen / Sekundarstufe I - Aufbaustudium;57
358;251530;LA Master Realschulen - Aufbaustudium;58
359;604030;Sonstiger FH - Abschluss - Aufbaustudium;59
360;253030;LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Aufbaustudium;60
361;254530;LA Master Mittelstufe / Sekundarstufe I - Aufbaustudium;61
362;301530;LA Master Sekundarstufe II / Sekundarstufe I - Aufbaustudium;62
363;353030;LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Aufbaustudium;63
364;351530;LA Master Gymnasium - Aufbaustudium;64
365;401530;LA Master Sonderschulen / Förderschulen - Aufbaustudium;65
366;451530;LA Master Berufliche Schulen - Aufbaustudium;66
367;453030;LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Aufbaustudium;67
368;051030;Mehr-Fächer-Bachelor ohne Lehramtsoption - Aufbaustudium;68
369;051530;Mehr-Fächer-Master - Aufbaustudium;69
371;551530;Bühnen- / Konzert- / Opernreifeprüfung - Aufbaustudium;71
372;552030;Privatmusiklehrerprüfung - Aufbaustudium;72
373;552530;Kirchenmusikprüfung A - Aufbaustudium;73
375;550530;Diplom (KH) - Aufbaustudium;75
376;554530;Meisterschüler - Aufbaustudium;76
378;057530;Master (U) - Lehrer - Aufbaustudium;78
379;553530;Solistenprüfung - Aufbaustudium;79
380;555530;Sonstiger künstlerischer Abschluss - Aufbaustudium;80
381;551030;Akademiebrief (KH) - Aufbaustudium;81
388;059530;Master an Universitäten (Abschlussprüfung vorausgesetzt) - Aufbaustudium;88
389;557030;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Aufbaustudium;89
390;603530;Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Aufbaustudium;90
394;650530;Abschlusszeugnis / Zertifikat - Aufbaustudium;94
395;651030;Sonstiger Abschluss in Deutschland - Aufbaustudium;95
396;651530;Abschlussprüfung im Ausland - Aufbaustudium;96
399;200430;LA Master Grund- und Hauptschulen - Aufbaustudium;99
401;051240;Mehr-Fächer-Bachelor mit Lehramtsoption - Ergänzungs-, Erweiterungs- und Zusatzstudium;01
402;050540;Magister - Ergänzungs-, Erweiterungs- und Zusatzstudium;02
403;052040;Lizentiat - Ergänzungs-, Erweiterungs- und Zusatzstudium;03
405;056540;Akad. geprüfter Übersetzer - Ergänzungs-, Erweiterungs- und Zusatzstudium;05
411;054540;Diplom (U) - Ergänzungs-, Erweiterungs- und Zusatzstudium;11
412;055540;Diplom (U) - Dolmetscher - Ergänzungs-, Erweiterungs- und Zusatzstudium;12
413;056040;Diplom (U) - Übersetzer - Ergänzungs-, Erweiterungs- und Zusatzstudium;13
415;152540;LA Bachelor Grundschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;15
416;250240;LA Bachelor Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;16
418;058040;Diplom (U) - Lehrer - Ergänzungs-, Erweiterungs- und Zusatzstudium;18
419;155540;LA Bachelor Grundstufe / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;19
420;200040;LA Grund- und Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20
421;152040;LA Grundschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;21
422;250040;LA Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;22
423;250540;LA Realschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;23
424;252040;LA Haupt- und Realsch. / Unterst. und Mittelst. Gym. - Ergänzungs-, Erweiterungs- und Zusatzstud.;24
425;350540;LA Gymnasien - Ergänzungs-, Erweiterungs- und Zusatzstudium;25
426;400540;LA Sonderschulen / Förderschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;26
427;450540;LA Berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;27
428;200540;LA Sekundarstufe I / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;28
429;500540;Sonstige Staatsprüfungen nach Schularten / Schulst. - Ergänzungs-, Erweiterungs- und Zusatzstudium;29
430;480540;LA Master (soweit keine Differenzierung möglich) - Ergänzungs-, Erweiterungs- und Zusatzstudium;30
431;470540;LA Bachelor (soweit keine Differenzierung möglich) - Ergänzungs-, Erweiterungs- und Zusatzstudium;31
432;201040;LA Bachelor Sekundarstufe I / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;32
433;202540;LA Bachelor Grundschulen / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;33
434;251040;LA Bachelor Realschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;34
435;252540;LA Bachelor Haupt- u. Realsch./Unterst. u. Mittelst. Gym.-Ergänzungs-, Erweiterungs- und Zusatzstud.;35
436;254040;LA Bachelor Mittelstufe / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;36
437;301040;LA Bachelor Sekundarstufe II / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;37
438;351040;LA Bachelor Gymnasien - Ergänzungs-, Erweiterungs- und Zusatzstudium;38
439;352540;LA Bachelor Oberst. / Sekundarst. II, allgemeinb. Schulen - Ergänzungs-, Erweiterungs- und Zusatzst.;39
440;202040;LA Grundschulen / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;40
441;300540;LA Sekundarstufe II / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;41
442;155040;LA Grundstufe / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;42
443;253540;LA Mittelstufe / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;43
444;352040;LA Oberst. / Sekundarst. II, allgemeinb. Schulen - Ergänzungs-, Erweiterungs- und Zusatzst.;44
445;452040;LA Oberstufe / Sekundarstufe II, berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;45
446;401040;LA Bachelor Sonderschulen / Förderschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;46
447;451040;LA Bachelor Berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;47
448;452540;LA Bachelor Oberst. / Sekundarst. II, berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzst.;48
449;153040;LA Master Grundschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;49
450;250440;LA Master Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;50
451;600540;Diplom (FH) - Ergänzungs-, Erweiterungs- und Zusatzstudium;51
452;156040;LA Master Grundstufe / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;52
455;201540;LA Master Sekundarstufe I / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;55
457;203040;LA Master Grundschulen / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;57
458;251540;LA Master Realschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;58
459;604040;Sonstiger FH - Abschluss - Ergänzungs-, Erweiterungs- und Zusatzstudium;59
460;253040;LA Master Haupt- und Realsch./Unterst. und Mittelst. Gym. - Ergänzungs-, Erweiterungs- und Zusatzst.;60
461;254540;LA Master Mittelstufe / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;61
462;301540;LA Master Sekundarstufe II / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;62
463;353040;LA Master Oberst. / Sekundarst. II, allgemeinb. Schulen - Ergänzungs-, Erweiterungs- und Zusatzst.;63
464;351540;LA Master Gymnasien - Ergänzungs-, Erweiterungs- und Zusatzstudium;64
465;401540;LA Master Sonderschulen / Förderschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;65
466;451540;LA Master Berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;66
467;453040;LA Master Oberst. / Sekundarst. II, berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzst.;67
468;051040;Mehr-Fächer-Bachelor ohne Lehramtsoption - Ergänzungs-, Erweiterungs- und Zusatzstudium;68
469;051540;Mehr-Fächer-Master - Ergänzungs-, Erweiterungs- und Zusatzstudium;69
472;552040;Privatmusiklehrerprüfung - Ergänzungs-, Erweiterungs- und Zusatzstudium;72
474;553040;Kirchenmusikprüfung B - Ergänzungs-, Erweiterungs- und Zusatzstudium;74
475;550540;Diplom (KH) - Ergänzungs-, Erweiterungs- und Zusatzstudium;75
477;555040;Kunstpädagogische Prüfung - Ergänzungs-, Erweiterungs- und Zusatzstudium;77
478;057540;Master (U) - Lehrer - Ergänzungs-, Erweiterungs- und Zusatzstudium;78
480;555540;Sonstiger künstlerischer Abschluss - Ergänzungs-, Erweiterungs- und Zusatzstudium;80
482;058540;Bachelor an Universitäten - Ergänzungs-, Erweiterungs- und Zusatzstudium;82
484;602540;Bachelor an Fachhochschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;84
488;059540;Master an Universitäten (Abschlussprüfung vorausge.) - Ergänzungs-, Erweiterungs- und Zusatzstudium;88
489;557040;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Ergänzungs-, Erweiterungs- und Zusatzs;89
490;603540;Master an Fachhochschulen (Abschlusspr. vorausge.) - Ergänzungs-, Erweiterungs- und Zusatzstudium;90
494;650540;Abschlusszeugnis / Zertifikat - Ergänzungs-, Erweiterungs- und Zusatzstudium;94
495;651040;Sonstiger Abschluss in Deutschland - Ergänzungs-, Erweiterungs- und Zusatzstudium;95
496;651540;Abschlussprüfung im Ausland - Ergänzungs-, Erweiterungs- und Zusatzstudium;96
498;200240;LA Bachelor Grund- und Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;98
499;200440;LA Master Grund- und Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;99
506;100550;Promotion (Abschlussprüfung vorausgesetzt) - Promotion;06
507;102050;Promotion ohne vorausgesetzte Abschlussprüfung - Promotionsstudium;07
591;101550;Promotion (Abschlussprüfung vorausgesetzt) - Strukturiertes Promotionsstudium;91
592;101050;Promotion (Abschlussprüfung vorausgesetzt) - Promotion nach FH-Abschluss bzw. wiss. Kurzstudium;92
596;651550;Abschlussprüfung im Ausland - Promotionsstudium;96
601;051260;Mehr-Fächer-Bachelor mit Lehramtsoption ? Weiterbildungsstudium;01
602;050560;Magister - Weiterbildungsstudium;02
608;053060;Staatsexamen / 1. Staatsprüfung - Weiterbildungsstudium;08
611;054560;Diplom (U) - Weiterbildungsstudium;11
629;500560;Sonstige Staatsprüfungen nach Schularten / Schulstufen - Weiterbildungsstudium;29
630;480560;LA Master (soweit keine Differenzierung möglich) - Weiterbildungsstudium;30
631;470560;LA Bachelor (soweit keine Differenzierung möglich) - Weiterbildungsstudium;31
649;153060;LA Master Grundschulen - Weiterbildungsstudium;49
650;250460;LA Master Hauptschulen - Weiterbildungsstudium;50
651;600560;Diplom (FH) - Weiterbildungsstudium;51
652;156060;LA Master Grundstufe / Primarstufe - Weiterbildungsstudium;52
655;201560;LA Master Sekundarstufe I / Primarstufe - Weiterbildungsstudium;55
657;203060;LA Master Grundschulen / Sekundarstufe I - Weiterbildungsstudium;57
658;251560;LA Master Realschulen - Weiterbildungsstudium;58
659;604060;Sonstiger FH - Abschluss - Weiterbildungsstudium;59
660;253060;LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Weiterbildungsstudium;60
661;254560;LA Master Mittelstufe / Sekundarstufe I - Weiterbildungsstudium;61
662;301560;LA Master Sekundarstufe II / Sekundarstufe I - Weiterbildungsstudium;62
663;353060;LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Weiterbildungsstudium;63
664;351560; LA Master Gymnasium - Weiterbildungsstudium ;64
665;401560;LA Master Sonderschulen / Förderschulen - Weiterbildungsstudium;65
666;451560;LA Master Berufliche Schulen - Weiterbildungsstudium;66
667;453060;LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Weiterbildungsstudium;67
668;051060;Mehr-Fächer-Bachelor ohne Lehramtsoption - Weiterbildungsstudium;68
669;051560;Mehr-Fächer-Master - Weiterbildungsstudium;69
680;555560;Sonstiger künstlerischer Abschluss - Weiterbildungsstudium;80
682;058560;Bachelor an Universitäten - Weiterbildungsstudium;82
684;602560;Bachelor an Fachhochschulen - Weiterbildungsstudium;84
688;059560;Master an Universitäten (Abschlussprüfung vorausgesetzt) - Weiterbildungsstudium;88
689;557060;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Weiterbildungstudium;89
690;603560;Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Weiterbildungsstudium;90
694;650560;Abschlusszeugnis / Zertifikat - Weiterbildungsstudium;94
695;651060;Sonstiger Abschluss in Deutschland - Weiterbildungsstudium;95
696;651560;Abschlussprüfung im Ausland - Weiterbildungsstudium;96
699;200460;LA Master Grund- und Hauptschulen - Weiterbildungsstudium;99
730;480570;LA Master (soweit keine Differenzierung möglich) - Konsekutives Masterstudium;30
749;153070;LA Master Grundschulen - Konsekutives Masterstudium;49
750;250470;LA Master Hauptschulen - Konsekutives Masterstudium;50
752;156070;LA Master Grundstufe / Primarstufe - Konsekutives Masterstudium;52
755;201570;LA Master Sekundarstufe I / Primarstufe - Konsekutives Masterstudium;55
757;203070;LA Master Grundschulen / Sekundarstufe I - Konsekutives Masterstudium;57
758;251570;LA Master Realschulen - Konsekutives Masterstudium;58
760;253070;LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Konsekutives Masterstudiu;60
761;254570;LA Master Mittelstufe / Sekundarstufe I - Konsekutives Masterstudium;61
762;301570;LA Master Sekundarstufe II / Sekundarstufe I - Konsekutives Masterstudium;62
763;353070;LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Konsekutives Masterstudium;63
764;351570;LA Master Gymnasien - Konsekutives Masterstudium;64
765;401570;LA Master Sonderschulen / Förderschulen - Konsekutives Masterstudium;65
766;451570;LA Master Berufliche Schulen - Konsekutives Masterstudium;66
767;453070;LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Konsekutives Masterstudium;67
769;051570;Mehr-Fächer-Master - Konsekutives Masterstudium;69
778;057570;Master (U)-Lehrer - Konsekutives Masterstudium;78
788;059570;Master an Universitäten (Abschlussprüfung vorausgesetzt) - Konsekutives Masterstudium;88
789;557070;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Konsekutives Masterstudium;89
790;603570;Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Konsekutives Masterstudium;90
796;651570;Abschlussprüfung im Ausland - Konsekutives Masterstudium;96
799;200470;LA Master Grund- und Hauptschulen - Konsekutives Masterstudium;99
801;051280;Mehr-Fächer-Bachelor mit Lehramtsoption - Weiterstudium bzw. Wiederholung zur Notenverbesserung;01
802;050580;Magister - Weiterstudium bzw. Wiederholung zur Notenverbesserung;02
803;052080;Lizentiat - Weiterstudium bzw. Wiederholung zur Notenverbesserung;03
804;052580;Kirchliche Prüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;04
805;056580;Akad. geprüfter Übersetzer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;05
807;102080;Promotion ohne vorausgesetzte Abschlussprüfung - Weiterst. bzw. Wiederholung zur Notenverbesserung;07
808;053080;Staatsexamen / 1. Staatsprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;08
809;053580;Staatsexamen (einphasige Ausbildung) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;09
810;054080;Fakultätsprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;10
811;054580;Diplom (U) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;11
812;055580;Diplom (U) - Dolmetscher - Weiterstudium bzw. Wiederholung zur Notenverbesserung;12
813;056080;Diplom (U) - Übersetzer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;13
814;055080;Diplom I (U-GH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;14
815;152580;LA Bachelor Grundschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;15
816;250280;LA Bachelor Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;16
817;059980;Abschlussprüfung ohne akad. Grad - Weiterstudium bzw. Wiederholung zur Notenverbesserung;17
818;058080;Diplom (U) - Lehrer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;18
819;155580;LA Bachelor Grundstufe / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;19
820;200080;LA Grund- und Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20
821;152080;LA Grundschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;21
822;250080;LA Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;22
823;250580;LA Realschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;23
824;252080;LA Haupt- und Realsch. / Unterst. und Mittelst. Gym. - Weiterst. bzw. Wiederh. zur Notenverbesserung;24
825;350580;LA Gymnasien - Weiterstudium bzw. Wiederholung zur Notenverbesserung;25
826;400580;LA Sonderschulen / Förderschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;26
827;450580;LA Berufliche Schulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;27
828;200580;LA Sekundarstufe I / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;28
829;500580;Sonstige Staatsprüfungen nach Schularten / Schulst. - Weiterst. bzw. Wiederh. zur Notenverbesserung;29
830;480580;LA Master (soweit keine Differenzierung möglich) - Weiterst. bzw. Wiederh. zur Notenverbesserung;30
831;470580;LA Bachelor (soweit keine Differenzierung möglich) - Weiterst. bzw. Wiederh. zur Notenverbesserung;31
832;201080;LA Bachelor Sekundarstufe I / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;32
833;202580;LA Bachelor Grundschulen / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;33
834;251080;LA Bachelor Realschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;34
835;252580;LA Bachelor Haupt- u. Realsch./Unterst. u. Mittelst. Gymnasien-Weiterst. bzw. Wiederh. z. Notenverb.;35
836;254080;LA Bachelor Mittelstufe / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;36
837;301080;LA Bachelor Sekundarst. II / Sekundarst. I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;37
838;351080;LA Bachelor Gymnasien - Weiterstudium bzw. Wiederholung zur Notenverbesserung;38
839;352580;LA Bachelor Oberst. / Sekundarst. II, allgemeinb. Schulen - Weiterst. bzw. Wiederh. zur Notenverb.;39
840;202080;LA Grundschulen / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;40
841;300580;LA Sekundarstufe II / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;41
842;155080;LA Grundstufe / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;42
843;253580;LA Mittelstufe / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;43
844;352080;LA Oberst. / Sekundarst. II, allgemeinb. Schulen - Weiterst. bzw. Wiederholung zur Notenverbesserung;44
845;452080;LA Oberst. / Sekundarst. II, berufliche Schulen - Weiterst. bzw. Wiederholung zur Notenverbesserung;45
846;401080;LA Bachelor Sonderschulen / Förderschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;46
847;451080;LA Bachelor Berufliche Schulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;47
848;452580;LA Bachelor Oberst. / Sekundarst. II, berufliche Schulen - Weiterst. bzw. Wiederh. zur Notenverb.;48
849;153080;LA Master Grundschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;49
850;250480;LA Master Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;50
851;600580;Diplom (FH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;51
852;156080;LA Master Grundstufe / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;52
853;601080;Diplom (FH) - Dolmetscher - Weiterstudium bzw. Wiederholung zur Notenverbesserung;53
854;601580;Diplom (FH) - Übersetzer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;54
855;201580;LA Master Sekundarstufe I / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;55
856;602080;Staatl. Laufbahnprüfung (VerwFH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;56
857;203080;LA Master Grundschulen / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;57
858;251580;LA Master Realschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;58
859;604080;Sonstiger FH - Abschluss - Weiterstudium bzw. Wiederholung zur Notenverbesserung;59
860;253080;LA Master Haupt- und Realsch./Unterst. und Mittelst. Gym.-Weiterst. bzw. Wiederh. zur Notenverb.;60
861;254580;LA Master Mittelstufe / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;61
862;301580;LA Master Sekundarst. II / Sekundarst. I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;62
863;353080;LA Master Oberst. / Sekundarst. II, allgemeinb. Schulen - Weiterst. bzw. Wiederh. zur Notenverb.;63
864;351580;LA Master Gymnasien - Weiterstudium bzw. Wiederholung zur Notenverbesserung;64
865;401580;LA Master Sonderschulen / Förderschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;65
866;451580;LA Master Berufliche Schulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;66
867;453080;LA Master Oberst. / Sekundarst. II, berufliche Schulen - Weiterst. bzw. Wiederholung zur Notenverb.;67
868;051080;Mehr-Fächer-Bachelor ohne Lehramtsoption - Weiterstudium bzw. Wiederholung zur Notenverbesserung;68
869;051580;Mehr-Fächer-Master - Weiterstudium bzw. Wiederholung zur Notenverbesserung;69
870;554080;Staatl. Prüfung für künstlerische Abschlüsse - Weiterstudium bzw. Wiederholung zur Notenverbesserung;70
871;551580;Bühnen- / Konzert- / Opernreifeprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;71
872;552080;Privatmusiklehrerprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;72
873;552580;Kirchenmusikprüfung A - Weiterstudium bzw. Wiederholung zur Notenverbesserung;73
874;553080;Kirchenmusikprüfung B - Weiterstudium bzw. Wiederholung zur Notenverbesserung;74
875;550580;Diplom (KH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;75
876;554580;Meisterschüler - Weiterstudium bzw. Wiederholung zur Notenverbesserung;76
877;555080;Kunstpädagogische Prüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;77
878;057580;Master (U) - Lehrer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;78
879;553580;Solistenprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;79
880;555580;Sonstiger künstlerischer Abschluss - Weiterstudium bzw. Wiederholung zur Notenverbesserung;80
881;551080;Akademiebrief (KH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;81
882;058580;Bachelor an Universitäten - Weiterstudium bzw. Wiederholung zur Notenverbesserung;82
883;556080;Bachelor an Kunsthochschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;83
884;602580;Bachelor an Fachhochschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;84
888;059580;Master an Universitäten (Abschlusspr. vorausge.) - Weiterst. bzw. Wiederholung zur Notenverbesserung;88
889;557080;Master an Kunsthochschulen (Abschlussp. vorausge.) - Weiterst. bzw. Wiederh. zur Notenverbesserung;89
890;603580;Master an Fachhochschulen (Abschlusspr. vorausge.) - Weiterst. bzw. Wiederh. zur Notenverbesserung;90
893;057080;Bachelor (U) - Lehrer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;93
894;650580;Abschlusszeugnis / Zertifikat - Weiterstudium bzw. Wiederholung zur Notenverbesserung;94
895;651080;Sonstiger Abschluss in Deutschland - Weiterstudium bzw. Wiederholung zur Notenverbesserung;95
898;200280;LA Bachelor Grund- und Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;98
899;200480;LA Master Grund- und Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;99
997;652090;Keine Abschlussprüfung möglich bzw. angestrebt - Kein Abschluss;97
101;051210;Mehr-Fächer-Bachelor mit Lehramtsoption - Erststudium;20102;99999;01;
102;050510;Magister - Erststudium;20072;99999;02;
103;052010;Lizentiat - Erststudium;20072;99999;03;
104;052510;Kirchliche Prüfung - Erststudium;20072;99999;04;
105;056510;Akad. geprüfter Übersetzer - Erststudium;20072;99999;05;
107;102010;Promotion ohne vorausgesetzte Abschlussprüfung - Erststudium;20072;99999;07;
108;053010;Staatsexamen / 1. Staatsprüfung - Erststudium;20072;99999;08;
109;053510;Staatsexamen (einphasige Ausbildung) - Erststudium;20072;99999;09;
110;054010;Fakultätsprüfung - Erststudium;20072;99999;10;
111;054510;Diplom (U) - Erststudium;20072;99999;11;
112;055510;Diplom (U) - Dolmetscher - Erststudium;20072;99999;12;
113;056010;Diplom (U) - Übersetzer - Erststudium;20072;99999;13;
114;055010;Diplom I (U-GH) - Erststudium;20072;99999;14;
115;152510;LA Bachelor Grundschulen - Erststudium;20072;99999;15;
116;250210;LA Bachelor Hauptschulen - Erststudium;20222;99999;16;
117;059910;Abschlussprüfung ohne akad. Grad - Erststudium;20072;99999;17;
118;058010;Diplom (U) - Lehrer - Erststudium;20072;99999;18;
119;155510;LA Bachelor Grundstufe / Primarstufe - Erststudium;20072;99999;19;
120;200010;LA Grund- und Hauptschulen - Erststudium;20222;99999;20;
121;152010;LA Grundschulen - Erststudium;20072;99999;21;
122;250010;LA Hauptschulen - Erststudium;20222;99999;22;
123;250510;LA Realschulen - Erststudium;20072;99999;23;
124;252010;LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Erststudium;20072;99999;24;
125;350510;LA Gymnasien - Erststudium;20072;99999;25;
126;400510;LA Sonderschulen / Förderschulen - Erststudium;20072;99999;26;
127;450510;LA Berufliche Schulen - Erststudium;20072;99999;27;
128;200510;LA Sekundarstufe I / Primarstufe - Erststudium;20072;99999;28;
129;500510;Sonstige Staatsprüfungen nach Schularten / Schulstufen - Erststudium;20072;99999;29;
131;470510;LA Bachelor (soweit keine Differenzierung möglich) - Erststudium;20072;99999;31;
132;201010;LA Bachelor Sekundarstufe I / Primarstufe - Erststudium;20072;99999;32;
133;202510;LA Bachelor Grundschulen / Sekundarstufe I - Erststudium;20072;99999;33;
134;251010;LA Bachelor Realschulen - Erststudium;20072;99999;34;
135;252510;LA Bachelor Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Erststudium;20072;99999;35;
136;254010;LA Bachelor Mittelstufe / Sekundarstufe I - Erststudium;20072;99999;36;
137;301010;LA Bachelor Sekundarstufe II / Sekundarstufe I - Erststudium;20072;99999;37;
138;351010;LA Bachelor Gymnasien - Erststudium;20072;99999;38;
139;352510;LA Bachelor Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Erststudium;20072;99999;39;
140;202010;LA Grundschulen / Sekundarstufe I - Erststudium;20072;99999;40;
141;300510;LA Sekundarstufe II / Sekundarstufe I - Erststudium;20072;99999;41;
142;155010;LA Grundstufe / Primarstufe - Erststudium;20072;99999;42;
143;253510;LA Mittelstufe / Sekundarstufe I - Erststudium;20072;99999;43;
144;352010;LA Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Erststudium;20072;99999;44;
145;452010;LA Oberstufe / Sekundarstufe II, berufliche Schulen - Erststudium;20072;99999;45;
146;401010;LA Bachelor Sonderschulen / Förderschulen - Erststudium;20072;99999;46;
147;451010;LA Bachelor Berufliche Schulen - Erststudium;20072;99999;47;
148;452510;LA Bachelor Oberstufe / Sekundarstufe II, berufliche Schulen - Erststudium;20072;99999;48;
151;600510;Diplom (FH) - Erststudium;20072;99999;51;
153;601010;Diplom (FH) - Dolmetscher - Erststudium;20072;99999;53;
154;601510;Diplom (FH) - Übersetzer - Erststudium;20072;99999;54;
156;602010;Staatl. Laufbahnprüfung (VerwFH) - Erststudium;20072;99999;56;
159;604010;Sonstiger FH - Abschluss - Erststudium;20072;99999;59;
168;051010;Mehr-Fächer-Bachelor ohne Lehramtsoption - Erststudium;20102;99999;68;
170;554010;Staatl. Prüfung für künstlerische Abschlüsse - Erststudium;20072;99999;70;
171;551510;Bühnen- / Konzert- / Opernreifeprüfung - Erststudium;20072;99999;71;
172;552010;Privatmusiklehrerprüfung - Erststudium;20072;99999;72;
173;552510;Kirchenmusikprüfung A - Erststudium;20072;99999;73;
174;553010;Kirchenmusikprüfung B - Erststudium;20072;99999;74;
175;550510;Diplom (KH) - Erststudium;20072;99999;75;
177;555010;Kunstpädagogische Prüfung - Erststudium;20072;99999;77;
179;553510;Solistenprüfung - Erststudium;20072;99999;79;
180;555510;Sonstiger künstlerischer Abschluss - Erststudium;20072;99999;80;
181;551010;Akademiebrief (KH) - Erststudium;20072;99999;81;
182;058510;Bachelor an Universitäten - Erststudium;20072;99999;82;
183;556010;Bachelor an Kunsthochschulen - Erststudium;20072;99999;83;
184;602510;Bachelor an Fachhochschulen - Erststudium;20072;99999;84;
186;651710;Bachelor o. Ä. noch nicht abgeschlossen - Erststudium;20122;99999;86;
187;651310;Abschlüsse von Berufsakademien, die ersten berufsb. Abschlüssen gleichgestellt sind - Erststudium;20112;99999;87;
193;057010;Bachelor (U) - Lehrer - Erststudium;20072;99999;93;
194;650510;Abschlusszeugnis / Zertifikat - Erststudium;20072;99999;94;
195;651010;Sonstiger Abschluss in Deutschland - Erststudium;20072;99999;95;
196;651510;Abschlussprüfung im Ausland - Erststudium;20072;99999;96;
198;200210;LA Bachelor Grund- und Hauptschulen - Erststudium;20222;99999;98;
201;051220;Mehr-Fächer-Bachelor mit Lehramtsoption - Zweitstudium;20102;99999;01;
202;050520;Magister - Zweitstudium;20072;99999;02;
203;052020;Lizentiat - Zweitstudium;20072;99999;03;
204;052520;Kirchliche Prüfung - Zweitstudium;20072;99999;04;
205;056520;Akad. geprüfter Übersetzer - Zweitstudium;20072;99999;05;
208;053020;Staatsexamen / 1. Staatsprüfung - Zweitstudium;20072;99999;08;
209;053520;Staatsexamen (einphasige Ausbildung) - Zweitstudium;20072;99999;09;
210;054020;Fakultätsprüfung - Zweitstudium;20072;99999;10;
211;054520;Diplom (U) - Zweitstudium;20072;99999;11;
212;055520;Diplom (U) - Dolmetscher - Zweitstudium;20072;99999;12;
213;056020;Diplom (U) - Übersetzer - Zweitstudium;20072;99999;13;
214;055020;Diplom I (U-GH) - Zweitstudium;20072;99999;14;
215;152520;LA Bachelor Grundschulen - Zweitstudium;20072;99999;15;
216;250220;LA Bachelor Hauptschulen - Zweitstudium;20222;99999;16;
218;058020;Diplom (U) - Lehrer - Zweitstudium;20072;99999;18;
219;155520;LA Bachelor Grundstufe / Primarstufe - Zweitstudium;20072;99999;19;
220;200020;LA Grund- und Hauptschulen - Zweitstudium;20222;99999;20;
221;152020;LA Grundschulen - Zweitstudium;20072;99999;21;
222;250020;LA Hauptschulen - Zweitstudium;20222;99999;22;
223;250520;LA Realschulen - Zweitstudium;20072;99999;23;
224;252020;LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Zweitstudium;20072;99999;24;
225;350520;LA Gymnasien - Zweitstudium;20072;99999;25;
226;400520;LA Sonderschulen / Förderschulen - Zweitstudium;20072;99999;26;
227;450520;LA Berufliche Schulen - Zweitstudium;20072;99999;27;
228;200520;LA Sekundarstufe I / Primarstufe - Zweitstudium;20072;99999;28;
229;500520;Sonstige Staatsprüfungen nach Schularten / Schulstufen - Zweitstudium;20072;99999;29;
230;480520;LA Master (soweit keine Differenzierung möglich) - Zweitstudium;20072;99999;30;
231;470520;LA Bachelor (soweit keine Differenzierung möglich) - Zweitstudium;20072;99999;31;
232;201020;LA Bachelor Sekundarstufe I / Primarstufe - Zweitstudium;20072;99999;32;
233;202520;LA Bachelor Grundschulen / Sekundarstufe I - Zweitstudium;20072;99999;33;
234;251020;LA Bachelor Realschulen - Zweitstudium;20072;99999;34;
235;252520;LA Bachelor Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Zweitstudium;20072;99999;35;
236;254020;LA Bachelor Mittelstufe / Sekundarstufe I - Zweitstudium;20072;99999;36;
237;301020;LA Bachelor Sekundarstufe II / Sekundarstufe I - Zweitstudium;20072;99999;37;
238;351020;LA Bachelor Gymnasien - Zweitstudium;20072;99999;38;
239;352520;LA Bachelor Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Zweitstudium;20072;99999;39;
240;202020;LA Grundschulen / Sekundarstufe I - Zweitstudium;20072;99999;40;
241;300520;LA Sekundarstufe II / Sekundarstufe I - Zweitstudium;20072;99999;41;
242;155020;LA Grundstufe / Primarstufe - Zweitstudium;20072;99999;42;
243;253520;LA Mittelstufe / Sekundarstufe I - Zweitstudium;20072;99999;43;
244;352020;LA Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Zweitstudium;20072;99999;44;
245;452020;LA Oberstufe / Sekundarstufe II, berufliche Schulen - Zweitstudium;20072;99999;45;
246;401020;LA Bachelor Sonderschulen / Förderschulen - Zweitstudium;20072;99999;46;
247;451020;LA Bachelor Berufliche Schulen - Zweitstudium;20072;99999;47;
248;452520;LA Bachelor Oberstufe / Sekundarstufe II, berufliche Schulen - Zweitstudium;20072;99999;48;
249;153020;LA Master Grundschulen - Zweitstudium;20072;99999;49;
250;250420;LA Master Hauptschulen - Zweitstudium;20222;99999;50;
251;600520;Diplom (FH) - Zweitstudium;20072;99999;51;
252;156020;LA Master Grundstufe / Primarstufe - Zweitstudium;20072;99999;52;
253;601020;Diplom (FH) - Dolmetscher - Zweitstudium;20072;99999;53;
254;601520;Diplom (FH) - Übersetzer - Zweitstudium;20072;99999;54;
255;201520;LA Master Sekundarstufe I / Primarstufe - Zweitstudium;20072;99999;55;
256;602020;Staatl. Laufbahnprüfung (VerwFH) - Zweitstudium;20072;99999;56;
257;203020;LA Master Grundschulen / Sekundarstufe I - Zweitstudium;20072;99999;57;
258;251520;LA Master Realschulen - Zweitstudium;20072;99999;58;
259;604020;Sonstiger FH - Abschluss - Zweitstudium;20072;99999;59;
260;253020;LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Zweitstudium;20072;99999;60;
261;254520;LA Master Mittelstufe / Sekundarstufe I - Zweitstudium;20072;99999;61;
262;301520;LA Master Sekundarstufe II / Sekundarstufe I - Zweitstudium;20072;99999;62;
263;353020;LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Zweitstudium;20072;99999;63;
264;351520;LA Master Gymnasien - Zweitstudium;20072;99999;64;
265;401520;LA Master Sonderschulen / Förderschulen - Zweitstudium;20072;99999;65;
266;451520;LA Master Berufliche Schulen - Zweitstudium;20072;99999;66;
267;453020;LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Zweitstudium;20072;99999;67;
268;051020;Mehr-Fächer-Bachelor ohne Lehramtsoption - Zweitstudium;20102;99999;68;
269;051520;Mehr-Fächer-Master - Zweitstudium;20102;99999;69;
270;554020;Staatl. Prüfung für künstlerische Abschlüsse - Zweitstudium;20072;99999;70;
271;551520;Bühnen- / Konzert- / Opernreifeprüfung - Zweitstudium;20072;99999;71;
272;552020;Privatmusiklehrerprüfung - Zweitstudium;20072;99999;72;
273;552520;Kirchenmusikprüfung A - Zweitstudium;20072;99999;73;
274;553020;Kirchenmusikprüfung B - Zweitstudium;20072;99999;74;
275;550520;Diplom (KH) - Zweitstudium;20072;99999;75;
276;554520;Meisterschüler - Zweitstudium;20072;99999;76;
277;555020;Kunstpädagogische Prüfung - Zweitstudium;20072;99999;77;
278;057520;Master (U) - Lehrer - Zweitstudium;20072;99999;78;
279;553520;Solistenprüfung - Zweitstudium;20072;99999;79;
280;555520;Sonstiger künstlerischer Abschluss - Zweitstudium;20072;99999;80;
281;551020;Akademiebrief (KH) - Zweitstudium;20072;99999;81;
282;058520;Bachelor an Universitäten - Zweitstudium;20072;99999;82;
283;556020;Bachelor an Kunsthochschulen - Zweitstudium;20072;99999;83;
284;602520;Bachelor an Fachhochschulen - Zweitstudium;20072;99999;84;
288;059520;Master an Universitäten (Abschlussprüfung vorausgesetzt) - Zweitstudium;20072;99999;88;
289;557020;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Zweitstudium;20072;99999;89;
290;603520;Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Zweitstudium;20072;99999;90;
293;057020;Bachelor (U) - Lehrer - Zweitstudium;20072;99999;93;
294;650520;Abschlusszeugnis / Zertifikat - Zweitstudium;20072;99999;94;
295;651020;Sonstiger Abschluss in Deutschland - Zweitstudium;20072;99999;95;
296;651520;Abschlussprüfung im Ausland - Zweitstudium;20072;99999;96;
298;200220;LA Bachelor Grund- und Hauptschulen - Zweitstudium;20222;99999;98;
299;200420;LA Master Grund- und Hauptschulen - Zweitstudium;20222;99999;99;
301;051230;Mehr-Fächer-Bachelor mit Lehramtsoption - Aufbaustudium;20102;99999;01;
302;050530;Magister - Aufbaustudium;20072;99999;02;
303;052030;Lizentiat - Aufbaustudium;20072;99999;03;
308;053030;Staatsexamen / 1. Staatsprüfung - Aufbaustudium;20072;99999;08;
311;054530;Diplom (U) - Aufbaustudium;20072;99999;11;
317;059930;Abschlussprüfung ohne akad. Grad - Aufbaustudium;20072;99999;17;
323;250530;LA Realschulen - Aufbaustudium;20072;99999;23;
324;252030;LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Aufbaustudium;20072;99999;24;
325;350530;LA Gymnasien - Aufbaustudium;20072;99999;25;
326;400530;LA Sonderschulen / Förderschulen - Aufbaustudium;20072;99999;26;
329;500530;Sonstige Staatsprüfungen nach Schularten / Schulstufen - Aufbaustudium;20072;99999;29;
330;480530;LA Master (soweit keine Differenzierung möglich) - Aufbaustudium;20072;99999;30;
331;470530;LA Bachelor (soweit keine Differenzierung möglich) - Aufbaustudium;20072;99999;31;
349;153030;LA Master Grundschulen - Aufbaustudium;20092;99999;49;
350;250430;LA Master Hauptschulen - Aufbaustudium;20222;99999;50;
351;600530;Diplom (FH) - Aufbaustudium;20072;99999;51;
352;156030;LA Master Grundstufe / Primarstufe - Aufbaustudium;20092;99999;52;
353;601030;Diplom (FH) - Dolmetscher - Aufbaustudium;20072;99999;53;
354;601530;Diplom (FH) - Übersetzer - Aufbaustudium;20072;99999;54;
355;201530;LA Master Sekundarstufe I / Primarstufe - Aufbaustudium;20092;99999;55;
357;203030;LA Master Grundschulen / Sekundarstufe I - Aufbaustudium;20092;99999;57;
358;251530;LA Master Realschulen - Aufbaustudium;20092;99999;58;
359;604030;Sonstiger FH - Abschluss - Aufbaustudium;20072;99999;59;
360;253030;LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Aufbaustudium;20092;99999;60;
361;254530;LA Master Mittelstufe / Sekundarstufe I - Aufbaustudium;20092;99999;61;
362;301530;LA Master Sekundarstufe II / Sekundarstufe I - Aufbaustudium;20092;99999;62;
363;353030;LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Aufbaustudium;20092;99999;63;
364;351530;LA Master Gymnasium - Aufbaustudium;20092;99999;64;
365;401530;LA Master Sonderschulen / Förderschulen - Aufbaustudium;20092;99999;65;
366;451530;LA Master Berufliche Schulen - Aufbaustudium;20082;99999;66;
367;453030;LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Aufbaustudium;20092;99999;67;
368;051030;Mehr-Fächer-Bachelor ohne Lehramtsoption - Aufbaustudium;20102;99999;68;
369;051530;Mehr-Fächer-Master - Aufbaustudium;20102;99999;69;
371;551530;Bühnen- / Konzert- / Opernreifeprüfung - Aufbaustudium;20072;99999;71;
372;552030;Privatmusiklehrerprüfung - Aufbaustudium;20072;99999;72;
373;552530;Kirchenmusikprüfung A - Aufbaustudium;20072;99999;73;
375;550530;Diplom (KH) - Aufbaustudium;20072;99999;75;
376;554530;Meisterschüler - Aufbaustudium;20072;99999;76;
378;057530;Master (U) - Lehrer - Aufbaustudium;20102;99999;78;
379;553530;Solistenprüfung - Aufbaustudium;20072;99999;79;
380;555530;Sonstiger künstlerischer Abschluss - Aufbaustudium;20072;99999;80;
381;551030;Akademiebrief (KH) - Aufbaustudium;20102;99999;81;
388;059530;Master an Universitäten (Abschlussprüfung vorausgesetzt) - Aufbaustudium;20072;99999;88;
389;557030;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Aufbaustudium;20072;99999;89;
390;603530;Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Aufbaustudium;20072;99999;90;
394;650530;Abschlusszeugnis / Zertifikat - Aufbaustudium;20072;99999;94;
395;651030;Sonstiger Abschluss in Deutschland - Aufbaustudium;20072;99999;95;
396;651530;Abschlussprüfung im Ausland - Aufbaustudium;20072;99999;96;
399;200430;LA Master Grund- und Hauptschulen - Aufbaustudium;20222;99999;99;
401;051240;Mehr-Fächer-Bachelor mit Lehramtsoption - Ergänzungs-, Erweiterungs- und Zusatzstudium;20212;99999;01;
402;050540;Magister - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;02;
403;052040;Lizentiat - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;03;
405;056540;Akad. geprüfter Übersetzer - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;05;
411;054540;Diplom (U) - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;11;
412;055540;Diplom (U) - Dolmetscher - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;12;
413;056040;Diplom (U) - Übersetzer - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;13;
415;152540;LA Bachelor Grundschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;15;
416;250240;LA Bachelor Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20222;99999;16;
418;058040;Diplom (U) - Lehrer - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;18;
419;155540;LA Bachelor Grundstufe / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;19;
420;200040;LA Grund- und Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20222;99999;20;
421;152040;LA Grundschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;21;
422;250040;LA Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20222;99999;22;
423;250540;LA Realschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;23;
424;252040;LA Haupt- und Realsch. / Unterst. und Mittelst. Gym. - Ergänzungs-, Erweiterungs- und Zusatzstud.;20072;99999;24;
425;350540;LA Gymnasien - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;25;
426;400540;LA Sonderschulen / Förderschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;26;
427;450540;LA Berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;27;
428;200540;LA Sekundarstufe I / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;28;
429;500540;Sonstige Staatsprüfungen nach Schularten / Schulst. - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;29;
430;480540;LA Master (soweit keine Differenzierung möglich) - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;30;
431;470540;LA Bachelor (soweit keine Differenzierung möglich) - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;31;
432;201040;LA Bachelor Sekundarstufe I / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;32;
433;202540;LA Bachelor Grundschulen / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;33;
434;251040;LA Bachelor Realschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;34;
435;252540;LA Bachelor Haupt- u. Realsch./Unterst. u. Mittelst. Gym.-Ergänzungs-, Erweiterungs- und Zusatzstud.;20072;99999;35;
436;254040;LA Bachelor Mittelstufe / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;36;
437;301040;LA Bachelor Sekundarstufe II / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;37;
438;351040;LA Bachelor Gymnasien - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;38;
439;352540;LA Bachelor Oberst. / Sekundarst. II, allgemeinb. Schulen - Ergänzungs-, Erweiterungs- und Zusatzst.;20072;99999;39;
440;202040;LA Grundschulen / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;40;
441;300540;LA Sekundarstufe II / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;41;
442;155040;LA Grundstufe / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;42;
443;253540;LA Mittelstufe / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;43;
444;352040;LA Oberst. / Sekundarst. II, allgemeinb. Schulen - Ergänzungs-, Erweiterungs- und Zusatzst.;20072;99999;44;
445;452040;LA Oberstufe / Sekundarstufe II, berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;45;
446;401040;LA Bachelor Sonderschulen / Förderschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;46;
447;451040;LA Bachelor Berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;47;
448;452540;LA Bachelor Oberst. / Sekundarst. II, berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzst.;20072;99999;48;
449;153040;LA Master Grundschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;49;
450;250440;LA Master Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20222;99999;50;
451;600540;Diplom (FH) - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;51;
452;156040;LA Master Grundstufe / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;52;
455;201540;LA Master Sekundarstufe I / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;55;
457;203040;LA Master Grundschulen / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;57;
458;251540;LA Master Realschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;58;
459;604040;Sonstiger FH - Abschluss - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;59;
460;253040;LA Master Haupt- und Realsch./Unterst. und Mittelst. Gym. - Ergänzungs-, Erweiterungs- und Zusatzst.;20072;99999;60;
461;254540;LA Master Mittelstufe / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;61;
462;301540;LA Master Sekundarstufe II / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;62;
463;353040;LA Master Oberst. / Sekundarst. II, allgemeinb. Schulen - Ergänzungs-, Erweiterungs- und Zusatzst.;20072;99999;63;
464;351540;LA Master Gymnasien - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;64;
465;401540;LA Master Sonderschulen / Förderschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;65;
466;451540;LA Master Berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;66;
467;453040;LA Master Oberst. / Sekundarst. II, berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzst.;20072;99999;67;
468;051040;Mehr-Fächer-Bachelor ohne Lehramtsoption - Ergänzungs-, Erweiterungs- und Zusatzstudium;20192;99999;68;
469;051540;Mehr-Fächer-Master - Ergänzungs-, Erweiterungs- und Zusatzstudium;20102;99999;69;
472;552040;Privatmusiklehrerprüfung - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;72;
474;553040;Kirchenmusikprüfung B - Ergänzungs-, Erweiterungs- und Zusatzstudium;20081;99999;74;
475;550540;Diplom (KH) - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;75;
477;555040;Kunstpädagogische Prüfung - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;77;
478;057540;Master (U) - Lehrer - Ergänzungs-, Erweiterungs- und Zusatzstudium;20122;99999;78;
480;555540;Sonstiger künstlerischer Abschluss - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;80;
482;058540;Bachelor an Universitäten - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;82;
484;602540;Bachelor an Fachhochschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;84;
488;059540;Master an Universitäten (Abschlussprüfung vorausge.) - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;88;
489;557040;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Ergänzungs-, Erweiterungs- und Zusatzs;20092;99999;89;
490;603540;Master an Fachhochschulen (Abschlusspr. vorausge.) - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;90;
494;650540;Abschlusszeugnis / Zertifikat - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;94;
495;651040;Sonstiger Abschluss in Deutschland - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;95;
496;651540;Abschlussprüfung im Ausland - Ergänzungs-, Erweiterungs- und Zusatzstudium;20072;99999;96;
498;200240;LA Bachelor Grund- und Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20222;99999;98;
499;200440;LA Master Grund- und Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium;20222;99999;99;
506;100550;Promotion (Abschlussprüfung vorausgesetzt) - Promotion;20072;99999;06;
507;102050;Promotion ohne vorausgesetzte Abschlussprüfung - Promotionsstudium;20072;99999;07;
591;101550;Promotion (Abschlussprüfung vorausgesetzt) - Strukturiertes Promotionsstudium;20072;99999;91;
592;101050;Promotion (Abschlussprüfung vorausgesetzt) - Promotion nach FH-Abschluss bzw. wiss. Kurzstudium;20072;99999;92;
596;651550;Abschlussprüfung im Ausland - Promotionsstudium;20072;99999;96;
601;051260;Mehr-Fächer-Bachelor mit Lehramtsoption – Weiterbildungsstudium;20102;99999;01;
602;050560;Magister - Weiterbildungsstudium;20072;99999;02;
608;053060;Staatsexamen / 1. Staatsprüfung - Weiterbildungsstudium;20072;99999;08;
611;054560;Diplom (U) - Weiterbildungsstudium;20072;99999;11;
629;500560;Sonstige Staatsprüfungen nach Schularten / Schulstufen - Weiterbildungsstudium;20072;99999;29;
630;480560;LA Master (soweit keine Differenzierung möglich) - Weiterbildungsstudium;20072;99999;30;
631;470560;LA Bachelor (soweit keine Differenzierung möglich) - Weiterbildungsstudium;20072;99999;31;
649;153060;LA Master Grundschulen - Weiterbildungsstudium;20092;99999;49;
650;250460;LA Master Hauptschulen - Weiterbildungsstudium;20222;99999;50;
651;600560;Diplom (FH) - Weiterbildungsstudium;20072;99999;51;
652;156060;LA Master Grundstufe / Primarstufe - Weiterbildungsstudium;20092;99999;52;
655;201560;LA Master Sekundarstufe I / Primarstufe - Weiterbildungsstudium;20092;99999;55;
657;203060;LA Master Grundschulen / Sekundarstufe I - Weiterbildungsstudium;20092;99999;57;
658;251560;LA Master Realschulen - Weiterbildungsstudium;20092;99999;58;
659;604060;Sonstiger FH - Abschluss - Weiterbildungsstudium;20072;99999;59;
660;253060;LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Weiterbildungsstudium;20092;99999;60;
661;254560;LA Master Mittelstufe / Sekundarstufe I - Weiterbildungsstudium;20092;99999;61;
662;301560;LA Master Sekundarstufe II / Sekundarstufe I - Weiterbildungsstudium;20092;99999;62;
663;353060;LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Weiterbildungsstudium;20092;99999;63;
664;351560; LA Master Gymnasium - Weiterbildungsstudium ;20092;99999;64;
665;401560;LA Master Sonderschulen / Förderschulen - Weiterbildungsstudium;20092;99999;65;
666;451560;LA Master Berufliche Schulen - Weiterbildungsstudium;20092;99999;66;
667;453060;LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Weiterbildungsstudium;20092;99999;67;
668;051060;Mehr-Fächer-Bachelor ohne Lehramtsoption - Weiterbildungsstudium;20102;99999;68;
669;051560;Mehr-Fächer-Master - Weiterbildungsstudium;20102;99999;69;
680;555560;Sonstiger künstlerischer Abschluss - Weiterbildungsstudium;20072;99999;80;
682;058560;Bachelor an Universitäten - Weiterbildungsstudium;20072;99999;82;
684;602560;Bachelor an Fachhochschulen - Weiterbildungsstudium;20072;99999;84;
688;059560;Master an Universitäten (Abschlussprüfung vorausgesetzt) - Weiterbildungsstudium;20072;99999;88;
689;557060;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Weiterbildungstudium;20072;99999;89;
690;603560;Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Weiterbildungsstudium;20072;99999;90;
694;650560;Abschlusszeugnis / Zertifikat - Weiterbildungsstudium;20072;99999;94;
695;651060;Sonstiger Abschluss in Deutschland - Weiterbildungsstudium;20072;99999;95;
696;651560;Abschlussprüfung im Ausland - Weiterbildungsstudium;20072;99999;96;
699;200460;LA Master Grund- und Hauptschulen - Weiterbildungsstudium;20222;99999;99;
730;480570;LA Master (soweit keine Differenzierung möglich) - Konsekutives Masterstudium;20092;99999;30;
749;153070;LA Master Grundschulen - Konsekutives Masterstudium;20092;99999;49;
750;250470;LA Master Hauptschulen - Konsekutives Masterstudium;20222;99999;50;
752;156070;LA Master Grundstufe / Primarstufe - Konsekutives Masterstudium;20092;99999;52;
755;201570;LA Master Sekundarstufe I / Primarstufe - Konsekutives Masterstudium;20092;99999;55;
757;203070;LA Master Grundschulen / Sekundarstufe I - Konsekutives Masterstudium;20092;99999;57;
758;251570;LA Master Realschulen - Konsekutives Masterstudium;20092;99999;58;
760;253070;LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Konsekutives Masterstudiu;20092;99999;60;
761;254570;LA Master Mittelstufe / Sekundarstufe I - Konsekutives Masterstudium;20092;99999;61;
762;301570;LA Master Sekundarstufe II / Sekundarstufe I - Konsekutives Masterstudium;20092;99999;62;
763;353070;LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Konsekutives Masterstudium;20092;99999;63;
764;351570;LA Master Gymnasien - Konsekutives Masterstudium;20092;99999;64;
765;401570;LA Master Sonderschulen / Förderschulen - Konsekutives Masterstudium;20092;99999;65;
766;451570;LA Master Berufliche Schulen - Konsekutives Masterstudium;20092;99999;66;
767;453070;LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Konsekutives Masterstudium;20092;99999;67;
769;051570;Mehr-Fächer-Master - Konsekutives Masterstudium;20102;99999;69;
778;057570;Master (U)-Lehrer - Konsekutives Masterstudium;20092;99999;78;
788;059570;Master an Universitäten (Abschlussprüfung vorausgesetzt) - Konsekutives Masterstudium;20092;99999;88;
789;557070;Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Konsekutives Masterstudium;20092;99999;89;
790;603570;Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Konsekutives Masterstudium;20092;99999;90;
796;651570;Abschlussprüfung im Ausland - Konsekutives Masterstudium;20092;99999;96;
799;200470;LA Master Grund- und Hauptschulen - Konsekutives Masterstudium;20222;99999;99;
801;051280;Mehr-Fächer-Bachelor mit Lehramtsoption - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20102;99999;01;
802;050580;Magister - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;02;
803;052080;Lizentiat - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;03;
804;052580;Kirchliche Prüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;04;
805;056580;Akad. geprüfter Übersetzer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;05;
807;102080;Promotion ohne vorausgesetzte Abschlussprüfung - Weiterst. bzw. Wiederholung zur Notenverbesserung;20072;99999;07;
808;053080;Staatsexamen / 1. Staatsprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;08;
809;053580;Staatsexamen (einphasige Ausbildung) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;09;
810;054080;Fakultätsprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;10;
811;054580;Diplom (U) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;11;
812;055580;Diplom (U) - Dolmetscher - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;12;
813;056080;Diplom (U) - Übersetzer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;13;
814;055080;Diplom I (U-GH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;14;
815;152580;LA Bachelor Grundschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;15;
816;250280;LA Bachelor Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20222;99999;16;
817;059980;Abschlussprüfung ohne akad. Grad - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;17;
818;058080;Diplom (U) - Lehrer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;18;
819;155580;LA Bachelor Grundstufe / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;19;
820;200080;LA Grund- und Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20222;99999;20;
821;152080;LA Grundschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;21;
822;250080;LA Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20222;99999;22;
823;250580;LA Realschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;23;
824;252080;LA Haupt- und Realsch. / Unterst. und Mittelst. Gym. - Weiterst. bzw. Wiederh. zur Notenverbesserung;20072;99999;24;
825;350580;LA Gymnasien - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;25;
826;400580;LA Sonderschulen / Förderschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;26;
827;450580;LA Berufliche Schulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;27;
828;200580;LA Sekundarstufe I / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;28;
829;500580;Sonstige Staatsprüfungen nach Schularten / Schulst. - Weiterst. bzw. Wiederh. zur Notenverbesserung;20072;99999;29;
830;480580;LA Master (soweit keine Differenzierung möglich) - Weiterst. bzw. Wiederh. zur Notenverbesserung;20072;99999;30;
831;470580;LA Bachelor (soweit keine Differenzierung möglich) - Weiterst. bzw. Wiederh. zur Notenverbesserung;20072;99999;31;
832;201080;LA Bachelor Sekundarstufe I / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;32;
833;202580;LA Bachelor Grundschulen / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;33;
834;251080;LA Bachelor Realschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;34;
835;252580;LA Bachelor Haupt- u. Realsch./Unterst. u. Mittelst. Gymnasien-Weiterst. bzw. Wiederh. z. Notenverb.;20072;99999;35;
836;254080;LA Bachelor Mittelstufe / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;36;
837;301080;LA Bachelor Sekundarst. II / Sekundarst. I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;37;
838;351080;LA Bachelor Gymnasien - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;38;
839;352580;LA Bachelor Oberst. / Sekundarst. II, allgemeinb. Schulen - Weiterst. bzw. Wiederh. zur Notenverb.;20072;99999;39;
840;202080;LA Grundschulen / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;40;
841;300580;LA Sekundarstufe II / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;41;
842;155080;LA Grundstufe / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;42;
843;253580;LA Mittelstufe / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;43;
844;352080;LA Oberst. / Sekundarst. II, allgemeinb. Schulen - Weiterst. bzw. Wiederholung zur Notenverbesserung;20072;99999;44;
845;452080;LA Oberst. / Sekundarst. II, berufliche Schulen - Weiterst. bzw. Wiederholung zur Notenverbesserung;20072;99999;45;
846;401080;LA Bachelor Sonderschulen / Förderschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;46;
847;451080;LA Bachelor Berufliche Schulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;47;
848;452580;LA Bachelor Oberst. / Sekundarst. II, berufliche Schulen - Weiterst. bzw. Wiederh. zur Notenverb.;20072;99999;48;
849;153080;LA Master Grundschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;49;
850;250480;LA Master Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20222;99999;50;
851;600580;Diplom (FH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;51;
852;156080;LA Master Grundstufe / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;52;
853;601080;Diplom (FH) - Dolmetscher - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;53;
854;601580;Diplom (FH) - Übersetzer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;54;
855;201580;LA Master Sekundarstufe I / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;55;
856;602080;Staatl. Laufbahnprüfung (VerwFH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;56;
857;203080;LA Master Grundschulen / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;57;
858;251580;LA Master Realschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;58;
859;604080;Sonstiger FH - Abschluss - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;59;
860;253080;LA Master Haupt- und Realsch./Unterst. und Mittelst. Gym.-Weiterst. bzw. Wiederh. zur Notenverb.;20072;99999;60;
861;254580;LA Master Mittelstufe / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;61;
862;301580;LA Master Sekundarst. II / Sekundarst. I - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;62;
863;353080;LA Master Oberst. / Sekundarst. II, allgemeinb. Schulen - Weiterst. bzw. Wiederh. zur Notenverb.;20072;99999;63;
864;351580;LA Master Gymnasien - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;64;
865;401580;LA Master Sonderschulen / Förderschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;65;
866;451580;LA Master Berufliche Schulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;66;
867;453080;LA Master Oberst. / Sekundarst. II, berufliche Schulen - Weiterst. bzw. Wiederholung zur Notenverb.;20072;99999;67;
868;051080;Mehr-Fächer-Bachelor ohne Lehramtsoption - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20102;99999;68;
869;051580;Mehr-Fächer-Master - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20102;99999;69;
870;554080;Staatl. Prüfung für künstlerische Abschlüsse - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;70;
871;551580;Bühnen- / Konzert- / Opernreifeprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;71;
872;552080;Privatmusiklehrerprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;72;
873;552580;Kirchenmusikprüfung A - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;73;
874;553080;Kirchenmusikprüfung B - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;74;
875;550580;Diplom (KH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;75;
876;554580;Meisterschüler - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;76;
877;555080;Kunstpädagogische Prüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;77;
878;057580;Master (U) - Lehrer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;78;
879;553580;Solistenprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;79;
880;555580;Sonstiger künstlerischer Abschluss - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;80;
881;551080;Akademiebrief (KH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;81;
882;058580;Bachelor an Universitäten - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;82;
883;556080;Bachelor an Kunsthochschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;83;
884;602580;Bachelor an Fachhochschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;84;
888;059580;Master an Universitäten (Abschlusspr. vorausge.) - Weiterst. bzw. Wiederholung zur Notenverbesserung;20072;99999;88;
889;557080;Master an Kunsthochschulen (Abschlussp. vorausge.) - Weiterst. bzw. Wiederh. zur Notenverbesserung;20072;99999;89;
890;603580;Master an Fachhochschulen (Abschlusspr. vorausge.) - Weiterst. bzw. Wiederh. zur Notenverbesserung;20072;99999;90;
893;057080;Bachelor (U) - Lehrer - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;93;
894;650580;Abschlusszeugnis / Zertifikat - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;94;
895;651080;Sonstiger Abschluss in Deutschland - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20072;99999;95;
898;200280;LA Bachelor Grund- und Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20222;99999;98;
899;200480;LA Master Grund- und Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung;20222;99999;99;
997;652090;Keine Abschlussprüfung möglich bzw. angestrebt - Kein Abschluss;20072;99999;97;

1 101 051210 Mehr-Fächer-Bachelor mit Lehramtsoption - Erststudium 20102 99999 01
2 102 050510 Magister - Erststudium 20072 99999 02
3 103 052010 Lizentiat - Erststudium 20072 99999 03
4 104 052510 Kirchliche Prüfung - Erststudium 20072 99999 04
5 105 056510 Akad. geprüfter Übersetzer - Erststudium 20072 99999 05
6 107 102010 Promotion ohne vorausgesetzte Abschlussprüfung - Erststudium 20072 99999 07
7 108 053010 Staatsexamen / 1. Staatsprüfung - Erststudium 20072 99999 08
8 109 053510 Staatsexamen (einphasige Ausbildung) - Erststudium 20072 99999 09
9 110 054010 Fakultätsprüfung - Erststudium 20072 99999 10
10 111 054510 Diplom (U) - Erststudium 20072 99999 11
11 112 055510 Diplom (U) - Dolmetscher - Erststudium 20072 99999 12
12 113 056010 Diplom (U) - Übersetzer - Erststudium 20072 99999 13
13 114 055010 Diplom I (U-GH) - Erststudium 20072 99999 14
14 115 152510 LA Bachelor Grundschulen - Erststudium 20072 99999 15
15 116 250210 LA Bachelor Hauptschulen - Erststudium 20222 99999 16
16 117 059910 Abschlussprüfung ohne akad. Grad - Erststudium 20072 99999 17
17 118 058010 Diplom (U) - Lehrer - Erststudium 20072 99999 18
18 119 155510 LA Bachelor Grundstufe / Primarstufe - Erststudium 20072 99999 19
19 120 200010 LA Grund- und Hauptschulen - Erststudium 20222 99999 20
20 121 152010 LA Grundschulen - Erststudium 20072 99999 21
21 122 250010 LA Hauptschulen - Erststudium 20222 99999 22
22 123 250510 LA Realschulen - Erststudium 20072 99999 23
23 124 252010 LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Erststudium 20072 99999 24
24 125 350510 LA Gymnasien - Erststudium 20072 99999 25
25 126 400510 LA Sonderschulen / Förderschulen - Erststudium 20072 99999 26
26 127 450510 LA Berufliche Schulen - Erststudium 20072 99999 27
27 128 200510 LA Sekundarstufe I / Primarstufe - Erststudium 20072 99999 28
28 129 500510 Sonstige Staatsprüfungen nach Schularten / Schulstufen - Erststudium 20072 99999 29
29 131 470510 LA Bachelor (soweit keine Differenzierung möglich) - Erststudium 20072 99999 31
30 132 201010 LA Bachelor Sekundarstufe I / Primarstufe - Erststudium 20072 99999 32
31 133 202510 LA Bachelor Grundschulen / Sekundarstufe I - Erststudium 20072 99999 33
32 134 251010 LA Bachelor Realschulen - Erststudium 20072 99999 34
33 135 252510 LA Bachelor Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Erststudium 20072 99999 35
34 136 254010 LA Bachelor Mittelstufe / Sekundarstufe I - Erststudium 20072 99999 36
35 137 301010 LA Bachelor Sekundarstufe II / Sekundarstufe I - Erststudium 20072 99999 37
36 138 351010 LA Bachelor Gymnasien - Erststudium 20072 99999 38
37 139 352510 LA Bachelor Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Erststudium 20072 99999 39
38 140 202010 LA Grundschulen / Sekundarstufe I - Erststudium 20072 99999 40
39 141 300510 LA Sekundarstufe II / Sekundarstufe I - Erststudium 20072 99999 41
40 142 155010 LA Grundstufe / Primarstufe - Erststudium 20072 99999 42
41 143 253510 LA Mittelstufe / Sekundarstufe I - Erststudium 20072 99999 43
42 144 352010 LA Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Erststudium 20072 99999 44
43 145 452010 LA Oberstufe / Sekundarstufe II, berufliche Schulen - Erststudium 20072 99999 45
44 146 401010 LA Bachelor Sonderschulen / Förderschulen - Erststudium 20072 99999 46
45 147 451010 LA Bachelor Berufliche Schulen - Erststudium 20072 99999 47
46 148 452510 LA Bachelor Oberstufe / Sekundarstufe II, berufliche Schulen - Erststudium 20072 99999 48
47 151 600510 Diplom (FH) - Erststudium 20072 99999 51
48 153 601010 Diplom (FH) - Dolmetscher - Erststudium 20072 99999 53
49 154 601510 Diplom (FH) - Übersetzer - Erststudium 20072 99999 54
50 156 602010 Staatl. Laufbahnprüfung (VerwFH) - Erststudium 20072 99999 56
51 159 604010 Sonstiger FH - Abschluss - Erststudium 20072 99999 59
52 168 051010 Mehr-Fächer-Bachelor ohne Lehramtsoption - Erststudium 20102 99999 68
53 170 554010 Staatl. Prüfung für künstlerische Abschlüsse - Erststudium 20072 99999 70
54 171 551510 Bühnen- / Konzert- / Opernreifeprüfung - Erststudium 20072 99999 71
55 172 552010 Privatmusiklehrerprüfung - Erststudium 20072 99999 72
56 173 552510 Kirchenmusikprüfung A - Erststudium 20072 99999 73
57 174 553010 Kirchenmusikprüfung B - Erststudium 20072 99999 74
58 175 550510 Diplom (KH) - Erststudium 20072 99999 75
59 177 555010 Kunstpädagogische Prüfung - Erststudium 20072 99999 77
60 179 553510 Solistenprüfung - Erststudium 20072 99999 79
61 180 555510 Sonstiger künstlerischer Abschluss - Erststudium 20072 99999 80
62 181 551010 Akademiebrief (KH) - Erststudium 20072 99999 81
63 182 058510 Bachelor an Universitäten - Erststudium 20072 99999 82
64 183 556010 Bachelor an Kunsthochschulen - Erststudium 20072 99999 83
65 184 602510 Bachelor an Fachhochschulen - Erststudium 20072 99999 84
66 186 651710 Bachelor o. Ä. noch nicht abgeschlossen - Erststudium 20122 99999 86
67 187 651310 Abschlüsse von Berufsakademien, die ersten berufsb. Abschlüssen gleichgestellt sind - Erststudium 20112 99999 87
68 193 057010 Bachelor (U) - Lehrer - Erststudium 20072 99999 93
69 194 650510 Abschlusszeugnis / Zertifikat - Erststudium 20072 99999 94
70 195 651010 Sonstiger Abschluss in Deutschland - Erststudium 20072 99999 95
71 196 651510 Abschlussprüfung im Ausland - Erststudium 20072 99999 96
72 198 200210 LA Bachelor Grund- und Hauptschulen - Erststudium 20222 99999 98
73 201 051220 Mehr-Fächer-Bachelor mit Lehramtsoption - Zweitstudium 20102 99999 01
74 202 050520 Magister - Zweitstudium 20072 99999 02
75 203 052020 Lizentiat - Zweitstudium 20072 99999 03
76 204 052520 Kirchliche Prüfung - Zweitstudium 20072 99999 04
77 205 056520 Akad. geprüfter Übersetzer - Zweitstudium 20072 99999 05
78 208 053020 Staatsexamen / 1. Staatsprüfung - Zweitstudium 20072 99999 08
79 209 053520 Staatsexamen (einphasige Ausbildung) - Zweitstudium 20072 99999 09
80 210 054020 Fakultätsprüfung - Zweitstudium 20072 99999 10
81 211 054520 Diplom (U) - Zweitstudium 20072 99999 11
82 212 055520 Diplom (U) - Dolmetscher - Zweitstudium 20072 99999 12
83 213 056020 Diplom (U) - Übersetzer - Zweitstudium 20072 99999 13
84 214 055020 Diplom I (U-GH) - Zweitstudium 20072 99999 14
85 215 152520 LA Bachelor Grundschulen - Zweitstudium 20072 99999 15
86 216 250220 LA Bachelor Hauptschulen - Zweitstudium 20222 99999 16
87 218 058020 Diplom (U) - Lehrer - Zweitstudium 20072 99999 18
88 219 155520 LA Bachelor Grundstufe / Primarstufe - Zweitstudium 20072 99999 19
89 220 200020 LA Grund- und Hauptschulen - Zweitstudium 20222 99999 20
90 221 152020 LA Grundschulen - Zweitstudium 20072 99999 21
91 222 250020 LA Hauptschulen - Zweitstudium 20222 99999 22
92 223 250520 LA Realschulen - Zweitstudium 20072 99999 23
93 224 252020 LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Zweitstudium 20072 99999 24
94 225 350520 LA Gymnasien - Zweitstudium 20072 99999 25
95 226 400520 LA Sonderschulen / Förderschulen - Zweitstudium 20072 99999 26
96 227 450520 LA Berufliche Schulen - Zweitstudium 20072 99999 27
97 228 200520 LA Sekundarstufe I / Primarstufe - Zweitstudium 20072 99999 28
98 229 500520 Sonstige Staatsprüfungen nach Schularten / Schulstufen - Zweitstudium 20072 99999 29
99 230 480520 LA Master (soweit keine Differenzierung möglich) - Zweitstudium 20072 99999 30
100 231 470520 LA Bachelor (soweit keine Differenzierung möglich) - Zweitstudium 20072 99999 31
101 232 201020 LA Bachelor Sekundarstufe I / Primarstufe - Zweitstudium 20072 99999 32
102 233 202520 LA Bachelor Grundschulen / Sekundarstufe I - Zweitstudium 20072 99999 33
103 234 251020 LA Bachelor Realschulen - Zweitstudium 20072 99999 34
104 235 252520 LA Bachelor Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Zweitstudium 20072 99999 35
105 236 254020 LA Bachelor Mittelstufe / Sekundarstufe I - Zweitstudium 20072 99999 36
106 237 301020 LA Bachelor Sekundarstufe II / Sekundarstufe I - Zweitstudium 20072 99999 37
107 238 351020 LA Bachelor Gymnasien - Zweitstudium 20072 99999 38
108 239 352520 LA Bachelor Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Zweitstudium 20072 99999 39
109 240 202020 LA Grundschulen / Sekundarstufe I - Zweitstudium 20072 99999 40
110 241 300520 LA Sekundarstufe II / Sekundarstufe I - Zweitstudium 20072 99999 41
111 242 155020 LA Grundstufe / Primarstufe - Zweitstudium 20072 99999 42
112 243 253520 LA Mittelstufe / Sekundarstufe I - Zweitstudium 20072 99999 43
113 244 352020 LA Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Zweitstudium 20072 99999 44
114 245 452020 LA Oberstufe / Sekundarstufe II, berufliche Schulen - Zweitstudium 20072 99999 45
115 246 401020 LA Bachelor Sonderschulen / Förderschulen - Zweitstudium 20072 99999 46
116 247 451020 LA Bachelor Berufliche Schulen - Zweitstudium 20072 99999 47
117 248 452520 LA Bachelor Oberstufe / Sekundarstufe II, berufliche Schulen - Zweitstudium 20072 99999 48
118 249 153020 LA Master Grundschulen - Zweitstudium 20072 99999 49
119 250 250420 LA Master Hauptschulen - Zweitstudium 20222 99999 50
120 251 600520 Diplom (FH) - Zweitstudium 20072 99999 51
121 252 156020 LA Master Grundstufe / Primarstufe - Zweitstudium 20072 99999 52
122 253 601020 Diplom (FH) - Dolmetscher - Zweitstudium 20072 99999 53
123 254 601520 Diplom (FH) - Übersetzer - Zweitstudium 20072 99999 54
124 255 201520 LA Master Sekundarstufe I / Primarstufe - Zweitstudium 20072 99999 55
125 256 602020 Staatl. Laufbahnprüfung (VerwFH) - Zweitstudium 20072 99999 56
126 257 203020 LA Master Grundschulen / Sekundarstufe I - Zweitstudium 20072 99999 57
127 258 251520 LA Master Realschulen - Zweitstudium 20072 99999 58
128 259 604020 Sonstiger FH - Abschluss - Zweitstudium 20072 99999 59
129 260 253020 LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Zweitstudium 20072 99999 60
130 261 254520 LA Master Mittelstufe / Sekundarstufe I - Zweitstudium 20072 99999 61
131 262 301520 LA Master Sekundarstufe II / Sekundarstufe I - Zweitstudium 20072 99999 62
132 263 353020 LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Zweitstudium 20072 99999 63
133 264 351520 LA Master Gymnasien - Zweitstudium 20072 99999 64
134 265 401520 LA Master Sonderschulen / Förderschulen - Zweitstudium 20072 99999 65
135 266 451520 LA Master Berufliche Schulen - Zweitstudium 20072 99999 66
136 267 453020 LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Zweitstudium 20072 99999 67
137 268 051020 Mehr-Fächer-Bachelor ohne Lehramtsoption - Zweitstudium 20102 99999 68
138 269 051520 Mehr-Fächer-Master - Zweitstudium 20102 99999 69
139 270 554020 Staatl. Prüfung für künstlerische Abschlüsse - Zweitstudium 20072 99999 70
140 271 551520 Bühnen- / Konzert- / Opernreifeprüfung - Zweitstudium 20072 99999 71
141 272 552020 Privatmusiklehrerprüfung - Zweitstudium 20072 99999 72
142 273 552520 Kirchenmusikprüfung A - Zweitstudium 20072 99999 73
143 274 553020 Kirchenmusikprüfung B - Zweitstudium 20072 99999 74
144 275 550520 Diplom (KH) - Zweitstudium 20072 99999 75
145 276 554520 Meisterschüler - Zweitstudium 20072 99999 76
146 277 555020 Kunstpädagogische Prüfung - Zweitstudium 20072 99999 77
147 278 057520 Master (U) - Lehrer - Zweitstudium 20072 99999 78
148 279 553520 Solistenprüfung - Zweitstudium 20072 99999 79
149 280 555520 Sonstiger künstlerischer Abschluss - Zweitstudium 20072 99999 80
150 281 551020 Akademiebrief (KH) - Zweitstudium 20072 99999 81
151 282 058520 Bachelor an Universitäten - Zweitstudium 20072 99999 82
152 283 556020 Bachelor an Kunsthochschulen - Zweitstudium 20072 99999 83
153 284 602520 Bachelor an Fachhochschulen - Zweitstudium 20072 99999 84
154 288 059520 Master an Universitäten (Abschlussprüfung vorausgesetzt) - Zweitstudium 20072 99999 88
155 289 557020 Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Zweitstudium 20072 99999 89
156 290 603520 Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Zweitstudium 20072 99999 90
157 293 057020 Bachelor (U) - Lehrer - Zweitstudium 20072 99999 93
158 294 650520 Abschlusszeugnis / Zertifikat - Zweitstudium 20072 99999 94
159 295 651020 Sonstiger Abschluss in Deutschland - Zweitstudium 20072 99999 95
160 296 651520 Abschlussprüfung im Ausland - Zweitstudium 20072 99999 96
161 298 200220 LA Bachelor Grund- und Hauptschulen - Zweitstudium 20222 99999 98
162 299 200420 LA Master Grund- und Hauptschulen - Zweitstudium 20222 99999 99
163 301 051230 Mehr-Fächer-Bachelor mit Lehramtsoption - Aufbaustudium 20102 99999 01
164 302 050530 Magister - Aufbaustudium 20072 99999 02
165 303 052030 Lizentiat - Aufbaustudium 20072 99999 03
166 308 053030 Staatsexamen / 1. Staatsprüfung - Aufbaustudium 20072 99999 08
167 311 054530 Diplom (U) - Aufbaustudium 20072 99999 11
168 317 059930 Abschlussprüfung ohne akad. Grad - Aufbaustudium 20072 99999 17
169 323 250530 LA Realschulen - Aufbaustudium 20072 99999 23
170 324 252030 LA Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Aufbaustudium 20072 99999 24
171 325 350530 LA Gymnasien - Aufbaustudium 20072 99999 25
172 326 400530 LA Sonderschulen / Förderschulen - Aufbaustudium 20072 99999 26
173 329 500530 Sonstige Staatsprüfungen nach Schularten / Schulstufen - Aufbaustudium 20072 99999 29
174 330 480530 LA Master (soweit keine Differenzierung möglich) - Aufbaustudium 20072 99999 30
175 331 470530 LA Bachelor (soweit keine Differenzierung möglich) - Aufbaustudium 20072 99999 31
176 349 153030 LA Master Grundschulen - Aufbaustudium 20092 99999 49
177 350 250430 LA Master Hauptschulen - Aufbaustudium 20222 99999 50
178 351 600530 Diplom (FH) - Aufbaustudium 20072 99999 51
179 352 156030 LA Master Grundstufe / Primarstufe - Aufbaustudium 20092 99999 52
180 353 601030 Diplom (FH) - Dolmetscher - Aufbaustudium 20072 99999 53
181 354 601530 Diplom (FH) - Übersetzer - Aufbaustudium 20072 99999 54
182 355 201530 LA Master Sekundarstufe I / Primarstufe - Aufbaustudium 20092 99999 55
183 357 203030 LA Master Grundschulen / Sekundarstufe I - Aufbaustudium 20092 99999 57
184 358 251530 LA Master Realschulen - Aufbaustudium 20092 99999 58
185 359 604030 Sonstiger FH - Abschluss - Aufbaustudium 20072 99999 59
186 360 253030 LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Aufbaustudium 20092 99999 60
187 361 254530 LA Master Mittelstufe / Sekundarstufe I - Aufbaustudium 20092 99999 61
188 362 301530 LA Master Sekundarstufe II / Sekundarstufe I - Aufbaustudium 20092 99999 62
189 363 353030 LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Aufbaustudium 20092 99999 63
190 364 351530 LA Master Gymnasium - Aufbaustudium 20092 99999 64
191 365 401530 LA Master Sonderschulen / Förderschulen - Aufbaustudium 20092 99999 65
192 366 451530 LA Master Berufliche Schulen - Aufbaustudium 20082 99999 66
193 367 453030 LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Aufbaustudium 20092 99999 67
194 368 051030 Mehr-Fächer-Bachelor ohne Lehramtsoption - Aufbaustudium 20102 99999 68
195 369 051530 Mehr-Fächer-Master - Aufbaustudium 20102 99999 69
196 371 551530 Bühnen- / Konzert- / Opernreifeprüfung - Aufbaustudium 20072 99999 71
197 372 552030 Privatmusiklehrerprüfung - Aufbaustudium 20072 99999 72
198 373 552530 Kirchenmusikprüfung A - Aufbaustudium 20072 99999 73
199 375 550530 Diplom (KH) - Aufbaustudium 20072 99999 75
200 376 554530 Meisterschüler - Aufbaustudium 20072 99999 76
201 378 057530 Master (U) - Lehrer - Aufbaustudium 20102 99999 78
202 379 553530 Solistenprüfung - Aufbaustudium 20072 99999 79
203 380 555530 Sonstiger künstlerischer Abschluss - Aufbaustudium 20072 99999 80
204 381 551030 Akademiebrief (KH) - Aufbaustudium 20102 99999 81
205 388 059530 Master an Universitäten (Abschlussprüfung vorausgesetzt) - Aufbaustudium 20072 99999 88
206 389 557030 Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Aufbaustudium 20072 99999 89
207 390 603530 Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Aufbaustudium 20072 99999 90
208 394 650530 Abschlusszeugnis / Zertifikat - Aufbaustudium 20072 99999 94
209 395 651030 Sonstiger Abschluss in Deutschland - Aufbaustudium 20072 99999 95
210 396 651530 Abschlussprüfung im Ausland - Aufbaustudium 20072 99999 96
211 399 200430 LA Master Grund- und Hauptschulen - Aufbaustudium 20222 99999 99
212 401 051240 Mehr-Fächer-Bachelor mit Lehramtsoption - Ergänzungs-, Erweiterungs- und Zusatzstudium 20212 99999 01
213 402 050540 Magister - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 02
214 403 052040 Lizentiat - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 03
215 405 056540 Akad. geprüfter Übersetzer - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 05
216 411 054540 Diplom (U) - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 11
217 412 055540 Diplom (U) - Dolmetscher - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 12
218 413 056040 Diplom (U) - Übersetzer - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 13
219 415 152540 LA Bachelor Grundschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 15
220 416 250240 LA Bachelor Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20222 99999 16
221 418 058040 Diplom (U) - Lehrer - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 18
222 419 155540 LA Bachelor Grundstufe / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 19
223 420 200040 LA Grund- und Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20222 99999 20
224 421 152040 LA Grundschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 21
225 422 250040 LA Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20222 99999 22
226 423 250540 LA Realschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 23
227 424 252040 LA Haupt- und Realsch. / Unterst. und Mittelst. Gym. - Ergänzungs-, Erweiterungs- und Zusatzstud. 20072 99999 24
228 425 350540 LA Gymnasien - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 25
229 426 400540 LA Sonderschulen / Förderschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 26
230 427 450540 LA Berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 27
231 428 200540 LA Sekundarstufe I / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 28
232 429 500540 Sonstige Staatsprüfungen nach Schularten / Schulst. - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 29
233 430 480540 LA Master (soweit keine Differenzierung möglich) - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 30
234 431 470540 LA Bachelor (soweit keine Differenzierung möglich) - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 31
235 432 201040 LA Bachelor Sekundarstufe I / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 32
236 433 202540 LA Bachelor Grundschulen / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 33
237 434 251040 LA Bachelor Realschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 34
238 435 252540 LA Bachelor Haupt- u. Realsch./Unterst. u. Mittelst. Gym.-Ergänzungs-, Erweiterungs- und Zusatzstud. 20072 99999 35
239 436 254040 LA Bachelor Mittelstufe / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 36
240 437 301040 LA Bachelor Sekundarstufe II / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 37
241 438 351040 LA Bachelor Gymnasien - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 38
242 439 352540 LA Bachelor Oberst. / Sekundarst. II, allgemeinb. Schulen - Ergänzungs-, Erweiterungs- und Zusatzst. 20072 99999 39
243 440 202040 LA Grundschulen / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 40
244 441 300540 LA Sekundarstufe II / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 41
245 442 155040 LA Grundstufe / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 42
246 443 253540 LA Mittelstufe / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 43
247 444 352040 LA Oberst. / Sekundarst. II, allgemeinb. Schulen - Ergänzungs-, Erweiterungs- und Zusatzst. 20072 99999 44
248 445 452040 LA Oberstufe / Sekundarstufe II, berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 45
249 446 401040 LA Bachelor Sonderschulen / Förderschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 46
250 447 451040 LA Bachelor Berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 47
251 448 452540 LA Bachelor Oberst. / Sekundarst. II, berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzst. 20072 99999 48
252 449 153040 LA Master Grundschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 49
253 450 250440 LA Master Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20222 99999 50
254 451 600540 Diplom (FH) - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 51
255 452 156040 LA Master Grundstufe / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 52
256 455 201540 LA Master Sekundarstufe I / Primarstufe - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 55
257 457 203040 LA Master Grundschulen / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 57
258 458 251540 LA Master Realschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 58
259 459 604040 Sonstiger FH - Abschluss - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 59
260 460 253040 LA Master Haupt- und Realsch./Unterst. und Mittelst. Gym. - Ergänzungs-, Erweiterungs- und Zusatzst. 20072 99999 60
261 461 254540 LA Master Mittelstufe / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 61
262 462 301540 LA Master Sekundarstufe II / Sekundarstufe I - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 62
263 463 353040 LA Master Oberst. / Sekundarst. II, allgemeinb. Schulen - Ergänzungs-, Erweiterungs- und Zusatzst. 20072 99999 63
264 464 351540 LA Master Gymnasien - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 64
265 465 401540 LA Master Sonderschulen / Förderschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 65
266 466 451540 LA Master Berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 66
267 467 453040 LA Master Oberst. / Sekundarst. II, berufliche Schulen - Ergänzungs-, Erweiterungs- und Zusatzst. 20072 99999 67
268 468 051040 Mehr-Fächer-Bachelor ohne Lehramtsoption - Ergänzungs-, Erweiterungs- und Zusatzstudium 20192 99999 68
269 469 051540 Mehr-Fächer-Master - Ergänzungs-, Erweiterungs- und Zusatzstudium 20102 99999 69
270 472 552040 Privatmusiklehrerprüfung - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 72
271 474 553040 Kirchenmusikprüfung B - Ergänzungs-, Erweiterungs- und Zusatzstudium 20081 99999 74
272 475 550540 Diplom (KH) - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 75
273 477 555040 Kunstpädagogische Prüfung - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 77
274 478 057540 Master (U) - Lehrer - Ergänzungs-, Erweiterungs- und Zusatzstudium 20122 99999 78
275 480 555540 Sonstiger künstlerischer Abschluss - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 80
276 482 058540 Bachelor an Universitäten - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 82
277 484 602540 Bachelor an Fachhochschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 84
278 488 059540 Master an Universitäten (Abschlussprüfung vorausge.) - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 88
279 489 557040 Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Ergänzungs-, Erweiterungs- und Zusatzs 20092 99999 89
280 490 603540 Master an Fachhochschulen (Abschlusspr. vorausge.) - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 90
281 494 650540 Abschlusszeugnis / Zertifikat - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 94
282 495 651040 Sonstiger Abschluss in Deutschland - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 95
283 496 651540 Abschlussprüfung im Ausland - Ergänzungs-, Erweiterungs- und Zusatzstudium 20072 99999 96
284 498 200240 LA Bachelor Grund- und Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20222 99999 98
285 499 200440 LA Master Grund- und Hauptschulen - Ergänzungs-, Erweiterungs- und Zusatzstudium 20222 99999 99
286 506 100550 Promotion (Abschlussprüfung vorausgesetzt) - Promotion 20072 99999 06
287 507 102050 Promotion ohne vorausgesetzte Abschlussprüfung - Promotionsstudium 20072 99999 07
288 591 101550 Promotion (Abschlussprüfung vorausgesetzt) - Strukturiertes Promotionsstudium 20072 99999 91
289 592 101050 Promotion (Abschlussprüfung vorausgesetzt) - Promotion nach FH-Abschluss bzw. wiss. Kurzstudium 20072 99999 92
290 596 651550 Abschlussprüfung im Ausland - Promotionsstudium 20072 99999 96
291 601 051260 Mehr-Fächer-Bachelor mit Lehramtsoption ? Weiterbildungsstudium Mehr-Fächer-Bachelor mit Lehramtsoption – Weiterbildungsstudium 20102 99999 01
292 602 050560 Magister - Weiterbildungsstudium 20072 99999 02
293 608 053060 Staatsexamen / 1. Staatsprüfung - Weiterbildungsstudium 20072 99999 08
294 611 054560 Diplom (U) - Weiterbildungsstudium 20072 99999 11
295 629 500560 Sonstige Staatsprüfungen nach Schularten / Schulstufen - Weiterbildungsstudium 20072 99999 29
296 630 480560 LA Master (soweit keine Differenzierung möglich) - Weiterbildungsstudium 20072 99999 30
297 631 470560 LA Bachelor (soweit keine Differenzierung möglich) - Weiterbildungsstudium 20072 99999 31
298 649 153060 LA Master Grundschulen - Weiterbildungsstudium 20092 99999 49
299 650 250460 LA Master Hauptschulen - Weiterbildungsstudium 20222 99999 50
300 651 600560 Diplom (FH) - Weiterbildungsstudium 20072 99999 51
301 652 156060 LA Master Grundstufe / Primarstufe - Weiterbildungsstudium 20092 99999 52
302 655 201560 LA Master Sekundarstufe I / Primarstufe - Weiterbildungsstudium 20092 99999 55
303 657 203060 LA Master Grundschulen / Sekundarstufe I - Weiterbildungsstudium 20092 99999 57
304 658 251560 LA Master Realschulen - Weiterbildungsstudium 20092 99999 58
305 659 604060 Sonstiger FH - Abschluss - Weiterbildungsstudium 20072 99999 59
306 660 253060 LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Weiterbildungsstudium 20092 99999 60
307 661 254560 LA Master Mittelstufe / Sekundarstufe I - Weiterbildungsstudium 20092 99999 61
308 662 301560 LA Master Sekundarstufe II / Sekundarstufe I - Weiterbildungsstudium 20092 99999 62
309 663 353060 LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Weiterbildungsstudium 20092 99999 63
310 664 351560 LA Master Gymnasium - Weiterbildungsstudium 20092 99999 64
311 665 401560 LA Master Sonderschulen / Förderschulen - Weiterbildungsstudium 20092 99999 65
312 666 451560 LA Master Berufliche Schulen - Weiterbildungsstudium 20092 99999 66
313 667 453060 LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Weiterbildungsstudium 20092 99999 67
314 668 051060 Mehr-Fächer-Bachelor ohne Lehramtsoption - Weiterbildungsstudium 20102 99999 68
315 669 051560 Mehr-Fächer-Master - Weiterbildungsstudium 20102 99999 69
316 680 555560 Sonstiger künstlerischer Abschluss - Weiterbildungsstudium 20072 99999 80
317 682 058560 Bachelor an Universitäten - Weiterbildungsstudium 20072 99999 82
318 684 602560 Bachelor an Fachhochschulen - Weiterbildungsstudium 20072 99999 84
319 688 059560 Master an Universitäten (Abschlussprüfung vorausgesetzt) - Weiterbildungsstudium 20072 99999 88
320 689 557060 Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Weiterbildungstudium 20072 99999 89
321 690 603560 Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Weiterbildungsstudium 20072 99999 90
322 694 650560 Abschlusszeugnis / Zertifikat - Weiterbildungsstudium 20072 99999 94
323 695 651060 Sonstiger Abschluss in Deutschland - Weiterbildungsstudium 20072 99999 95
324 696 651560 Abschlussprüfung im Ausland - Weiterbildungsstudium 20072 99999 96
325 699 200460 LA Master Grund- und Hauptschulen - Weiterbildungsstudium 20222 99999 99
326 730 480570 LA Master (soweit keine Differenzierung möglich) - Konsekutives Masterstudium 20092 99999 30
327 749 153070 LA Master Grundschulen - Konsekutives Masterstudium 20092 99999 49
328 750 250470 LA Master Hauptschulen - Konsekutives Masterstudium 20222 99999 50
329 752 156070 LA Master Grundstufe / Primarstufe - Konsekutives Masterstudium 20092 99999 52
330 755 201570 LA Master Sekundarstufe I / Primarstufe - Konsekutives Masterstudium 20092 99999 55
331 757 203070 LA Master Grundschulen / Sekundarstufe I - Konsekutives Masterstudium 20092 99999 57
332 758 251570 LA Master Realschulen - Konsekutives Masterstudium 20092 99999 58
333 760 253070 LA Master Haupt- und Realschulen / Unterstufe und Mittelstufe Gymnasien - Konsekutives Masterstudiu 20092 99999 60
334 761 254570 LA Master Mittelstufe / Sekundarstufe I - Konsekutives Masterstudium 20092 99999 61
335 762 301570 LA Master Sekundarstufe II / Sekundarstufe I - Konsekutives Masterstudium 20092 99999 62
336 763 353070 LA Master Oberstufe / Sekundarstufe II, allgemeinbildende Schulen - Konsekutives Masterstudium 20092 99999 63
337 764 351570 LA Master Gymnasien - Konsekutives Masterstudium 20092 99999 64
338 765 401570 LA Master Sonderschulen / Förderschulen - Konsekutives Masterstudium 20092 99999 65
339 766 451570 LA Master Berufliche Schulen - Konsekutives Masterstudium 20092 99999 66
340 767 453070 LA Master Oberstufe / Sekundarstufe II, berufliche Schulen - Konsekutives Masterstudium 20092 99999 67
341 769 051570 Mehr-Fächer-Master - Konsekutives Masterstudium 20102 99999 69
342 778 057570 Master (U)-Lehrer - Konsekutives Masterstudium 20092 99999 78
343 788 059570 Master an Universitäten (Abschlussprüfung vorausgesetzt) - Konsekutives Masterstudium 20092 99999 88
344 789 557070 Master an Kunsthochschulen (Abschlussprüfung vorausgesetzt) - Konsekutives Masterstudium 20092 99999 89
345 790 603570 Master an Fachhochschulen (Abschlussprüfung vorausgesetzt) - Konsekutives Masterstudium 20092 99999 90
346 796 651570 Abschlussprüfung im Ausland - Konsekutives Masterstudium 20092 99999 96
347 799 200470 LA Master Grund- und Hauptschulen - Konsekutives Masterstudium 20222 99999 99
348 801 051280 Mehr-Fächer-Bachelor mit Lehramtsoption - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20102 99999 01
349 802 050580 Magister - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 02
350 803 052080 Lizentiat - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 03
351 804 052580 Kirchliche Prüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 04
352 805 056580 Akad. geprüfter Übersetzer - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 05
353 807 102080 Promotion ohne vorausgesetzte Abschlussprüfung - Weiterst. bzw. Wiederholung zur Notenverbesserung 20072 99999 07
354 808 053080 Staatsexamen / 1. Staatsprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 08
355 809 053580 Staatsexamen (einphasige Ausbildung) - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 09
356 810 054080 Fakultätsprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 10
357 811 054580 Diplom (U) - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 11
358 812 055580 Diplom (U) - Dolmetscher - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 12
359 813 056080 Diplom (U) - Übersetzer - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 13
360 814 055080 Diplom I (U-GH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 14
361 815 152580 LA Bachelor Grundschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 15
362 816 250280 LA Bachelor Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20222 99999 16
363 817 059980 Abschlussprüfung ohne akad. Grad - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 17
364 818 058080 Diplom (U) - Lehrer - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 18
365 819 155580 LA Bachelor Grundstufe / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 19
366 820 200080 LA Grund- und Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20222 99999 20
367 821 152080 LA Grundschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 21
368 822 250080 LA Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20222 99999 22
369 823 250580 LA Realschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 23
370 824 252080 LA Haupt- und Realsch. / Unterst. und Mittelst. Gym. - Weiterst. bzw. Wiederh. zur Notenverbesserung 20072 99999 24
371 825 350580 LA Gymnasien - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 25
372 826 400580 LA Sonderschulen / Förderschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 26
373 827 450580 LA Berufliche Schulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 27
374 828 200580 LA Sekundarstufe I / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 28
375 829 500580 Sonstige Staatsprüfungen nach Schularten / Schulst. - Weiterst. bzw. Wiederh. zur Notenverbesserung 20072 99999 29
376 830 480580 LA Master (soweit keine Differenzierung möglich) - Weiterst. bzw. Wiederh. zur Notenverbesserung 20072 99999 30
377 831 470580 LA Bachelor (soweit keine Differenzierung möglich) - Weiterst. bzw. Wiederh. zur Notenverbesserung 20072 99999 31
378 832 201080 LA Bachelor Sekundarstufe I / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 32
379 833 202580 LA Bachelor Grundschulen / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 33
380 834 251080 LA Bachelor Realschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 34
381 835 252580 LA Bachelor Haupt- u. Realsch./Unterst. u. Mittelst. Gymnasien-Weiterst. bzw. Wiederh. z. Notenverb. 20072 99999 35
382 836 254080 LA Bachelor Mittelstufe / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 36
383 837 301080 LA Bachelor Sekundarst. II / Sekundarst. I - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 37
384 838 351080 LA Bachelor Gymnasien - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 38
385 839 352580 LA Bachelor Oberst. / Sekundarst. II, allgemeinb. Schulen - Weiterst. bzw. Wiederh. zur Notenverb. 20072 99999 39
386 840 202080 LA Grundschulen / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 40
387 841 300580 LA Sekundarstufe II / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 41
388 842 155080 LA Grundstufe / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 42
389 843 253580 LA Mittelstufe / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 43
390 844 352080 LA Oberst. / Sekundarst. II, allgemeinb. Schulen - Weiterst. bzw. Wiederholung zur Notenverbesserung 20072 99999 44
391 845 452080 LA Oberst. / Sekundarst. II, berufliche Schulen - Weiterst. bzw. Wiederholung zur Notenverbesserung 20072 99999 45
392 846 401080 LA Bachelor Sonderschulen / Förderschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 46
393 847 451080 LA Bachelor Berufliche Schulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 47
394 848 452580 LA Bachelor Oberst. / Sekundarst. II, berufliche Schulen - Weiterst. bzw. Wiederh. zur Notenverb. 20072 99999 48
395 849 153080 LA Master Grundschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 49
396 850 250480 LA Master Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20222 99999 50
397 851 600580 Diplom (FH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 51
398 852 156080 LA Master Grundstufe / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 52
399 853 601080 Diplom (FH) - Dolmetscher - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 53
400 854 601580 Diplom (FH) - Übersetzer - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 54
401 855 201580 LA Master Sekundarstufe I / Primarstufe - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 55
402 856 602080 Staatl. Laufbahnprüfung (VerwFH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 56
403 857 203080 LA Master Grundschulen / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 57
404 858 251580 LA Master Realschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 58
405 859 604080 Sonstiger FH - Abschluss - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 59
406 860 253080 LA Master Haupt- und Realsch./Unterst. und Mittelst. Gym.-Weiterst. bzw. Wiederh. zur Notenverb. 20072 99999 60
407 861 254580 LA Master Mittelstufe / Sekundarstufe I - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 61
408 862 301580 LA Master Sekundarst. II / Sekundarst. I - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 62
409 863 353080 LA Master Oberst. / Sekundarst. II, allgemeinb. Schulen - Weiterst. bzw. Wiederh. zur Notenverb. 20072 99999 63
410 864 351580 LA Master Gymnasien - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 64
411 865 401580 LA Master Sonderschulen / Förderschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 65
412 866 451580 LA Master Berufliche Schulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 66
413 867 453080 LA Master Oberst. / Sekundarst. II, berufliche Schulen - Weiterst. bzw. Wiederholung zur Notenverb. 20072 99999 67
414 868 051080 Mehr-Fächer-Bachelor ohne Lehramtsoption - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20102 99999 68
415 869 051580 Mehr-Fächer-Master - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20102 99999 69
416 870 554080 Staatl. Prüfung für künstlerische Abschlüsse - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 70
417 871 551580 Bühnen- / Konzert- / Opernreifeprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 71
418 872 552080 Privatmusiklehrerprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 72
419 873 552580 Kirchenmusikprüfung A - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 73
420 874 553080 Kirchenmusikprüfung B - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 74
421 875 550580 Diplom (KH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 75
422 876 554580 Meisterschüler - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 76
423 877 555080 Kunstpädagogische Prüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 77
424 878 057580 Master (U) - Lehrer - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 78
425 879 553580 Solistenprüfung - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 79
426 880 555580 Sonstiger künstlerischer Abschluss - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 80
427 881 551080 Akademiebrief (KH) - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 81
428 882 058580 Bachelor an Universitäten - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 82
429 883 556080 Bachelor an Kunsthochschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 83
430 884 602580 Bachelor an Fachhochschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 84
431 888 059580 Master an Universitäten (Abschlusspr. vorausge.) - Weiterst. bzw. Wiederholung zur Notenverbesserung 20072 99999 88
432 889 557080 Master an Kunsthochschulen (Abschlussp. vorausge.) - Weiterst. bzw. Wiederh. zur Notenverbesserung 20072 99999 89
433 890 603580 Master an Fachhochschulen (Abschlusspr. vorausge.) - Weiterst. bzw. Wiederh. zur Notenverbesserung 20072 99999 90
434 893 057080 Bachelor (U) - Lehrer - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 93
435 894 650580 Abschlusszeugnis / Zertifikat - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 94
436 895 651080 Sonstiger Abschluss in Deutschland - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20072 99999 95
437 898 200280 LA Bachelor Grund- und Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20222 99999 98
438 899 200480 LA Master Grund- und Hauptschulen - Weiterstudium bzw. Wiederholung zur Notenverbesserung 20222 99999 99
439 997 652090 Keine Abschlussprüfung möglich bzw. angestrebt - Kein Abschluss 20072 99999 97

16
src/de/statspez/plausi/astat/csv/BeurlaubungsGrund.csv

@ -1,8 +1,8 @@ @@ -1,8 +1,8 @@
1;;Krankheit
2;;Vorbereitung auf eine Prüfung
3;;Praktikum im Inland
4;;Auslandsaufenthalt (einschl. Praktikum im Ausland)
5;;Freiwilligendienst
6;;Werkarbeit
7;;Mutterschutz (Schwangerschaft), Elternzeit, familiäre Pflege
9;;Sonstige Gründe
1;;Krankheit;20062;99999;
2;;Vorbereitung auf eine Prüfung;20062;99999;
3;;Praktikum im Inland;20162;99999;
4;;Auslandsaufenthalt (einschl. Praktikum im Ausland);20162;99999;
5;;Freiwilligendienst;20152;99999;
6;;Werkarbeit;20062;99999;
7;;Mutterschutz (Schwangerschaft), Elternzeit, familiäre Pflege;20162;99999;
9;;Sonstige Gründe;20062;99999;

1 1 Krankheit 20062 99999
2 2 Vorbereitung auf eine Prüfung 20062 99999
3 3 Praktikum im Inland 20162 99999
4 4 Auslandsaufenthalt (einschl. Praktikum im Ausland) 20162 99999
5 5 Freiwilligendienst 20152 99999
6 6 Werkarbeit 20062 99999
7 7 Mutterschutz (Schwangerschaft), Elternzeit, familiäre Pflege 20162 99999
8 9 Sonstige Gründe 20062 99999

36
src/de/statspez/plausi/astat/csv/Bundesland.csv

@ -1,18 +1,18 @@ @@ -1,18 +1,18 @@
01;15;Schleswig-Holstein
02;06;Hamburg
03;09;Niedersachsen
04;05;Bremen
05;10;Nordrhein-Westfalen
06;07;Hessen
07;11;Rheinland-Pfalz
08;01;Baden-Württemberg
09;02;Bayern
10;12;Saarland
11;03;Berlin
12;04;Brandenburg
13;08;Mecklenburg-Vorpommern
14;13;Sachsen
15;14;Sachsen-Anhalt
16;16;Thüringen
98;98;Ohne Angabe
99;99;Ausland
01;15;Schleswig-Holstein;20042;99999;
02;06;Hamburg;20042;99999;
03;09;Niedersachsen;20042;99999;
04;05;Bremen;20042;99999;
05;10;Nordrhein-Westfalen;20042;99999;
06;07;Hessen;20042;99999;
07;11;Rheinland-Pfalz;20042;99999;
08;01;Baden-Württemberg;20042;99999;
09;02;Bayern;20042;99999;
10;12;Saarland;20042;99999;
11;03;Berlin;20042;99999;
12;04;Brandenburg;20042;99999;
13;08;Mecklenburg-Vorpommern;20042;99999;
14;13;Sachsen;20042;99999;
15;14;Sachsen-Anhalt;20042;99999;
16;16;Thüringen;20042;99999;
98;98;Ohne Angabe;20042;99999;
99;99;Ausland;20042;99999;

1 01 15 Schleswig-Holstein 20042 99999
2 02 06 Hamburg 20042 99999
3 03 09 Niedersachsen 20042 99999
4 04 05 Bremen 20042 99999
5 05 10 Nordrhein-Westfalen 20042 99999
6 06 07 Hessen 20042 99999
7 07 11 Rheinland-Pfalz 20042 99999
8 08 01 Baden-Württemberg 20042 99999
9 09 02 Bayern 20042 99999
10 10 12 Saarland 20042 99999
11 11 03 Berlin 20042 99999
12 12 04 Brandenburg 20042 99999
13 13 08 Mecklenburg-Vorpommern 20042 99999
14 14 13 Sachsen 20042 99999
15 15 14 Sachsen-Anhalt 20042 99999
16 16 16 Thüringen 20042 99999
17 98 98 Ohne Angabe 20042 99999
18 99 99 Ausland 20042 99999

12
src/de/statspez/plausi/astat/csv/EinschreibungArt.csv

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
1;;Ersteinschreibung
2;;Neueinschreibung
3;;Rückmeldung
4;;Beurlaubung
5;;Exmatrikulation
6;;frühere Exmatrikulation
1;;Ersteinschreibung;20062;99999;
2;;Neueinschreibung;20062;99999;
3;;Rückmeldung;20062;99999;
4;;Beurlaubung;20062;99999;
5;;Exmatrikulation;20062;99999;
6;;frühere Exmatrikulation;20062;99999;

1 1 Ersteinschreibung 20062 99999
2 2 Neueinschreibung 20062 99999
3 3 Rückmeldung 20062 99999
4 4 Beurlaubung 20062 99999
5 5 Exmatrikulation 20062 99999
6 6 frühere Exmatrikulation 20062 99999

20
src/de/statspez/plausi/astat/csv/ExmaGrund.csv

@ -1,10 +1,10 @@ @@ -1,10 +1,10 @@
0;;Exmatrikulation aufgrund landesrechtlicher Bestimmungen
1;;Beendigung des Studiums nach bestandener Prüfung
2;;Unterbrechung des Studiums
3;;Beendigung des Studiums ohne Prüfung, da keine mehr möglich
4;;Hochschulwechsel
5;;Antritt Freiwilligendienst
6;;Endgültiger Abbruch des Studiums
7;;Streichung durch die Hochschule wegen fehlender Rückmeldung bzw. fehlender Krankenversicherung
8;;Beendigung des Studiums nach endgültig nicht bestandener Prüfung/Vorprüfung
9;;Sonstige Gründe
0;;Exmatrikulation aufgrund landesrechtlicher Bestimmungen;20062;99999;
1;;Beendigung des Studiums nach bestandener Prüfung;20062;99999;
2;;Unterbrechung des Studiums;20092;99999;
3;;Beendigung des Studiums ohne Prüfung, da keine mehr möglich;20062;99999;
4;;Hochschulwechsel;20062;99999;
5;;Antritt Freiwilligendienst;20182;99999;
6;;Endgültiger Abbruch des Studiums;20092;99999;
7;;Streichung durch die Hochschule wegen fehlender Rückmeldung bzw. fehlender Krankenversicherung;20062;99999;
8;;Beendigung des Studiums nach endgültig nicht bestandener Prüfung/Vorprüfung;20062;99999;
9;;Sonstige Gründe;20062;99999;

1 0 Exmatrikulation aufgrund landesrechtlicher Bestimmungen 20062 99999
2 1 Beendigung des Studiums nach bestandener Prüfung 20062 99999
3 2 Unterbrechung des Studiums 20092 99999
4 3 Beendigung des Studiums ohne Prüfung, da keine mehr möglich 20062 99999
5 4 Hochschulwechsel 20062 99999
6 5 Antritt Freiwilligendienst 20182 99999
7 6 Endgültiger Abbruch des Studiums 20092 99999
8 7 Streichung durch die Hochschule wegen fehlender Rückmeldung bzw. fehlender Krankenversicherung 20062 99999
9 8 Beendigung des Studiums nach endgültig nicht bestandener Prüfung/Vorprüfung 20062 99999
10 9 Sonstige Gründe 20062 99999

44
src/de/statspez/plausi/astat/csv/FachrichtungenGast.csv

@ -5,27 +5,27 @@ @@ -5,27 +5,27 @@
05;050;Geschichte;01
06;155;Islamische Studien/Islamische Theologie;01
07;060;Informations- und Bibliothekswissenschaften;01
08;070;Allg. und vergleichende Literatur- und Sprachwissenschaft;01
08;070;Allgemeine und vergleichende Literatur- und Sprachwissenschaft;01
09;080;Altphilologie (klass. Philologie), Neugriechisch;01
10;090;Germanistik (Deutsch, germanische Sprachen ohne Anglistik);01
11;100;Anglistik, Amerikanistik;01
12;110;Romanistik;01
13;120;Slawistik, Baltistik, Finno-Ugristik;01
14;130;Sonstige Sprach- und Kulturwissenschaften;01
16;140;Kulturwissensch. i.e.S.;01
20;180;Sport, Sportwissenschaft;02
21;190;Regionalwissenschaften;03
22;200;Wirtschafts- und Gesellschaftslehre allgemein;03
23;210;Politikwissenschaft;03
24;220;Sozialwesen;03
25;230;Rechtswissenschaften;03
26;240;Sozialwissenschaften/Soziologie;03
27;250;Verwaltungswissenschaften;03
28;273;Psychologie;03
29;260;Wirtschaftswissenschaften;03
30;276;Erziehungswissenschaften;03
31;270;Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt;03
32;278;Kommunikationswissenschaft/Publizistik;03
16;140;Kulturwissenschaften i.e.S.;01
20;880;Sport, Sportwissenschaft;13
21;810;Regionalwissenschaften;13
22;800;Wirtschafts- und Gesellschaftslehre, Sport allgemein;13
23;820;Politikwissenschaft;13
24;840;Sozialwesen;13
25;600;Rechtswissenschaften;11
26;830;Sozialwissenschaften/Soziologie;13
27;610;Verwaltungswissenschaften;11
28;850;Psychologie;13
29;700;Wirtschaftswissenschaften;12
30;860;Erziehungswissenschaften;13
31;710;Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt;12
32;870;Kommunikationswissenschaft/Publizistik;13
33;280;Mathematik, Naturwissenschaften allgemein;04
34;290;Mathematik;04
36;310;Physik, Astronomie;04
@ -36,12 +36,12 @@ @@ -36,12 +36,12 @@
41;350;Geowissenschaften (ohne Geographie);04
42;360;Geographie;04
44;370;Humanmedizin (ohne Zahnmedizin);05
48;365;Gesundheitswissenschaften allgemein;05
48;365;Gesundheitswissenschaften;05
52;380;Zahnmedizin;05
54;390;Veterinärmedizin;07
61;400;Agrar-, Forst- und Ernährungswiss. allgemein;07
62;410;Agrarwissenschaften, Lebensmittel- und Getränketechnologie;07
63;420;Landespflege, Umweltgestaltung;07
63;420;Landschaftsgestaltung/Naturschutz;07
64;430;Forstwissenschaft, Holzwirtschaft;07
65;440;Ernährungs- und Haushaltswissenschaften;07
67;450;Ingenieurwesen allgemein;08
@ -54,12 +54,14 @@ @@ -54,12 +54,14 @@
74;510;Raumplanung;08
75;520;Bauingenieurwesen;08
76;530;Vermessungswesen;08
77;455;Wirtschaftsingenieurwesen mit ingenieurwissenschaftlichem Schwerpunkt;08
77;532;Wirtschaftsingenieurwesen mit ingenieurwissenschaftlichem Schwerpunkt;08
78;540;Kunst, Kunstwissenschaft allgemein;09
79;550;Bildende Kunst;09
80;560;Gestaltung;09
81;536;Materialwissenschaft und Werkstofftechnik;08
82;570;Darstellende Kunst, Film und Fernsehen, Theaterwissenschaft;09
83;580;Musik, Musikwissenschaft;09
98;590;Allgemein (Allg. Zugang zu Lehrveranstaltungen, Fachr. nicht bestimmbar);10
99;600;Ungeklärt/Unbekannt;10
83;580;Musik;09
84;585;Kunstwissenschaft/-pädagogik;09
85;590;Musikwissenschaft/-pädagogik;09
98;950;Allgemein (Allg. Zugang zu Lehrveranstaltungen, Fachr. nicht bestimmbar);90
99;960;Ungeklärt/Unbekannt;90

1 01 010 Geisteswissenschaften allgemein 01
5 05 050 Geschichte 01
6 06 155 Islamische Studien/Islamische Theologie 01
7 07 060 Informations- und Bibliothekswissenschaften 01
8 08 070 Allg. und vergleichende Literatur- und Sprachwissenschaft Allgemeine und vergleichende Literatur- und Sprachwissenschaft 01
9 09 080 Altphilologie (klass.Philologie), Neugriechisch Altphilologie (klass. Philologie), Neugriechisch 01
10 10 090 Germanistik (Deutsch, germanische Sprachen ohne Anglistik) 01
11 11 100 Anglistik, Amerikanistik 01
12 12 110 Romanistik 01
13 13 120 Slawistik, Baltistik, Finno-Ugristik 01
14 14 130 Sonstige Sprach- und Kulturwissenschaften 01
15 16 140 Kulturwissensch. i.e.S. Kulturwissenschaften i.e.S. 01
16 20 180 880 Sport, Sportwissenschaft 02 13
17 21 190 810 Regionalwissenschaften 03 13
18 22 200 800 Wirtschafts- und Gesellschaftslehre allgemein Wirtschafts- und Gesellschaftslehre, Sport allgemein 03 13
19 23 210 820 Politikwissenschaft 03 13
20 24 220 840 Sozialwesen 03 13
21 25 230 600 Rechtswissenschaften 03 11
22 26 240 830 Sozialwissenschaften/Soziologie 03 13
23 27 250 610 Verwaltungswissenschaften 03 11
24 28 273 850 Psychologie 03 13
25 29 260 700 Wirtschaftswissenschaften 03 12
26 30 276 860 Erziehungswissenschaften 03 13
27 31 270 710 Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt 03 12
28 32 278 870 Kommunikationswissenschaft/Publizistik 03 13
29 33 280 Mathematik, Naturwissenschaften allgemein 04
30 34 290 Mathematik 04
31 36 310 Physik, Astronomie 04
36 41 350 Geowissenschaften (ohne Geographie) 04
37 42 360 Geographie 04
38 44 370 Humanmedizin (ohne Zahnmedizin) 05
39 48 365 Gesundheitswissenschaften allgemein Gesundheitswissenschaften 05
40 52 380 Zahnmedizin 05
41 54 390 Veterinärmedizin 07
42 61 400 Agrar-, Forst- und Ernährungswiss. allgemein 07
43 62 410 Agrarwissenschaften, Lebensmittel- und Getränketechnologie 07
44 63 420 Landespflege, Umweltgestaltung Landschaftsgestaltung/Naturschutz 07
45 64 430 Forstwissenschaft, Holzwirtschaft 07
46 65 440 Ernährungs- und Haushaltswissenschaften 07
47 67 450 Ingenieurwesen allgemein 08
54 74 510 Raumplanung 08
55 75 520 Bauingenieurwesen 08
56 76 530 Vermessungswesen 08
57 77 455 532 Wirtschaftsingenieurwesen mit ingenieurwissenschaftlichem Schwerpunkt 08
58 78 540 Kunst, Kunstwissenschaft allgemein 09
59 79 550 Bildende Kunst 09
60 80 560 Gestaltung 09
61 81 536 Materialwissenschaft und Werkstofftechnik 08
62 82 570 Darstellende Kunst, Film und Fernsehen, Theaterwissenschaft 09
63 83 580 Musik, Musikwissenschaft Musik 09
64 98 84 590 585 Allgemein (Allg. Zugang zu Lehrveranstaltungen, Fachr. nicht bestimmbar) Kunstwissenschaft/-pädagogik 10 09
65 99 85 600 590 Ungeklärt/Unbekannt Musikwissenschaft/-pädagogik 10 09
66 98 950 Allgemein (Allg. Zugang zu Lehrveranstaltungen, Fachr. nicht bestimmbar) 90
67 99 960 Ungeklärt/Unbekannt 90

23
src/de/statspez/plausi/astat/csv/Faechergruppe.csv

@ -1,11 +1,12 @@ @@ -1,11 +1,12 @@
01;;Geisteswissenschaften
02;;Sport
03;;Rechts-, Wirtschafts- und Sozialwissenschaften
04;;Mathematik, Naturwissenschaften
05;;Humanmedizin/Gesundheitswissenschaften
07;;Agrar-, Forst- und Ernährungswissenschaften, Veterinärmedizin
08;;Ingenieurwissenschaften
09;;Kunst, Kunstwissenschaft
10;;Außerhalb der Studienbereichsgliederung/Sonstige Fächer
15;;Zentrale Einrichtungen (ohne klinikspezifische Einrichtungen)
20;;Zentrale Einrichtungen der Hochschulkliniken (nur Humanmedizin)
01;;Geisteswissenschaften;20152;99999;
04;;Mathematik, Naturwissenschaften;20042;99999;
05;;Humanmedizin/Gesundheitswissenschaften;20042;99999;
07;;Agrar-, Forst- und Ernährungswissenschaften, Veterinärmedizin;20152;99999;
08;;Ingenieurwissenschaften;20042;99999;
09;;Kunst, Kunstwissenschaft;20042;99999;
11;;Rechts- und Verwaltungswissenschaften;20252;99999;
12;;Wirtschaftswissenschaften;20252;99999;
13;;Sozial- und Verhaltenswissenschaften, Sport;20252;99999;
15;;Zentrale Einrichtungen (ohne klinikspezifische Einrichtungen);20042;99999;
20;;Zentrale Einrichtungen der Hochschulkliniken (nur Humanmedizin);20042;99999;
90;;Außerhalb der Studienbereichsgliederung/Sonstige Fächer;20252;99999;

1 01 Geisteswissenschaften 20152 99999
2 02 04 Sport Mathematik, Naturwissenschaften 20042 99999
3 03 05 Rechts-, Wirtschafts- und Sozialwissenschaften Humanmedizin/Gesundheitswissenschaften 20042 99999
4 04 07 Mathematik, Naturwissenschaften Agrar-, Forst- und Ernährungswissenschaften, Veterinärmedizin 20152 99999
5 05 08 Humanmedizin/Gesundheitswissenschaften Ingenieurwissenschaften 20042 99999
6 07 09 Agrar-, Forst- und Ernährungswissenschaften, Veterinärmedizin Kunst, Kunstwissenschaft 20042 99999
7 08 11 Ingenieurwissenschaften Rechts- und Verwaltungswissenschaften 20252 99999
8 09 12 Kunst, Kunstwissenschaft Wirtschaftswissenschaften 20252 99999
9 10 13 Außerhalb der Studienbereichsgliederung/Sonstige Fächer Sozial- und Verhaltenswissenschaften, Sport 20252 99999
10 15 Zentrale Einrichtungen (ohne klinikspezifische Einrichtungen) 20042 99999
11 20 Zentrale Einrichtungen der Hochschulkliniken (nur Humanmedizin) 20042 99999
12 90 Außerhalb der Studienbereichsgliederung/Sonstige Fächer 20252 99999

70
src/de/statspez/plausi/astat/csv/HZBArt.csv

@ -1,35 +1,35 @@ @@ -1,35 +1,35 @@
03;;Gymnasium (aHR);1
06;;Gesamtschule (aHR);1
17;;Erwerb an einer deutschen Schule im Ausland (aHR);1
18;;Fachgymnasium (aHR);1
21;;Berufsoberschule, Fachakademie (aHR);1
27;;Abendgymnasium/Kolleg (aHR);1
28;;Fachoberschule (aHR);1
31;;Studienkolleg (aHR);1
33;;Begabten-/Eignungsprüfung/Externenprüfung (aHR);1
34;;Beruflich Qualifizierte (aHR);1
37;;Sonstige Studienberechtigung (aHR);1
39;;Allgemeine Hochschulreife (Erwerb im Ausland);1
43;;Fachgymnasium (fgHR);2
44;;Berufsoberschule/Fachakademie/Fach- und Ingenieurschule (fgHR);2
47;;Erwerb an einer deutschen Schule im Ausland (fgHR);2
48;;Fachoberschule (fgHR);2
51;;Studienkolleg (fgHR);2
52;;Begabten-/Eignungsprüfung (fgHR);2
53;;Beruflich Qualifizierte (fgHR);2
55;;Sonstige Studienberechtigung (fgHR);2
59;;Fachgebundene Hochschulreife (Erwerb im Ausland);2
60;;Gymnasium (FHR);3
62;;Gesamtschule (FHR);3
64;;Fachgymnasium (FHR);3
65;;Berufsoberschule, Fachakademie (FHR);3
66;;Fachoberschule (FHR);3
67;;Erwerb an einer deutschen Schule im Ausland (FHR);3
70;;Abendgymnasium/Kolleg (FHR);3
71;;Beruflich Qualifizierte (FHR);3
72;;Berufsfachschule (FHR);3
73;;Fachschule (FHR);3
76;;Studienkolleg (FHR);3
77;;Begabten-/Eignungsprüfung/Externenprüfung (FHR);3
78;;Sonstige Studienberechtigung (FHR);3
79;;Fachhochschulreife (Erwerb im Ausland);3
03;;Gymnasium (aHR);20062;99999;1;
06;;Gesamtschule (aHR);20062;99999;1;
17;;Erwerb an einer deutschen Schule im Ausland (aHR);20082;99999;1;
18;;Fachgymnasium (aHR);20062;99999;1;
21;;Berufsoberschule, Fachakademie (aHR);20162;99999;1;
27;;Abendgymnasium/Kolleg (aHR);20162;99999;1;
28;;Fachoberschule (aHR);20092;99999;1;
31;;Studienkolleg (aHR);20062;99999;1;
33;;Begabten-/Eignungsprüfung/Externenprüfung (aHR);20162;99999;1;
34;;Beruflich Qualifizierte (aHR);20062;99999;1;
37;;Sonstige Studienberechtigung (aHR);20162;99999;1;
39;;Allgemeine Hochschulreife (Erwerb im Ausland);20062;99999;1;
43;;Fachgymnasium (fgHR);20062;99999;2;
44;;Berufsoberschule/Fachakademie/Fach- und Ingenieurschule (fgHR);20162;99999;2;
47;;Erwerb an einer deutschen Schule im Ausland (fgHR);20082;99999;2;
48;;Fachoberschule (fgHR);20092;99999;2;
51;;Studienkolleg (fgHR);20062;99999;2;
52;;Begabten-/Eignungsprüfung (fgHR);20162;99999;2;
53;;Beruflich Qualifizierte (fgHR);20062;99999;2;
55;;Sonstige Studienberechtigung (fgHR);20062;99999;2;
59;;Fachgebundene Hochschulreife (Erwerb im Ausland);20062;99999;2;
60;;Gymnasium (FHR);20062;99999;3;
62;;Gesamtschule (FHR);20062;99999;3;
64;;Fachgymnasium (FHR);20062;99999;3;
65;;Berufsoberschule, Fachakademie (FHR);20162;99999;3;
66;;Fachoberschule (FHR);20062;99999;3;
67;;Erwerb an einer deutschen Schule im Ausland (FHR);20082;99999;3;
70;;Abendgymnasium/Kolleg (FHR);20162;99999;3;
71;;Beruflich Qualifizierte (FHR);20062;99999;3;
72;;Berufsfachschule (FHR);20062;99999;3;
73;;Fachschule (FHR);20062;99999;3;
76;;Studienkolleg (FHR);20062;99999;3;
77;;Begabten-/Eignungsprüfung/Externenprüfung (FHR);20162;99999;3;
78;;Sonstige Studienberechtigung (FHR);20062;99999;3;
79;;Fachhochschulreife (Erwerb im Ausland);20062;99999;3;

1 03 Gymnasium (aHR) 20062 99999 1
2 06 Gesamtschule (aHR) 20062 99999 1
3 17 Erwerb an einer deutschen Schule im Ausland (aHR) 20082 99999 1
4 18 Fachgymnasium (aHR) 20062 99999 1
5 21 Berufsoberschule, Fachakademie (aHR) 20162 99999 1
6 27 Abendgymnasium/Kolleg (aHR) 20162 99999 1
7 28 Fachoberschule (aHR) 20092 99999 1
8 31 Studienkolleg (aHR) 20062 99999 1
9 33 Begabten-/Eignungsprüfung/Externenprüfung (aHR) 20162 99999 1
10 34 Beruflich Qualifizierte (aHR) 20062 99999 1
11 37 Sonstige Studienberechtigung (aHR) 20162 99999 1
12 39 Allgemeine Hochschulreife (Erwerb im Ausland) 20062 99999 1
13 43 Fachgymnasium (fgHR) 20062 99999 2
14 44 Berufsoberschule/Fachakademie/Fach- und Ingenieurschule (fgHR) 20162 99999 2
15 47 Erwerb an einer deutschen Schule im Ausland (fgHR) 20082 99999 2
16 48 Fachoberschule (fgHR) 20092 99999 2
17 51 Studienkolleg (fgHR) 20062 99999 2
18 52 Begabten-/Eignungsprüfung (fgHR) 20162 99999 2
19 53 Beruflich Qualifizierte (fgHR) 20062 99999 2
20 55 Sonstige Studienberechtigung (fgHR) 20062 99999 2
21 59 Fachgebundene Hochschulreife (Erwerb im Ausland) 20062 99999 2
22 60 Gymnasium (FHR) 20062 99999 3
23 62 Gesamtschule (FHR) 20062 99999 3
24 64 Fachgymnasium (FHR) 20062 99999 3
25 65 Berufsoberschule, Fachakademie (FHR) 20162 99999 3
26 66 Fachoberschule (FHR) 20062 99999 3
27 67 Erwerb an einer deutschen Schule im Ausland (FHR) 20082 99999 3
28 70 Abendgymnasium/Kolleg (FHR) 20162 99999 3
29 71 Beruflich Qualifizierte (FHR) 20062 99999 3
30 72 Berufsfachschule (FHR) 20062 99999 3
31 73 Fachschule (FHR) 20062 99999 3
32 76 Studienkolleg (FHR) 20062 99999 3
33 77 Begabten-/Eignungsprüfung/Externenprüfung (FHR) 20162 99999 3
34 78 Sonstige Studienberechtigung (FHR) 20062 99999 3
35 79 Fachhochschulreife (Erwerb im Ausland) 20062 99999 3

18
src/de/statspez/plausi/astat/csv/HochschulArt.csv

@ -1,9 +1,9 @@ @@ -1,9 +1,9 @@
1;;Universitäten
3;;Pädagogische Hochschulen
4;;Theologische Hochschulen
5;;Kunsthochschulen
6;;Fachhochschulen (ohne Verwaltungsfachhochschulen)
7;;Verwaltungsfachhochschulen
8;;Sonstige Hochschulen
9;;Hochschulen im Ausland
B;;Berufsakademien
1;;Universitäten;20042;99999;
3;;Pädagogische Hochschulen;20042;99999;
4;;Theologische Hochschulen;20042;99999;
5;;Kunsthochschulen;20042;99999;
6;;Fachhochschulen (ohne Verwaltungsfachhochschulen);20042;99999;
7;;Verwaltungsfachhochschulen;20042;99999;
8;;Sonstige Hochschulen;20042;99999;
9;;Hochschulen im Ausland;20042;99999;
B;;Berufsakademien;20172;99999;

1 1 Universitäten 20042 99999
2 3 Pädagogische Hochschulen 20042 99999
3 4 Theologische Hochschulen 20042 99999
4 5 Kunsthochschulen 20042 99999
5 6 Fachhochschulen (ohne Verwaltungsfachhochschulen) 20042 99999
6 7 Verwaltungsfachhochschulen 20042 99999
7 8 Sonstige Hochschulen 20042 99999
8 9 Hochschulen im Ausland 20042 99999
9 B Berufsakademien 20172 99999

12
src/de/statspez/plausi/astat/csv/HochschulTraeger.csv

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
1;;Bund
2;;Land
3;;Kommune
4;;Privat
5;;Kirchlich
6;;Sonstige
1;;Bund;20042;99999;
2;;Land;20042;99999;
3;;Kommune;20042;99999;
4;;Privat;20042;99999;
5;;Kirchlich;20042;99999;
6;;Sonstige;20042;99999;

1 1 Bund 20042 99999
2 2 Land 20042 99999
3 3 Kommune 20042 99999
4 4 Privat 20042 99999
5 5 Kirchlich 20042 99999
6 6 Sonstige 20042 99999

1123
src/de/statspez/plausi/astat/csv/Hochschule.csv

File diff suppressed because it is too large Load Diff

1521
src/de/statspez/plausi/astat/csv/HochschuleErsteinschreibung.csv

File diff suppressed because it is too large Load Diff

1715
src/de/statspez/plausi/astat/csv/Hochschulfachbereich.csv

File diff suppressed because it is too large Load Diff

1639
src/de/statspez/plausi/astat/csv/Hochschulstandort.csv

File diff suppressed because it is too large Load Diff

12
src/de/statspez/plausi/astat/csv/Kontinent.csv

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
1;;Europa
2;;Afrika
3;;Amerika
4;;Asien
5;;Australien und Ozeanien
9;;Staatenlos, Ungeklärt, Ohne Angabe
1;;Europa;20042;99999;
2;;Afrika;20042;99999;
3;;Amerika;20042;99999;
4;;Asien;20042;99999;
5;;Australien und Ozeanien;20042;99999;
9;;Staatenlos, Ungeklärt, Ohne Angabe;20042;99999;

1 1 Europa 20042 99999
2 2 Afrika 20042 99999
3 3 Amerika 20042 99999
4 4 Asien 20042 99999
5 5 Australien und Ozeanien 20042 99999
6 9 Staatenlos, Ungeklärt, Ohne Angabe 20042 99999

1464
src/de/statspez/plausi/astat/csv/Kreise.csv

File diff suppressed because it is too large Load Diff

16
src/de/statspez/plausi/astat/csv/Note.csv

@ -1,8 +1,8 @@ @@ -1,8 +1,8 @@
0;;Mit Auszeichnung
1;;Sehr gut
2;;Gut
3;;Befriedigend
4;;Ausreichend
7;;Vollbefriedigend
8;;Bestanden, Note nicht bekannt
9;;(Mangelhaft/Ungenügend), Endgültig nicht bestanden
0;;Mit Auszeichnung;20062;99999;
1;;Sehr gut;20062;99999;
2;;Gut;20062;99999;
3;;Befriedigend;20062;99999;
4;;Ausreichend;20062;99999;
7;;Vollbefriedigend;20062;99999;
8;;Bestanden, Note nicht bekannt;20062;99999;
9;;(Mangelhaft/Ungenügend), Endgültig nicht bestanden;20062;99999;

1 0 Mit Auszeichnung 20062 99999
2 1 Sehr gut 20062 99999
3 2 Gut 20062 99999
4 3 Befriedigend 20062 99999
5 4 Ausreichend 20062 99999
6 7 Vollbefriedigend 20062 99999
7 8 Bestanden, Note nicht bekannt 20062 99999
8 9 (Mangelhaft/Ungenügend), Endgültig nicht bestanden 20062 99999

30
src/de/statspez/plausi/astat/csv/Pruefungsgruppe.csv

@ -1,15 +1,15 @@ @@ -1,15 +1,15 @@
05;;Universitärer Abschluss (ohne Lehramtsprüfungen)
10;;Promotionen
15;;Lehramt (Bachelor, Master, 1. Staatsexamen) an Grundschulen / Primarstufe
20;;Lehramt (Bachelor, Master, 1. Staatsexamen) Stufenübergr. Prüfung Sekundarst. I/Grundsch./ Primarst.
25;;Lehramt (Bachelor, Master, 1. Staatsexamen) an Sekundarstufe I
30;;Lehramt (Bachelor, Master, 1. Staatsexamen) Stufenübergr. Prüfung Sekundarst. II/Sekundarst. I
35;;Lehramt (Bachelor, Master, 1. Staatsexamen) an Gymnasien/Sekundarst. II, allgemeinbildende Schulen
40;;Lehramt (Bachelor, Master, 1. Staatsexamen) für Sonderpädagogik
45;;Lehramt (Bachelor, Master, 1. Staatsexamen) an Beruflichen Schulen / Sekundarst. II, berufl. Schulen
47;;LA Bachelor
48;;LA Master
50;;Sonstige LÄ nach Schularten / Schulstufen
55;;Künstlerischer Abschluss
60;;Fachhochschulabschluss
65;;Sonstiger Abschluss
05;;Universitärer Abschluss (ohne Lehramtsprüfungen);20072;99999;
10;;Promotionen;20072;99999;
15;;Lehramt (Bachelor, Master, 1. Staatsexamen) an Grundschulen / Primarstufe;20222;99999;
20;;Lehramt (Bachelor, Master, 1. Staatsexamen) Stufenübergr. Prüfung Sekundarst. I/Grundsch./ Primarst.;20222;99999;
25;;Lehramt (Bachelor, Master, 1. Staatsexamen) an Sekundarstufe I;20222;99999;
30;;Lehramt (Bachelor, Master, 1. Staatsexamen) Stufenübergr. Prüfung Sekundarst. II/Sekundarst. I;20222;99999;
35;;Lehramt (Bachelor, Master, 1. Staatsexamen) an Gymnasien/Sekundarst. II, allgemeinbildende Schulen;20222;99999;
40;;Lehramt (Bachelor, Master, 1. Staatsexamen) für Sonderpädagogik;20222;99999;
45;;Lehramt (Bachelor, Master, 1. Staatsexamen) an Beruflichen Schulen / Sekundarst. II, berufl. Schulen;20222;99999;
47;;LA Bachelor;20072;99999;
48;;LA Master;20072;99999;
50;;Sonstige LÄ nach Schularten / Schulstufen;20072;99999;
55;;Künstlerischer Abschluss;20072;99999;
60;;Fachhochschulabschluss;20072;99999;
65;;Sonstiger Abschluss;20072;99999;

1 05 Universitärer Abschluss (ohne Lehramtsprüfungen) 20072 99999
2 10 Promotionen 20072 99999
3 15 Lehramt (Bachelor, Master, 1. Staatsexamen) an Grundschulen / Primarstufe 20222 99999
4 20 Lehramt (Bachelor, Master, 1. Staatsexamen) Stufenübergr. Prüfung Sekundarst. I/Grundsch./ Primarst. 20222 99999
5 25 Lehramt (Bachelor, Master, 1. Staatsexamen) an Sekundarstufe I 20222 99999
6 30 Lehramt (Bachelor, Master, 1. Staatsexamen) Stufenübergr. Prüfung Sekundarst. II/Sekundarst. I 20222 99999
7 35 Lehramt (Bachelor, Master, 1. Staatsexamen) an Gymnasien/Sekundarst. II, allgemeinbildende Schulen 20222 99999
8 40 Lehramt (Bachelor, Master, 1. Staatsexamen) für Sonderpädagogik 20222 99999
9 45 Lehramt (Bachelor, Master, 1. Staatsexamen) an Beruflichen Schulen / Sekundarst. II, berufl. Schulen 20222 99999
10 47 LA Bachelor 20072 99999
11 48 LA Master 20072 99999
12 50 Sonstige LÄ nach Schularten / Schulstufen 20072 99999
13 55 Künstlerischer Abschluss 20072 99999
14 60 Fachhochschulabschluss 20072 99999
15 65 Sonstiger Abschluss 20072 99999

2
src/de/statspez/plausi/astat/csv/ReadMeGasthoererstatistik.txt

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
Informationen zur ausgegebenen Statistik
Name: Gasthoererstatistik
Version: 1
Zeitraum: WS 2024
Zeitraum: WS 2025

2
src/de/statspez/plausi/astat/csv/ReadMePromovierendenstatistik.txt

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
Informationen zur ausgegebenen Statistik
Name: Promovierendenstatistik
Version: 0
Zeitraum: WS 2024
Zeitraum: WS 2025

2
src/de/statspez/plausi/astat/csv/ReadMeStudentenstatistik_Neu.txt

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
Informationen zur ausgegebenen Statistik
Name: Studentenstatistik_Neu
Version: 0
Zeitraum: WS 2024
Zeitraum: WS 2025

128
src/de/statspez/plausi/astat/csv/STB.csv

@ -1,63 +1,65 @@ @@ -1,63 +1,65 @@
01;;Geisteswissenschaften allgemein;01
02;;Evangelische Theologie, -Religionslehre;01
03;;Katholische Theologie, -Religionslehre;01
04;;Philosophie;01
05;;Geschichte;01
06;;Informations- und Bibliothekswissenschaften;01
07;;Allgemeine und vergleichende Literatur- und Sprachwissenschaft;01
08;;Altphilologie (klassische Philologie), Neugriechisch;01
09;;Germanistik (Deutsch, germanische Sprachen ohne Anglistik);01
10;;Anglistik, Amerikanistik;01
11;;Romanistik;01
12;;Slawistik, Baltistik, Finno-Ugristik;01
13;;Sonstige Sprach- und Kulturwissenschaften;01
14;;Kulturwissenschaften i.e.S.;01
18;;Islamische Studien/Islamische Theologie;01
19;;Medienwissenschaft;01
22;;Sport, Sportwissenschaft;02
23;;Rechts-, Wirtschafts- und Sozialwissenschaften allgemein;03
24;;Regionalwissenschaften;03
25;;Politikwissenschaft;03
26;;Sozialwissenschaften/Soziologie;03
27;;Sozialwesen;03
28;;Rechtswissenschaften;03
29;;Verwaltungswissenschaften;03
30;;Wirtschaftswissenschaften;03
31;;Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt;03
32;;Psychologie;03
33;;Erziehungswissenschaften;03
34;;Kommunikationswissenschaft/Publizistik;03
36;;Mathematik, Naturwissenschaften allgemein;04
37;;Mathematik;04
39;;Physik, Astronomie;04
40;;Chemie;04
41;;Pharmazie;04
42;;Biologie;04
43;;Geowissenschaften (ohne Geographie);04
44;;Geographie;04
48;;Gesundheitswissenschaften allgemein;05
49;;Humanmedizin (ohne Zahnmedizin);05
50;;Zahnmedizin;05
51;;Veterinärmedizin;07
57;;Landespflege, Umweltgestaltung;07
58;;Agrarwissenschaften, Lebensmittel- und Getränketechnologie;07
59;;Forstwissenschaft, Holzwirtschaft;07
60;;Ernährungs- und Haushaltswissenschaften;07
61;;Ingenieurwesen allgemein;08
62;;Bergbau, Hüttenwesen;08
63;;Maschinenbau/Verfahrenstechnik;08
64;;Elektrotechnik und Informationstechnik;08
65;;Verkehrstechnik, Nautik;08
66;;Architektur, Innenarchitektur;08
67;;Raumplanung;08
68;;Bauingenieurwesen;08
69;;Vermessungswesen;08
70;;Wirtschaftsingenieurwesen mit ingenieurwissenschaftlichem Schwerpunkt;08
71;;Informatik;08
72;;Materialwissenschaft und Werkstofftechnik;08
74;;Kunst, Kunstwissenschaft allgemein;09
75;;Bildende Kunst;09
76;;Gestaltung;09
77;;Darstellende Kunst, Film und Fernsehen, Theaterwissenschaft;09
78;;Musik, Musikwissenschaft;09
83;;Außerhalb der Studienbereichsgliederung;10
01;;Geisteswissenschaften allgemein;20152;99999;01;
02;;Evangelische Theologie, -Religionslehre;20072;99999;01;
03;;Katholische Theologie, -Religionslehre;20072;99999;01;
04;;Philosophie;20072;99999;01;
05;;Geschichte;20072;99999;01;
06;;Informations- und Bibliothekswissenschaften;20202;99999;01;
07;;Allgemeine und vergleichende Literatur- und Sprachwissenschaft;20072;99999;01;
08;;Altphilologie (klassische Philologie), Neugriechisch;20072;99999;01;
09;;Germanistik (Deutsch, germanische Sprachen ohne Anglistik);20072;99999;01;
10;;Anglistik, Amerikanistik;20072;99999;01;
11;;Romanistik;20072;99999;01;
12;;Slawistik, Baltistik, Finno-Ugristik;20072;99999;01;
13;;Sonstige Sprach- und Kulturwissenschaften;20202;99999;01;
14;;Kulturwissenschaften i.e.S.;20072;99999;01;
18;;Islamische Studien/Islamische Theologie;20202;99999;01;
19;;Medienwissenschaft;20202;99999;01;
23;;Sozial- und Verhaltenswissenschaften, Sport allgemein;20252;99999;13;
24;;Regionalwissenschaften;20252;99999;13;
25;;Politikwissenschaft;20252;99999;13;
26;;Sozialwissenschaften/Soziologie;20252;99999;13;
27;;Sozialwesen;20252;99999;13;
28;;Rechtswissenschaften;20252;99999;11;
29;;Verwaltungswissenschaften;20252;99999;11;
30;;Wirtschaftswissenschaften;20252;99999;12;
31;;Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt;20252;99999;12;
32;;Psychologie;20252;99999;13;
33;;Erziehungswissenschaften;20252;99999;13;
34;;Kommunikationswissenschaft/Publizistik;20252;99999;13;
35;;Sport, Sportwissenschaft;20252;99999;13;
36;;Mathematik, Naturwissenschaften allgemein;20072;99999;04;
37;;Mathematik;20072;99999;04;
39;;Physik, Astronomie;20072;99999;04;
40;;Chemie;20072;99999;04;
41;;Pharmazie;20072;99999;04;
42;;Biologie;20072;99999;04;
43;;Geowissenschaften (ohne Geographie);20072;99999;04;
44;;Geographie;20072;99999;04;
48;;Gesundheitswissenschaften;20252;99999;05;
49;;Humanmedizin (ohne Zahnmedizin);20072;99999;05;
50;;Zahnmedizin;20072;99999;05;
51;;Veterinärmedizin;20152;99999;07;
57;;Landschaftsgestaltung/Naturschutz;20252;99999;07;
58;;Agrarwissenschaften, Lebensmittel- und Getränketechnologie;20072;99999;07;
59;;Forstwissenschaft, Holzwirtschaft;20072;99999;07;
60;;Ernährungs- und Haushaltswissenschaften;20072;99999;07;
61;;Ingenieurwesen allgemein;20072;99999;08;
62;;Bergbau, Hüttenwesen;20072;99999;08;
63;;Maschinenbau/Verfahrenstechnik;20072;99999;08;
64;;Elektrotechnik und Informationstechnik;20152;99999;08;
65;;Verkehrstechnik, Nautik;20072;99999;08;
66;;Architektur, Innenarchitektur;20072;99999;08;
67;;Raumplanung;20072;99999;08;
68;;Bauingenieurwesen;20072;99999;08;
69;;Vermessungswesen;20072;99999;08;
70;;Wirtschaftsingenieurwesen mit ingenieurwissenschaftlichem Schwerpunkt;20092;99999;08;
71;;Informatik;20152;99999;08;
72;;Materialwissenschaft und Werkstofftechnik;20152;99999;08;
74;;Kunst, Kunstwissenschaft allgemein;20072;99999;09;
75;;Bildende Kunst;20072;99999;09;
76;;Gestaltung;20072;99999;09;
77;;Darstellende Kunst, Film und Fernsehen, Theaterwissenschaft;20072;99999;09;
78;;Musik;20252;99999;09;
79;;Kunstwissenschaft/-pädagogik;20252;99999;09;
80;;Musikwissenschaft/-pädagogik;20252;99999;09;
83;;Außerhalb der Studienbereichsgliederung;20252;99999;90;

1 01 Geisteswissenschaften allgemein 20152 99999 01
2 02 Evangelische Theologie, -Religionslehre 20072 99999 01
3 03 Katholische Theologie, -Religionslehre 20072 99999 01
4 04 Philosophie 20072 99999 01
5 05 Geschichte 20072 99999 01
6 06 Informations- und Bibliothekswissenschaften 20202 99999 01
7 07 Allgemeine und vergleichende Literatur- und Sprachwissenschaft 20072 99999 01
8 08 Altphilologie (klassische Philologie), Neugriechisch 20072 99999 01
9 09 Germanistik (Deutsch, germanische Sprachen ohne Anglistik) 20072 99999 01
10 10 Anglistik, Amerikanistik 20072 99999 01
11 11 Romanistik 20072 99999 01
12 12 Slawistik, Baltistik, Finno-Ugristik 20072 99999 01
13 13 Sonstige Sprach- und Kulturwissenschaften 20202 99999 01
14 14 Kulturwissenschaften i.e.S. 20072 99999 01
15 18 Islamische Studien/Islamische Theologie 20202 99999 01
16 19 Medienwissenschaft 20202 99999 01
17 22 23 Sport, Sportwissenschaft Sozial- und Verhaltenswissenschaften, Sport allgemein 20252 99999 02 13
18 23 24 Rechts-, Wirtschafts- und Sozialwissenschaften allgemein Regionalwissenschaften 20252 99999 03 13
19 24 25 Regionalwissenschaften Politikwissenschaft 20252 99999 03 13
20 25 26 Politikwissenschaft Sozialwissenschaften/Soziologie 20252 99999 03 13
21 26 27 Sozialwissenschaften/Soziologie Sozialwesen 20252 99999 03 13
22 27 28 Sozialwesen Rechtswissenschaften 20252 99999 03 11
23 28 29 Rechtswissenschaften Verwaltungswissenschaften 20252 99999 03 11
24 29 30 Verwaltungswissenschaften Wirtschaftswissenschaften 20252 99999 03 12
25 30 31 Wirtschaftswissenschaften Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt 20252 99999 03 12
26 31 32 Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt Psychologie 20252 99999 03 13
27 32 33 Psychologie Erziehungswissenschaften 20252 99999 03 13
28 33 34 Erziehungswissenschaften Kommunikationswissenschaft/Publizistik 20252 99999 03 13
29 34 35 Kommunikationswissenschaft/Publizistik Sport, Sportwissenschaft 20252 99999 03 13
30 36 Mathematik, Naturwissenschaften allgemein 20072 99999 04
31 37 Mathematik 20072 99999 04
32 39 Physik, Astronomie 20072 99999 04
33 40 Chemie 20072 99999 04
34 41 Pharmazie 20072 99999 04
35 42 Biologie 20072 99999 04
36 43 Geowissenschaften (ohne Geographie) 20072 99999 04
37 44 Geographie 20072 99999 04
38 48 Gesundheitswissenschaften allgemein Gesundheitswissenschaften 20252 99999 05
39 49 Humanmedizin (ohne Zahnmedizin) 20072 99999 05
40 50 Zahnmedizin 20072 99999 05
41 51 Veterinärmedizin 20152 99999 07
42 57 Landespflege, Umweltgestaltung Landschaftsgestaltung/Naturschutz 20252 99999 07
43 58 Agrarwissenschaften, Lebensmittel- und Getränketechnologie 20072 99999 07
44 59 Forstwissenschaft, Holzwirtschaft 20072 99999 07
45 60 Ernährungs- und Haushaltswissenschaften 20072 99999 07
46 61 Ingenieurwesen allgemein 20072 99999 08
47 62 Bergbau, Hüttenwesen 20072 99999 08
48 63 Maschinenbau/Verfahrenstechnik 20072 99999 08
49 64 Elektrotechnik und Informationstechnik 20152 99999 08
50 65 Verkehrstechnik, Nautik 20072 99999 08
51 66 Architektur, Innenarchitektur 20072 99999 08
52 67 Raumplanung 20072 99999 08
53 68 Bauingenieurwesen 20072 99999 08
54 69 Vermessungswesen 20072 99999 08
55 70 Wirtschaftsingenieurwesen mit ingenieurwissenschaftlichem Schwerpunkt 20092 99999 08
56 71 Informatik 20152 99999 08
57 72 Materialwissenschaft und Werkstofftechnik 20152 99999 08
58 74 Kunst, Kunstwissenschaft allgemein 20072 99999 09
59 75 Bildende Kunst 20072 99999 09
60 76 Gestaltung 20072 99999 09
61 77 Darstellende Kunst, Film und Fernsehen, Theaterwissenschaft 20072 99999 09
62 78 Musik, Musikwissenschaft Musik 20252 99999 09
63 83 79 Außerhalb der Studienbereichsgliederung Kunstwissenschaft/-pädagogik 20252 99999 10 09
64 80 Musikwissenschaft/-pädagogik 20252 99999 09
65 83 Außerhalb der Studienbereichsgliederung 20252 99999 90

502
src/de/statspez/plausi/astat/csv/Staat.csv

@ -1,251 +1,251 @@ @@ -1,251 +1,251 @@
000;1001;Deutschland;1;1
112;1810;Gibraltar (Britisches Überseegebiet);0;1
113;1820;Guernsey (Britisches Überseegebiet);0;1
114;1840;Jersey (Britisches Überseegebiet);0;1
115;1830;Insel Man (Britisches Überseegebiet);0;1
116;1860;Svalbard und Jan Mayen (u. a. Bäreninsel, Spitzbergen) (Norwegisches Überseegebiet);0;1
121;1100;Albanien;0;1
122;1140;Bosnien und Herzegowina;0;1
123;1120;Andorra;0;1
124;1005;Belgien;1;1
125;1007;Bulgarien;1;1
126;1009;Dänemark;1;1
127;1013;Estland;1;1
128;1017;Finnland;1;1
129;1021;Frankreich;1;1
130;1035;Kroatien;1;1
131;1077;Slowenien;1;1
134;1025;Griechenland;1;1
135;1029;Irland;1;1
136;1180;Island;0;1
137;1033;Italien;1;1
139;1037;Lettland;1;1
140;1290;Montenegro;0;1
141;1220;Liechtenstein;0;1
142;1041;Litauen;1;1
143;1045;Luxemburg;1;1
144;1295;Nordmazedonien;0;1
145;1049;Malta;1;1
146;1260;Moldau, Republik;0;1
147;1280;Monaco;0;1
148;1053;Niederlande;1;1
149;1300;Norwegen;0;1
150;1190;Kosovo;0;1
151;1057;Österreich;1;1
152;1061;Polen;1;1
153;1065;Portugal;1;1
154;1067;Rumänien;1;1
155;1073;Slowakei;1;1
156;1360;San Marino;0;1
157;1069;Schweden;1;1
158;1380;Schweiz;0;1
160;1340;Russische Föderation;0;1
161;1081;Spanien;1;1
163;1420;Türkei;0;1
164;1085;Tschechien;1;1
165;1089;Ungarn;1;1
166;1440;Ukraine;0;1
167;1460;Vatikanstadt;0;1
168;1470;Vereinigtes Königreich;0;1
169;1130;Belarus;0;1
170;1390;Serbien;0;1
181;1097;Zypern;1;1
182;1850;Färöer (Dänisches Überseegebiet);0;1
185;1800;Britisches Überseegebiet außerhalb Europas;0;1
211;2810;Mayotte (Französisches Überseegebiet);0;2
214;2820;Réunion (Französisches Überseegebiet);0;2
216;2830;Spanische Hoheitsplätze in Nordafrika (Spanisches Überseegebiet);0;2
221;2045;Algerien;0;2
223;2060;Angola;0;2
224;2165;Eritrea;0;2
225;2030;Äthiopien;0;2
226;2345;Lesotho;0;2
227;2090;Botsuana;0;2
229;2075;Benin;0;2
230;2150;Dschibuti;0;2
231;2135;Cote d'Ivoire;0;2
232;2525;Nigeria;0;2
233;2630;Simbabwe;0;2
236;2180;Gabun;0;2
237;2195;Gambia;0;2
238;2210;Ghana;0;2
239;2450;Mauretanien;0;2
242;2130;Cabo Verde;0;2
243;2285;Kenia;0;2
244;2300;Komoren;0;2
245;2330;Kongo, Republik;0;2
246;2315;Kongo, Dem. Republik;0;2
247;2360;Liberia;0;2
248;2375;Libyen;0;2
249;2390;Madagaskar;0;2
251;2420;Mali;0;2
252;2435;Marokko;0;2
253;2465;Mauritius;0;2
254;2480;Mosambik;0;2
255;2510;Niger;0;2
256;2405;Malawi;0;2
257;2555;Sambia;0;2
258;2105;Burkina Faso;0;2
259;2240;Guinea-Bissau;0;2
261;2225;Guinea;0;2
262;2255;Kamerun;0;2
263;2675;Südafrika;0;2
265;2540;Ruanda;0;2
267;2495;Namibia;0;2
268;2570;Sao Tome und Principe;0;2
269;2585;Senegal;0;2
271;2600;Seychellen;0;2
272;2615;Sierra Leone;0;2
273;2645;Somalia;0;2
274;2015;Äquatorialguinea;0;2
277;2665;Sudan;0;2
278;2670;Südsudan;0;2
281;2170;Eswatini;0;2
282;2705;Tansania, Ver. Republik;0;2
283;2720;Togo;0;2
284;2735;Tschad;0;2
285;2750;Tunesien;0;2
286;2765;Uganda;0;2
287;2000;Ägypten;0;2
289;2780;Zentralafrik. Republik;0;2
291;2120;Burundi;0;2
311;3910;Aruba (Niederländisches Überseegebiet);0;3
315;3940;Französisch-Guayana (Französisches Überseegebiet);0;3
316;3900;Amerikanische Jungferninseln (US-Überseegebiet);0;3
317;3945;Guadeloupe (Französisches Überseegebiet);0;3
319;3950;Martinique (Französisches Überseegebiet);0;3
320;3000;Antigua und Barbuda;0;3
321;3920;Curaçao (Niederländisches Überseegebiet);0;3
322;3075;Barbados;0;3
323;3025;Argentinien;0;3
324;3050;Bahamas;0;3
325;3905;Puerto Rico (US-Überseegebiet);0;3
326;3125;Bolivien;0;3
327;3150;Brasilien;0;3
328;3375;Guyana;0;3
329;3955;St. Barthélemy (Französisches Überseegebiet);0;3
330;3100;Belize;0;3
331;3960;St. Martin (französischer Teil) (Französisches Überseegebiet);0;3
332;3175;Chile;0;3
333;3225;Dominica;0;3
334;3200;Costa Rica;0;3
335;3250;Dominikanische Republik;0;3
336;3275;Ecuador;0;3
337;3300;El Salvador;0;3
338;3965;St. Pierre und Miquelon (Französisches Überseegebiet);0;3
340;3325;Grenada;0;3
341;3925;St. Martin (niederländischer Teil) (Niederländisches Überseegebiet);0;3
342;3930;Grönland (Dänisches Überseegebiet);0;3
343;3970;Navassa (US-Überseegebiet);0;3
344;3915;Bonaire, Saba, St. Eustatius (Niederländisches Überseegebiet);0;3
345;3350;Guatemala;0;3
346;3400;Haiti;0;3
347;3425;Honduras;0;3
348;3475;Kanada;0;3
349;3500;Kolumbien;0;3
351;3525;Kuba;0;3
352;3935;Clipperton (Französisches Überseegebiet);0;3
353;3550;Mexiko;0;3
354;3575;Nicaragua;0;3
355;3450;Jamaika;0;3
357;3600;Panama;0;3
359;3625;Paraguay;0;3
361;3650;Peru;0;3
364;3750;Suriname;0;3
365;3800;Uruguay;0;3
366;3700;St. Lucia;0;3
367;3825;Venezuela;0;3
368;3850;Vereinigte Staaten;0;3
369;3725;St. Vincent und die Grenadinen;0;3
370;3675;St. Kitts und Nevis;0;3
371;3775;Trinidad und Tobago;0;3
411;4170;Hongkong;0;4
412;4510;Macau;0;4
421;4300;Jemen;0;4
422;4020;Armenien;0;4
423;4000;Afghanistan;0;4
424;4060;Bahrain;0;4
425;4040;Aserbaidschan;0;4
426;4100;Bhutan;0;4
427;4580;Myanmar;0;4
429;4120;Brunei Darussalam;0;4
430;4160;Georgien;0;4
431;4740;Sri Lanka;0;4
432;4900;Vietnam;0;4
434;4420;Korea, Dem. Volksrepublik;0;4
436;4180;Indien;0;4
437;4200;Indonesien;0;4
438;4220;Irak;0;4
439;4240;Iran, Islamische Republik;0;4
441;4260;Israel;0;4
442;4280;Japan;0;4
444;4360;Kasachstan;0;4
445;4320;Jordanien;0;4
446;4340;Kambodscha;0;4
447;4380;Katar;0;4
448;4460;Kuwait;0;4
449;4480;Laos, Dem. Volksrepublik;0;4
450;4400;Kirgisistan;0;4
451;4500;Libanon;0;4
454;4540;Malediven;0;4
456;4620;Oman;0;4
457;4560;Mongolei;0;4
458;4600;Nepal;0;4
459;4950;Palästinensische Gebiete;0;4
460;4080;Bangladesch;0;4
461;4660;Pakistan;0;4
462;4680;Philippinen;0;4
465;4800;Taiwan;0;4
467;4440;Korea, Republik;0;4
469;4880;Vereinigte Arabische Emirate;0;4
470;4780;Tadschikistan;0;4
471;4840;Turkmenistan;0;4
472;4700;Saudi-Arabien;0;4
474;4720;Singapur;0;4
475;4760;Syrien, Arab. Republik;0;4
476;4820;Thailand;0;4
477;4860;Usbekistan;0;4
479;4140;China;0;4
482;4520;Malaysia;0;4
483;4830;Timor-Leste;0;4
499;4980;Übriges Asien;0;4
510;5865;Heard und McDonaldinseln (Australisches Überseegebiet);0;5
511;5875;Korallenmeerinseln (Australisches Überseegebiet);0;5
512;5870;Kokosinseln (Australisches Überseegebiet);0;5
513;5900;Neukaledonien (Französisches Überseegebiet);0;5
514;5835;Nördliche Marianen (US-Überseegebiet);0;5
515;5880;Norfolkinsel (Australisches Überseegebiet);0;5
517;5820;Amerikanisch-Samoa (US-Überseegebiet);0;5
519;5815;Tokelau (Neuseeländisches Überseegebiet);0;5
520;5905;Wallis und Futuna (Französisches Überseegebiet);0;5
521;5885;Weihnachtsinsel (Australisches Überseegebiet);0;5
522;5845;Bouvetinsel (Norwegisches Überseegebiet);0;5
523;5000;Australien;0;5
524;5550;Salomonen;0;5
525;5855;Ashmore- und Cartierinseln (Australisches Überseegebiet);0;5
526;5100;Fidschi;0;5
527;5050;Cookinseln;0;5
528;5890;Französisch-Polynesien (Französisches Überseegebiet);0;5
529;5825;Guam (US-Überseegebiet);0;5
530;5150;Kiribati;0;5
531;5300;Nauru;0;5
532;5750;Vanuatu;0;5
533;5400;Niue;0;5
534;5840;Kleinere Amerikanische Überseeinseln (US-Überseegebiet);0;5
535;5850;Norwegisches Antarktis-Territorium (Norwegisches Überseegebiet);0;5
536;5350;Neuseeland;0;5
537;5450;Palau;0;5
538;5500;Papua-Neuguinea;0;5
540;5700;Tuvalu;0;5
541;5650;Tonga;0;5
542;5895;Französische Süd- und Antarktisgebiete (Französisches Überseegebiet);0;5
543;5600;Samoa;0;5
544;5200;Marshallinseln;0;5
545;5250;Mikronesien;0;5
546;5805;Chilenische Antarktis (Chilenisches Überseegebiet);0;5
547;5860;Australisches Antarktis-Territorium (Australisches Überseegebiet);0;5
548;5800;Argentinische Antarktis (Argentinisches Überseegebiet);0;5
549;5810;Neuseeländische Antarktis: Ross-Nebengebiet (Neuseeländisches Überseegebiet);0;5
997;9000;Staatenlos;0;9
998;9200;Ungeklärt;0;9
999;9400;Ohne Angabe;0;9
000;1001;Deutschland;20042;99999;1;1;
112;1810;Gibraltar (Britisches Überseegebiet);20142;99999;1;0;
113;1820;Guernsey (Britisches Überseegebiet);20142;99999;1;0;
114;1840;Jersey (Britisches Überseegebiet);20142;99999;1;0;
115;1830;Insel Man (Britisches Überseegebiet);20142;99999;1;0;
116;1860;Svalbard und Jan Mayen (u. a. Bäreninsel, Spitzbergen) (Norwegisches Überseegebiet);20142;99999;1;0;
121;1100;Albanien;20042;99999;1;0;
122;1140;Bosnien und Herzegowina;20042;99999;1;0;
123;1120;Andorra;20042;99999;1;0;
124;1005;Belgien;20042;99999;1;1;
125;1007;Bulgarien;20071;99999;1;1;
126;1009;Dänemark;20042;99999;1;1;
127;1013;Estland;20042;99999;1;1;
128;1017;Finnland;20042;99999;1;1;
129;1021;Frankreich;20042;99999;1;1;
130;1035;Kroatien;20132;99999;1;1;
131;1077;Slowenien;20042;99999;1;1;
134;1025;Griechenland;20042;99999;1;1;
135;1029;Irland;20042;99999;1;1;
136;1180;Island;20042;99999;1;0;
137;1033;Italien;20042;99999;1;1;
139;1037;Lettland;20042;99999;1;1;
140;1290;Montenegro;20062;99999;1;0;
141;1220;Liechtenstein;20042;99999;1;0;
142;1041;Litauen;20042;99999;1;1;
143;1045;Luxemburg;20042;99999;1;1;
144;1295;Nordmazedonien;20191;99999;1;0;
145;1049;Malta;20042;99999;1;1;
146;1260;Moldau, Republik;20042;99999;1;0;
147;1280;Monaco;20042;99999;1;0;
148;1053;Niederlande;20042;99999;1;1;
149;1300;Norwegen;20042;99999;1;0;
150;1190;Kosovo;20082;99999;1;0;
151;1057;Österreich;20042;99999;1;1;
152;1061;Polen;20042;99999;1;1;
153;1065;Portugal;20042;99999;1;1;
154;1067;Rumänien;20071;99999;1;1;
155;1073;Slowakei;20042;99999;1;1;
156;1360;San Marino;20042;99999;1;0;
157;1069;Schweden;20042;99999;1;1;
158;1380;Schweiz;20042;99999;1;0;
160;1340;Russische Föderation;20042;99999;1;0;
161;1081;Spanien;20042;99999;1;1;
163;1420;Türkei;20042;99999;1;0;
164;1085;Tschechien;20181;99999;1;1;
165;1089;Ungarn;20042;99999;1;1;
166;1440;Ukraine;20042;99999;1;0;
167;1460;Vatikanstadt;20042;99999;1;0;
168;1470;Vereinigtes Königreich;20201;99999;1;0;
169;1130;Belarus;20221;99999;1;0;
170;1390;Serbien;20092;99999;1;0;
181;1097;Zypern;20042;99999;1;1;
182;1850;Färöer (Dänisches Überseegebiet);20142;99999;1;0;
185;1800;Britisches Überseegebiet außerhalb Europas;20142;99999;1;0;
211;2810;Mayotte (Französisches Überseegebiet);20142;99999;2;0;
214;2820;Réunion (Französisches Überseegebiet);20142;99999;2;0;
216;2830;Spanische Hoheitsplätze in Nordafrika (Spanisches Überseegebiet);20142;99999;2;0;
221;2045;Algerien;20042;99999;2;0;
223;2060;Angola;20042;99999;2;0;
224;2165;Eritrea;20042;99999;2;0;
225;2030;Äthiopien;20042;99999;2;0;
226;2345;Lesotho;20042;99999;2;0;
227;2090;Botsuana;20042;99999;2;0;
229;2075;Benin;20042;99999;2;0;
230;2150;Dschibuti;20042;99999;2;0;
231;2135;Cote d'Ivoire;20042;99999;2;0;
232;2525;Nigeria;20042;99999;2;0;
233;2630;Simbabwe;20042;99999;2;0;
236;2180;Gabun;20042;99999;2;0;
237;2195;Gambia;20042;99999;2;0;
238;2210;Ghana;20042;99999;2;0;
239;2450;Mauretanien;20042;99999;2;0;
242;2130;Cabo Verde;20221;99999;2;0;
243;2285;Kenia;20042;99999;2;0;
244;2300;Komoren;20042;99999;2;0;
245;2330;Kongo, Republik;20042;99999;2;0;
246;2315;Kongo, Dem. Republik;20042;99999;2;0;
247;2360;Liberia;20042;99999;2;0;
248;2375;Libyen;20042;99999;2;0;
249;2390;Madagaskar;20042;99999;2;0;
251;2420;Mali;20042;99999;2;0;
252;2435;Marokko;20042;99999;2;0;
253;2465;Mauritius;20042;99999;2;0;
254;2480;Mosambik;20042;99999;2;0;
255;2510;Niger;20042;99999;2;0;
256;2405;Malawi;20042;99999;2;0;
257;2555;Sambia;20042;99999;2;0;
258;2105;Burkina Faso;20042;99999;2;0;
259;2240;Guinea-Bissau;20042;99999;2;0;
261;2225;Guinea;20042;99999;2;0;
262;2255;Kamerun;20042;99999;2;0;
263;2675;Südafrika;20042;99999;2;0;
265;2540;Ruanda;20042;99999;2;0;
267;2495;Namibia;20042;99999;2;0;
268;2570;Sao Tome und Principe;20042;99999;2;0;
269;2585;Senegal;20042;99999;2;0;
271;2600;Seychellen;20042;99999;2;0;
272;2615;Sierra Leone;20042;99999;2;0;
273;2645;Somalia;20042;99999;2;0;
274;2015;Äquatorialguinea;20042;99999;2;0;
277;2665;Sudan;20111;99999;2;0;
278;2670;Südsudan;20111;99999;2;0;
281;2170;Eswatini;20221;99999;2;0;
282;2705;Tansania, Ver. Republik;20042;99999;2;0;
283;2720;Togo;20042;99999;2;0;
284;2735;Tschad;20042;99999;2;0;
285;2750;Tunesien;20042;99999;2;0;
286;2765;Uganda;20042;99999;2;0;
287;2000;Ägypten;20042;99999;2;0;
289;2780;Zentralafrik. Republik;20042;99999;2;0;
291;2120;Burundi;20042;99999;2;0;
311;3910;Aruba (Niederländisches Überseegebiet);20142;99999;3;0;
315;3940;Französisch-Guayana (Französisches Überseegebiet);20142;99999;3;0;
316;3900;Amerikanische Jungferninseln (US-Überseegebiet);20142;99999;3;0;
317;3945;Guadeloupe (Französisches Überseegebiet);20142;99999;3;0;
319;3950;Martinique (Französisches Überseegebiet);20142;99999;3;0;
320;3000;Antigua und Barbuda;20042;99999;3;0;
321;3920;Curaçao (Niederländisches Überseegebiet);20142;99999;3;0;
322;3075;Barbados;20042;99999;3;0;
323;3025;Argentinien;20042;99999;3;0;
324;3050;Bahamas;20042;99999;3;0;
325;3905;Puerto Rico (US-Überseegebiet);20142;99999;3;0;
326;3125;Bolivien;20042;99999;3;0;
327;3150;Brasilien;20042;99999;3;0;
328;3375;Guyana;20042;99999;3;0;
329;3955;St. Barthélemy (Französisches Überseegebiet);20142;99999;3;0;
330;3100;Belize;20042;99999;3;0;
331;3960;St. Martin (französischer Teil) (Französisches Überseegebiet);20172;99999;3;0;
332;3175;Chile;20042;99999;3;0;
333;3225;Dominica;20042;99999;3;0;
334;3200;Costa Rica;20042;99999;3;0;
335;3250;Dominikanische Republik;20042;99999;3;0;
336;3275;Ecuador;20042;99999;3;0;
337;3300;El Salvador;20042;99999;3;0;
338;3965;St. Pierre und Miquelon (Französisches Überseegebiet);20142;99999;3;0;
340;3325;Grenada;20042;99999;3;0;
341;3925;St. Martin (niederländischer Teil) (Niederländisches Überseegebiet);20142;99999;3;0;
342;3930;Grönland (Dänisches Überseegebiet);20142;99999;3;0;
343;3970;Navassa (US-Überseegebiet);20142;99999;3;0;
344;3915;Bonaire, Saba, St. Eustatius (Niederländisches Überseegebiet);20142;99999;3;0;
345;3350;Guatemala;20042;99999;3;0;
346;3400;Haiti;20042;99999;3;0;
347;3425;Honduras;20042;99999;3;0;
348;3475;Kanada;20042;99999;3;0;
349;3500;Kolumbien;20042;99999;3;0;
351;3525;Kuba;20042;99999;3;0;
352;3935;Clipperton (Französisches Überseegebiet);20142;99999;3;0;
353;3550;Mexiko;20042;99999;3;0;
354;3575;Nicaragua;20042;99999;3;0;
355;3450;Jamaika;20042;99999;3;0;
357;3600;Panama;20042;99999;3;0;
359;3625;Paraguay;20042;99999;3;0;
361;3650;Peru;20042;99999;3;0;
364;3750;Suriname;20042;99999;3;0;
365;3800;Uruguay;20042;99999;3;0;
366;3700;St. Lucia;20042;99999;3;0;
367;3825;Venezuela;20042;99999;3;0;
368;3850;Vereinigte Staaten;20042;99999;3;0;
369;3725;St. Vincent und die Grenadinen;20042;99999;3;0;
370;3675;St. Kitts und Nevis;20042;99999;3;0;
371;3775;Trinidad und Tobago;20042;99999;3;0;
411;4170;Hongkong;20142;99999;4;0;
412;4510;Macau;20142;99999;4;0;
421;4300;Jemen;20042;99999;4;0;
422;4020;Armenien;20042;99999;4;0;
423;4000;Afghanistan;20042;99999;4;0;
424;4060;Bahrain;20042;99999;4;0;
425;4040;Aserbaidschan;20042;99999;4;0;
426;4100;Bhutan;20042;99999;4;0;
427;4580;Myanmar;20042;99999;4;0;
429;4120;Brunei Darussalam;20042;99999;4;0;
430;4160;Georgien;20042;99999;4;0;
431;4740;Sri Lanka;20042;99999;4;0;
432;4900;Vietnam;20042;99999;4;0;
434;4420;Korea, Dem. Volksrepublik;20042;99999;4;0;
436;4180;Indien;20042;99999;4;0;
437;4200;Indonesien;20042;99999;4;0;
438;4220;Irak;20042;99999;4;0;
439;4240;Iran, Islamische Republik;20042;99999;4;0;
441;4260;Israel;20042;99999;4;0;
442;4280;Japan;20042;99999;4;0;
444;4360;Kasachstan;20042;99999;4;0;
445;4320;Jordanien;20042;99999;4;0;
446;4340;Kambodscha;20042;99999;4;0;
447;4380;Katar;20042;99999;4;0;
448;4460;Kuwait;20042;99999;4;0;
449;4480;Laos, Dem. Volksrepublik;20042;99999;4;0;
450;4400;Kirgisistan;20042;99999;4;0;
451;4500;Libanon;20042;99999;4;0;
454;4540;Malediven;20042;99999;4;0;
456;4620;Oman;20042;99999;4;0;
457;4560;Mongolei;20042;99999;4;0;
458;4600;Nepal;20042;99999;4;0;
459;4950;Palästinensische Gebiete;20132;99999;4;0;
460;4080;Bangladesch;20042;99999;4;0;
461;4660;Pakistan;20042;99999;4;0;
462;4680;Philippinen;20042;99999;4;0;
465;4800;Taiwan;20132;99999;4;0;
467;4440;Korea, Republik;20042;99999;4;0;
469;4880;Vereinigte Arabische Emirate;20042;99999;4;0;
470;4780;Tadschikistan;20042;99999;4;0;
471;4840;Turkmenistan;20042;99999;4;0;
472;4700;Saudi-Arabien;20042;99999;4;0;
474;4720;Singapur;20042;99999;4;0;
475;4760;Syrien, Arab. Republik;20042;99999;4;0;
476;4820;Thailand;20042;99999;4;0;
477;4860;Usbekistan;20042;99999;4;0;
479;4140;China;20132;99999;4;0;
482;4520;Malaysia;20042;99999;4;0;
483;4830;Timor-Leste;20072;99999;4;0;
499;4980;Übriges Asien;20132;99999;4;0;
510;5865;Heard und McDonaldinseln (Australisches Überseegebiet);20142;99999;5;0;
511;5875;Korallenmeerinseln (Australisches Überseegebiet);20142;99999;5;0;
512;5870;Kokosinseln (Australisches Überseegebiet);20142;99999;5;0;
513;5900;Neukaledonien (Französisches Überseegebiet);20142;99999;5;0;
514;5835;Nördliche Marianen (US-Überseegebiet);20142;99999;5;0;
515;5880;Norfolkinsel (Australisches Überseegebiet);20142;99999;5;0;
517;5820;Amerikanisch-Samoa (US-Überseegebiet);20142;99999;5;0;
519;5815;Tokelau (Neuseeländisches Überseegebiet);20142;99999;5;0;
520;5905;Wallis und Futuna (Französisches Überseegebiet);20142;99999;5;0;
521;5885;Weihnachtsinsel (Australisches Überseegebiet);20142;99999;5;0;
522;5845;Bouvetinsel (Norwegisches Überseegebiet);20142;99999;5;0;
523;5000;Australien;20042;99999;5;0;
524;5550;Salomonen;20042;99999;5;0;
525;5855;Ashmore- und Cartierinseln (Australisches Überseegebiet);20142;99999;5;0;
526;5100;Fidschi;20042;99999;5;0;
527;5050;Cookinseln;20042;99999;5;0;
528;5890;Französisch-Polynesien (Französisches Überseegebiet);20142;99999;5;0;
529;5825;Guam (US-Überseegebiet);20142;99999;5;0;
530;5150;Kiribati;20042;99999;5;0;
531;5300;Nauru;20042;99999;5;0;
532;5750;Vanuatu;20042;99999;5;0;
533;5400;Niue;20042;99999;5;0;
534;5840;Kleinere Amerikanische Überseeinseln (US-Überseegebiet);20142;99999;5;0;
535;5850;Norwegisches Antarktis-Territorium (Norwegisches Überseegebiet);20142;99999;5;0;
536;5350;Neuseeland;20042;99999;5;0;
537;5450;Palau;20042;99999;5;0;
538;5500;Papua-Neuguinea;20042;99999;5;0;
540;5700;Tuvalu;20042;99999;5;0;
541;5650;Tonga;20042;99999;5;0;
542;5895;Französische Süd- und Antarktisgebiete (Französisches Überseegebiet);20142;99999;5;0;
543;5600;Samoa;20042;99999;5;0;
544;5200;Marshallinseln;20042;99999;5;0;
545;5250;Mikronesien;20042;99999;5;0;
546;5805;Chilenische Antarktis (Chilenisches Überseegebiet);20142;99999;5;0;
547;5860;Australisches Antarktis-Territorium (Australisches Überseegebiet);20142;99999;5;0;
548;5800;Argentinische Antarktis (Argentinisches Überseegebiet);20142;99999;5;0;
549;5810;Neuseeländische Antarktis: Ross-Nebengebiet (Neuseeländisches Überseegebiet);20142;99999;5;0;
997;9000;Staatenlos;20042;99999;9;0;
998;9200;Ungeklärt;20042;99999;9;0;
999;9400;Ohne Angabe;20042;99999;9;0;

1 000 1001 Deutschland 20042 99999 1 1
2 112 1810 Gibraltar (Britisches Überseegebiet) 20142 99999 0 1 1 0
3 113 1820 Guernsey (Britisches Überseegebiet) 20142 99999 0 1 1 0
4 114 1840 Jersey (Britisches Überseegebiet) 20142 99999 0 1 1 0
5 115 1830 Insel Man (Britisches Überseegebiet) 20142 99999 0 1 1 0
6 116 1860 Svalbard und Jan Mayen (u. a. Bäreninsel, Spitzbergen) (Norwegisches Überseegebiet) 20142 99999 0 1 1 0
7 121 1100 Albanien 20042 99999 0 1 1 0
8 122 1140 Bosnien und Herzegowina 20042 99999 0 1 1 0
9 123 1120 Andorra 20042 99999 0 1 1 0
10 124 1005 Belgien 20042 99999 1 1
11 125 1007 Bulgarien 20071 99999 1 1
12 126 1009 Dänemark 20042 99999 1 1
13 127 1013 Estland 20042 99999 1 1
14 128 1017 Finnland 20042 99999 1 1
15 129 1021 Frankreich 20042 99999 1 1
16 130 1035 Kroatien 20132 99999 1 1
17 131 1077 Slowenien 20042 99999 1 1
18 134 1025 Griechenland 20042 99999 1 1
19 135 1029 Irland 20042 99999 1 1
20 136 1180 Island 20042 99999 0 1 1 0
21 137 1033 Italien 20042 99999 1 1
22 139 1037 Lettland 20042 99999 1 1
23 140 1290 Montenegro 20062 99999 0 1 1 0
24 141 1220 Liechtenstein 20042 99999 0 1 1 0
25 142 1041 Litauen 20042 99999 1 1
26 143 1045 Luxemburg 20042 99999 1 1
27 144 1295 Nordmazedonien 20191 99999 0 1 1 0
28 145 1049 Malta 20042 99999 1 1
29 146 1260 Moldau, Republik 20042 99999 0 1 1 0
30 147 1280 Monaco 20042 99999 0 1 1 0
31 148 1053 Niederlande 20042 99999 1 1
32 149 1300 Norwegen 20042 99999 0 1 1 0
33 150 1190 Kosovo 20082 99999 0 1 1 0
34 151 1057 Österreich 20042 99999 1 1
35 152 1061 Polen 20042 99999 1 1
36 153 1065 Portugal 20042 99999 1 1
37 154 1067 Rumänien 20071 99999 1 1
38 155 1073 Slowakei 20042 99999 1 1
39 156 1360 San Marino 20042 99999 0 1 1 0
40 157 1069 Schweden 20042 99999 1 1
41 158 1380 Schweiz 20042 99999 0 1 1 0
42 160 1340 Russische Föderation 20042 99999 0 1 1 0
43 161 1081 Spanien 20042 99999 1 1
44 163 1420 Türkei 20042 99999 0 1 1 0
45 164 1085 Tschechien 20181 99999 1 1
46 165 1089 Ungarn 20042 99999 1 1
47 166 1440 Ukraine 20042 99999 0 1 1 0
48 167 1460 Vatikanstadt 20042 99999 0 1 1 0
49 168 1470 Vereinigtes Königreich 20201 99999 0 1 1 0
50 169 1130 Belarus 20221 99999 0 1 1 0
51 170 1390 Serbien 20092 99999 0 1 1 0
52 181 1097 Zypern 20042 99999 1 1
53 182 1850 Färöer (Dänisches Überseegebiet) 20142 99999 0 1 1 0
54 185 1800 Britisches Überseegebiet außerhalb Europas 20142 99999 0 1 1 0
55 211 2810 Mayotte (Französisches Überseegebiet) 20142 99999 0 2 2 0
56 214 2820 Réunion (Französisches Überseegebiet) 20142 99999 0 2 2 0
57 216 2830 Spanische Hoheitsplätze in Nordafrika (Spanisches Überseegebiet) 20142 99999 0 2 2 0
58 221 2045 Algerien 20042 99999 0 2 2 0
59 223 2060 Angola 20042 99999 0 2 2 0
60 224 2165 Eritrea 20042 99999 0 2 2 0
61 225 2030 Äthiopien 20042 99999 0 2 2 0
62 226 2345 Lesotho 20042 99999 0 2 2 0
63 227 2090 Botsuana 20042 99999 0 2 2 0
64 229 2075 Benin 20042 99999 0 2 2 0
65 230 2150 Dschibuti 20042 99999 0 2 2 0
66 231 2135 Cote d'Ivoire 20042 99999 0 2 2 0
67 232 2525 Nigeria 20042 99999 0 2 2 0
68 233 2630 Simbabwe 20042 99999 0 2 2 0
69 236 2180 Gabun 20042 99999 0 2 2 0
70 237 2195 Gambia 20042 99999 0 2 2 0
71 238 2210 Ghana 20042 99999 0 2 2 0
72 239 2450 Mauretanien 20042 99999 0 2 2 0
73 242 2130 Cabo Verde 20221 99999 0 2 2 0
74 243 2285 Kenia 20042 99999 0 2 2 0
75 244 2300 Komoren 20042 99999 0 2 2 0
76 245 2330 Kongo, Republik 20042 99999 0 2 2 0
77 246 2315 Kongo, Dem. Republik 20042 99999 0 2 2 0
78 247 2360 Liberia 20042 99999 0 2 2 0
79 248 2375 Libyen 20042 99999 0 2 2 0
80 249 2390 Madagaskar 20042 99999 0 2 2 0
81 251 2420 Mali 20042 99999 0 2 2 0
82 252 2435 Marokko 20042 99999 0 2 2 0
83 253 2465 Mauritius 20042 99999 0 2 2 0
84 254 2480 Mosambik 20042 99999 0 2 2 0
85 255 2510 Niger 20042 99999 0 2 2 0
86 256 2405 Malawi 20042 99999 0 2 2 0
87 257 2555 Sambia 20042 99999 0 2 2 0
88 258 2105 Burkina Faso 20042 99999 0 2 2 0
89 259 2240 Guinea-Bissau 20042 99999 0 2 2 0
90 261 2225 Guinea 20042 99999 0 2 2 0
91 262 2255 Kamerun 20042 99999 0 2 2 0
92 263 2675 Südafrika 20042 99999 0 2 2 0
93 265 2540 Ruanda 20042 99999 0 2 2 0
94 267 2495 Namibia 20042 99999 0 2 2 0
95 268 2570 Sao Tome und Principe 20042 99999 0 2 2 0
96 269 2585 Senegal 20042 99999 0 2 2 0
97 271 2600 Seychellen 20042 99999 0 2 2 0
98 272 2615 Sierra Leone 20042 99999 0 2 2 0
99 273 2645 Somalia 20042 99999 0 2 2 0
100 274 2015 Äquatorialguinea 20042 99999 0 2 2 0
101 277 2665 Sudan 20111 99999 0 2 2 0
102 278 2670 Südsudan 20111 99999 0 2 2 0
103 281 2170 Eswatini 20221 99999 0 2 2 0
104 282 2705 Tansania, Ver. Republik 20042 99999 0 2 2 0
105 283 2720 Togo 20042 99999 0 2 2 0
106 284 2735 Tschad 20042 99999 0 2 2 0
107 285 2750 Tunesien 20042 99999 0 2 2 0
108 286 2765 Uganda 20042 99999 0 2 2 0
109 287 2000 Ägypten 20042 99999 0 2 2 0
110 289 2780 Zentralafrik. Republik 20042 99999 0 2 2 0
111 291 2120 Burundi 20042 99999 0 2 2 0
112 311 3910 Aruba (Niederländisches Überseegebiet) 20142 99999 0 3 3 0
113 315 3940 Französisch-Guayana (Französisches Überseegebiet) 20142 99999 0 3 3 0
114 316 3900 Amerikanische Jungferninseln (US-Überseegebiet) 20142 99999 0 3 3 0
115 317 3945 Guadeloupe (Französisches Überseegebiet) 20142 99999 0 3 3 0
116 319 3950 Martinique (Französisches Überseegebiet) 20142 99999 0 3 3 0
117 320 3000 Antigua und Barbuda 20042 99999 0 3 3 0
118 321 3920 Curaçao (Niederländisches Überseegebiet) 20142 99999 0 3 3 0
119 322 3075 Barbados 20042 99999 0 3 3 0
120 323 3025 Argentinien 20042 99999 0 3 3 0
121 324 3050 Bahamas 20042 99999 0 3 3 0
122 325 3905 Puerto Rico (US-Überseegebiet) 20142 99999 0 3 3 0
123 326 3125 Bolivien 20042 99999 0 3 3 0
124 327 3150 Brasilien 20042 99999 0 3 3 0
125 328 3375 Guyana 20042 99999 0 3 3 0
126 329 3955 St. Barthélemy (Französisches Überseegebiet) 20142 99999 0 3 3 0
127 330 3100 Belize 20042 99999 0 3 3 0
128 331 3960 St. Martin (französischer Teil) (Französisches Überseegebiet) 20172 99999 0 3 3 0
129 332 3175 Chile 20042 99999 0 3 3 0
130 333 3225 Dominica 20042 99999 0 3 3 0
131 334 3200 Costa Rica 20042 99999 0 3 3 0
132 335 3250 Dominikanische Republik 20042 99999 0 3 3 0
133 336 3275 Ecuador 20042 99999 0 3 3 0
134 337 3300 El Salvador 20042 99999 0 3 3 0
135 338 3965 St. Pierre und Miquelon (Französisches Überseegebiet) 20142 99999 0 3 3 0
136 340 3325 Grenada 20042 99999 0 3 3 0
137 341 3925 St. Martin (niederländischer Teil) (Niederländisches Überseegebiet) 20142 99999 0 3 3 0
138 342 3930 Grönland (Dänisches Überseegebiet) 20142 99999 0 3 3 0
139 343 3970 Navassa (US-Überseegebiet) 20142 99999 0 3 3 0
140 344 3915 Bonaire, Saba, St. Eustatius (Niederländisches Überseegebiet) 20142 99999 0 3 3 0
141 345 3350 Guatemala 20042 99999 0 3 3 0
142 346 3400 Haiti 20042 99999 0 3 3 0
143 347 3425 Honduras 20042 99999 0 3 3 0
144 348 3475 Kanada 20042 99999 0 3 3 0
145 349 3500 Kolumbien 20042 99999 0 3 3 0
146 351 3525 Kuba 20042 99999 0 3 3 0
147 352 3935 Clipperton (Französisches Überseegebiet) 20142 99999 0 3 3 0
148 353 3550 Mexiko 20042 99999 0 3 3 0
149 354 3575 Nicaragua 20042 99999 0 3 3 0
150 355 3450 Jamaika 20042 99999 0 3 3 0
151 357 3600 Panama 20042 99999 0 3 3 0
152 359 3625 Paraguay 20042 99999 0 3 3 0
153 361 3650 Peru 20042 99999 0 3 3 0
154 364 3750 Suriname 20042 99999 0 3 3 0
155 365 3800 Uruguay 20042 99999 0 3 3 0
156 366 3700 St. Lucia 20042 99999 0 3 3 0
157 367 3825 Venezuela 20042 99999 0 3 3 0
158 368 3850 Vereinigte Staaten 20042 99999 0 3 3 0
159 369 3725 St. Vincent und die Grenadinen 20042 99999 0 3 3 0
160 370 3675 St. Kitts und Nevis 20042 99999 0 3 3 0
161 371 3775 Trinidad und Tobago 20042 99999 0 3 3 0
162 411 4170 Hongkong 20142 99999 0 4 4 0
163 412 4510 Macau 20142 99999 0 4 4 0
164 421 4300 Jemen 20042 99999 0 4 4 0
165 422 4020 Armenien 20042 99999 0 4 4 0
166 423 4000 Afghanistan 20042 99999 0 4 4 0
167 424 4060 Bahrain 20042 99999 0 4 4 0
168 425 4040 Aserbaidschan 20042 99999 0 4 4 0
169 426 4100 Bhutan 20042 99999 0 4 4 0
170 427 4580 Myanmar 20042 99999 0 4 4 0
171 429 4120 Brunei Darussalam 20042 99999 0 4 4 0
172 430 4160 Georgien 20042 99999 0 4 4 0
173 431 4740 Sri Lanka 20042 99999 0 4 4 0
174 432 4900 Vietnam 20042 99999 0 4 4 0
175 434 4420 Korea, Dem. Volksrepublik 20042 99999 0 4 4 0
176 436 4180 Indien 20042 99999 0 4 4 0
177 437 4200 Indonesien 20042 99999 0 4 4 0
178 438 4220 Irak 20042 99999 0 4 4 0
179 439 4240 Iran, Islamische Republik 20042 99999 0 4 4 0
180 441 4260 Israel 20042 99999 0 4 4 0
181 442 4280 Japan 20042 99999 0 4 4 0
182 444 4360 Kasachstan 20042 99999 0 4 4 0
183 445 4320 Jordanien 20042 99999 0 4 4 0
184 446 4340 Kambodscha 20042 99999 0 4 4 0
185 447 4380 Katar 20042 99999 0 4 4 0
186 448 4460 Kuwait 20042 99999 0 4 4 0
187 449 4480 Laos, Dem. Volksrepublik 20042 99999 0 4 4 0
188 450 4400 Kirgisistan 20042 99999 0 4 4 0
189 451 4500 Libanon 20042 99999 0 4 4 0
190 454 4540 Malediven 20042 99999 0 4 4 0
191 456 4620 Oman 20042 99999 0 4 4 0
192 457 4560 Mongolei 20042 99999 0 4 4 0
193 458 4600 Nepal 20042 99999 0 4 4 0
194 459 4950 Palästinensische Gebiete 20132 99999 0 4 4 0
195 460 4080 Bangladesch 20042 99999 0 4 4 0
196 461 4660 Pakistan 20042 99999 0 4 4 0
197 462 4680 Philippinen 20042 99999 0 4 4 0
198 465 4800 Taiwan 20132 99999 0 4 4 0
199 467 4440 Korea, Republik 20042 99999 0 4 4 0
200 469 4880 Vereinigte Arabische Emirate 20042 99999 0 4 4 0
201 470 4780 Tadschikistan 20042 99999 0 4 4 0
202 471 4840 Turkmenistan 20042 99999 0 4 4 0
203 472 4700 Saudi-Arabien 20042 99999 0 4 4 0
204 474 4720 Singapur 20042 99999 0 4 4 0
205 475 4760 Syrien, Arab. Republik 20042 99999 0 4 4 0
206 476 4820 Thailand 20042 99999 0 4 4 0
207 477 4860 Usbekistan 20042 99999 0 4 4 0
208 479 4140 China 20132 99999 0 4 4 0
209 482 4520 Malaysia 20042 99999 0 4 4 0
210 483 4830 Timor-Leste 20072 99999 0 4 4 0
211 499 4980 Übriges Asien 20132 99999 0 4 4 0
212 510 5865 Heard und McDonaldinseln (Australisches Überseegebiet) 20142 99999 0 5 5 0
213 511 5875 Korallenmeerinseln (Australisches Überseegebiet) 20142 99999 0 5 5 0
214 512 5870 Kokosinseln (Australisches Überseegebiet) 20142 99999 0 5 5 0
215 513 5900 Neukaledonien (Französisches Überseegebiet) 20142 99999 0 5 5 0
216 514 5835 Nördliche Marianen (US-Überseegebiet) 20142 99999 0 5 5 0
217 515 5880 Norfolkinsel (Australisches Überseegebiet) 20142 99999 0 5 5 0
218 517 5820 Amerikanisch-Samoa (US-Überseegebiet) 20142 99999 0 5 5 0
219 519 5815 Tokelau (Neuseeländisches Überseegebiet) 20142 99999 0 5 5 0
220 520 5905 Wallis und Futuna (Französisches Überseegebiet) 20142 99999 0 5 5 0
221 521 5885 Weihnachtsinsel (Australisches Überseegebiet) 20142 99999 0 5 5 0
222 522 5845 Bouvetinsel (Norwegisches Überseegebiet) 20142 99999 0 5 5 0
223 523 5000 Australien 20042 99999 0 5 5 0
224 524 5550 Salomonen 20042 99999 0 5 5 0
225 525 5855 Ashmore- und Cartierinseln (Australisches Überseegebiet) 20142 99999 0 5 5 0
226 526 5100 Fidschi 20042 99999 0 5 5 0
227 527 5050 Cookinseln 20042 99999 0 5 5 0
228 528 5890 Französisch-Polynesien (Französisches Überseegebiet) 20142 99999 0 5 5 0
229 529 5825 Guam (US-Überseegebiet) 20142 99999 0 5 5 0
230 530 5150 Kiribati 20042 99999 0 5 5 0
231 531 5300 Nauru 20042 99999 0 5 5 0
232 532 5750 Vanuatu 20042 99999 0 5 5 0
233 533 5400 Niue 20042 99999 0 5 5 0
234 534 5840 Kleinere Amerikanische Überseeinseln (US-Überseegebiet) 20142 99999 0 5 5 0
235 535 5850 Norwegisches Antarktis-Territorium (Norwegisches Überseegebiet) 20142 99999 0 5 5 0
236 536 5350 Neuseeland 20042 99999 0 5 5 0
237 537 5450 Palau 20042 99999 0 5 5 0
238 538 5500 Papua-Neuguinea 20042 99999 0 5 5 0
239 540 5700 Tuvalu 20042 99999 0 5 5 0
240 541 5650 Tonga 20042 99999 0 5 5 0
241 542 5895 Französische Süd- und Antarktisgebiete (Französisches Überseegebiet) 20142 99999 0 5 5 0
242 543 5600 Samoa 20042 99999 0 5 5 0
243 544 5200 Marshallinseln 20042 99999 0 5 5 0
244 545 5250 Mikronesien 20042 99999 0 5 5 0
245 546 5805 Chilenische Antarktis (Chilenisches Überseegebiet) 20142 99999 0 5 5 0
246 547 5860 Australisches Antarktis-Territorium (Australisches Überseegebiet) 20142 99999 0 5 5 0
247 548 5800 Argentinische Antarktis (Argentinisches Überseegebiet) 20142 99999 0 5 5 0
248 549 5810 Neuseeländische Antarktis: Ross-Nebengebiet (Neuseeländisches Überseegebiet) 20142 99999 0 5 5 0
249 997 9000 Staatenlos 20042 99999 0 9 9 0
250 998 9200 Ungeklärt 20042 99999 0 9 9 0
251 999 9400 Ohne Angabe 20042 99999 0 9 9 0

540
src/de/statspez/plausi/astat/csv/Studienfach.csv

@ -1,276 +1,264 @@ @@ -1,276 +1,264 @@
001;0113100;Ägyptologie;13;225
002;0113150;Afrikanistik;13;222
003;0758200;Agrarwissenschaft/Landwirtschaft;58;621
004;0101100;Interdisziplinäre Studien (Schwerpunkt Geisteswissenschaften);01;220
005;0108300;Klassische Philologie;08;222
006;0110100;Amerikanistik/Amerikakunde;10;222
007;0976100;Angewandte Kunst;76;214
008;0110200;Anglistik/Englisch;10;222
009;0442100;Anthropologie (Humanbiologie);42;421
010;0113200;Arabisch/Arabistik;13;222
011;0330100;Arbeitslehre/Wirtschaftslehre;30;145
012;0105200;Archäologie;05;225
013;0866100;Architektur;66;581
014;0439100;Astrophysik und Astronomie;39;441
015;0113250;Außereuropäische Sprachen und Kulturen in Ozeanien und Amerika;13;222
016;0112100;Baltistik;12;222
017;0868100;Bauingenieurwesen/Ingenieurbau;68;582
018;0107400;Berufsbezogene Fremdsprachenausbildung;07;222
019;0436350;Orientierungsstudium MINT;36;145
020;0862200;Bergbau/Bergtechnik;62;544
021;0330150;Betriebswirtschaftslehre;30;340
022;0106100;Informations- und Bibliothekswissenschaften (nicht für Verwaltungsfachhochschulen);06;322
023;0975100;Bildende Kunst/Graphik;75;211
024;0114100;Europäische Ethnologie und Kulturwissenschaft;14;312
025;0440100;Biochemie;40;421
026;0442200;Biologie;42;421
028;0758250;Brauwesen/Getränketechnologie;58;541
029;0222200;Sportwissenschaft;22;813
030;0323100;Interdisziplin. Studien (Schwerpunkt Rechts-, Wirtschafts- und Sozialwissenschaften);23;310
031;0108100;Byzantinistik;08;222
032;0440200;Chemie;40;442
033;0863180;Chemie-Ingenieurwesen/Chemieverfahrenstechnik;63;524
034;0109100;Dänisch;09;223
035;0977100;Darstellende Kunst/Bühnenkunst/Regie;77;212
036;0324300;Sonstige Regionalwissenschaften;24;310
037;0106200;Archiv- und Dokumentationswissenschaft;06;322
038;0324100;Lateinamerika-Studien;24;310
039;0443300;Geowissenschaften allgemein;43;443
040;0974100;Interdiszipl. Studien (Schwerpunkt Kunst, Kunstwissenschaft);74;145
041;1083050;Sonstiges Orientierungsstudium;83;999
042;0328200;Wirtschaftsrecht;28;380
043;0108500;Neugriechisch;08;222
044;0324200;Ost- und Südosteuropa-Studien;24;310
048;0864200;Elektrotechnik/Elektronik;64;523
049;0436200;Interdisziplin. Studien (Schwerpunkt Naturwissenschaften);36;440
050;0444100;Geographie/Erdkunde;44;443
052;0333400;Erziehungswissenschaft (Pädagogik);33;142
053;0102300;Evang. Theologie, -Religionslehre;02;221
054;0977200;Film und Fernsehen;77;212
055;0323250;Orientierungsstudium Gesellschaftswissenschaften;23;145
056;0112200;Finno-Ugristik;12;222
057;0865200;Luft- und Raumfahrttechnik;65;525
058;0759100;Forstwissenschaft, -wirtschaft;59;623
059;0111100;Französisch;11;222
060;0758300;Gartenbau;58;622
061;0757200;Meliorationswesen;57;581
064;0757300;Naturschutz;57;851
065;0443100;Geologie/Paläontologie;43;443
066;0443200;Geophysik;43;443
067;0109400;Germanistik/Deutsch;09;223
068;0105300;Geschichte;05;225
069;0976300;Graphikdesign/Kommunikationsgestaltung;76;213
070;0108200;Griechisch;08;222
071;0760200;Haushalts- und Ernährungswissenschaft;60;814
072;0861200;Interdisziplinäre Studien (Schwerpunkt Ingenieurwissenschaften);61;520
073;0113300;Judaistik/Hebräisch ;13;222
074;0863780;Transport-/Fördertechnik;63;544
075;0759200;Holzwirtschaft;59;623
076;0862300;Hütten- und Gießereiwesen;62;521
077;0868500;Wasserwirtschaft;68;582
078;0113350;Indologie;13;222
079;0871300;Informatik;71;481
080;0978200;Instrumentalmusik;78;212
081;0113400;Iranistik;13;310
082;0863460;Holz-/Fasertechnik;63;543
083;0113450;Islamwissenschaft;13;310
084;0111200;Italienisch;11;222
085;0113500;Japanologie;13;222
086;0103300;Kath. Theologie, -Religionslehre;03;221
088;0864600;Optoelektronik;64;523
089;0865500;Verkehrsingenieurwesen;65;525
090;0101200;Lernbereich Geisteswissenschaften;01;145
091;0974200;Kunsterziehung;74;145
092;0974300;Kunstgeschichte, Kunstwissenschaft;74;211
093;0757100;Landespflege/Landschaftsgestaltung;57;581
094;0868400;Wasserbau;68;582
095;0108400;Latein;08;222
096;0440300;Lebensmittelchemie;40;442
097;0758350;Lebensmitteltechnologie;58;541
098;0222100;Sportpädagogik/Sportpsychologie;22;142
101;0974400;Restaurierungskunde;74;211
102;0977300;Schauspiel;77;212
103;0862400;Markscheidewesen;62;544
104;0863580;Maschinenbau/-wesen;63;520
105;0437100;Mathematik;37;461
106;0977400;Tanzpädagogik;77;212
107;0549100;Medizin (Allgemein-Medizin);49;721
108;0863620;Metalltechnik;63;521
110;0443400;Meteorologie;43;443
111;0443500;Mineralogie;43;443
113;0978400;Musikerziehung;78;145
114;0978450;Musikwissenschaft/-geschichte;78;212
115;0333500;Grundschul-/Primarstufenpädagogik;33;144
116;0976500;Textilgestaltung;76;214
117;0333100;Ausländerpädagogik;33;142
118;0437300;Technomathematik;37;461
119;0109600;Niederländisch;09;223
120;0109700;Nordistik/Skandinavistik (Nord. Philologie, Einzelsprachen a.n.g.);09;222
121;0871500;Medieninformatik;71;481
122;0113600;Orientalistik, Altorientalistik;13;222
123;0871400;Ingenieurinformatik/Technische Informatik;71;481
124;0443600;Ozeanographie;43;443
125;0758150;Agrarökonomie;58;621
126;0441100;Pharmazie;41;727
127;0104200;Philosophie;04;226
128;0439200;Physik;39;441
129;0325100;Politikwissenschaft/Politologie;25;313
130;0112900;Westslawisch (allgemein und a.n.g.);12;222
131;0111300;Portugiesisch;11;222
132;0332100;Psychologie;32;311
134;0867100;Raumplanung;67;581
135;0328100;Rechtswissenschaft;28;380
136;0104300;Religionswissenschaft;04;221
137;0111400;Romanistik (Romanische Philologie, Einzelsprachen a.n.g.);11;222
138;0758100;Agrarbiologie;58;621
139;0112400;Russisch;12;222
140;0861100;Angewandte Systemwissenschaften;61;460
141;0863100;Abfallwirtschaft;63;851
142;0865400;Schiffbau/Schiffstechnik;65;525
143;0863140;Augenoptik;63;521
144;0863700;Technische Kybernetik;63;520
145;0113650;Sinologie/Koreanistik;13;222
146;0112500;Slawistik (Slaw. Philologie);12;222
147;0326100;Sozialkunde;26;145
148;0326200;Sozialwissenschaften;26;312
149;0326300;Soziologie;26;312
150;0111500;Spanisch;11;222
152;0107200;Allgemeine Sprachwissenschaft/Indogermanistik;07;223
153;0112700;Südslawisch (Bulgarisch, Serbokroatisch, Slowenisch usw.);12;222
154;0323200;Lernbereich Gesellschaftslehre;23;145
155;0977500;Theaterwissenschaft;77;212
156;0751100;Tiermedizin/Veterinärmedizin;51;640
157;0864300;Mikroelektronik;64;523
158;0113700;Turkologie;13;222
159;0976200;Edelstein- und Schmuckdesign;76;214
160;0107500;Computerlinguistik;07;220
161;0102100;Diakoniewissenschaft;02;221
162;0103100;Caritaswissenschaft;03;221
163;0978550;Rhythmik;78;212
164;0978250;Jazz und Popularmusik;78;212
165;0978500;Orchestermusik;78;212
166;0330300;Sportmanagement/Sportökonomie;30;345
167;0330200;Europäische Wirtschaft;30;340
168;0329550;Justizvollzug;29;861
169;0104100;Ethik;04;226
171;0869200;Vermessungswesen (Geodäsie);69;581
172;0329800;Verwaltungswissenschaft/-wesen;29;345
173;0114200;Ethnologie;14;312
174;0114300;Volkskunde;14;312
175;0330450;Volkswirtschaftslehre;30;314
176;0976600;Werkerziehung;76;145
177;0872200;Werkstofftechnik;72;543
178;0444300;Wirtschafts-/Sozialgeographie;44;443
179;0331200;Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt;31;340
180;0113550;Kaukasistik;13;222
181;0330500;Wirtschaftspädagogik;30;145
182;0330250;Intern. Betriebswirtschaft/Management;30;340
183;0105600;Wirtschafts-/Sozialgeschichte;05;225
184;0330550;Wirtschaftswissenschaften;30;340
185;0550100;Zahnmedizin;50;724
186;0436300;Lernbereich Naturwissenschaft/Sachunterricht;36;145
187;0113750;Asiatische Sprachen und Kulturen/Asienwissenschaften;13;222
188;0107100;Allgemeine Literaturwissenschaft;07;223
189;0109500;Niederdeutsch;09;223
190;0333800;Sonderpädagogik;33;144
191;0978350;Komposition;78;212
192;0978100;Dirigieren;78;212
193;0978300;Kirchenmusik;78;212
194;0978600;Tonmeister;78;212
195;0548100;Gesundheitspädagogik;48;142
196;1083100;Studienkolleg;83;999
197;0868200;Holzbau;68;582
199;0861300;Lernbereich Technik;61;145
200;0871200;Computer- und Kommunikationstechniken;71;481
201;0861500;Werken (technisch)/Technologie;61;145
202;0863340;Fertigungs-/Produktionstechnik;63;520
203;0976400;Industriedesign/Produktgestaltung;76;214
204;0975300;Malerei;75;211
205;0975200;Bildhauerei/Plastik;75;211
206;0112300;Polnisch;12;222
207;0112600;Sorabistik;12;222
208;0327100;Soziale Arbeit;27;762
209;0112800;Tschechisch;12;222
210;0330400;Verkehrswirtschaft;30;840
211;0863260;Energieverfahrenstechnik;63;522
212;0863300;Feinwerktechnik;63;521
213;0863900;Versorgungstechnik;63;522
215;0863380;Gesundheitstechnik;63;521
216;0863420;Glastechnik/Keramik;63;543
219;0863540;Kunststofftechnik;63;543
220;0758400;Milch- und Molkereiwirtschaft;58;541
221;0871100;Bioinformatik;71;481
222;0864500;Kommunikations- und Informationstechnik;64;523
223;0865300;Nautik/Seefahrt;65;840
224;0863660;Physikalische Technik/Mechanische Verfahrenstechnik;63;520
225;0863740;Textil- und Bekleidungstechnik/-gewerbe;63;542
226;0863860;Verfahrenstechnik;63;524
227;0758550;Weinbau und Kellerwirtschaft;58;541
230;0978150;Gesang;78;212
231;0863220;Druck- und Reproduktionstechnik;63;213
232;0548200;Gesundheitswissenschaften/-management;48;345
233;0548300;Nichtärztliche Heilberufe/Therapien;48;723
234;0548400;Pflegewissenschaft/-management;48;723
235;0865100;Fahrzeugtechnik;65;525
242;0866200;Innenarchitektur;66;214
245;0327200;Sozialpädagogik;27;761
247;0871600;Medizinische Informatik;71;481
253;0327300;Sozialwesen;27;762
254;0333600;Sachunterricht (einschl. Schulgarten);33;144
255;0329200;Archivwesen;29;322
256;0329650;Rechtspflege;29;380
257;0329100;Arbeits- und Berufsberatung;29;762
258;0329150;Arbeitsverwaltung;29;345
259;0329250;Auswärtige Angelegenheiten;29;345
260;0329400;Bundeswehrverwaltung;29;345
261;0329500;Innere Verwaltung;29;345
262;0329350;Bibliothekswesen;29;322
263;0329600;Polizei/Verfassungsschutz;29;861
264;0329700;Sozialversicherung;29;343
265;0329300;Bankwesen;29;343
266;0329450;Finanzverwaltung;29;344
268;0329750;Verkehrswesen;29;840
269;0329850;Zoll- und Steuerverwaltung;29;344
270;0333200;Berufs- und Wirtschaftspädagogik;33;142
271;0109200;Deutsch als Fremdsprache oder als Zweitsprache;09;222
272;0105100;Alte Geschichte;05;225
273;0105400;Mittlere und neuere Geschichte;05;225
274;0330350;Tourismuswirtschaft;30;812
275;0105700;Wissenschaftsgeschichte/Technikgeschichte;05;225
276;0437400;Wirtschaftsmathematik;37;461
277;0871700;Wirtschaftsinformatik;71;481
280;0869100;Kartographie;69;581
282;0442300;Biotechnologie;42;421
283;0444200;Landschaftsökologie/Biogeographie;44;443
284;0107300;Angewandte Sprachwissenschaft;07;223
286;0864400;Mikrosystemtechnik;64;523
287;0975400;Neue Medien;75;213
290;1083200;Sonstige Fächer;83;999
292;0118100;Islamische Studien/Islamische Theologie;18;222
294;0872100;Materialwissenschaft;72;543
300;0442250;Biomedizin;42;421
302;0119100;Medienwissenschaft;19;321
303;0334100;Kommunikationswissenschaft/Publizistik;34;321
304;0330220;Medienwirtschaft/Medienmanagement;30;340
305;0861600;Medientechnik;61;213
310;0861700;Regenerative Energien;61;523
312;0436400;Statistik;36;462
316;0864100;Elektrische Energietechnik;64;523
320;0760100;Ernährungswissenschaft;60;726
321;0333300;Erwachsenenbildung und außerschulische Jugendbildung;33;142
333;0760300;Haushaltswissenschaft;60;814
353;0758450;Pflanzenproduktion;58;621
361;0333700;Schulpädagogik;33;142
365;0333450;Pädagogik der frühen Kindheit;33;142
370;0870100;Wirtschaftsingenieurwesen mit ingenieurwissenschaftlichem Schwerpunkt;70;520
371;0758500;Tierproduktion;58;621
380;0861400;Mechatronik;61;520
385;0443150;Geoökologie;43;443
390;0862100;Archäometrie (Ingenieurarchäologie);62;225
429;0868300;Stahlbau;68;582
457;0863820;Umwelttechnik (einschl. Recycling);63;851
458;0867200;Umweltschutz;67;851
464;0331100;Facility Management;31;341
544;0102200;Evang. Religionspädagogik, kirchliche Bildungsarbeit;02;221
545;0103200;Kath. Religionspädagogik, kirchliche Bildungsarbeit;03;221
548;0105500;Ur- und Frühgeschichte;05;225
001;0113100;Ägyptologie;20202;99999;13;225;
002;0113150;Afrikanistik;20072;99999;13;222;
003;0758200;Agrarwissenschaft/Landwirtschaft;20072;99999;58;621;
004;0101100;Interdisziplinäre Studien (Schwerpunkt Geisteswissenschaften);20202;99999;01;220;
005;0108300;Klassische Philologie;20072;99999;08;222;
006;0110100;Amerikanistik/Amerikakunde;20202;99999;10;222;
007;0976100;Angewandte Kunst;20072;99999;76;214;
008;0110200;Anglistik/Englisch;20072;99999;10;222;
009;0442100;Anthropologie (Humanbiologie);20072;99999;42;421;
010;0113200;Arabisch/Arabistik;20072;99999;13;222;
011;1230100;Arbeitslehre/Wirtschaftslehre;20252;99999;30;145;
012;0105200;Archäologie;20072;99999;05;225;
013;0866100;Architektur;20072;99999;66;581;
014;0439100;Astrophysik und Astronomie;20202;99999;39;441;
015;0113250;Außereuropäische Sprachen und Kulturen in Ozeanien und Amerika;20072;99999;13;222;
016;0112100;Baltistik;20072;99999;12;222;
017;0868100;Bauingenieurwesen/Ingenieurbau;20072;99999;68;582;
018;0107400;Berufsbezogene Fremdsprachenausbildung;20202;99999;07;222;
019;0436350;Orientierungsstudium MINT;20212;99999;36;145;
020;0862200;Bergbau/Bergtechnik;20072;99999;62;544;
021;1230150;Betriebswirtschaftslehre;20252;99999;30;340;
022;0106100;Informations- und Bibliothekswissenschaften (nicht für Verwaltungsfachhochschulen);20202;99999;06;322;
023;0975100;Bildende Kunst/Graphik;20072;99999;75;211;
024;0114100;Europäische Ethnologie und Kulturwissenschaft;20202;99999;14;312;
025;0440100;Biochemie;20072;99999;40;421;
026;0442200;Biologie;20072;99999;42;421;
028;0758250;Brauwesen/Getränketechnologie;20072;99999;58;541;
029;1335200;Sportwissenschaft;20252;99999;35;813;
030;1323100;Interdisziplin. Studien (Schwerpunkt Sozial- und Verhaltenswissenschaften);20252;99999;23;310;
031;0108100;Byzantinistik;20072;99999;08;222;
032;0440200;Chemie;20072;99999;40;442;
033;0863180;Chemie-Ingenieurwesen/Chemieverfahrenstechnik;20202;99999;63;524;
034;0109100;Dänisch;20072;99999;09;223;
035;0977100;Darstellende Kunst/Bühnenkunst/Regie;20072;99999;77;212;
036;1324300;Sonstige Regionalwissenschaften;20252;99999;24;310;
037;0106200;Archiv- und Dokumentationswissenschaft;20202;99999;06;322;
038;1324100;Lateinamerika-Studien;20252;99999;24;310;
039;0443300;Geowissenschaften allgemein;20202;99999;43;443;
040;0974100;Interdiszipl. Studien (Schwerpunkt Kunst, Kunstwissenschaft);20202;99999;74;145;
041;9083050;Sonstiges Orientierungsstudium;20252;99999;83;999;
042;1128200;Wirtschaftsrecht;20252;99999;28;380;
043;0108500;Neugriechisch;20072;99999;08;222;
044;1324200;Ost- und Südosteuropa-Studien;20252;99999;24;310;
048;0864200;Elektrotechnik/Elektronik;20202;99999;64;523;
049;0436200;Interdisziplin. Studien (Schwerpunkt Naturwissenschaften);20202;99999;36;440;
050;0444100;Geographie/Erdkunde;20072;99999;44;443;
052;1333400;Erziehungswissenschaften (Pädagogik);20252;99999;33;142;
053;0102300;Evang. Theologie, -Religionslehre;20072;99999;02;221;
054;0977200;Film und Fernsehen;20072;99999;77;212;
055;1323250;Orientierungsstudium Gesellschaftswissenschaften;20252;99999;23;145;
056;0112200;Finno-Ugristik;20072;99999;12;222;
057;0865200;Luft- und Raumfahrttechnik;20072;99999;65;525;
058;0759100;Forstwissenschaft, -wirtschaft;20072;99999;59;623;
059;0111100;Französisch;20072;99999;11;222;
060;0758300;Gartenbau;20072;99999;58;622;
064;0757300;Naturschutz;20202;99999;57;851;
065;0443100;Geologie/Paläontologie;20072;99999;43;443;
066;0443200;Geophysik;20072;99999;43;443;
067;0109400;Germanistik/Deutsch;20072;99999;09;223;
068;0105300;Geschichte;20072;99999;05;225;
069;0976300;Graphikdesign/Kommunikationsgestaltung;20072;99999;76;213;
070;0108200;Griechisch;20072;99999;08;222;
071;0760200;Haushalts- und Ernährungswissenschaft;20072;99999;60;814;
072;0861200;Interdisziplinäre Studien (Schwerpunkt Ingenieurwissenschaften);20202;99999;61;520;
073;0113300;Judaistik/Hebräisch ;20212;99999;13;222;
074;0863780;Transport-/Fördertechnik;20072;99999;63;544;
075;0759200;Holzwirtschaft;20072;99999;59;623;
076;0862300;Hütten- und Gießereiwesen;20072;99999;62;521;
077;0868500;Wasserwirtschaft;20072;99999;68;582;
078;0113350;Indologie;20072;99999;13;222;
079;0871300;Informatik;20152;99999;71;481;
080;0978200;Instrumentalmusik;20072;99999;78;212;
081;0113400;Iranistik;20202;99999;13;310;
082;0863460;Holz-/Fasertechnik;20072;99999;63;543;
083;0113450;Islamwissenschaft;20202;99999;13;310;
084;0111200;Italienisch;20072;99999;11;222;
085;0113500;Japanologie;20072;99999;13;222;
086;0103300;Kath. Theologie, -Religionslehre;20072;99999;03;221;
088;0864600;Optoelektronik;20202;99999;64;523;
089;0865500;Verkehrsingenieurwesen;20072;99999;65;525;
090;0101200;Lernbereich Geisteswissenschaften;20202;99999;01;145;
091;0979100;Kunstpädagogik;20252;99999;79;145;
092;0979200;Kunstgeschichte, Kunstwissenschaft;20252;99999;79;211;
093;0757100;Landschaftsgestaltung;20252;99999;57;581;
094;0868400;Wasserbau;20072;99999;68;582;
095;0108400;Latein;20072;99999;08;222;
096;0440300;Lebensmittelchemie;20072;99999;40;442;
097;0758350;Lebensmitteltechnologie;20072;99999;58;541;
098;1335100;Sportpädagogik/Sportpsychologie;20252;99999;35;142;
101;0974400;Restaurierungskunde;20072;99999;74;211;
102;0977300;Schauspiel;20072;99999;77;212;
103;0862400;Markscheidewesen;20072;99999;62;544;
104;0863580;Maschinenbau/-wesen;20072;99999;63;520;
105;0437100;Mathematik;20072;99999;37;461;
106;0977400;Tanzpädagogik;20072;99999;77;212;
107;0549100;Medizin (Allgemein-Medizin);20072;99999;49;721;
108;0863620;Metalltechnik;20072;99999;63;521;
110;0443400;Meteorologie;20072;99999;43;443;
111;0443500;Mineralogie;20072;99999;43;443;
113;0980100;Musikpädagogik;20252;99999;80;145;
114;0980200;Musikwissenschaft/-geschichte;20252;99999;80;212;
115;1333500;Grundschul-/Primarstufenpädagogik;20252;99999;33;144;
116;0976500;Textilgestaltung;20072;99999;76;214;
117;1333100;Ausländerpädagogik;20252;99999;33;142;
118;0437300;Technomathematik;20072;99999;37;461;
119;0109600;Niederländisch;20072;99999;09;223;
120;0109700;Nordistik/Skandinavistik (Nord. Philologie, Einzelsprachen a.n.g.);20202;99999;09;222;
121;0871500;Medieninformatik;20152;99999;71;481;
122;0113600;Orientalistik, Altorientalistik;20072;99999;13;222;
123;0871400;Ingenieurinformatik/Technische Informatik;20152;99999;71;481;
124;0443600;Ozeanographie;20072;99999;43;443;
125;0758150;Agrarökonomie;20072;99999;58;621;
126;0441100;Pharmazie;20072;99999;41;727;
127;0104200;Philosophie;20072;99999;04;226;
128;0439200;Physik;20072;99999;39;441;
129;1325100;Politikwissenschaft/Politologie;20252;99999;25;313;
131;0111300;Portugiesisch;20072;99999;11;222;
132;1332100;Psychologie;20252;99999;32;311;
134;0867100;Raumplanung;20072;99999;67;581;
135;1128100;Rechtswissenschaft;20252;99999;28;380;
136;0104300;Religionswissenschaft;20072;99999;04;221;
137;0111400;Romanistik (Romanische Philologie, Einzelsprachen a.n.g.);20072;99999;11;222;
138;0758100;Agrarbiologie;20072;99999;58;621;
140;0861100;Angewandte Systemwissenschaften;20202;99999;61;460;
141;0863100;Abfallwirtschaft;20202;99999;63;851;
142;0865400;Schiffbau/Schiffstechnik, Meerestechnik;20252;99999;65;525;
143;0863140;Augenoptik;20072;99999;63;521;
144;0863700;Technische Kybernetik;20072;99999;63;520;
145;0113650;Sinologie/Koreanistik;20072;99999;13;222;
146;0112500;Slawistik (Slaw. Philologie, ohne Sorabistik);20252;99999;12;222;
147;1326100;Sozialkunde;20252;99999;26;145;
148;1326200;Sozialwissenschaften;20252;99999;26;312;
149;1326300;Soziologie;20252;99999;26;312;
150;0111500;Spanisch;20072;99999;11;222;
152;0107200;Allgemeine Sprachwissenschaft;20252;99999;07;223;
154;1323200;Lernbereich Gesellschaftslehre;20252;99999;23;145;
155;0977500;Theaterwissenschaft;20072;99999;77;212;
156;0751100;Tiermedizin/Veterinärmedizin;20152;99999;51;640;
157;0864300;Mikroelektronik;20202;99999;64;523;
158;0113700;Turkologie;20072;99999;13;222;
159;0976200;Edelstein- und Schmuckdesign;20072;99999;76;214;
160;0107500;Computerlinguistik;20072;99999;07;220;
161;0102100;Diakoniewissenschaft;20072;99999;02;221;
162;0103100;Caritaswissenschaft;20072;99999;03;221;
163;0978550;Rhythmik;20072;99999;78;212;
164;0978250;Jazz und Popularmusik;20072;99999;78;212;
165;0978500;Orchestermusik;20072;99999;78;212;
166;1230300;Sportmanagement/Sportökonomie;20252;99999;30;345;
167;1230200;Europäische Wirtschaft;20252;99999;30;340;
169;0104100;Ethik;20072;99999;04;226;
171;0869200;Vermessungswesen (Geodäsie);20072;99999;69;581;
172;1129800;Verwaltungswissenschaft/-wesen;20252;99999;29;345;
173;0114200;Ethnologie;20072;99999;14;312;
174;0114300;Volkskunde;20072;99999;14;312;
175;1230450;Volkswirtschaftslehre;20252;99999;30;314;
176;0976600;Werkerziehung;20202;99999;76;145;
177;0872200;Werkstofftechnik;20152;99999;72;543;
178;0444300;Wirtschafts-/Sozialgeographie;20072;99999;44;443;
179;1231200;Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt;20252;99999;31;340;
180;0113550;Kaukasistik;20072;99999;13;222;
181;1230500;Wirtschaftspädagogik;20252;99999;30;145;
182;1230250;Intern. Betriebswirtschaft/Management;20252;99999;30;340;
183;0105600;Wirtschafts-/Sozialgeschichte;20072;99999;05;225;
184;1230550;Wirtschaftswissenschaften;20252;99999;30;340;
185;0550100;Zahnmedizin;20072;99999;50;724;
186;0436300;Lernbereich Naturwissenschaft/Sachunterricht;20202;99999;36;145;
187;0113750;Asiatische Sprachen und Kulturen/Asienwissenschaften;20072;99999;13;222;
188;0107100;Allgemeine Literaturwissenschaft;20202;99999;07;223;
189;0109500;Niederdeutsch;20072;99999;09;223;
190;1333800;Sonderpädagogik;20252;99999;33;144;
191;0978350;Komposition;20072;99999;78;212;
192;0978100;Dirigieren;20072;99999;78;212;
193;0978300;Kirchenmusik;20072;99999;78;212;
194;0978600;Tonmeister;20072;99999;78;212;
195;0548100;Gesundheitspädagogik;20072;99999;48;142;
196;9083100;Studienkolleg;20252;99999;83;999;
197;0868200;Konstruktiver Ingenieurbau;20252;99999;68;582;
199;0861300;Lernbereich Technik;20202;99999;61;145;
200;0871200;Computer- und Kommunikationstechniken;20152;99999;71;481;
201;0861500;Werken (technisch)/Technologie;20202;99999;61;145;
202;0863340;Fertigungs-/Produktionstechnik;20072;99999;63;520;
203;0976400;Industriedesign/Produktgestaltung;20072;99999;76;214;
204;0975300;Malerei;20072;99999;75;211;
205;0975200;Bildhauerei/Plastik;20072;99999;75;211;
207;0112600;Sorabistik;20202;99999;12;222;
208;1327100;Soziale Arbeit;20252;99999;27;762;
210;1230400;Verkehrswirtschaft;20252;99999;30;840;
211;0863260;Energieverfahrenstechnik;20202;99999;63;522;
212;0863300;Feinwerktechnik;20072;99999;63;521;
213;0863900;Versorgungstechnik;20072;99999;63;522;
215;0863380;Gesundheitstechnik;20072;99999;63;521;
216;0863420;Glastechnik/Keramik;20072;99999;63;543;
219;0863540;Kunststofftechnik;20072;99999;63;543;
220;0758400;Milch- und Molkereiwirtschaft;20072;99999;58;541;
221;0871100;Bioinformatik;20152;99999;71;481;
222;0864500;Kommunikations- und Informationstechnik;20202;99999;64;523;
223;0865300;Nautik/Seefahrt;20072;99999;65;840;
224;0863660;Physikalische Technik/Mechanische Verfahrenstechnik;20202;99999;63;520;
225;0863740;Textil- und Bekleidungstechnik/-gewerbe;20072;99999;63;542;
226;0863860;Verfahrenstechnik;20202;99999;63;524;
227;0758550;Weinbau und Kellerwirtschaft;20202;99999;58;541;
230;0978150;Gesang;20072;99999;78;212;
231;0863220;Druck- und Reproduktionstechnik;20072;99999;63;213;
232;0548200;Gesundheitswissenschaften/-management;20072;99999;48;345;
234;0548400;Pflegewissenschaft/-management;20222;99999;48;345;
235;0865100;Fahrzeugtechnik;20072;99999;65;525;
242;0866200;Innenarchitektur;20072;99999;66;214;
245;1327200;Sozialpädagogik;20252;99999;27;761;
247;0871600;Medizinische Informatik;20152;99999;71;481;
253;1327300;Sozialwesen;20252;99999;27;762;
254;1333600;Sachunterricht (einschl. Schulgarten);20252;99999;33;144;
255;1129150;Archiv- und Bibliothekswesen;20252;99999;29;322;
259;1129250;Auswärtige Angelegenheiten;20252;99999;29;345;
261;1129500;Innere Verwaltung;20252;99999;29;345;
263;1129300;Bundeswehr, Justiz und Polizei;20252;99999;29;861;
264;1129100;Arbeits- und Sozialverwaltung, Berufsberatung;20252;99999;29;343;
268;1129750;Verkehrswesen;20252;99999;29;840;
269;1129400;Finanz-, Zoll- und Steuerverwaltung;20252;99999;29;344;
270;1333200;Berufs- und Wirtschaftspädagogik;20252;99999;33;142;
271;0109200;Deutsch als Fremdsprache oder als Zweitsprache;20202;99999;09;222;
272;0105100;Alte Geschichte;20072;99999;05;225;
273;0105400;Mittlere und neuere Geschichte;20072;99999;05;225;
274;1230350;Tourismuswirtschaft;20252;99999;30;812;
275;0105700;Wissenschaftsgeschichte/Technikgeschichte;20202;99999;05;225;
276;0437400;Wirtschaftsmathematik;20072;99999;37;461;
277;0871700;Wirtschaftsinformatik;20152;99999;71;481;
280;0869100;Kartographie;20072;99999;69;581;
282;0442300;Biotechnologie;20072;99999;42;421;
283;0444200;Landschaftsökologie/Biogeographie;20202;99999;44;443;
284;0107300;Angewandte Sprachwissenschaft;20202;99999;07;223;
286;0864400;Mikrosystemtechnik;20202;99999;64;523;
287;0975400;Neue Medien;20072;99999;75;213;
290;9083200;Sonstige Fächer;20252;99999;83;999;
292;0118100;Islamische Studien/Islamische Theologie;20202;99999;18;222;
294;0872100;Materialwissenschaft;20152;99999;72;543;
300;0442250;Biomedizin;20072;99999;42;421;
302;0119100;Medienwissenschaft;20202;99999;19;321;
303;1334100;Kommunikationswissenschaft/Publizistik;20252;99999;34;321;
304;1230220;Medienwirtschaft/Medienmanagement;20252;99999;30;340;
305;0861600;Medientechnik;20082;99999;61;213;
310;0861700;Regenerative Energien;20202;99999;61;523;
312;0436400;Statistik;20202;99999;36;462;
316;0864100;Elektrische Energietechnik;20202;99999;64;523;
320;0760100;Ernährungswissenschaft;20202;99999;60;726;
321;1333300;Erwachsenenbildung und außerschulische Jugendbildung;20252;99999;33;142;
333;0760300;Haushaltswissenschaft;20072;99999;60;814;
353;0758450;Pflanzenproduktion;20072;99999;58;621;
361;1333700;Schulpädagogik;20252;99999;33;142;
365;1333550;Kindheitspädagogik;20252;99999;33;142;
370;0870100;Wirtschaftsingenieurwesen mit ingenieurwissenschaftlichem Schwerpunkt;20092;99999;70;520;
371;0758500;Tierproduktion;20072;99999;58;621;
380;0861400;Mechatronik;20072;99999;61;520;
385;0443150;Geoökologie;20202;99999;43;443;
390;0862100;Archäometrie (Ingenieurarchäologie);20072;99999;62;225;
457;0863820;Umwelttechnik (einschl. Recycling);20202;99999;63;851;
458;0867200;Umweltschutz;20202;99999;67;851;
464;1231100;Facility Management;20252;99999;31;341;
544;0102200;Evang. Religionspädagogik, kirchliche Bildungsarbeit;20072;99999;02;221;
545;0103200;Kath. Religionspädagogik, kirchliche Bildungsarbeit;20072;99999;03;221;
548;0105500;Ur- und Frühgeschichte;20072;99999;05;225;
549;0548050;Ergotherapie;20252;99999;48;723;
550;0548250;Hebammenwissenschaft;20252;99999;48;723;
551;0548350;Logopädie/Sprachtherapie;20252;99999;48;723;
552;0548500;Physiotherapie;20252;99999;48;723;

1 001 0113100 Ägyptologie 20202 99999 13 225
2 002 0113150 Afrikanistik 20072 99999 13 222
3 003 0758200 Agrarwissenschaft/Landwirtschaft 20072 99999 58 621
4 004 0101100 Interdisziplinäre Studien (Schwerpunkt Geisteswissenschaften) 20202 99999 01 220
5 005 0108300 Klassische Philologie 20072 99999 08 222
6 006 0110100 Amerikanistik/Amerikakunde 20202 99999 10 222
7 007 0976100 Angewandte Kunst 20072 99999 76 214
8 008 0110200 Anglistik/Englisch 20072 99999 10 222
9 009 0442100 Anthropologie (Humanbiologie) 20072 99999 42 421
10 010 0113200 Arabisch/Arabistik 20072 99999 13 222
11 011 0330100 1230100 Arbeitslehre/Wirtschaftslehre 20252 99999 30 145
12 012 0105200 Archäologie 20072 99999 05 225
13 013 0866100 Architektur 20072 99999 66 581
14 014 0439100 Astrophysik und Astronomie 20202 99999 39 441
15 015 0113250 Außereuropäische Sprachen und Kulturen in Ozeanien und Amerika 20072 99999 13 222
16 016 0112100 Baltistik 20072 99999 12 222
17 017 0868100 Bauingenieurwesen/Ingenieurbau 20072 99999 68 582
18 018 0107400 Berufsbezogene Fremdsprachenausbildung 20202 99999 07 222
19 019 0436350 Orientierungsstudium MINT 20212 99999 36 145
20 020 0862200 Bergbau/Bergtechnik 20072 99999 62 544
21 021 0330150 1230150 Betriebswirtschaftslehre 20252 99999 30 340
22 022 0106100 Informations- und Bibliothekswissenschaften (nicht für Verwaltungsfachhochschulen) 20202 99999 06 322
23 023 0975100 Bildende Kunst/Graphik 20072 99999 75 211
24 024 0114100 Europäische Ethnologie und Kulturwissenschaft 20202 99999 14 312
25 025 0440100 Biochemie 20072 99999 40 421
26 026 0442200 Biologie 20072 99999 42 421
27 028 0758250 Brauwesen/Getränketechnologie 20072 99999 58 541
28 029 0222200 1335200 Sportwissenschaft 20252 99999 22 35 813
29 030 0323100 1323100 Interdisziplin. Studien (Schwerpunkt Rechts-, Wirtschafts- und Sozialwissenschaften) Interdisziplin. Studien (Schwerpunkt Sozial- und Verhaltenswissenschaften) 20252 99999 23 310
30 031 0108100 Byzantinistik 20072 99999 08 222
31 032 0440200 Chemie 20072 99999 40 442
32 033 0863180 Chemie-Ingenieurwesen/Chemieverfahrenstechnik 20202 99999 63 524
33 034 0109100 Dänisch 20072 99999 09 223
34 035 0977100 Darstellende Kunst/Bühnenkunst/Regie 20072 99999 77 212
35 036 0324300 1324300 Sonstige Regionalwissenschaften 20252 99999 24 310
36 037 0106200 Archiv- und Dokumentationswissenschaft 20202 99999 06 322
37 038 0324100 1324100 Lateinamerika-Studien 20252 99999 24 310
38 039 0443300 Geowissenschaften allgemein 20202 99999 43 443
39 040 0974100 Interdiszipl. Studien (Schwerpunkt Kunst, Kunstwissenschaft) 20202 99999 74 145
40 041 1083050 9083050 Sonstiges Orientierungsstudium 20252 99999 83 999
41 042 0328200 1128200 Wirtschaftsrecht 20252 99999 28 380
42 043 0108500 Neugriechisch 20072 99999 08 222
43 044 0324200 1324200 Ost- und Südosteuropa-Studien 20252 99999 24 310
44 048 0864200 Elektrotechnik/Elektronik 20202 99999 64 523
45 049 0436200 Interdisziplin. Studien (Schwerpunkt Naturwissenschaften) 20202 99999 36 440
46 050 0444100 Geographie/Erdkunde 20072 99999 44 443
47 052 0333400 1333400 Erziehungswissenschaft (Pädagogik) Erziehungswissenschaften (Pädagogik) 20252 99999 33 142
48 053 0102300 Evang. Theologie, -Religionslehre 20072 99999 02 221
49 054 0977200 Film und Fernsehen 20072 99999 77 212
50 055 0323250 1323250 Orientierungsstudium Gesellschaftswissenschaften 20252 99999 23 145
51 056 0112200 Finno-Ugristik 20072 99999 12 222
52 057 0865200 Luft- und Raumfahrttechnik 20072 99999 65 525
53 058 0759100 Forstwissenschaft, -wirtschaft 20072 99999 59 623
54 059 0111100 Französisch 20072 99999 11 222
55 060 0758300 Gartenbau 20072 99999 58 622
56 061 064 0757200 0757300 Meliorationswesen Naturschutz 20202 99999 57 581 851
57 064 065 0757300 0443100 Naturschutz Geologie/Paläontologie 20072 99999 57 43 851 443
58 065 066 0443100 0443200 Geologie/Paläontologie Geophysik 20072 99999 43 443
59 066 067 0443200 0109400 Geophysik Germanistik/Deutsch 20072 99999 43 09 443 223
60 067 068 0109400 0105300 Germanistik/Deutsch Geschichte 20072 99999 09 05 223 225
61 068 069 0105300 0976300 Geschichte Graphikdesign/Kommunikationsgestaltung 20072 99999 05 76 225 213
62 069 070 0976300 0108200 Graphikdesign/Kommunikationsgestaltung Griechisch 20072 99999 76 08 213 222
63 070 071 0108200 0760200 Griechisch Haushalts- und Ernährungswissenschaft 20072 99999 08 60 222 814
64 071 072 0760200 0861200 Haushalts- und Ernährungswissenschaft Interdisziplinäre Studien (Schwerpunkt Ingenieurwissenschaften) 20202 99999 60 61 814 520
65 072 073 0861200 0113300 Interdisziplinäre Studien (Schwerpunkt Ingenieurwissenschaften) Judaistik/Hebräisch 20212 99999 61 13 520 222
66 073 074 0113300 0863780 Judaistik/Hebräisch Transport-/Fördertechnik 20072 99999 13 63 222 544
67 074 075 0863780 0759200 Transport-/Fördertechnik Holzwirtschaft 20072 99999 63 59 544 623
68 075 076 0759200 0862300 Holzwirtschaft Hütten- und Gießereiwesen 20072 99999 59 62 623 521
69 076 077 0862300 0868500 Hütten- und Gießereiwesen Wasserwirtschaft 20072 99999 62 68 521 582
70 077 078 0868500 0113350 Wasserwirtschaft Indologie 20072 99999 68 13 582 222
71 078 079 0113350 0871300 Indologie Informatik 20152 99999 13 71 222 481
72 079 080 0871300 0978200 Informatik Instrumentalmusik 20072 99999 71 78 481 212
73 080 081 0978200 0113400 Instrumentalmusik Iranistik 20202 99999 78 13 212 310
74 081 082 0113400 0863460 Iranistik Holz-/Fasertechnik 20072 99999 13 63 310 543
75 082 083 0863460 0113450 Holz-/Fasertechnik Islamwissenschaft 20202 99999 63 13 543 310
76 083 084 0113450 0111200 Islamwissenschaft Italienisch 20072 99999 13 11 310 222
77 084 085 0111200 0113500 Italienisch Japanologie 20072 99999 11 13 222
78 085 086 0113500 0103300 Japanologie Kath. Theologie, -Religionslehre 20072 99999 13 03 222 221
79 086 088 0103300 0864600 Kath. Theologie, -Religionslehre Optoelektronik 20202 99999 03 64 221 523
80 088 089 0864600 0865500 Optoelektronik Verkehrsingenieurwesen 20072 99999 64 65 523 525
81 089 090 0865500 0101200 Verkehrsingenieurwesen Lernbereich Geisteswissenschaften 20202 99999 65 01 525 145
82 090 091 0101200 0979100 Lernbereich Geisteswissenschaften Kunstpädagogik 20252 99999 01 79 145
83 091 092 0974200 0979200 Kunsterziehung Kunstgeschichte, Kunstwissenschaft 20252 99999 74 79 145 211
84 092 093 0974300 0757100 Kunstgeschichte, Kunstwissenschaft Landschaftsgestaltung 20252 99999 74 57 211 581
85 093 094 0757100 0868400 Landespflege/Landschaftsgestaltung Wasserbau 20072 99999 57 68 581 582
86 094 095 0868400 0108400 Wasserbau Latein 20072 99999 68 08 582 222
87 095 096 0108400 0440300 Latein Lebensmittelchemie 20072 99999 08 40 222 442
88 096 097 0440300 0758350 Lebensmittelchemie Lebensmitteltechnologie 20072 99999 40 58 442 541
89 097 098 0758350 1335100 Lebensmitteltechnologie Sportpädagogik/Sportpsychologie 20252 99999 58 35 541 142
90 098 101 0222100 0974400 Sportpädagogik/Sportpsychologie Restaurierungskunde 20072 99999 22 74 142 211
91 101 102 0974400 0977300 Restaurierungskunde Schauspiel 20072 99999 74 77 211 212
92 102 103 0977300 0862400 Schauspiel Markscheidewesen 20072 99999 77 62 212 544
93 103 104 0862400 0863580 Markscheidewesen Maschinenbau/-wesen 20072 99999 62 63 544 520
94 104 105 0863580 0437100 Maschinenbau/-wesen Mathematik 20072 99999 63 37 520 461
95 105 106 0437100 0977400 Mathematik Tanzpädagogik 20072 99999 37 77 461 212
96 106 107 0977400 0549100 Tanzpädagogik Medizin (Allgemein-Medizin) 20072 99999 77 49 212 721
97 107 108 0549100 0863620 Medizin (Allgemein-Medizin) Metalltechnik 20072 99999 49 63 721 521
98 108 110 0863620 0443400 Metalltechnik Meteorologie 20072 99999 63 43 521 443
99 110 111 0443400 0443500 Meteorologie Mineralogie 20072 99999 43 443
100 111 113 0443500 0980100 Mineralogie Musikpädagogik 20252 99999 43 80 443 145
101 113 114 0978400 0980200 Musikerziehung Musikwissenschaft/-geschichte 20252 99999 78 80 145 212
102 114 115 0978450 1333500 Musikwissenschaft/-geschichte Grundschul-/Primarstufenpädagogik 20252 99999 78 33 212 144
103 115 116 0333500 0976500 Grundschul-/Primarstufenpädagogik Textilgestaltung 20072 99999 33 76 144 214
104 116 117 0976500 1333100 Textilgestaltung Ausländerpädagogik 20252 99999 76 33 214 142
105 117 118 0333100 0437300 Ausländerpädagogik Technomathematik 20072 99999 33 37 142 461
106 118 119 0437300 0109600 Technomathematik Niederländisch 20072 99999 37 09 461 223
107 119 120 0109600 0109700 Niederländisch Nordistik/Skandinavistik (Nord. Philologie, Einzelsprachen a.n.g.) 20202 99999 09 223 222
108 120 121 0109700 0871500 Nordistik/Skandinavistik (Nord. Philologie, Einzelsprachen a.n.g.) Medieninformatik 20152 99999 09 71 222 481
109 121 122 0871500 0113600 Medieninformatik Orientalistik, Altorientalistik 20072 99999 71 13 481 222
110 122 123 0113600 0871400 Orientalistik, Altorientalistik Ingenieurinformatik/Technische Informatik 20152 99999 13 71 222 481
111 123 124 0871400 0443600 Ingenieurinformatik/Technische Informatik Ozeanographie 20072 99999 71 43 481 443
112 124 125 0443600 0758150 Ozeanographie Agrarökonomie 20072 99999 43 58 443 621
113 125 126 0758150 0441100 Agrarökonomie Pharmazie 20072 99999 58 41 621 727
114 126 127 0441100 0104200 Pharmazie Philosophie 20072 99999 41 04 727 226
115 127 128 0104200 0439200 Philosophie Physik 20072 99999 04 39 226 441
116 128 129 0439200 1325100 Physik Politikwissenschaft/Politologie 20252 99999 39 25 441 313
117 129 131 0325100 0111300 Politikwissenschaft/Politologie Portugiesisch 20072 99999 25 11 313 222
118 130 132 0112900 1332100 Westslawisch (allgemein und a.n.g.) Psychologie 20252 99999 12 32 222 311
119 131 134 0111300 0867100 Portugiesisch Raumplanung 20072 99999 11 67 222 581
120 132 135 0332100 1128100 Psychologie Rechtswissenschaft 20252 99999 32 28 311 380
121 134 136 0867100 0104300 Raumplanung Religionswissenschaft 20072 99999 67 04 581 221
122 135 137 0328100 0111400 Rechtswissenschaft Romanistik (Romanische Philologie, Einzelsprachen a.n.g.) 20072 99999 28 11 380 222
123 136 138 0104300 0758100 Religionswissenschaft Agrarbiologie 20072 99999 04 58 221 621
124 137 140 0111400 0861100 Romanistik (Romanische Philologie, Einzelsprachen a.n.g.) Angewandte Systemwissenschaften 20202 99999 11 61 222 460
125 138 141 0758100 0863100 Agrarbiologie Abfallwirtschaft 20202 99999 58 63 621 851
126 139 142 0112400 0865400 Russisch Schiffbau/Schiffstechnik, Meerestechnik 20252 99999 12 65 222 525
127 140 143 0861100 0863140 Angewandte Systemwissenschaften Augenoptik 20072 99999 61 63 460 521
128 141 144 0863100 0863700 Abfallwirtschaft Technische Kybernetik 20072 99999 63 851 520
129 142 145 0865400 0113650 Schiffbau/Schiffstechnik Sinologie/Koreanistik 20072 99999 65 13 525 222
130 143 146 0863140 0112500 Augenoptik Slawistik (Slaw. Philologie, ohne Sorabistik) 20252 99999 63 12 521 222
131 144 147 0863700 1326100 Technische Kybernetik Sozialkunde 20252 99999 63 26 520 145
132 145 148 0113650 1326200 Sinologie/Koreanistik Sozialwissenschaften 20252 99999 13 26 222 312
133 146 149 0112500 1326300 Slawistik (Slaw. Philologie) Soziologie 20252 99999 12 26 222 312
134 147 150 0326100 0111500 Sozialkunde Spanisch 20072 99999 26 11 145 222
135 148 152 0326200 0107200 Sozialwissenschaften Allgemeine Sprachwissenschaft 20252 99999 26 07 312 223
136 149 154 0326300 1323200 Soziologie Lernbereich Gesellschaftslehre 20252 99999 26 23 312 145
137 150 155 0111500 0977500 Spanisch Theaterwissenschaft 20072 99999 11 77 222 212
138 152 156 0107200 0751100 Allgemeine Sprachwissenschaft/Indogermanistik Tiermedizin/Veterinärmedizin 20152 99999 07 51 223 640
139 153 157 0112700 0864300 Südslawisch (Bulgarisch, Serbokroatisch, Slowenisch usw.) Mikroelektronik 20202 99999 12 64 222 523
140 154 158 0323200 0113700 Lernbereich Gesellschaftslehre Turkologie 20072 99999 23 13 145 222
141 155 159 0977500 0976200 Theaterwissenschaft Edelstein- und Schmuckdesign 20072 99999 77 76 212 214
142 156 160 0751100 0107500 Tiermedizin/Veterinärmedizin Computerlinguistik 20072 99999 51 07 640 220
143 157 161 0864300 0102100 Mikroelektronik Diakoniewissenschaft 20072 99999 64 02 523 221
144 158 162 0113700 0103100 Turkologie Caritaswissenschaft 20072 99999 13 03 222 221
145 159 163 0976200 0978550 Edelstein- und Schmuckdesign Rhythmik 20072 99999 76 78 214 212
146 160 164 0107500 0978250 Computerlinguistik Jazz und Popularmusik 20072 99999 07 78 220 212
147 161 165 0102100 0978500 Diakoniewissenschaft Orchestermusik 20072 99999 02 78 221 212
148 162 166 0103100 1230300 Caritaswissenschaft Sportmanagement/Sportökonomie 20252 99999 03 30 221 345
149 163 167 0978550 1230200 Rhythmik Europäische Wirtschaft 20252 99999 78 30 212 340
150 164 169 0978250 0104100 Jazz und Popularmusik Ethik 20072 99999 78 04 212 226
151 165 171 0978500 0869200 Orchestermusik Vermessungswesen (Geodäsie) 20072 99999 78 69 212 581
152 166 172 0330300 1129800 Sportmanagement/Sportökonomie Verwaltungswissenschaft/-wesen 20252 99999 30 29 345
153 167 173 0330200 0114200 Europäische Wirtschaft Ethnologie 20072 99999 30 14 340 312
154 168 174 0329550 0114300 Justizvollzug Volkskunde 20072 99999 29 14 861 312
155 169 175 0104100 1230450 Ethik Volkswirtschaftslehre 20252 99999 04 30 226 314
156 171 176 0869200 0976600 Vermessungswesen (Geodäsie) Werkerziehung 20202 99999 69 76 581 145
157 172 177 0329800 0872200 Verwaltungswissenschaft/-wesen Werkstofftechnik 20152 99999 29 72 345 543
158 173 178 0114200 0444300 Ethnologie Wirtschafts-/Sozialgeographie 20072 99999 14 44 312 443
159 174 179 0114300 1231200 Volkskunde Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt 20252 99999 14 31 312 340
160 175 180 0330450 0113550 Volkswirtschaftslehre Kaukasistik 20072 99999 30 13 314 222
161 176 181 0976600 1230500 Werkerziehung Wirtschaftspädagogik 20252 99999 76 30 145
162 177 182 0872200 1230250 Werkstofftechnik Intern. Betriebswirtschaft/Management 20252 99999 72 30 543 340
163 178 183 0444300 0105600 Wirtschafts-/Sozialgeographie Wirtschafts-/Sozialgeschichte 20072 99999 44 05 443 225
164 179 184 0331200 1230550 Wirtschaftsingenieurwesen mit wirtschaftswissenschaftlichem Schwerpunkt Wirtschaftswissenschaften 20252 99999 31 30 340
165 180 185 0113550 0550100 Kaukasistik Zahnmedizin 20072 99999 13 50 222 724
166 181 186 0330500 0436300 Wirtschaftspädagogik Lernbereich Naturwissenschaft/Sachunterricht 20202 99999 30 36 145
167 182 187 0330250 0113750 Intern. Betriebswirtschaft/Management Asiatische Sprachen und Kulturen/Asienwissenschaften 20072 99999 30 13 340 222
168 183 188 0105600 0107100 Wirtschafts-/Sozialgeschichte Allgemeine Literaturwissenschaft 20202 99999 05 07 225 223
169 184 189 0330550 0109500 Wirtschaftswissenschaften Niederdeutsch 20072 99999 30 09 340 223
170 185 190 0550100 1333800 Zahnmedizin Sonderpädagogik 20252 99999 50 33 724 144
171 186 191 0436300 0978350 Lernbereich Naturwissenschaft/Sachunterricht Komposition 20072 99999 36 78 145 212
172 187 192 0113750 0978100 Asiatische Sprachen und Kulturen/Asienwissenschaften Dirigieren 20072 99999 13 78 222 212
173 188 193 0107100 0978300 Allgemeine Literaturwissenschaft Kirchenmusik 20072 99999 07 78 223 212
174 189 194 0109500 0978600 Niederdeutsch Tonmeister 20072 99999 09 78 223 212
175 190 195 0333800 0548100 Sonderpädagogik Gesundheitspädagogik 20072 99999 33 48 144 142
176 191 196 0978350 9083100 Komposition Studienkolleg 20252 99999 78 83 212 999
177 192 197 0978100 0868200 Dirigieren Konstruktiver Ingenieurbau 20252 99999 78 68 212 582
178 193 199 0978300 0861300 Kirchenmusik Lernbereich Technik 20202 99999 78 61 212 145
179 194 200 0978600 0871200 Tonmeister Computer- und Kommunikationstechniken 20152 99999 78 71 212 481
180 195 201 0548100 0861500 Gesundheitspädagogik Werken (technisch)/Technologie 20202 99999 48 61 142 145
181 196 202 1083100 0863340 Studienkolleg Fertigungs-/Produktionstechnik 20072 99999 83 63 999 520
182 197 203 0868200 0976400 Holzbau Industriedesign/Produktgestaltung 20072 99999 68 76 582 214
183 199 204 0861300 0975300 Lernbereich Technik Malerei 20072 99999 61 75 145 211
184 200 205 0871200 0975200 Computer- und Kommunikationstechniken Bildhauerei/Plastik 20072 99999 71 75 481 211
185 201 207 0861500 0112600 Werken (technisch)/Technologie Sorabistik 20202 99999 61 12 145 222
186 202 208 0863340 1327100 Fertigungs-/Produktionstechnik Soziale Arbeit 20252 99999 63 27 520 762
187 203 210 0976400 1230400 Industriedesign/Produktgestaltung Verkehrswirtschaft 20252 99999 76 30 214 840
188 204 211 0975300 0863260 Malerei Energieverfahrenstechnik 20202 99999 75 63 211 522
189 205 212 0975200 0863300 Bildhauerei/Plastik Feinwerktechnik 20072 99999 75 63 211 521
190 206 213 0112300 0863900 Polnisch Versorgungstechnik 20072 99999 12 63 222 522
191 207 215 0112600 0863380 Sorabistik Gesundheitstechnik 20072 99999 12 63 222 521
192 208 216 0327100 0863420 Soziale Arbeit Glastechnik/Keramik 20072 99999 27 63 762 543
193 209 219 0112800 0863540 Tschechisch Kunststofftechnik 20072 99999 12 63 222 543
194 210 220 0330400 0758400 Verkehrswirtschaft Milch- und Molkereiwirtschaft 20072 99999 30 58 840 541
195 211 221 0863260 0871100 Energieverfahrenstechnik Bioinformatik 20152 99999 63 71 522 481
196 212 222 0863300 0864500 Feinwerktechnik Kommunikations- und Informationstechnik 20202 99999 63 64 521 523
197 213 223 0863900 0865300 Versorgungstechnik Nautik/Seefahrt 20072 99999 63 65 522 840
198 215 224 0863380 0863660 Gesundheitstechnik Physikalische Technik/Mechanische Verfahrenstechnik 20202 99999 63 521 520
199 216 225 0863420 0863740 Glastechnik/Keramik Textil- und Bekleidungstechnik/-gewerbe 20072 99999 63 543 542
200 219 226 0863540 0863860 Kunststofftechnik Verfahrenstechnik 20202 99999 63 543 524
201 220 227 0758400 0758550 Milch- und Molkereiwirtschaft Weinbau und Kellerwirtschaft 20202 99999 58 541
202 221 230 0871100 0978150 Bioinformatik Gesang 20072 99999 71 78 481 212
203 222 231 0864500 0863220 Kommunikations- und Informationstechnik Druck- und Reproduktionstechnik 20072 99999 64 63 523 213
204 223 232 0865300 0548200 Nautik/Seefahrt Gesundheitswissenschaften/-management 20072 99999 65 48 840 345
205 224 234 0863660 0548400 Physikalische Technik/Mechanische Verfahrenstechnik Pflegewissenschaft/-management 20222 99999 63 48 520 345
206 225 235 0863740 0865100 Textil- und Bekleidungstechnik/-gewerbe Fahrzeugtechnik 20072 99999 63 65 542 525
207 226 242 0863860 0866200 Verfahrenstechnik Innenarchitektur 20072 99999 63 66 524 214
208 227 245 0758550 1327200 Weinbau und Kellerwirtschaft Sozialpädagogik 20252 99999 58 27 541 761
209 230 247 0978150 0871600 Gesang Medizinische Informatik 20152 99999 78 71 212 481
210 231 253 0863220 1327300 Druck- und Reproduktionstechnik Sozialwesen 20252 99999 63 27 213 762
211 232 254 0548200 1333600 Gesundheitswissenschaften/-management Sachunterricht (einschl. Schulgarten) 20252 99999 48 33 345 144
212 233 255 0548300 1129150 Nichtärztliche Heilberufe/Therapien Archiv- und Bibliothekswesen 20252 99999 48 29 723 322
213 234 259 0548400 1129250 Pflegewissenschaft/-management Auswärtige Angelegenheiten 20252 99999 48 29 723 345
214 235 261 0865100 1129500 Fahrzeugtechnik Innere Verwaltung 20252 99999 65 29 525 345
215 242 263 0866200 1129300 Innenarchitektur Bundeswehr, Justiz und Polizei 20252 99999 66 29 214 861
216 245 264 0327200 1129100 Sozialpädagogik Arbeits- und Sozialverwaltung, Berufsberatung 20252 99999 27 29 761 343
217 247 268 0871600 1129750 Medizinische Informatik Verkehrswesen 20252 99999 71 29 481 840
218 253 269 0327300 1129400 Sozialwesen Finanz-, Zoll- und Steuerverwaltung 20252 99999 27 29 762 344
219 254 270 0333600 1333200 Sachunterricht (einschl. Schulgarten) Berufs- und Wirtschaftspädagogik 20252 99999 33 144 142
220 255 271 0329200 0109200 Archivwesen Deutsch als Fremdsprache oder als Zweitsprache 20202 99999 29 09 322 222
221 256 272 0329650 0105100 Rechtspflege Alte Geschichte 20072 99999 29 05 380 225
222 257 273 0329100 0105400 Arbeits- und Berufsberatung Mittlere und neuere Geschichte 20072 99999 29 05 762 225
223 258 274 0329150 1230350 Arbeitsverwaltung Tourismuswirtschaft 20252 99999 29 30 345 812
224 259 275 0329250 0105700 Auswärtige Angelegenheiten Wissenschaftsgeschichte/Technikgeschichte 20202 99999 29 05 345 225
225 260 276 0329400 0437400 Bundeswehrverwaltung Wirtschaftsmathematik 20072 99999 29 37 345 461
226 261 277 0329500 0871700 Innere Verwaltung Wirtschaftsinformatik 20152 99999 29 71 345 481
227 262 280 0329350 0869100 Bibliothekswesen Kartographie 20072 99999 29 69 322 581
228 263 282 0329600 0442300 Polizei/Verfassungsschutz Biotechnologie 20072 99999 29 42 861 421
229 264 283 0329700 0444200 Sozialversicherung Landschaftsökologie/Biogeographie 20202 99999 29 44 343 443
230 265 284 0329300 0107300 Bankwesen Angewandte Sprachwissenschaft 20202 99999 29 07 343 223
231 266 286 0329450 0864400 Finanzverwaltung Mikrosystemtechnik 20202 99999 29 64 344 523
232 268 287 0329750 0975400 Verkehrswesen Neue Medien 20072 99999 29 75 840 213
233 269 290 0329850 9083200 Zoll- und Steuerverwaltung Sonstige Fächer 20252 99999 29 83 344 999
234 270 292 0333200 0118100 Berufs- und Wirtschaftspädagogik Islamische Studien/Islamische Theologie 20202 99999 33 18 142 222
235 271 294 0109200 0872100 Deutsch als Fremdsprache oder als Zweitsprache Materialwissenschaft 20152 99999 09 72 222 543
236 272 300 0105100 0442250 Alte Geschichte Biomedizin 20072 99999 05 42 225 421
237 273 302 0105400 0119100 Mittlere und neuere Geschichte Medienwissenschaft 20202 99999 05 19 225 321
238 274 303 0330350 1334100 Tourismuswirtschaft Kommunikationswissenschaft/Publizistik 20252 99999 30 34 812 321
239 275 304 0105700 1230220 Wissenschaftsgeschichte/Technikgeschichte Medienwirtschaft/Medienmanagement 20252 99999 05 30 225 340
240 276 305 0437400 0861600 Wirtschaftsmathematik Medientechnik 20082 99999 37 61 461 213
241 277 310 0871700 0861700 Wirtschaftsinformatik Regenerative Energien 20202 99999 71 61 481 523
242 280 312 0869100 0436400 Kartographie Statistik 20202 99999 69 36 581 462
243 282 316 0442300 0864100 Biotechnologie Elektrische Energietechnik 20202 99999 42 64 421 523
244 283 320 0444200 0760100 Landschaftsökologie/Biogeographie Ernährungswissenschaft 20202 99999 44 60 443 726
245 284 321 0107300 1333300 Angewandte Sprachwissenschaft Erwachsenenbildung und außerschulische Jugendbildung 20252 99999 07 33 223 142
246 286 333 0864400 0760300 Mikrosystemtechnik Haushaltswissenschaft 20072 99999 64 60 523 814
247 287 353 0975400 0758450 Neue Medien Pflanzenproduktion 20072 99999 75 58 213 621
248 290 361 1083200 1333700 Sonstige Fächer Schulpädagogik 20252 99999 83 33 999 142
249 292 365 0118100 1333550 Islamische Studien/Islamische Theologie Kindheitspädagogik 20252 99999 18 33 222 142
250 294 370 0872100 0870100 Materialwissenschaft Wirtschaftsingenieurwesen mit ingenieurwissenschaftlichem Schwerpunkt 20092 99999 72 70 543 520
251 300 371 0442250 0758500 Biomedizin Tierproduktion 20072 99999 42 58 421 621
252 302 380 0119100 0861400 Medienwissenschaft Mechatronik 20072 99999 19 61 321 520
253 303 385 0334100 0443150 Kommunikationswissenschaft/Publizistik Geoökologie 20202 99999 34 43 321 443
254 304 390 0330220 0862100 Medienwirtschaft/Medienmanagement Archäometrie (Ingenieurarchäologie) 20072 99999 30 62 340 225
255 305 457 0861600 0863820 Medientechnik Umwelttechnik (einschl. Recycling) 20202 99999 61 63 213 851
256 310 458 0861700 0867200 Regenerative Energien Umweltschutz 20202 99999 61 67 523 851
257 312 464 0436400 1231100 Statistik Facility Management 20252 99999 36 31 462 341
258 316 544 0864100 0102200 Elektrische Energietechnik Evang. Religionspädagogik, kirchliche Bildungsarbeit 20072 99999 64 02 523 221
259 320 545 0760100 0103200 Ernährungswissenschaft Kath. Religionspädagogik, kirchliche Bildungsarbeit 20072 99999 60 03 726 221
260 321 548 0333300 0105500 Erwachsenenbildung und außerschulische Jugendbildung Ur- und Frühgeschichte 20072 99999 33 05 142 225
261 333 549 0760300 0548050 Haushaltswissenschaft Ergotherapie 20252 99999 60 48 814 723
262 353 550 0758450 0548250 Pflanzenproduktion Hebammenwissenschaft 20252 99999 58 48 621 723
263 361 551 0333700 0548350 Schulpädagogik Logopädie/Sprachtherapie 20252 99999 33 48 142 723
264 365 552 0333450 0548500 Pädagogik der frühen Kindheit Physiotherapie 20252 99999 33 48 142 723
370 0870100 Wirtschaftsingenieurwesen mit ingenieurwissenschaftlichem Schwerpunkt 70 520
371 0758500 Tierproduktion 58 621
380 0861400 Mechatronik 61 520
385 0443150 Geoökologie 43 443
390 0862100 Archäometrie (Ingenieurarchäologie) 62 225
429 0868300 Stahlbau 68 582
457 0863820 Umwelttechnik (einschl. Recycling) 63 851
458 0867200 Umweltschutz 67 851
464 0331100 Facility Management 31 341
544 0102200 Evang. Religionspädagogik, kirchliche Bildungsarbeit 02 221
545 0103200 Kath. Religionspädagogik, kirchliche Bildungsarbeit 03 221
548 0105500 Ur- und Frühgeschichte 05 225

5183
src/de/statspez/plausi/astat/csv/StudienfachMerkmalsKombination.csv

File diff suppressed because it is too large Load Diff

3131
src/de/statspez/plausi/astat/csv/Studienfach_Land.csv

File diff suppressed because it is too large Load Diff

10
src/de/statspez/plausi/astat/csv/StudiumArt.csv

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
1;;Präsenzstudium in Deutschland
2;;Fernstudium in Deutschland
3;;Praxissemester in Deutschland
4;;Präsenzstudium im Ausland
5;;Praxissemester im Ausland
1;;Präsenzstudium in Deutschland;20062;99999;
2;;Fernstudium in Deutschland;20062;99999;
3;;Praxissemester in Deutschland;20062;99999;
4;;Präsenzstudium im Ausland;20062;99999;
5;;Praxissemester im Ausland;20062;99999;

1 1 Präsenzstudium in Deutschland 20062 99999
2 2 Fernstudium in Deutschland 20062 99999
3 3 Praxissemester in Deutschland 20062 99999
4 4 Präsenzstudium im Ausland 20062 99999
5 5 Praxissemester im Ausland 20062 99999

12
src/de/statspez/plausi/astat/csv/VollTeilzeit.csv

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
1;;Vollzeit
2;;Teilzeit
4;;Ausbildungsintegrierendes Duales Studium (Erstausbildung)
5;;Praxisintegrierendes Duales Studium (Erstausbildung)
6;;Berufsintegrierendes Duales Studium (Weiterbildung)
7;;Praxisintegrierendes Duales Studium (Weiterbildung)
1;;Vollzeit;20062;99999;
2;;Teilzeit;20062;99999;
4;;Ausbildungsintegrierendes Duales Studium (Erstausbildung) ;20152;99999;
5;;Praxisintegrierendes Duales Studium (Erstausbildung);20152;99999;
6;;Berufsintegrierendes Duales Studium (Weiterbildung);20152;99999;
7;;Praxisintegrierendes Duales Studium (Weiterbildung);20152;99999;

1 1 Vollzeit 20062 99999
2 2 Teilzeit 20062 99999
3 4 Ausbildungsintegrierendes Duales Studium (Erstausbildung) 20152 99999
4 5 Praxisintegrierendes Duales Studium (Erstausbildung) 20152 99999
5 6 Berufsintegrierendes Duales Studium (Weiterbildung) 20152 99999
6 7 Praxisintegrierendes Duales Studium (Weiterbildung) 20152 99999

390
src/de/statspez/plausi/generated/Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017.java

File diff suppressed because one or more lines are too long

3443
src/de/statspez/plausi/generated/Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017.xml

File diff suppressed because it is too large Load Diff

BIN
src/de/statspez/plausi/generated/Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017_Descriptor.data

Binary file not shown.

436
src/de/statspez/plausi/generated/Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017_Segment1.java

@ -4,186 +4,186 @@ import de.statspez.pleditor.generator.runtime.*; @@ -4,186 +4,186 @@ import de.statspez.pleditor.generator.runtime.*;
public class Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017_Segment1
{
public static final StringValue __STR_LIT_986 = new StringValue("abc");
public static final StringValue __STR_LIT_987 = new StringValue("a ");
public static final StringValue __STR_LIT_988 = new StringValue(" c");
public static final StringValue __STR_LIT_989 = new StringValue("2022");
public static final StringValue __STR_LIT_990 = new StringValue("2023");
public static final StringValue __STR_LIT_991 = new StringValue("2019");
public static final StringValue __STR_LIT_992 = new StringValue("102");
public static final StringValue __STR_LIT_993 = new StringValue("004");
public static final StringValue __STR_LIT_994 = new StringValue("8");
public static final StringValue __STR_LIT_995 = new StringValue("98");
public static final StringValue __STR_LIT_996 = new StringValue("999");
public static final StringValue __STR_LIT_997 = new StringValue("0081");
public static final StringValue __STR_LIT_998 = new StringValue("0089");
public static final StringValue __STR_LIT_999 = new StringValue("0261");
public static final StringValue __STR_LIT_1000 = new StringValue("0269");
public static final StringValue __STR_LIT_1001 = new StringValue("0271");
public static final StringValue __STR_LIT_1002 = new StringValue("0279");
public static final StringValue __STR_LIT_1003 = new StringValue("0309");
public static final StringValue __STR_LIT_1004 = new StringValue("0311");
public static final StringValue __STR_LIT_1005 = new StringValue("0319");
public static final StringValue __STR_LIT_1006 = new StringValue("0361");
public static final StringValue __STR_LIT_1007 = new StringValue("0369");
public static final StringValue __STR_LIT_1008 = new StringValue("0371");
public static final StringValue __STR_LIT_1009 = new StringValue("0379");
public static final StringValue __STR_LIT_1010 = new StringValue("0491");
public static final StringValue __STR_LIT_1011 = new StringValue("0499");
public static final StringValue __STR_LIT_1012 = new StringValue("0640");
public static final StringValue __STR_LIT_1013 = new StringValue("0650");
public static final StringValue __STR_LIT_1014 = new StringValue("0950");
public static final StringValue __STR_LIT_1015 = new StringValue("1021");
public static final StringValue __STR_LIT_1016 = new StringValue("1029");
public static final StringValue __STR_LIT_1017 = new StringValue("1031");
public static final StringValue __STR_LIT_1018 = new StringValue("1039");
public static final StringValue __STR_LIT_1019 = new StringValue("1081");
public static final StringValue __STR_LIT_1020 = new StringValue("1089");
public static final StringValue __STR_LIT_1021 = new StringValue("1091");
public static final StringValue __STR_LIT_1022 = new StringValue("1099");
public static final StringValue __STR_LIT_1023 = new StringValue("1101");
public static final StringValue __STR_LIT_1024 = new StringValue("1109");
public static final StringValue __STR_LIT_1025 = new StringValue("1111");
public static final StringValue __STR_LIT_1026 = new StringValue("1119");
public static final StringValue __STR_LIT_1027 = new StringValue("1121");
public static final StringValue __STR_LIT_1028 = new StringValue("1129");
public static final StringValue __STR_LIT_1029 = new StringValue("1161");
public static final StringValue __STR_LIT_1030 = new StringValue("1169");
public static final StringValue __STR_LIT_1031 = new StringValue("1241");
public static final StringValue __STR_LIT_1032 = new StringValue("1249");
public static final StringValue __STR_LIT_1033 = new StringValue("1251");
public static final StringValue __STR_LIT_1034 = new StringValue("1258");
public static final StringValue __STR_LIT_1035 = new StringValue("1259");
public static final StringValue __STR_LIT_1036 = new StringValue("1271");
public static final StringValue __STR_LIT_1037 = new StringValue("1279");
public static final StringValue __STR_LIT_1038 = new StringValue("1319");
public static final StringValue __STR_LIT_1039 = new StringValue("1321");
public static final StringValue __STR_LIT_1040 = new StringValue("1329");
public static final StringValue __STR_LIT_1041 = new StringValue("1331");
public static final StringValue __STR_LIT_1042 = new StringValue("1339");
public static final StringValue __STR_LIT_1043 = new StringValue("1341");
public static final StringValue __STR_LIT_1044 = new StringValue("1349");
public static final StringValue __STR_LIT_1045 = new StringValue("1361");
public static final StringValue __STR_LIT_1046 = new StringValue("1362");
public static final StringValue __STR_LIT_1047 = new StringValue("1369");
public static final StringValue __STR_LIT_1048 = new StringValue("1378");
public static final StringValue __STR_LIT_1049 = new StringValue("1379");
public static final StringValue __STR_LIT_1050 = new StringValue("1481");
public static final StringValue __STR_LIT_1051 = new StringValue("1489");
public static final StringValue __STR_LIT_1052 = new StringValue("1491");
public static final StringValue __STR_LIT_1053 = new StringValue("1499");
public static final StringValue __STR_LIT_1054 = new StringValue("1639");
public static final StringValue __STR_LIT_1055 = new StringValue("1731");
public static final StringValue __STR_LIT_1056 = new StringValue("1739");
public static final StringValue __STR_LIT_1057 = new StringValue("1821");
public static final StringValue __STR_LIT_1058 = new StringValue("1829");
public static final StringValue __STR_LIT_1059 = new StringValue("5150");
public static final StringValue __STR_LIT_1060 = new StringValue("5160");
public static final StringValue __STR_LIT_1061 = new StringValue("6245");
public static final StringValue __STR_LIT_1062 = new StringValue("7467");
public static final StringValue __STR_LIT_1063 = new StringValue("8100");
public static final StringValue __STR_LIT_1064 = new StringValue("0011");
public static final StringValue __STR_LIT_1065 = new StringValue("0012");
public static final StringValue __STR_LIT_1066 = new StringValue("0150");
public static final StringValue __STR_LIT_1067 = new StringValue("0180");
public static final StringValue __STR_LIT_1068 = new StringValue("0190");
public static final StringValue __STR_LIT_1069 = new StringValue("0372");
public static final StringValue __STR_LIT_1070 = new StringValue("0373");
public static final StringValue __STR_LIT_1071 = new StringValue("0390");
public static final StringValue __STR_LIT_1072 = new StringValue("0511");
public static final StringValue __STR_LIT_1073 = new StringValue("0552");
public static final StringValue __STR_LIT_1074 = new StringValue("0580");
public static final StringValue __STR_LIT_1075 = new StringValue("0590");
public static final StringValue __STR_LIT_1076 = new StringValue("0630");
public static final StringValue __STR_LIT_1077 = new StringValue("0670");
public static final StringValue __STR_LIT_1078 = new StringValue("0680");
public static final StringValue __STR_LIT_1079 = new StringValue("0690");
public static final StringValue __STR_LIT_1080 = new StringValue("0910");
public static final StringValue __STR_LIT_1081 = new StringValue("1010");
public static final StringValue __STR_LIT_1082 = new StringValue("1040");
public static final StringValue __STR_LIT_1083 = new StringValue("1060");
public static final StringValue __STR_LIT_1084 = new StringValue("1150");
public static final StringValue __STR_LIT_1085 = new StringValue("1160");
public static final StringValue __STR_LIT_1086 = new StringValue("1170");
public static final StringValue __STR_LIT_1087 = new StringValue("1180");
public static final StringValue __STR_LIT_1088 = new StringValue("1190");
public static final StringValue __STR_LIT_1089 = new StringValue("1200");
public static final StringValue __STR_LIT_1090 = new StringValue("1210");
public static final StringValue __STR_LIT_1091 = new StringValue("1211");
public static final StringValue __STR_LIT_1092 = new StringValue("1222");
public static final StringValue __STR_LIT_1093 = new StringValue("1230");
public static final StringValue __STR_LIT_1094 = new StringValue("1250");
public static final StringValue __STR_LIT_1095 = new StringValue("1252");
public static final StringValue __STR_LIT_1096 = new StringValue("1260");
public static final StringValue __STR_LIT_1097 = new StringValue("1270");
public static final StringValue __STR_LIT_1098 = new StringValue("1323");
public static final StringValue __STR_LIT_1099 = new StringValue("1440");
public static final StringValue __STR_LIT_1100 = new StringValue("1460");
public static final StringValue __STR_LIT_1101 = new StringValue("1530");
public static final StringValue __STR_LIT_1102 = new StringValue("1542");
public static final StringValue __STR_LIT_1103 = new StringValue("1580");
public static final StringValue __STR_LIT_1104 = new StringValue("1632");
public static final StringValue __STR_LIT_1105 = new StringValue("1633");
public static final StringValue __STR_LIT_1106 = new StringValue("1634");
public static final StringValue __STR_LIT_1107 = new StringValue("1690");
public static final StringValue __STR_LIT_1108 = new StringValue("1700");
public static final StringValue __STR_LIT_1109 = new StringValue("1730");
public static final StringValue __STR_LIT_1110 = new StringValue("1740");
public static final StringValue __STR_LIT_1111 = new StringValue("1800");
public static final StringValue __STR_LIT_1112 = new StringValue("1960");
public static final StringValue __STR_LIT_1113 = new StringValue("2000");
public static final StringValue __STR_LIT_1114 = new StringValue("2020");
public static final StringValue __STR_LIT_1115 = new StringValue("2030");
public static final StringValue __STR_LIT_1116 = new StringValue("2040");
public static final StringValue __STR_LIT_1117 = new StringValue("2050");
public static final StringValue __STR_LIT_1118 = new StringValue("2060");
public static final StringValue __STR_LIT_1119 = new StringValue("2170");
public static final StringValue __STR_LIT_1120 = new StringValue("2200");
public static final StringValue __STR_LIT_1121 = new StringValue("2300");
public static final StringValue __STR_LIT_1122 = new StringValue("2420");
public static final StringValue __STR_LIT_1123 = new StringValue("2430");
public static final StringValue __STR_LIT_1124 = new StringValue("2500");
public static final StringValue __STR_LIT_1125 = new StringValue("2550");
public static final StringValue __STR_LIT_1126 = new StringValue("2561");
public static final StringValue __STR_LIT_1127 = new StringValue("2571");
public static final StringValue __STR_LIT_1128 = new StringValue("2572");
public static final StringValue __STR_LIT_1129 = new StringValue("2573");
public static final StringValue __STR_LIT_1130 = new StringValue("2581");
public static final StringValue __STR_LIT_1131 = new StringValue("2582");
public static final StringValue __STR_LIT_1132 = new StringValue("2583");
public static final StringValue __STR_LIT_1133 = new StringValue("2600");
public static final StringValue __STR_LIT_1134 = new StringValue("2620");
public static final StringValue __STR_LIT_1135 = new StringValue("2630");
public static final StringValue __STR_LIT_1136 = new StringValue("2640");
public static final StringValue __STR_LIT_1137 = new StringValue("2650");
public static final StringValue __STR_LIT_1138 = new StringValue("2670");
public static final StringValue __STR_LIT_1139 = new StringValue("2690");
public static final StringValue __STR_LIT_1140 = new StringValue("2700");
public static final StringValue __STR_LIT_1141 = new StringValue("2710");
public static final StringValue __STR_LIT_1142 = new StringValue("2720");
public static final StringValue __STR_LIT_1143 = new StringValue("2730");
public static final StringValue __STR_LIT_1144 = new StringValue("2760");
public static final StringValue __STR_LIT_1145 = new StringValue("2770");
public static final StringValue __STR_LIT_1146 = new StringValue("2800");
public static final StringValue __STR_LIT_1147 = new StringValue("2810");
public static final StringValue __STR_LIT_1148 = new StringValue("2830");
public static final StringValue __STR_LIT_1149 = new StringValue("2850");
public static final StringValue __STR_LIT_1150 = new StringValue("2860");
public static final StringValue __STR_LIT_1151 = new StringValue("2870");
public static final StringValue __STR_LIT_1152 = new StringValue("2880");
public static final StringValue __STR_LIT_1153 = new StringValue("2890");
public static final StringValue __STR_LIT_1154 = new StringValue("2920");
public static final StringValue __STR_LIT_1155 = new StringValue("2940");
public static final StringValue __STR_LIT_1156 = new StringValue("2960");
public static final StringValue __STR_LIT_1157 = new StringValue("2980");
public static final StringValue __STR_LIT_1158 = new StringValue("3011");
public static final StringValue __STR_LIT_1159 = new StringValue("3030");
public static final StringValue __STR_LIT_1160 = new StringValue("3100");
public static final StringValue __STR_LIT_1161 = new StringValue("3370");
public static final StringValue __STR_LIT_1162 = new StringValue("3660");
public static final StringValue __STR_LIT_1163 = new StringValue("3680");
public static final StringValue __STR_LIT_1164 = new StringValue("3700");
public static final StringValue __STR_LIT_1165 = new StringValue("3780");
public static final StringValue __STR_LIT_986 = new StringValue("2700");
public static final StringValue __STR_LIT_987 = new StringValue("2950");
public static final StringValue __STR_LIT_988 = new StringValue("3780");
public static final StringValue __STR_LIT_989 = new StringValue(" b ");
public static final StringValue __STR_LIT_990 = new StringValue(" c");
public static final StringValue __STR_LIT_991 = new StringValue(" bc");
public static final StringValue __STR_LIT_992 = new StringValue("a ");
public static final StringValue __STR_LIT_993 = new StringValue("ab ");
public static final StringValue __STR_LIT_994 = new StringValue("1");
public static final StringValue __STR_LIT_995 = new StringValue("a c");
public static final StringValue __STR_LIT_996 = new StringValue("abc");
public static final StringValue __STR_LIT_997 = new StringValue("a ");
public static final StringValue __STR_LIT_998 = new StringValue(" c");
public static final StringValue __STR_LIT_999 = new StringValue("2022");
public static final StringValue __STR_LIT_1000 = new StringValue("2023");
public static final StringValue __STR_LIT_1001 = new StringValue("2019");
public static final StringValue __STR_LIT_1002 = new StringValue("102");
public static final StringValue __STR_LIT_1003 = new StringValue("004");
public static final StringValue __STR_LIT_1004 = new StringValue("8");
public static final StringValue __STR_LIT_1005 = new StringValue("98");
public static final StringValue __STR_LIT_1006 = new StringValue("999");
public static final StringValue __STR_LIT_1007 = new StringValue("0081");
public static final StringValue __STR_LIT_1008 = new StringValue("0089");
public static final StringValue __STR_LIT_1009 = new StringValue("0261");
public static final StringValue __STR_LIT_1010 = new StringValue("0269");
public static final StringValue __STR_LIT_1011 = new StringValue("0271");
public static final StringValue __STR_LIT_1012 = new StringValue("0279");
public static final StringValue __STR_LIT_1013 = new StringValue("0309");
public static final StringValue __STR_LIT_1014 = new StringValue("0311");
public static final StringValue __STR_LIT_1015 = new StringValue("0319");
public static final StringValue __STR_LIT_1016 = new StringValue("0361");
public static final StringValue __STR_LIT_1017 = new StringValue("0369");
public static final StringValue __STR_LIT_1018 = new StringValue("0371");
public static final StringValue __STR_LIT_1019 = new StringValue("0379");
public static final StringValue __STR_LIT_1020 = new StringValue("0491");
public static final StringValue __STR_LIT_1021 = new StringValue("0499");
public static final StringValue __STR_LIT_1022 = new StringValue("0640");
public static final StringValue __STR_LIT_1023 = new StringValue("0650");
public static final StringValue __STR_LIT_1024 = new StringValue("0950");
public static final StringValue __STR_LIT_1025 = new StringValue("1021");
public static final StringValue __STR_LIT_1026 = new StringValue("1029");
public static final StringValue __STR_LIT_1027 = new StringValue("1031");
public static final StringValue __STR_LIT_1028 = new StringValue("1039");
public static final StringValue __STR_LIT_1029 = new StringValue("1081");
public static final StringValue __STR_LIT_1030 = new StringValue("1089");
public static final StringValue __STR_LIT_1031 = new StringValue("1091");
public static final StringValue __STR_LIT_1032 = new StringValue("1099");
public static final StringValue __STR_LIT_1033 = new StringValue("1101");
public static final StringValue __STR_LIT_1034 = new StringValue("1109");
public static final StringValue __STR_LIT_1035 = new StringValue("1111");
public static final StringValue __STR_LIT_1036 = new StringValue("1119");
public static final StringValue __STR_LIT_1037 = new StringValue("1121");
public static final StringValue __STR_LIT_1038 = new StringValue("1129");
public static final StringValue __STR_LIT_1039 = new StringValue("1161");
public static final StringValue __STR_LIT_1040 = new StringValue("1169");
public static final StringValue __STR_LIT_1041 = new StringValue("1241");
public static final StringValue __STR_LIT_1042 = new StringValue("1249");
public static final StringValue __STR_LIT_1043 = new StringValue("1251");
public static final StringValue __STR_LIT_1044 = new StringValue("1258");
public static final StringValue __STR_LIT_1045 = new StringValue("1259");
public static final StringValue __STR_LIT_1046 = new StringValue("1271");
public static final StringValue __STR_LIT_1047 = new StringValue("1279");
public static final StringValue __STR_LIT_1048 = new StringValue("1319");
public static final StringValue __STR_LIT_1049 = new StringValue("1321");
public static final StringValue __STR_LIT_1050 = new StringValue("1329");
public static final StringValue __STR_LIT_1051 = new StringValue("1331");
public static final StringValue __STR_LIT_1052 = new StringValue("1339");
public static final StringValue __STR_LIT_1053 = new StringValue("1341");
public static final StringValue __STR_LIT_1054 = new StringValue("1349");
public static final StringValue __STR_LIT_1055 = new StringValue("1361");
public static final StringValue __STR_LIT_1056 = new StringValue("1362");
public static final StringValue __STR_LIT_1057 = new StringValue("1369");
public static final StringValue __STR_LIT_1058 = new StringValue("1378");
public static final StringValue __STR_LIT_1059 = new StringValue("1379");
public static final StringValue __STR_LIT_1060 = new StringValue("1481");
public static final StringValue __STR_LIT_1061 = new StringValue("1489");
public static final StringValue __STR_LIT_1062 = new StringValue("1491");
public static final StringValue __STR_LIT_1063 = new StringValue("1499");
public static final StringValue __STR_LIT_1064 = new StringValue("1639");
public static final StringValue __STR_LIT_1065 = new StringValue("1731");
public static final StringValue __STR_LIT_1066 = new StringValue("1739");
public static final StringValue __STR_LIT_1067 = new StringValue("1821");
public static final StringValue __STR_LIT_1068 = new StringValue("1829");
public static final StringValue __STR_LIT_1069 = new StringValue("5150");
public static final StringValue __STR_LIT_1070 = new StringValue("5160");
public static final StringValue __STR_LIT_1071 = new StringValue("6245");
public static final StringValue __STR_LIT_1072 = new StringValue("7467");
public static final StringValue __STR_LIT_1073 = new StringValue("8100");
public static final StringValue __STR_LIT_1074 = new StringValue("0011");
public static final StringValue __STR_LIT_1075 = new StringValue("0012");
public static final StringValue __STR_LIT_1076 = new StringValue("0150");
public static final StringValue __STR_LIT_1077 = new StringValue("0180");
public static final StringValue __STR_LIT_1078 = new StringValue("0190");
public static final StringValue __STR_LIT_1079 = new StringValue("0372");
public static final StringValue __STR_LIT_1080 = new StringValue("0373");
public static final StringValue __STR_LIT_1081 = new StringValue("0511");
public static final StringValue __STR_LIT_1082 = new StringValue("0552");
public static final StringValue __STR_LIT_1083 = new StringValue("0580");
public static final StringValue __STR_LIT_1084 = new StringValue("0590");
public static final StringValue __STR_LIT_1085 = new StringValue("0630");
public static final StringValue __STR_LIT_1086 = new StringValue("0670");
public static final StringValue __STR_LIT_1087 = new StringValue("0680");
public static final StringValue __STR_LIT_1088 = new StringValue("0690");
public static final StringValue __STR_LIT_1089 = new StringValue("0910");
public static final StringValue __STR_LIT_1090 = new StringValue("1010");
public static final StringValue __STR_LIT_1091 = new StringValue("1040");
public static final StringValue __STR_LIT_1092 = new StringValue("1060");
public static final StringValue __STR_LIT_1093 = new StringValue("1150");
public static final StringValue __STR_LIT_1094 = new StringValue("1160");
public static final StringValue __STR_LIT_1095 = new StringValue("1170");
public static final StringValue __STR_LIT_1096 = new StringValue("1180");
public static final StringValue __STR_LIT_1097 = new StringValue("1190");
public static final StringValue __STR_LIT_1098 = new StringValue("1200");
public static final StringValue __STR_LIT_1099 = new StringValue("1210");
public static final StringValue __STR_LIT_1100 = new StringValue("1230");
public static final StringValue __STR_LIT_1101 = new StringValue("1260");
public static final StringValue __STR_LIT_1102 = new StringValue("1323");
public static final StringValue __STR_LIT_1103 = new StringValue("1440");
public static final StringValue __STR_LIT_1104 = new StringValue("1460");
public static final StringValue __STR_LIT_1105 = new StringValue("1530");
public static final StringValue __STR_LIT_1106 = new StringValue("1542");
public static final StringValue __STR_LIT_1107 = new StringValue("1632");
public static final StringValue __STR_LIT_1108 = new StringValue("1633");
public static final StringValue __STR_LIT_1109 = new StringValue("1634");
public static final StringValue __STR_LIT_1110 = new StringValue("1690");
public static final StringValue __STR_LIT_1111 = new StringValue("1700");
public static final StringValue __STR_LIT_1112 = new StringValue("1730");
public static final StringValue __STR_LIT_1113 = new StringValue("1740");
public static final StringValue __STR_LIT_1114 = new StringValue("1800");
public static final StringValue __STR_LIT_1115 = new StringValue("1960");
public static final StringValue __STR_LIT_1116 = new StringValue("2000");
public static final StringValue __STR_LIT_1117 = new StringValue("2020");
public static final StringValue __STR_LIT_1118 = new StringValue("2030");
public static final StringValue __STR_LIT_1119 = new StringValue("2040");
public static final StringValue __STR_LIT_1120 = new StringValue("2050");
public static final StringValue __STR_LIT_1121 = new StringValue("2060");
public static final StringValue __STR_LIT_1122 = new StringValue("2170");
public static final StringValue __STR_LIT_1123 = new StringValue("2200");
public static final StringValue __STR_LIT_1124 = new StringValue("2420");
public static final StringValue __STR_LIT_1125 = new StringValue("2430");
public static final StringValue __STR_LIT_1126 = new StringValue("2500");
public static final StringValue __STR_LIT_1127 = new StringValue("2550");
public static final StringValue __STR_LIT_1128 = new StringValue("2561");
public static final StringValue __STR_LIT_1129 = new StringValue("2571");
public static final StringValue __STR_LIT_1130 = new StringValue("2572");
public static final StringValue __STR_LIT_1131 = new StringValue("2573");
public static final StringValue __STR_LIT_1132 = new StringValue("2581");
public static final StringValue __STR_LIT_1133 = new StringValue("2582");
public static final StringValue __STR_LIT_1134 = new StringValue("2583");
public static final StringValue __STR_LIT_1135 = new StringValue("2600");
public static final StringValue __STR_LIT_1136 = new StringValue("2620");
public static final StringValue __STR_LIT_1137 = new StringValue("2630");
public static final StringValue __STR_LIT_1138 = new StringValue("2640");
public static final StringValue __STR_LIT_1139 = new StringValue("2650");
public static final StringValue __STR_LIT_1140 = new StringValue("2670");
public static final StringValue __STR_LIT_1141 = new StringValue("2690");
public static final StringValue __STR_LIT_1142 = new StringValue("2710");
public static final StringValue __STR_LIT_1143 = new StringValue("2720");
public static final StringValue __STR_LIT_1144 = new StringValue("2730");
public static final StringValue __STR_LIT_1145 = new StringValue("2760");
public static final StringValue __STR_LIT_1146 = new StringValue("2770");
public static final StringValue __STR_LIT_1147 = new StringValue("2800");
public static final StringValue __STR_LIT_1148 = new StringValue("2810");
public static final StringValue __STR_LIT_1149 = new StringValue("2830");
public static final StringValue __STR_LIT_1150 = new StringValue("2850");
public static final StringValue __STR_LIT_1151 = new StringValue("2860");
public static final StringValue __STR_LIT_1152 = new StringValue("2870");
public static final StringValue __STR_LIT_1153 = new StringValue("2880");
public static final StringValue __STR_LIT_1154 = new StringValue("2890");
public static final StringValue __STR_LIT_1155 = new StringValue("2920");
public static final StringValue __STR_LIT_1156 = new StringValue("2940");
public static final StringValue __STR_LIT_1157 = new StringValue("2960");
public static final StringValue __STR_LIT_1158 = new StringValue("2980");
public static final StringValue __STR_LIT_1159 = new StringValue("3011");
public static final StringValue __STR_LIT_1160 = new StringValue("3030");
public static final StringValue __STR_LIT_1161 = new StringValue("3100");
public static final StringValue __STR_LIT_1162 = new StringValue("3370");
public static final StringValue __STR_LIT_1163 = new StringValue("3660");
public static final StringValue __STR_LIT_1164 = new StringValue("3680");
public static final StringValue __STR_LIT_1165 = new StringValue("3700");
public static final StringValue __STR_LIT_1166 = new StringValue("3930");
public static final StringValue __STR_LIT_1167 = new StringValue("3940");
public static final StringValue __STR_LIT_1168 = new StringValue("3950");
@ -382,28 +382,30 @@ public class Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017_Segment1 @@ -382,28 +382,30 @@ public class Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017_Segment1
public static final StringValue __STR_LIT_1315 = new StringValue("107");
public static final StringValue __STR_LIT_1316 = new StringValue("185");
public static final StringValue __STR_LIT_1317 = new StringValue("135");
public static final StringValue __STR_LIT_1318 = new StringValue("a47");
public static final StringValue __STR_LIT_1319 = new StringValue("a58");
public static final StringValue __STR_LIT_1320 = new StringValue("a80");
public static final StringValue __STR_LIT_1321 = new StringValue("a81");
public static final StringValue __STR_LIT_1322 = new StringValue("a82");
public static final StringValue __STR_LIT_1323 = new StringValue("a83");
public static final StringValue __STR_LIT_1324 = new StringValue("a84");
public static final StringValue __STR_LIT_1325 = new StringValue("b59");
public static final StringValue __STR_LIT_1326 = new StringValue("b68");
public static final StringValue __STR_LIT_1327 = new StringValue("g05");
public static final StringValue __STR_LIT_1328 = new StringValue("g21");
public static final StringValue __STR_LIT_1329 = new StringValue("g73");
public static final StringValue __STR_LIT_1330 = new StringValue("h32");
public static final StringValue __STR_LIT_1331 = new StringValue("h36");
public static final StringValue __STR_LIT_1332 = new StringValue("i74");
public static final StringValue __STR_LIT_1333 = new StringValue("156");
public static final StringValue __STR_LIT_1334 = new StringValue("021");
public static final StringValue __STR_LIT_1318 = new StringValue("E10");
public static final StringValue __STR_LIT_1319 = new StringValue("E11");
public static final StringValue __STR_LIT_1320 = new StringValue("a47");
public static final StringValue __STR_LIT_1321 = new StringValue("a58");
public static final StringValue __STR_LIT_1322 = new StringValue("a80");
public static final StringValue __STR_LIT_1323 = new StringValue("a81");
public static final StringValue __STR_LIT_1324 = new StringValue("a82");
public static final StringValue __STR_LIT_1325 = new StringValue("a83");
public static final StringValue __STR_LIT_1326 = new StringValue("a84");
public static final StringValue __STR_LIT_1327 = new StringValue("b59");
public static final StringValue __STR_LIT_1328 = new StringValue("b68");
public static final StringValue __STR_LIT_1329 = new StringValue("g05");
public static final StringValue __STR_LIT_1330 = new StringValue("g21");
public static final StringValue __STR_LIT_1331 = new StringValue("g73");
public static final StringValue __STR_LIT_1332 = new StringValue("h32");
public static final StringValue __STR_LIT_1333 = new StringValue("h36");
public static final StringValue __STR_LIT_1334 = new StringValue("i74");
public static final StringValue __STR_LIT_1335 = new StringValue("156");
public static final StringValue __STR_LIT_1336 = new StringValue("021");
public static final NumberValue __NUM_LIT_62 = new NumberValue(16.0);
public static final StringValue __STR_LIT_1335 = new StringValue("9");
public static final StringValue __STR_LIT_1336 = new StringValue("5503");
public static final StringValue __STR_LIT_1337 = new StringValue("5313");
public static final StringValue __STR_LIT_1338 = new StringValue("5314");
public static final StringValue __STR_LIT_1337 = new StringValue("9");
public static final StringValue __STR_LIT_1338 = new StringValue("5503");
public static final StringValue __STR_LIT_1339 = new StringValue("5313");
public static final StringValue __STR_LIT_1340 = new StringValue("5314");
public static final NumberValue __NUM_LIT_63 = new NumberValue(15.0);
public static final NumberValue __NUM_LIT_64 = new NumberValue(19.0);
public static final NumberValue __NUM_LIT_65 = new NumberValue(50.0);
@ -422,23 +424,23 @@ public class Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017_Segment1 @@ -422,23 +424,23 @@ public class Plausi_ERHEBUNG_PROMOVIERENDE_AB_2017_Segment1
public static final NumberValue __NUM_LIT_78 = new NumberValue(82.0);
public static final NumberValue __NUM_LIT_79 = new NumberValue(93.0);
public static final NumberValue __NUM_LIT_80 = new NumberValue(94.0);
public static final StringValue __STR_LIT_1339 = new StringValue("042");
public static final StringValue __STR_LIT_1340 = new StringValue("764");
public static final StringValue __STR_LIT_1341 = new StringValue("042");
public static final StringValue __STR_LIT_1342 = new StringValue("764");
public static final NumberValue __NUM_LIT_81 = new NumberValue(84.0);
public static final NumberValue __NUM_LIT_82 = new NumberValue(90.0);
public static final StringValue __STR_LIT_1341 = new StringValue("673");
public static final StringValue __STR_LIT_1342 = new StringValue("768");
public static final StringValue __STR_LIT_1343 = new StringValue("593");
public static final StringValue __STR_LIT_1344 = new StringValue("33");
public static final StringValue __STR_LIT_1345 = new StringValue("52");
public static final StringValue __STR_LIT_1346 = new StringValue("77");
public static final StringValue __STR_LIT_1343 = new StringValue("673");
public static final StringValue __STR_LIT_1344 = new StringValue("768");
public static final StringValue __STR_LIT_1345 = new StringValue("593");
public static final StringValue __STR_LIT_1346 = new StringValue("33");
public static final StringValue __STR_LIT_1347 = new StringValue("52");
public static final StringValue __STR_LIT_1348 = new StringValue("77");
public static final NumberValue __NUM_LIT_83 = new NumberValue(14.0);
public static final StringValue __STR_LIT_1347 = new StringValue("117");
public static final StringValue __STR_LIT_1348 = new StringValue("817");
public static final StringValue __STR_LIT_1349 = new StringValue("506");
public static final StringValue __STR_LIT_1350 = new StringValue("591");
public static final StringValue __STR_LIT_1351 = new StringValue("592");
public static final StringValue __STR_LIT_1352 = new StringValue("507");
public static final StringValue __STR_LIT_1353 = new StringValue("807");
public static final StringValue __STR_LIT_1354 = new StringValue("997");
public static final StringValue __STR_LIT_1349 = new StringValue("117");
public static final StringValue __STR_LIT_1350 = new StringValue("817");
public static final StringValue __STR_LIT_1351 = new StringValue("506");
public static final StringValue __STR_LIT_1352 = new StringValue("591");
public static final StringValue __STR_LIT_1353 = new StringValue("592");
public static final StringValue __STR_LIT_1354 = new StringValue("507");
public static final StringValue __STR_LIT_1355 = new StringValue("807");
public static final StringValue __STR_LIT_1356 = new StringValue("997");
}

6262
src/de/statspez/plausi/generated/Plausi_ERHEBUNG_STUDENTEN_PRUEFUNGEN_AB_2017.java

File diff suppressed because one or more lines are too long

12215
src/de/statspez/plausi/generated/Plausi_ERHEBUNG_STUDENTEN_PRUEFUNGEN_AB_2017.xml

File diff suppressed because it is too large Load Diff

BIN
src/de/statspez/plausi/generated/Plausi_ERHEBUNG_STUDENTEN_PRUEFUNGEN_AB_2017_Descriptor.data

Binary file not shown.

1234
src/de/statspez/plausi/generated/Plausi_ERHEBUNG_STUDENTEN_PRUEFUNGEN_AB_2017_Segment1.java

File diff suppressed because it is too large Load Diff

18
src/de/superx/bianalysis/ReportMetadata.java

@ -37,6 +37,7 @@ public class ReportMetadata { @@ -37,6 +37,7 @@ public class ReportMetadata {
public ReportMetadata(ReportDefinition reportDefinition, Identifier factTableId, DbMetaAdapter dbAdapter) {
this.dbMetaAdapter = dbAdapter;
this.hideEmptyColumns = reportDefinition.hideEmptyColumns;
if(factTableId == null) { // merged Report
this.factTable = new FactTable();
this.sachgebiet = new Sachgebiet();
@ -47,6 +48,7 @@ public class ReportMetadata { @@ -47,6 +48,7 @@ public class ReportMetadata {
List<DimensionAttribute> databaseOrderedLeftDimensionAttributes = dbAdapter.getDimensionAttributeMetadata(reportDefinition.leftDimensionAttributeIds, factTableId);
this.leftDimensionAttributes = reorderDimensionAttributesToReportOrder(databaseOrderedLeftDimensionAttributes, reportDefinition, false);
List<DimensionAttribute> databaseOrderedTopDimensionAttributes = dbAdapter.getDimensionAttributeMetadata(reportDefinition.topDimensionAttributeIds, factTableId);
//this.topDimensionAttributes = reorderDimensionAttributesToReportOrder(databaseOrderedTopDimensionAttributes, reportDefinition, true);
this.topDimensionAttributes = reorderDimensionAttributesToReportOrder(databaseOrderedTopDimensionAttributes, reportDefinition, true);
List<Measure> databaseOrderedMeasures = dbAdapter.getMeasureMetadata(reportDefinition.measureIds);
this.measures = reorderMeasuresToReportOrder(databaseOrderedMeasures, reportDefinition);
@ -55,7 +57,7 @@ public class ReportMetadata { @@ -55,7 +57,7 @@ public class ReportMetadata {
} else {
this.filters = new ArrayList<Filter>();
}
this.setTopDimensionAttributeValues(dbAdapter);
this.setTopDimensionAttributeValues(dbAdapter, factTableId);
if(factTableId != null) {
this.setMaxBridgeLvl();
} else {
@ -63,7 +65,6 @@ public class ReportMetadata { @@ -63,7 +65,6 @@ public class ReportMetadata {
this.setMaxBridgeLvlForConformed(reportDefinition.factTableIds);
}
this.lastBiadUpdate = dbAdapter.getLastUpdate(440);
this.hideEmptyColumns = reportDefinition.hideEmptyColumns;
}
public ReportMetadata(ReportMetadata metadata, List<DimensionAttribute> leftDimensionAttributes) {
@ -131,14 +132,15 @@ public class ReportMetadata { @@ -131,14 +132,15 @@ public class ReportMetadata {
}
}
private void setTopDimensionAttributeValues(DbMetaAdapter dbAdapter) {
private void setTopDimensionAttributeValues(DbMetaAdapter dbAdapter, Identifier factId) {
for(DimensionAttribute attr : this.topDimensionAttributes) {
Filter filter = getFilterForDimensionAttribute(attr.getId());
if(filter != null) {
attr.setDimensionAttributeValues(filter.filterValues);
} else {
attr.setDimensionAttributeValues(dbAdapter.getDimensionAttributeValues(attr, null, null));
List<Filter> filtersInDimension = new ArrayList<Filter>();
for(Filter filter : this.filters) {
if(filter.tablename.equals(attr.getTablename())) {
filtersInDimension.add(filter);
}
}
attr.setDimensionAttributeValues(dbAdapter.getValuesOfAttribute(attr, factId, filtersInDimension, Boolean.valueOf(hideEmptyColumns)));
}
}

9
src/de/superx/bianalysis/ResultBuilder.java

@ -100,7 +100,7 @@ public class ResultBuilder { @@ -100,7 +100,7 @@ public class ResultBuilder {
String cellKey = id + " (Ebene " + countLvl + ")";
if(countLvl == 0) {
cellKey = dimensionAttribute.getAttrConformedId();
cellKey = id;
}
if(cell != null && cellKey != null) {
@ -192,8 +192,9 @@ public class ResultBuilder { @@ -192,8 +192,9 @@ public class ResultBuilder {
}
} else {
if(dimensionAttribute.getSortOrderColumn() != null) {
columns.add(new Column(id, dimensionAttribute.getCaption(), ColumnType.StringColumn, true, dimensionAttribute.getStringId() + "_sorting", false));
columns.add(new Column(id + "_sorting", dimensionAttribute.getCaption(), ColumnType.SortOrderColumn, false, dimensionAttribute.getStringId(), true));
String ref_column_id = dimensionAttribute.getAttrConformedId() != null? dimensionAttribute.getAttrConformedId(): dimensionAttribute.getStringId();
columns.add(new Column(id, dimensionAttribute.getCaption(), ColumnType.StringColumn, true, ref_column_id + "_sorting", false));
columns.add(new Column(ref_column_id + "_sorting", dimensionAttribute.getCaption(), ColumnType.SortOrderColumn, false, dimensionAttribute.getStringId(), true));
}else {
columns.add(new Column(id, dimensionAttribute.getCaption(), ColumnType.StringColumn, true));
}
@ -327,7 +328,7 @@ public class ResultBuilder { @@ -327,7 +328,7 @@ public class ResultBuilder {
Object value = row.cells.get(cellKey);
if(value instanceof Number) {
Number val = (Number) value;
if(val.intValue() != 0) {
if(val.doubleValue() != 0.0) {
if(map.containsKey(cellKey)) {
map.remove(cellKey);
}

499
src/de/superx/bianalysis/bin/BiAnalysisCLI.java

@ -4,9 +4,19 @@ import java.io.BufferedReader; @@ -4,9 +4,19 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
@ -16,6 +26,7 @@ import org.apache.commons.cli.Option; @@ -16,6 +26,7 @@ import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
@ -25,6 +36,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; @@ -25,6 +36,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.metadata.MetaImport;
import de.superx.bianalysis.metadata.MetaImportConformedDimensions;
import de.superx.bianalysis.metadata.MetaJson;
import de.superx.bianalysis.metadata.MetadataImporter;
import de.superx.bianalysis.metadata.models.json.MetaDimension;
@ -33,12 +45,17 @@ import de.superx.bianalysis.metadata.models.json.MetaFact; @@ -33,12 +45,17 @@ import de.superx.bianalysis.metadata.models.json.MetaFact;
import de.superx.bianalysis.metadata.models.json.MetaMeasure;
import de.superx.bianalysis.metadata.models.json.MetaObject;
import de.superx.bianalysis.metadata.models.yml.MetaYml;
import de.superx.bianalysis.metadata.models.yml.MetaYmlModel;
import de.superx.bianalysis.metadata.models.yml.MetaYmlModelColumns;
import de.superx.dbt.DbtUtils;
import de.superx.etl.biad.SourceTable;
import de.superx.etl.biad.SourcesYML;
import de.superx.servlet.SuperXManager;
import de.superx.util.PathAndFileUtils;
public class BiAnalysisCLI {
private static final String DEFAULT_RELEASE_BRANCH = "2025_12";
private static final String DEFAULT_RELEASE_BRANCH = "2026_06";
public static void main(String[] args) throws IOException {
Options options = createOptions();
@ -51,16 +68,279 @@ public class BiAnalysisCLI { @@ -51,16 +68,279 @@ public class BiAnalysisCLI {
generateYmlForJsonFile(parsedArgs);
} else if(parsedArgs.hasOption("-d")) {
generateWikiMarkdown(parsedArgs);
} else if(parsedArgs.hasOption("-s")) {
validateMetadataAgainstSchema();
} else if(parsedArgs.hasOption("-k")) {
updateSourcesYml();
} else {
printHelp(options);
}
}
private static void updateSourcesYml() throws IOException {
SuperXManager.setWEB_INFPfad(PathAndFileUtils.getWebinfPath());
File ymlFile = new File(PathAndFileUtils.getSourcesYMLinSrcDbt());
File modelsDir = new File(PathAndFileUtils.getDbtCompiledModelsCoreDirectory());
// Step 0 - read out all the used columns for the compiled dbt models
List<String> files = PathAndFileUtils.findSqlFiles(modelsDir);
if(files.isEmpty()) {
throw new RuntimeException("[ERROR] - No SQL Files found in " + modelsDir.getAbsolutePath());
}
Map<String, List<String>> allUniqueCols = new HashMap<>();
for (String filePath : files) {
File file = new File(filePath);
String sql = Files.readString(Paths.get(filePath));
if(!sql.contains("staging")) {
System.out.println("[INFO] - Skipping file: " + file.getName());
continue;
}
System.out.println("[INFO] - Searching file: " + file.getName());
ColumnCollector collector = new ColumnCollector(filePath);
collector.parseForFile();
Map<String, List<String>> cols = collector.getColumns();
// because we read file by file there are columns referenced more than once
// therefore we need to filter out for duplicates
for (String table : cols.keySet()) {
if(!allUniqueCols.containsKey(table)) {
allUniqueCols.put(table, new ArrayList<String>());
}
for (String column : cols.get(table)) {
if(!allUniqueCols.get(table).contains(column)) {
allUniqueCols.get(table).add(column);
}
}
}
}
// Step 1 - create a cleaned array of source tables for all found references
List<SourceTable> referencedTables = new ArrayList<>();
for (String table : allUniqueCols.keySet()) {
if(!table.startsWith("\"staging\"")) {
// ignore all other schema references
continue;
}
String cleaned = table.replace("\"", "");
String[] parts = cleaned.split("\\.");
String tableName = parts[parts.length - 1];
SourceTable source = new SourceTable(tableName, allUniqueCols.get(table));
referencedTables.add(source);
}
// Step 2 - read in the sources.yml file and compare it to the previously created
// array of source tables
SourcesYML yml = SourcesYML.fromJson(ymlFile);
List<SourceTable> ymlSourceTablesStaging = yml.getSources().get(0).getTables();
for (SourceTable sourceTable : ymlSourceTablesStaging) {
if(sourceTable.isManual() != null && sourceTable.isManual().booleanValue()) {
System.out.println(String.format("[INFO] - SKIPPING manual Table %s "
, sourceTable.getName()));
continue;
}
if(isSourceTablePresent(sourceTable.getName(), referencedTables)) {
// First we check if the source table was actually found in any of the
// compiled dbt models, if that is the case we investigate the columns
if(isNullOrEmpty(sourceTable.getExtractionInclude())) {
// there are no columns for this source, therefore we set the found
// columns for this source table
List<String> columns = findExtractionInclude(sourceTable.getName(), referencedTables);
sourceTable.setExtractionInclude(columns);
} else {
// the source table already has an 'extraction-include' list, therefore
// we need to check unused columns and remove them from the list
List<String> colsToRemove = new ArrayList<>();
for (String column : sourceTable.getExtractionInclude()) {
if(!isColumnPresentInTable(column, sourceTable.getName(), referencedTables)) {
colsToRemove.add(column);
System.out.println(String.format("[WARNING] - Remove unused "
+ "Column '%s' for Table '%s'", column, sourceTable.getName()));
}
}
sourceTable.getExtractionInclude().removeAll(colsToRemove);
// the source table might also have missing a column, therefore we need
// to check the corresponding table of the table references array
// and add columns if necessary
List<String> colsToAdd = new ArrayList<>();
for(String column : getColumnsOfTable(sourceTable.getName(), referencedTables)) {
if(!sourceTable.getExtractionInclude().contains(column)) {
colsToAdd.add(column);
System.out.println(String.format("[INFO] - Found new Column %s for"
+ " Table : %s", column, sourceTable.getName()));
}
}
sourceTable.getExtractionInclude().addAll(colsToAdd);
}
} else {
// NOTE: This source table is not used, therefore we could actually remove
// it from the list of source tables. There are, however, tables that are
// used in the snapshot directory, which the ColumnCollector is not able
// to find. This is way we simple log a warning here and do not remove
// any of the tables, since they might be used for the snapshot models
System.out.println("[WARNING] - possibly unused table '" + sourceTable.getName() + "'" );
}
}
// Step 3 - Find Tables that are missing in the yml file and add them to the list
// but ignore the seeds, they are part of the staging schema but should not be added
// to the sources.yml
List<String> seeds = Files.list(PathAndFileUtils.getDbtSeedDir())
.map(p -> p.getFileName().toString())
.map(name -> {
int dotIndex = name.lastIndexOf('.');
return dotIndex > 0 ? name.substring(0, dotIndex) : name;
})
.collect(Collectors.toList());
for (SourceTable sourceTable : referencedTables) {
if(seeds.contains(sourceTable.getName())) {
continue;
}
if(!isSourceTablePresent(sourceTable.getName(), ymlSourceTablesStaging)) {
System.out.println("[INFO] - Add new table " + sourceTable.getName());
ymlSourceTablesStaging.add(sourceTable);
}
}
// Step 4 - write to file
ObjectMapper mapper = new ObjectMapper();
DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter(" ", DefaultIndenter.SYS_LF);
DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
printer.indentObjectsWith(indenter);
printer.indentArraysWith(indenter);
try {
mapper.writer(printer).writeValue(ymlFile, yml);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static CompletableFuture<String> readOutStream(InputStream is) {
return CompletableFuture.supplyAsync(() -> {
try (
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
) {
StringBuilder res = new StringBuilder();
String inputLine;
while ((inputLine = br.readLine()) != null) {
res.append(inputLine).append(System.lineSeparator());
}
return res.toString();
} catch (Throwable e) {
throw new RuntimeException("problem with executing program", e);
}
});
}
private static int runValidationProcess(List<String> command, Path workingDir, String validationMessage)
throws IOException, InterruptedException, ExecutionException {
ProcessBuilder builder = new ProcessBuilder(command).directory(workingDir.toFile());
Process process = builder.start();
CompletableFuture<String> outputFuture = readOutStream(process.getInputStream());
CompletableFuture<String> errorFuture = readOutStream(process.getErrorStream());
int exitCode = process.waitFor();
String output = outputFuture.get();
String error = errorFuture.get();
System.out.println(validationMessage);
if (!output.isEmpty()) {
System.out.print(output);
}
if (!error.isEmpty()) {
System.err.print(error);
}
return exitCode;
}
private static void validateMetadataAgainstSchema() {
SuperXManager.setWEB_INFPfad(PathAndFileUtils.getWebinfPath());
Path metadataFolder = DbtUtils.getBiAnalysisMetadataFolder();
File directory = metadataFolder.toFile();
File[] files = directory.listFiles();
if (files == null) {
System.err.println("Failed to list files in directory: " + metadataFolder.toString());
return;
}
List<String> metaimportFiles = new ArrayList<>();
List<String> conformedMetaimportFiles = new ArrayList<>();
for (File file : files) {
String name = file.getName();
if (name.endsWith("_metaimport.json")) {
if(name.endsWith("_conformed_dimensions_metaimport.json")) {
conformedMetaimportFiles.add(file.getName());
} else {
metaimportFiles.add(file.getName());
}
}
}
List<String> baseCommand = List.of(
DbtUtils.getPython3ExecutableName(),
DbtUtils.getDbtBinaryInBinaryFolder("jsonschema").toString(),
"--output",
"pretty"
);
// Build conformed files command
List<String> commandConformed = new ArrayList<>(baseCommand);
for (String file : conformedMetaimportFiles) {
commandConformed.add("--instance");
commandConformed.add(file);
}
commandConformed.add(metadataFolder.resolve("schema/metaimport_conformed_schema.json").toString());
// Build regular metaimport files command
List<String> commandNotConformed = new ArrayList<>(baseCommand);
for (String file : metaimportFiles) {
commandNotConformed.add("--instance");
commandNotConformed.add(file);
}
commandNotConformed.add(metadataFolder.resolve("schema/metaimport_schema.json").toString());
try {
int conformedExitCode = runValidationProcess(
commandConformed,
metadataFolder,
"===[VALIDATING]=== *_conformed_dimensions_metaimport.json files against schema:"
);
if (conformedExitCode != 0) {
System.exit(conformedExitCode);
}
int notConformedExitCode = runValidationProcess(
commandNotConformed,
metadataFolder,
"===[VALIDATING]=== *_metaimport.json files against schema:"
);
System.exit(notConformedExitCode);
} catch (Exception e) {
throw new RuntimeException("Error processing validation output", e);
}
}
private static void generateWikiMarkdown(CommandLine parsedArgs) throws IOException {
SuperXManager.setWEB_INFPfad(PathAndFileUtils.getWebinfPath());
String facttable = parsedArgs.getOptionValue("d");
String filePath = PathAndFileUtils.getReportGeneratorDir("hisinone");
String ymlPath = PathAndFileUtils.getDbtTransformDirectory("hisinone") + File.separator + "docs_and_tests";
String ymlPath = PathAndFileUtils.getDbtModelsDirectory("hisinone") + File.separator + "docs_and_tests";
MetadataImporter importer = new MetadataImporter(ymlPath);
Logger.getLogger(MetadataImporter.class).setLevel(Level.ERROR);
importer.deserializeMetadataFromJsonFiles(filePath);
@ -68,9 +348,18 @@ public class BiAnalysisCLI { @@ -68,9 +348,18 @@ public class BiAnalysisCLI {
String docDirectory = PathAndFileUtils.getModulePath("biad");
docDirectory = String.join(File.separator, docDirectory, "conf", "his1", "edustore_doc");
for(MetaFact fact : importer.getAllFactTables()) {
if("all".equals(facttable) || fact.getFacttable().equals(facttable)) {
PrintWriter writer = new PrintWriter(docDirectory + File.separator + fact.getFacttable() + "_mediawiki.txt", "UTF-8");
String filepath = docDirectory + File.separator + fact.getFacttable() + "_mediawiki.txt";
PrintWriter writer = new PrintWriter(filepath, "UTF-8");
writer.println("== " + fact.getCaption() + " ==");
writer.println("Tabelle: " + fact.getFacttable());
writer.println(";" + fact.getCaption());
writer.println(":" + fact.getDescription());
writer.println();
writer.println("===Kennzahlen ===");
writer.println(";Kennzahlen " + fact.getCaption());
writer.println();
@ -112,8 +401,10 @@ public class BiAnalysisCLI { @@ -112,8 +401,10 @@ public class BiAnalysisCLI {
List<MetaDimensionAttribute> attributes = d.getAttributes();
if(attributes == null || attributes.size() == 0) {
if(d.getConformedDimension() != null) {
attributes = d.getConformedDimension().getAttributes();
}
}
for(MetaDimensionAttribute a : attributes) {
String caption = a.getCaption() == null ? a.getConfDimAttrRef().getCaption() : a.getCaption();
@ -130,39 +421,155 @@ public class BiAnalysisCLI { @@ -130,39 +421,155 @@ public class BiAnalysisCLI {
writer.println();
}
writer.close();
System.out.println("Written to file " + filepath);
}
}
}
private static void generateYmlForJsonFile(CommandLine parsedArgs) {
String file = parsedArgs.getOptionValue("y");
if(file == null || !new File(file).exists()) {
throw new RuntimeException("File " + file +" is not valid.");
String[] dirs = parsedArgs.getOptionValues("c");
String filename = parsedArgs.getOptionValue("y");
if (!parsedArgs.hasOption("c") || dirs == null || dirs.length == 0) {
throw new RuntimeException("The 'dirs' option (-c) is required and must have at least one argument.");
}
// Check that each dir value is a valid file
for (String dirPath : dirs) {
if (dirPath == null || !new File(dirPath).exists()) {
throw new RuntimeException("Directory (or file) " + dirPath + " is not valid.");
}
}
if(filename == null || filename.isBlank() || !filename.endsWith("_metaimport.json")) {
throw new RuntimeException("Filename is not valid.");
}
MetadataImporter importer = new MetadataImporter();
Logger.getLogger(MetadataImporter.class).setLevel(Level.ERROR);
importer.setShouldReadYMLDoc(false);
importer.deserializeMetadataFromJsonFiles(file);
MetaImport metaImport = importer.getMetaImports().get(0);
MetaYml yml = importer.createYMLFileForMetaJson(metaImport);
System.out.println(MetadataImporter.writeYmlToString(yml));
importer.deserializeMetadataFromJsonFiles(dirs);
MetaImport meta = importer.getMetaImport(filename)
.orElseThrow(() -> new RuntimeException("File " + filename +" is not valid."));
MetaYml yml = createYMLFileForMetaJson(meta);
File file = importer.getMetaJson(filename).get().getFile();
Path dir = Path.of(
"src-dbt",
"hisinone",
"transform",
"models",
"docs_and_tests"
);
String ymlFileName = filename.split("_metaimport.json")[0] + ".yml";
String srcDir = "";
if(file.getAbsolutePath().contains("cs.bia.his.components")) {
srcDir = "cs.bia.his.components";
} else {
srcDir = "superx";
}
Path path = Path.of(PathAndFileUtils.getPathUpToDir(file.getAbsolutePath(), srcDir));
path = path.resolve(dir);
path = path.resolve(ymlFileName);
System.out.println("Written to yml file: ");
System.out.println(path);
MetadataImporter.writeYmlToFile(yml, new File(path.toString()));
}
private static List<Object> getTests(String to, String field){
List<Object> tests = new ArrayList<Object>();
tests.add("not_null");
tests.add(
Map.of(
"relationships", Map.of(
"to", "ref('" + to + "')",
"field", field
)
)
);
return tests;
}
private static MetaYml createYMLFileForMetaJson(MetaJson metaJson) {
MetaYml newYml = new MetaYml();
List<MetaYmlModel> newYmlModels = new ArrayList<>();
newYml.setVersion(1);
newYml.setModels(newYmlModels);
if(metaJson instanceof MetaImport) {
MetaImport metaimport = (MetaImport) metaJson;
for (MetaFact fact : metaimport.facts) {
MetaYmlModel factModel = new MetaYmlModel(fact.getFacttable(), " ", "unique_rows");
newYmlModels.add(factModel);
List<MetaYmlModelColumns> factCols = new ArrayList<>();
for(MetaDimension dim : fact.getDimensions()) {
String dimColumn = (dim.getIdColumn() == null) ? "id" : dim.getIdColumn();
if(dim.getRefTo() == null) {
factCols.add(new MetaYmlModelColumns(dim.getFactColumn(), " ", getTests(dim.getDimension(), dimColumn)));
MetaYmlModel dimModel = new MetaYmlModel(dim.getDimension(), " ");
newYmlModels.add(dimModel);
List<MetaYmlModelColumns> dimCols = new ArrayList<>();
for(MetaDimensionAttribute attr : dim.getAttributes()) {
dimCols.add(new MetaYmlModelColumns(attr.getDimColumn(), " ", "not_null"));
}
dimModel.setColumns(dimCols);
} else {
MetaDimension refToDim = dim.getConformedDimension();
String toCol = dim.getFactColumn();
if(toCol == null || toCol.isBlank()) {
toCol = dim.getRefTo();
}
String factCol = dim.getFactColumn();
if(factCol == null || factCol.isBlank()) {
factCol = refToDim.getFactColumn();
}
factCols.add(new MetaYmlModelColumns(factCol, " ", getTests(dim.getRefTo(), dimColumn)));
}
}
factModel.setColumns(factCols);
}
} else {
MetaImportConformedDimensions metaimport = (MetaImportConformedDimensions) metaJson;
for(MetaDimension dim : metaimport.conformedDimensions) {
MetaYmlModel dimModel = new MetaYmlModel(dim.getDimension(), " ");
newYmlModels.add(dimModel);
List<MetaYmlModelColumns> dimCols = new ArrayList<>();
for(MetaDimensionAttribute attr : dim.getAttributes()) {
dimCols.add(new MetaYmlModelColumns(attr.getDimColumn(), " ", "not_null"));
}
dimModel.setColumns(dimCols);
}
}
return newYml;
}
private static void addMissingIdsInMetadataDir(CommandLine parsedArgs) {
String[] files = parsedArgs.getOptionValues("i");
for (String string : files) {
Logger.getRootLogger().info(string);
}
BasicConfigurator.configure(); // initializes console logging to stdout
try {
MetadataImporter metaImporter = new MetadataImporter();
metaImporter.setShouldReadYMLDoc(false);
metaImporter.deserializeMetadataFromJsonFiles(files);
for (MetaJson meta : metaImporter.getMetaImports()) {
for (MetaJson meta : metaImporter.getMetaJsons()) {
List<Identifier> allIds = meta.getIds();
boolean isFileUpdateNecessary = false;
for (MetaObject obj : meta.getMetaObjects()) {
if(obj.getId() == null) {
if(obj.getId() == null && obj.getNamespace() != null) {
Identifier id = Identifier.getNewIdentifierValue(allIds, obj.getNamespace());
obj.setId(id);
allIds.add(id);
@ -191,7 +598,7 @@ public class BiAnalysisCLI { @@ -191,7 +598,7 @@ public class BiAnalysisCLI {
private static void convertJsonFilesToSql() {
SuperXManager.setWEB_INFPfad(PathAndFileUtils.getWebinfPath());
String filePath = PathAndFileUtils.getReportGeneratorDir("hisinone");
String ymlPath = PathAndFileUtils.getDbtTransformDirectory("hisinone");
String ymlPath = PathAndFileUtils.getDbtModelsDirectory("hisinone");
String out =
"DROP TABLE IF EXISTS metadata.facttable; " +
@ -216,7 +623,6 @@ public class BiAnalysisCLI { @@ -216,7 +623,6 @@ public class BiAnalysisCLI {
System.exit(1);
} else {
System.out.println(out);
}
}
@ -246,12 +652,24 @@ public class BiAnalysisCLI { @@ -246,12 +652,24 @@ public class BiAnalysisCLI {
OptionBuilder.withLongOpt("convert-metadata");
Option outMeta = OptionBuilder.create("m");
OptionBuilder.withDescription("validate metadata json files against schema");
OptionBuilder.withLongOpt("validate-metadata-schema");
Option validate = OptionBuilder.create("s");
OptionBuilder.withDescription("generate yml documentation for json file");
OptionBuilder.withLongOpt("generate-yml");
OptionBuilder.withArgName("json-file");
OptionBuilder.hasArg(true);
Option generateYml = OptionBuilder.create("y");
OptionBuilder.withDescription("json directories (use ONLY in combination with -y)");
OptionBuilder.withArgName("create-from-dirs");
OptionBuilder.hasArgs();
Option jsonDir = OptionBuilder.create("c");
OptionBuilder.withDescription("update sources yml from compiled models directory");
OptionBuilder.withLongOpt("update-sources-yml");
Option sourcesYml = OptionBuilder.create("k");
OptionBuilder.withDescription("generate wiki documentation for measures and dimensions");
OptionBuilder.withLongOpt("generate-doc");
@ -265,8 +683,11 @@ public class BiAnalysisCLI { @@ -265,8 +683,11 @@ public class BiAnalysisCLI {
OptionBuilder.hasArgs();
Option updateIds = OptionBuilder.create("i");
options.addOption(validate);
options.addOption(sourcesYml);
options.addOption(updateIds);
options.addOption(generateYml);
options.addOption(jsonDir);
options.addOption(generateDoc);
options.addOption(outMeta);
options.addOption(new Option("h", "help", false, "get help"));
@ -300,4 +721,48 @@ public class BiAnalysisCLI { @@ -300,4 +721,48 @@ public class BiAnalysisCLI {
return result+"\n";
}
private static List<String> getColumnsOfTable(String name, List<SourceTable> sourceTables) {
for (SourceTable sourceTable : sourceTables) {
if(sourceTable.getName().equals(name)) {
return sourceTable.getExtractionInclude();
}
}
return null;
}
private static boolean isColumnPresentInTable(String column, String name, List<SourceTable> sourceTables) {
for (SourceTable sourceTable : sourceTables) {
if(sourceTable.getName().equals(name)) {
for (String col : sourceTable.getExtractionInclude()) {
if(col.equals(column)) {
return true;
}
}
}
}
return false;
}
private static List<String> findExtractionInclude(String name, List<SourceTable> sourceTables) {
for (SourceTable sourceTable : sourceTables) {
if(sourceTable.getName().equals(name)) {
return sourceTable.getExtractionInclude();
}
}
return null;
}
private static boolean isSourceTablePresent(String name, List<SourceTable> sourceTables) {
for (SourceTable sourceTable : sourceTables) {
if(sourceTable.getName().equals(name)) {
return true;
}
}
return false;
}
public static boolean isNullOrEmpty(List<?> list) {
return list == null || list.isEmpty();
}
}

278
src/de/superx/bianalysis/bin/ColumnCollector.java

@ -0,0 +1,278 @@ @@ -0,0 +1,278 @@
package de.superx.bianalysis.bin;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.*;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.expression.operators.relational.*;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.select.*;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitorAdapter;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
import com.fasterxml.jackson.core.util.DefaultIndenter;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import de.superx.etl.biad.DBSource;
import de.superx.etl.biad.SourceTable;
import de.superx.etl.biad.SourcesYML;
import de.superx.job.ExtractAction;
import de.superx.util.PathAndFileUtils;
public class ColumnCollector {
Map<String, String> aliasToTableMap = new HashMap<>();
List<String> ctes = new ArrayList<>();
Map<String, List<String>> aliases = new HashMap<>();
String filePath;
public ColumnCollector(String filePath) {
this.filePath = filePath;
}
public ColumnCollector() { }
public void parseForFile() {
try {
String sql = Files.readString(Paths.get(this.filePath));
String cleanedSql = Arrays.stream(sql.split("\n"))
.map(String::trim)
.filter(line -> !line.isEmpty())
.collect(Collectors.joining("\n"));
parseSql(cleanedSql);
} catch (IOException e) {
e.printStackTrace();
}
}
public Map<String, List<String>> getColumns() {
return aliases;
}
public void parseSql(String sql) {
// reset alias map
aliasToTableMap = new HashMap<>();
aliases = new HashMap<>();
ctes = new ArrayList<>();
try {
Statement stmt = CCJSqlParserUtil.parse(sql);
stmt.accept(statementVisitor, null);
} catch (JSQLParserException e) {
e.printStackTrace();
}
}
FromItemVisitorAdapter<Void> fromvisiter = new FromItemVisitorAdapter<Void>() {
@Override
public <S> Void visit(Table table, S context) {
if(table.getAlias() != null) {
aliasToTableMap.put(table.getAlias().getName(), table.getSchemaName() + "." + table.getName());
}
return null;
}
@Override
public <S> Void visit(ParenthesedSelect parenthesedSelect, S context) {
if (parenthesedSelect.getSelect() != null) {
parenthesedSelect.getSelect().accept(selectVisitorAdapter, context);
}
return null;
}
};
ExpressionVisitorAdapter<Void> expressionVisitorAdapter = new ExpressionVisitorAdapter<>() {
public <S> Void visit(EqualsTo equalsTo, S context) {
equalsTo.getLeftExpression().accept(this, context);
if(equalsTo.getRightExpression() instanceof ParenthesedSelect) {
((ParenthesedSelect)equalsTo.getRightExpression()).accept(fromvisiter, context);
} else {
equalsTo.getRightExpression().accept(this, context);
}
return null;
}
public <S> Void visit(AndExpression expr, S context) {
Expression rightExpr = expr.getRightExpression();
if(rightExpr instanceof ParenthesedSelect) {
rightExpr.accept(this, fromvisiter);
} else {
rightExpr.accept(this, context);
}
Expression leftExpr = expr.getLeftExpression();
if(leftExpr instanceof ParenthesedSelect) {
leftExpr.accept(this, fromvisiter);
} else {
leftExpr.accept(this, context);
}
return null;
}
public <S> Void visit(InExpression expr, S context) {
Expression expression = expr.getRightExpression();
Expression leftExpression = expr.getLeftExpression();
if(expression instanceof ParenthesedSelect) {
((ParenthesedSelect)expression).accept(fromvisiter, context);
} else {
expression.accept(this, context);
}
if(leftExpression instanceof ParenthesedSelect) {
((ParenthesedSelect)leftExpression).accept(fromvisiter, context);
} else {
leftExpression.accept(this, context);
}
return null;
}
public <S> Void visit(Column column, S context) {
String tableName = null;
String tableNameFromContext = (String) context;
if (column.getTable() != null && column.getTable().getName() != null) {
// Try to resolve alias to actual table name
String alias = column.getTable().getName();
if(aliasToTableMap.containsKey(alias)) {
tableName = aliasToTableMap.getOrDefault(alias, alias);
}
}
else {
// No alias, fallback to primary table name (depends on query)
tableName = tableNameFromContext;
}
if(tableName == null || tableName.isEmpty() || ctes.contains(tableName.replace("null.", ""))) {
return null;
}
if(!aliases.containsKey(tableName)) {
aliases.put(tableName, new ArrayList<String>());
}
List<String> cols = aliases.get(tableName);
if(!cols.contains(column.getColumnName())) {
cols.add(column.getColumnName());
}
return null;
}
};
// Define a Select Visitor reacting on a Plain Select
SelectVisitorAdapter<Void> selectVisitorAdapter = new SelectVisitorAdapter<>() {
@Override
public <S> Void visit(SetOperationList setOpList, S context) {
// Visit each PlainSelect in the UNION, INTERSECT etc.
for (Select selectBody : setOpList.getSelects()) {
selectBody.accept(this, context); // recursive visit
}
// Optionally visit operations (e.g., UNION ALL) if needed
return null;
}
@Override
public <S> Void visit(PlainSelect plainSelect, S context) {
if(plainSelect.getWithItemsList() != null) {
for (WithItem withItem : plainSelect.getWithItemsList()) {
ctes.add(withItem.getAliasName());
withItem.accept(statementVisitor, context);
}
}
// Visit the main table in FROM clause
String tabCon = "";
if (plainSelect.getFromItem() != null) {
FromItem fromItem = plainSelect.getFromItem();
// TODO filter out ctes by checking if they occur
if(fromItem instanceof Table) {
Table table = (Table) fromItem;
if(table.getAlias() != null) {
aliasToTableMap.put(fromItem.getAlias().getName(), table.getSchemaName() + "." + table.getName());
} else {
tabCon = table.getSchemaName() + "." + table.getName();
}
} else if (fromItem instanceof ParenthesedSelect) {
((ParenthesedSelect)fromItem).getSelect().accept(this, context);
} else if (fromItem instanceof TableFunction){
// ignore for now
} else {
System.out.println("UWAGA!");
}
}
// Visit JOINs
if (plainSelect.getJoins() != null) {
for (Join join : plainSelect.getJoins()) {
if (join.isCross()) {
// Skip cross joins
join.getRightItem().accept(fromvisiter, context);
} else {
// Visit the right item of the join (table or subselect)
if (join.getRightItem() != null) {
join.getRightItem().accept(fromvisiter, context);
}
try {
// Visit the ON expressions if there some
Collection<Expression> onExpressions = join.getOnExpressions();
if(onExpressions != null) {
for (Expression expression : onExpressions) {
expression.accept(expressionVisitorAdapter, context);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
// Visit SELECT items
if (plainSelect.getSelectItems() != null) {
for (var selectItem : plainSelect.getSelectItems()) {
selectItem.accept(expressionVisitorAdapter, tabCon);
}
}
// Visit WHERE clause
if (plainSelect.getWhere() != null) {
plainSelect.getWhere().accept(expressionVisitorAdapter, tabCon);
}
return null;
}
};
StatementVisitorAdapter<Void> statementVisitor = new StatementVisitorAdapter<>() {
public <S> Void visit(Select select, S context) {
// Visit CTEs if present
if (select.getWithItemsList() != null) {
for (WithItem withItem : select.getWithItemsList()) {
ctes.add(withItem.getAliasName());
aliasToTableMap = new HashMap<>();
withItem.accept(this, context);
}
}
// Visit main select body (could be PlainSelect or SetOperationList)
if (select.getSelectBody() != null) {
select.getSelectBody().accept(selectVisitorAdapter, context);
}
return null;
}
};
}

10
src/de/superx/bianalysis/metadata/Identifier.java

@ -20,6 +20,9 @@ public class Identifier { @@ -20,6 +20,9 @@ public class Identifier {
public String composedId;
public Identifier(String composedId) {
if(composedId == null || composedId.isBlank()) {
return;
}
this.composedId = composedId;
String[] result = composedId.split(ID_SEPARATOR);
this.namespace = result[0];
@ -64,4 +67,11 @@ public class Identifier { @@ -64,4 +67,11 @@ public class Identifier {
return this.value.hashCode() + this.namespace.hashCode();
}
@Override
public String toString() {
return composedId;
}
}

27
src/de/superx/bianalysis/metadata/MetaImport.java

@ -58,7 +58,16 @@ public class MetaImport extends MetaJson { @@ -58,7 +58,16 @@ public class MetaImport extends MetaJson {
for (MetaDimensionAttribute attr : dim.getAttributes()) {
allMetaObj.add(attr);
if(attr.getRefTo() != null && !attr.getRefTo().isEmpty()) {
attr.setConformedDimensionAttribute(findByRefAttr(dim.getConformedDimension().getDimension(), attr));
MetaDimension confDimension = dim.getConformedDimension();
if(confDimension == null) {
throw new FaultyMetadataException(
"The attribute with the id: '" + attr.getId() + "' " +
"references a conformed attribute '" + attr.getRefTo() + "' " +
"but the dimension " + dim.getId() + " is missing a ref_to");
}
String dimTable = confDimension.getDimension();
MetaDimensionAttribute refAttribute = findByRefAttr(dimTable, attr);
attr.setConformedDimensionAttribute(refAttribute);
}
keysForMeasureFilter.put(dim.getDimension()+"."+attr.getDimColumn(), attr);
}
@ -93,7 +102,7 @@ public class MetaImport extends MetaJson { @@ -93,7 +102,7 @@ public class MetaImport extends MetaJson {
continue;
}
for (MetaDimensionAttribute attr : confDim.getAttributes()) {
if(attr.getDimColumn().equals(attributeColumn)) {
if(attr.getDimColumn() != null && attr.getDimColumn().equals(attributeColumn)) {
confAttr = attr;
break;
}
@ -131,18 +140,4 @@ public class MetaImport extends MetaJson { @@ -131,18 +140,4 @@ public class MetaImport extends MetaJson {
return resolvedRefTo;
}
@JsonIgnore
public List<MetaDimension> getDimensionsWithoutRefTo() {
List<MetaDimension> dims = new ArrayList<>();
for (MetaFact fact : facts) {
for (MetaDimension dim : fact.getDimensions()) {
if(dim.getRefTo() == null) {
dims.add(dim);
}
}
}
return dims;
}
}

161
src/de/superx/bianalysis/metadata/MetadataImporter.java

@ -28,6 +28,7 @@ import com.fasterxml.jackson.databind.json.JsonMapper; @@ -28,6 +28,7 @@ import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
import de.superx.bianalysis.FaultyMetadataException;
import de.superx.bianalysis.StoredReport;
import de.superx.bianalysis.metadata.models.json.MetaDimension;
import de.superx.bianalysis.metadata.models.json.MetaDimensionAttribute;
@ -89,6 +90,52 @@ public final class MetadataImporter { @@ -89,6 +90,52 @@ public final class MetadataImporter {
public MetadataImporter(String ymlDir) {this.ymlDir = ymlDir;}
public void deserializeMetadataFromStrings(String... values) {
ObjectMapper mapper = JsonMapper.builder().findAndAddModules().build();
List<MetaImportConformedDimensions> conformedDimension = new ArrayList<>();
for (String value : values) {
MetaJson meta = null;
try{
if(value.contains("conformed_dimensions")) {
meta = mapper.readValue(value, MetaImportConformedDimensions.class);
conformedDimension.add((MetaImportConformedDimensions) meta);
} else {
meta = mapper.readValue(value, MetaImport.class);
}
} catch(Exception e) {
throw(new RuntimeException(e));
}
if(meta != null) {
meta.setFile(null);
metaImports.add(meta);
}
}
// gather all conformed dimensions
List<MetaDimension> confDims = new ArrayList<>();
for (MetaImportConformedDimensions conf : conformedDimension) {
confDims.addAll(conf.conformedDimensions);
}
// resolve conformed references ('ref_to' attributes)
for (MetaJson metaJson : metaImports) {
if (conformedDimension.size() > 0 && metaJson instanceof MetaImport) {
((MetaImport) metaJson).setConformedDimensions(confDims);
}
try {
metaJson.init();
metaJson.setNamespaceToMetaObjects();
} catch (Exception e) {
errorMessages.add(ExceptionUtils.getFullStackTrace(e));
}
}
if(shouldReadYMLDoc) {
addDescriptionsFromYMLFiles();
}
}
/**
* Calling this method initalizes the MetadataImporter by deserializing all unique meta objects
* from the provided json files. Faulty json files are ignored.
@ -100,7 +147,6 @@ public final class MetadataImporter { @@ -100,7 +147,6 @@ public final class MetadataImporter {
ObjectMapper mapper = JsonMapper.builder().findAndAddModules().build();
List<MetaImportConformedDimensions> conformedDimension = new ArrayList<>();
List<MetaDimension> conformedDims = new ArrayList<>();
for (String path : paths) {
List<File> metaFiles = readMetaImportFiles(path);
@ -112,9 +158,7 @@ public final class MetadataImporter { @@ -112,9 +158,7 @@ public final class MetadataImporter {
conformedDimension.add((MetaImportConformedDimensions) meta);
} else {
meta = mapper.readValue(file, MetaImport.class);
conformedDims.addAll(((MetaImport) meta).getDimensionsWithoutRefTo());
}
} catch(JsonMappingException e) {
String message = "Could not deserialize metadata from file: " + file.getName() + "\n";
message += e.getMessage();
@ -132,7 +176,6 @@ public final class MetadataImporter { @@ -132,7 +176,6 @@ public final class MetadataImporter {
// gather all conformed dimensions
List<MetaDimension> confDims = new ArrayList<>();
confDims.addAll(conformedDims);
for (MetaImportConformedDimensions conf : conformedDimension) {
confDims.addAll(conf.conformedDimensions);
}
@ -197,7 +240,7 @@ public final class MetadataImporter { @@ -197,7 +240,7 @@ public final class MetadataImporter {
public void addDescriptionsFromYMLFiles() {
String dir = ymlDir;
if(ymlDir == null || ymlDir.isBlank()) {
dir = PathAndFileUtils.getDbtTransformDirectory("hisinone");
dir = PathAndFileUtils.getDbtModelsDirectory("hisinone");
}
HashMap<String, String> map = getMarkdownDefinitions(dir);
addYMLDescriptionsToMetaObjects(dir, map);
@ -208,7 +251,12 @@ public final class MetadataImporter { @@ -208,7 +251,12 @@ public final class MetadataImporter {
HashMap<String, String> descriptions = createDescriptions(new File(ymlDir), mdDefs);
List<MetaObject> objs = getAllMetaObjectsWithConformed();
for (MetaObject metaObj : objs ) {
String docIdentifier = metaObj.getDocIdentifier();
String docIdentifier = null;
try {
docIdentifier = metaObj.getDocIdentifier();
} catch (FaultyMetadataException e) {
errorMessages.add(ExceptionUtils.getFullStackTrace(e));
}
if(docIdentifier == null || docIdentifier.isBlank()) {
continue;
}
@ -227,48 +275,6 @@ public final class MetadataImporter { @@ -227,48 +275,6 @@ public final class MetadataImporter {
}
}
public MetaYml createYMLFileForMetaJson(MetaJson metaJson) {
MetaYml newYml = new MetaYml();
List<MetaYmlModel> newYmlModels = new ArrayList<>();
newYml.setVersion(1);
newYml.setModels(newYmlModels);
if(metaJson instanceof MetaImport) {
MetaImport metaimport = (MetaImport) metaJson;
for (MetaFact fact : metaimport.facts) {
MetaYmlModel factModel = new MetaYmlModel(fact.getFacttable(), " ");
newYmlModels.add(factModel);
List<MetaYmlModelColumns> factCols = new ArrayList<>();
for(MetaDimension dim : fact.getDimensions()) {
if(dim.getRefTo() == null) {
factCols.add(new MetaYmlModelColumns(dim.getFactColumn(), " ", "not_null"));
MetaYmlModel dimModel = new MetaYmlModel(dim.getDimension(), " ");
newYmlModels.add(dimModel);
List<MetaYmlModelColumns> dimCols = new ArrayList<>();
for(MetaDimensionAttribute attr : dim.getAttributes()) {
dimCols.add(new MetaYmlModelColumns(attr.getDimColumn(), " ", "not_null"));
}
dimModel.setColumns(dimCols);
}
}
factModel.setColumns(factCols);
}
} else {
MetaImportConformedDimensions metaimport = (MetaImportConformedDimensions) metaJson;
for(MetaDimension dim : metaimport.conformedDimensions) {
MetaYmlModel dimModel = new MetaYmlModel(dim.getDimension(), " ");
newYmlModels.add(dimModel);
List<MetaYmlModelColumns> dimCols = new ArrayList<>();
for(MetaDimensionAttribute attr : dim.getAttributes()) {
dimCols.add(new MetaYmlModelColumns(attr.getDimColumn(), " ", "not_null"));
}
dimModel.setColumns(dimCols);
}
}
return newYml;
}
private HashMap<String, String> createDescriptions(File startDir, HashMap<String, String> mdDefs){
HashMap<String, String> result = new HashMap<>();
for (MetaYml yml : getDescriptionYMLs(startDir)) {
@ -441,20 +447,34 @@ public final class MetadataImporter { @@ -441,20 +447,34 @@ public final class MetadataImporter {
MetaDimension dim = (MetaDimension) obj;
if (dim.getAttributesSql() == null) continue;
try (Statement stAttr = con.createStatement();
ResultSet rs = stAttr.executeQuery(dim.getAttributesSql())) {
String sqlDone = "";
String sql = "select param_val from unload_params where param_id = '" + dim.getAttributesSql() + "';";
try (Statement stAttr = con.createStatement(); ResultSet rs = stAttr.executeQuery(sql)) {
if(rs.next()) {
sqlDone = rs.getString("param_val");
}
}
if(sqlDone.isEmpty()) {
continue;
}
try (Statement stAttr = con.createStatement(); ResultSet rs = stAttr.executeQuery(sqlDone)) {
int numAttributes = 0;
while (rs.next()) {
MetaDimensionAttribute attribute = new MetaDimensionAttribute();
attribute.setDimension(dim);
attribute.setCaption(rs.getString("caption"));
attribute.setDimColumn(rs.getString("dim_column"));
// create a new 'on the fly' identifier for the new metadata
// attribute
Identifier id = Identifier.getNewIdentifierValue(i.getIds(), dim.getNamespace());
Integer val = Integer.valueOf(id.value.intValue() + numAttributes);
attribute.setId(new Identifier(dim.getNamespace() + ":" +val));
numAttributes++;
String stmt = attribute.getUpsertBuilder().build(false);
String stmt = attribute.getUpsertBuilder().build(true);
try (Statement stUpsert = con.createStatement()) {
stUpsert.execute(stmt);
}
@ -466,6 +486,23 @@ public final class MetadataImporter { @@ -466,6 +486,23 @@ public final class MetadataImporter {
}
}
public static void writeYmlToFile(MetaYml yml, File file) {
YAMLFactory yf = new YAMLFactory()
.enable(YAMLGenerator.Feature.MINIMIZE_QUOTES)
.disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER);
ObjectMapper mapper = new ObjectMapper(yf);
DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter(" ", DefaultIndenter.SYS_LF);
DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
printer.indentObjectsWith(indenter);
printer.indentArraysWith(indenter);
try {
mapper.writer(printer).writeValue(file, yml);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String writeYmlToString(MetaYml yml) {
YAMLFactory yf = new YAMLFactory()
.enable(YAMLGenerator.Feature.MINIMIZE_QUOTES)
@ -505,7 +542,16 @@ public final class MetadataImporter { @@ -505,7 +542,16 @@ public final class MetadataImporter {
boolean readHeading = false;
while ((line = br.readLine()) != null) {
if (line.startsWith("{% docs ")) {
key = line.split(" ")[2];
int startIndex = line.indexOf("docs"); // find "docs"
if(startIndex == -1) {
throw new RuntimeException("docs not found");
}
startIndex += "docs".length(); // move start index to after "docs"
int endIndex = line.indexOf('%', startIndex); // find next % starting from "docs"
if(endIndex == -1) {
throw new RuntimeException("No % found after docs");
}
key = line.substring(startIndex, endIndex).trim();
map.put(key, "");
} else if(key != null && line.startsWith("# ")) {
readHeading = true;
@ -547,6 +593,17 @@ public final class MetadataImporter { @@ -547,6 +593,17 @@ public final class MetadataImporter {
.collect(Collectors.toList());
}
public List<MetaImportConformedDimensions> getMetaImportsConformed() {
return metaImports.stream()
.filter(json -> (json instanceof MetaImportConformedDimensions))
.map(json -> (MetaImportConformedDimensions) json)
.collect(Collectors.toList());
}
public List<MetaJson> getMetaJsons() {
return metaImports.stream().collect(Collectors.toList());
}
public List<MetaObject> getAllMetaObjects(){
return metaImports.stream()
.filter(json -> (json instanceof MetaImport))

67
src/de/superx/bianalysis/metadata/UpsertStringBuilder.java

@ -1,24 +1,28 @@ @@ -1,24 +1,28 @@
package de.superx.bianalysis.metadata;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.StringJoiner;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.superx.bianalysis.models.CriteriaGroup;
public class UpsertStringBuilder {
private StringJoiner values;
private StringJoiner columns;
private StringJoiner onConflict;
LinkedHashMap<String, String> columns = new LinkedHashMap<String, String>();
private final ObjectMapper objectMapper = new ObjectMapper();
private String schema;
private String tablename;
private List<UpsertStringBuilder> builders = new ArrayList<>();
public UpsertStringBuilder() {
values = new StringJoiner(", ");
columns = new StringJoiner(", ");
onConflict = new StringJoiner(", ");
}
public UpsertStringBuilder() { }
public void addUpsertStringBuilder(UpsertStringBuilder builder) {
this.builders.add(builder);
@ -30,13 +34,35 @@ public class UpsertStringBuilder { @@ -30,13 +34,35 @@ public class UpsertStringBuilder {
return this;
}
public UpsertStringBuilder withCriteriaGroup(String colName, List<CriteriaGroup> groups) {
if (groups == null || groups.isEmpty()) {
columns.remove(colName);
columns.put(colName, "NULL");
return this;
}
try {
String json = objectMapper.writeValueAsString(groups);
columns.put(colName, "'" + json + "'::jsonb");
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("Failed to serialize CriteriaGroup list to JSON", e);
}
return this;
}
public UpsertStringBuilder withStringCol(String colName, String value) {
appendToSelection(colName);
//appendToSelection(colName);
String actualVal = value;
if(value == null) {
values.add("null");
actualVal = "null";
} else {
values.add("'"+value+"'");
actualVal = "'"+value+"'";
}
if(columns.containsKey(colName)) {
columns.remove(colName);
}
columns.put(colName, actualVal);
return this;
}
@ -62,8 +88,7 @@ public class UpsertStringBuilder { @@ -62,8 +88,7 @@ public class UpsertStringBuilder {
}
public UpsertStringBuilder withIntCol(String colName, Integer value) {
appendToSelection(colName);
values.add(String.valueOf(value));
columns.put(colName, String.valueOf(value));
return this;
}
@ -74,15 +99,21 @@ public class UpsertStringBuilder { @@ -74,15 +99,21 @@ public class UpsertStringBuilder {
return this.withStringCol(colName, null);
}
private void appendToSelection(String colName) {
onConflict.add(String.format("%s = EXCLUDED.%s", colName, colName));
columns.add(colName);
public String build(boolean hasOnConflictConstruct) {
StringJoiner cols = new StringJoiner(", ");
StringJoiner values = new StringJoiner(", ");
StringJoiner onConflict = new StringJoiner(", ");
for (String column : columns.keySet()) {
cols.add(column);
onConflict.add(String.format("%s = EXCLUDED.%s", column, column));
values.add(columns.get(column));
}
public String build(boolean hasOnConflictConstruct) {
String result = "INSERT INTO %s.%s(%s) VALUES(%s)";
result = String.format(result, this.schema, this.tablename, this.columns, this.values);
result = String.format(result, this.schema, this.tablename, cols, values);
if(hasOnConflictConstruct) {
// TODO: log message for on id conflict
//result += " ON CONFLICT(id) DO UPDATE SET " + this.onConflict;
result += " ON CONFLICT(id) DO NOTHING";
}

63
src/de/superx/bianalysis/metadata/models/json/MetaDimension.java

@ -14,7 +14,22 @@ import com.fasterxml.jackson.annotation.JsonProperty; @@ -14,7 +14,22 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(Include.NON_DEFAULT)
@JsonPropertyOrder({ "id", "default_release", "ref_to", "caption", "dimension", "fact_column", "alias", "bridge", "attributes"})
@JsonPropertyOrder({
"id",
"default_release",
"position",
"ref_to",
"caption",
"description",
"dimension",
"is_historical",
"fact_column",
"view",
"alias",
"is_hierarchy",
"id_column",
"attributes"
})
public class MetaDimension extends MetaObject {
@JsonProperty("ref_to")
@ -33,12 +48,17 @@ public class MetaDimension extends MetaObject { @@ -33,12 +48,17 @@ public class MetaDimension extends MetaObject {
@JsonProperty("is_historical")
private boolean isHistorical;
@JsonProperty("is_hidden")
private boolean isHidden;
@JsonProperty("attributes_sql")
private String attributesSql;
@JsonIgnore
private MetaFact fact;
private Integer position;
// true if dimension is from the conformed_dimensions_metaimport.json
@JsonIgnore
private boolean isConformed = false;
@ -68,15 +88,16 @@ public class MetaDimension extends MetaObject { @@ -68,15 +88,16 @@ public class MetaDimension extends MetaObject {
.withStringCol("alias", this.alias)
.withStringCol("is_hierarchy", String.valueOf(this.isHierarchy))
.withStringCol("is_historical", String.valueOf(this.isHistorical))
//.withStringCol("attributes_sql", this.attributesSql)
.withStringCol("tablename", this.dimension)
.withStringCol("id_column", this.idColumn);
.withStringCol("id_column", this.idColumn)
.withIntCol("position", this.position)
.withStringCol("is_hidden", String.valueOf(isHidden));
} else {
builder = new UpsertStringBuilder()
.forTable("metadata", this.sourceTable)
.withStringCol("namespace", this.namespace)
.withIdCol("id", this.id)
.withIntCol("default_release", Integer.valueOf(1));
.withStringCol("default_release", this.defaultRelease);
builder = builder.withIdCol("facttable_id", factId);
if(this.idColumn != null && !this.idColumn.isBlank()) {
@ -85,6 +106,12 @@ public class MetaDimension extends MetaObject { @@ -85,6 +106,12 @@ public class MetaDimension extends MetaObject {
builder = builder.withStringCol("id_column", this.conformedDimension.getIdColumn());
}
if(this.position != null) {
builder = builder.withIntCol("position", this.position);
} else {
builder = builder.withIntCol("position", this.conformedDimension.getPosition());
}
if(this.caption != null && !this.caption.isBlank()) {
builder = builder.withStringCol("caption", caption);
} else {
@ -103,6 +130,12 @@ public class MetaDimension extends MetaObject { @@ -103,6 +130,12 @@ public class MetaDimension extends MetaObject {
builder = builder.withStringCol("alias", this.conformedDimension.getAlias());
}
if(this.isHidden) {
builder = builder.withStringCol("is_hidden", String.valueOf(isHidden));
} else {
builder = builder.withStringCol("is_hidden", String.valueOf(this.conformedDimension.isHidden));
}
if(this.isHierarchy) {
builder = builder.withStringCol("is_hierarchy", String.valueOf(isHierarchy));
} else {
@ -141,6 +174,14 @@ public class MetaDimension extends MetaObject { @@ -141,6 +174,14 @@ public class MetaDimension extends MetaObject {
return builder;
}
public Integer getPosition() {
return position;
}
public void setPosition(Integer position) {
this.position = position;
}
public String getRefTo() {
return refTo;
}
@ -225,18 +266,22 @@ public class MetaDimension extends MetaObject { @@ -225,18 +266,22 @@ public class MetaDimension extends MetaObject {
return this.dimension;
}
@JsonIgnore
public boolean isHierarchy() {
return isHierarchy;
}
@JsonIgnore
public void setHierarchy(boolean isHierarchy) {
this.isHierarchy = isHierarchy;
}
@JsonIgnore
public boolean isHistorical() {
return isHistorical;
}
@JsonIgnore
public void setHistorical(boolean isHistorical) {
this.isHistorical = isHistorical;
}
@ -265,5 +310,15 @@ public class MetaDimension extends MetaObject { @@ -265,5 +310,15 @@ public class MetaDimension extends MetaObject {
this.attributesSql = attributesSql;
}
@JsonIgnore
public boolean isHidden() {
return isHidden;
}
@JsonIgnore
public void setHidden(boolean isHidden) {
this.isHidden = isHidden;
}
}

94
src/de/superx/bianalysis/metadata/models/json/MetaDimensionAttribute.java

@ -1,16 +1,31 @@ @@ -1,16 +1,31 @@
package de.superx.bianalysis.metadata.models.json;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import de.superx.bianalysis.FaultyMetadataException;
import de.superx.bianalysis.metadata.UpsertStringBuilder;
import de.superx.bianalysis.models.CriteriaGroup;
@JsonInclude(Include.NON_DEFAULT)
@JsonPropertyOrder({ "id", "default_release", "ref", "caption", "dim_column"})
@JsonPropertyOrder({
"id",
"default_release",
"position",
"caption",
"criteria_group",
"dim_column",
"sort_order_column",
"ref_to",
"description",
"fact_column"
})
public class MetaDimensionAttribute extends MetaObject {
@JsonProperty("dim_column")
@ -22,6 +37,8 @@ public class MetaDimensionAttribute extends MetaObject { @@ -22,6 +37,8 @@ public class MetaDimensionAttribute extends MetaObject {
@JsonProperty("hierarchical_filter")
private boolean hierarchicalFilter;
private Integer position;
@JsonIgnore
private MetaDimension dimension;
@ -34,6 +51,12 @@ public class MetaDimensionAttribute extends MetaObject { @@ -34,6 +51,12 @@ public class MetaDimensionAttribute extends MetaObject {
@JsonProperty("filter_selection")
private String filterSelection;
@JsonProperty("is_hidden")
private boolean isHidden;
@JsonProperty("criteria_groups")
private List<CriteriaGroup> criteriaGroups;
public MetaDimensionAttribute() {
super("dimension_attribute");
}
@ -55,14 +78,29 @@ public class MetaDimensionAttribute extends MetaObject { @@ -55,14 +78,29 @@ public class MetaDimensionAttribute extends MetaObject {
builder = super.getUpsert()
.withIdCol("dimension_id", this.dimension.id)
.withStringCol("columnname", this.dimColumn)
.withCriteriaGroup("criteria_groups", this.criteriaGroups)
.withStringCol("sort_order_column", this.sortOrderColumn)
.withStringCol("filter_selection", this.filterSelection);
.withStringCol("filter_selection", getFilterSelectionWithDefault())
.withIntCol("position", this.position)
.withStringCol("is_hidden", String.valueOf(this.isHidden));
} else {
builder = new UpsertStringBuilder()
.forTable("metadata", this.sourceTable)
.withStringCol("namespace", this.namespace)
.withIdCol("id", this.id)
.withIntCol("default_release", Integer.valueOf(1));
.withStringCol("default_release", this.defaultRelease);
if(this.isHidden) {
builder = builder.withStringCol("is_hidden", String.valueOf(isHidden));
} else {
builder = builder.withStringCol("is_hidden", String.valueOf(confDimAttrRef.isHidden));
}
if(this.position != null) {
builder = builder.withIntCol("position", position);
} else {
builder = builder.withIntCol("position", this.confDimAttrRef.getPosition());
}
if(getCaption() != null && !getCaption().isBlank()) {
builder = builder.withStringCol("caption", caption);
@ -79,7 +117,7 @@ public class MetaDimensionAttribute extends MetaObject { @@ -79,7 +117,7 @@ public class MetaDimensionAttribute extends MetaObject {
if(getFilterSelection() != null && !getFilterSelection().isBlank()) {
builder = builder.withStringCol("filter_selection", this.filterSelection);
} else {
builder = builder.withStringCol("filter_selection", confDimAttrRef.getFilterSelection());
builder = builder.withStringCol("filter_selection", confDimAttrRef.getFilterSelectionWithDefault());
}
if(getSortOrderColumn() != null && !getSortOrderColumn().isBlank()) {
@ -92,6 +130,13 @@ public class MetaDimensionAttribute extends MetaObject { @@ -92,6 +130,13 @@ public class MetaDimensionAttribute extends MetaObject {
builder = builder.withIdCol("conformed", this.confDimAttrRef.id);
}
if(this.dimColumn == null && criteriaGroups != null && criteriaGroups.size() >0) {
String newColumnName = this.caption.toLowerCase()
.replaceAll("\\s+", "_")
.replaceAll("[^a-z0-9-]", "_");
builder = builder.withStringCol("columnname", newColumnName);
}
if(confDimAttrRef != null && confDimAttrRef.hierarchicalFilter) {
builder = builder.withStringCol("hierarchical_filter", String.valueOf(confDimAttrRef.hierarchicalFilter));
} else {
@ -111,6 +156,14 @@ public class MetaDimensionAttribute extends MetaObject { @@ -111,6 +156,14 @@ public class MetaDimensionAttribute extends MetaObject {
return builder;
}
public Integer getPosition() {
return position;
}
public void setPosition(Integer position) {
this.position = position;
}
public String getDimColumn() {
return dimColumn;
}
@ -159,10 +212,23 @@ public class MetaDimensionAttribute extends MetaObject { @@ -159,10 +212,23 @@ public class MetaDimensionAttribute extends MetaObject {
this.refTo = refTo;
}
public List<CriteriaGroup> getCriteriaGroups() {
return criteriaGroups;
}
public void setCriteriaGroups(List<CriteriaGroup> criteriaGroups) {
this.criteriaGroups = criteriaGroups;
}
@JsonIgnore
@Override
public String getDocIdentifier() {
if(refTo != null) {
if(this.confDimAttrRef == null) {
throw new FaultyMetadataException("The Object with the id '" + this.id
+ "' references a conformed attribute with the name '" + this.refTo
+ "'. This Object cannot be found.");
}
return this.confDimAttrRef.getDocIdentifier();
}
return this.dimension.getDocIdentifier()+"."+this.dimColumn;
@ -176,4 +242,24 @@ public class MetaDimensionAttribute extends MetaObject { @@ -176,4 +242,24 @@ public class MetaDimensionAttribute extends MetaObject {
this.hierarchicalFilter = hierarchicalFilter;
}
@JsonIgnore
public boolean isHidden() {
return isHidden;
}
@JsonIgnore
public String getFilterSelectionWithDefault() {
if(this.filterSelection == null || this.filterSelection.isBlank()) {
return "show_existing_only";
}
return this.filterSelection;
}
@JsonIgnore
public void setHidden(boolean isHidden) {
this.isHidden = isHidden;
}
}

25
src/de/superx/bianalysis/metadata/models/yml/MetaYmlModel.java

@ -4,13 +4,23 @@ import java.util.ArrayList; @@ -4,13 +4,23 @@ import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"name",
"description",
"tests",
"columns"
})
public class MetaYmlModel {
private String name;
private String description;
private List<MetaYmlModelColumns> columns;
private List<Object> tests;
public MetaYmlModel() { }
@ -19,6 +29,13 @@ public class MetaYmlModel { @@ -19,6 +29,13 @@ public class MetaYmlModel {
this.name = name;
this.description = description;
}
public MetaYmlModel(String name, String description, String test) {
super();
this.name = name;
this.description = description;
this.tests = new ArrayList<Object>();
this.tests.add(test);
}
public String getName() {
return name;
@ -46,4 +63,12 @@ public class MetaYmlModel { @@ -46,4 +63,12 @@ public class MetaYmlModel {
public void setColumns(List<MetaYmlModelColumns> columns) {
this.columns = columns;
}
public List<Object> getTests() {
return tests;
}
public void setTests(List<Object> tests) {
this.tests = tests;
}
}

7
src/de/superx/bianalysis/metadata/models/yml/MetaYmlModelColumns.java

@ -22,6 +22,13 @@ public class MetaYmlModelColumns { @@ -22,6 +22,13 @@ public class MetaYmlModelColumns {
this.tests.add(test);
}
public MetaYmlModelColumns(String name, String description, List<Object> tests) {
super();
this.name = name;
this.description = description;
this.tests = tests;
}
public MetaYmlModelColumns(String name, String description) {
super();
this.name = name;

46
src/de/superx/bianalysis/models/Condition.java

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
package de.superx.bianalysis.models;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class Condition {
public String column, operator;
public String value;
public List<String> values; // for IN operator
public List<Condition> conditions; // nested
@JsonIgnore
public static boolean isCondition(Object obj) {
if (!(obj instanceof LinkedHashMap<?, ?>)) return false;
Map<?, ?> conditionMap = (Map<?, ?>) obj;
return conditionMap.containsKey("column") &&
conditionMap.containsKey("operator") &&
(conditionMap.containsKey("value") || conditionMap.containsKey("values"));
}
public static Condition fromMap(Object obj) {
if (!(obj instanceof LinkedHashMap<?, ?>)) return null;
LinkedHashMap<?, ?> map = (LinkedHashMap<?, ?>) obj;
Condition cond = new Condition();
cond.column = ((String) map.get("column"));
cond.operator = ((String) map.get("operator"));
cond.value = ((String) map.get("value"));
// Handle single value or list
if (map.containsKey("values")) {
cond.values = ((List<String>) map.get("values"));
} else if (map.containsKey("value")) {
cond.value = (String) map.get("value");
}
return cond;
}
}

41
src/de/superx/bianalysis/models/CriteriaGroup.java

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
package de.superx.bianalysis.models;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class CriteriaGroup {
public String caption;
public String logic;
public boolean isElse;
public List<Object> conditions;
@JsonIgnore
public static boolean isGroup(Object obj) {
if (!(obj instanceof LinkedHashMap<?, ?> )) return false;
LinkedHashMap<?, ?> map = (LinkedHashMap<?, ?>) obj;
return map.containsKey("conditions") || map.containsKey("logic");
}
@JsonIgnore
public static CriteriaGroup fromMap(Object obj) {
if (!(obj instanceof LinkedHashMap<?, ?>)) return null;
LinkedHashMap<?, ?> map = (LinkedHashMap<?, ?>) obj;
CriteriaGroup group = new CriteriaGroup();
group.caption = ((String) map.get("caption"));
group.logic = ((String) map.get("logic"));
Boolean isElseBool = ((Boolean) map.get("isElse"));
if(isElseBool != null) {
group.isElse = isElseBool.booleanValue();
}
group.conditions = ((List<Object>) map.get("conditions"));
return group;
}
}

15
src/de/superx/bianalysis/models/Dimension.java

@ -30,6 +30,17 @@ public class Dimension { @@ -30,6 +30,17 @@ public class Dimension {
this.dimensionAttributes = lda;
}
public List<DimensionAttribute> getDimensionAttributes() {
return dimensionAttributes;
}
public boolean isHidden() {
if(this.dimensionDto.isHidden == null) {
return false;
}
return this.dimensionDto.isHidden.booleanValue();
}
public DimensionDto getDimensionDto() {
return dimensionDto;
}
@ -84,4 +95,8 @@ public class Dimension { @@ -84,4 +95,8 @@ public class Dimension {
return this.dimensionDto.idColumn;
}
public Integer getPosition() {
return this.dimensionDto.position;
}
}

31
src/de/superx/bianalysis/models/DimensionAttribute.java

@ -6,6 +6,7 @@ import java.util.Objects; @@ -6,6 +6,7 @@ import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.node.ArrayNode;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.repository.dto.AttributeDto;
@ -68,6 +69,8 @@ public class DimensionAttribute { @@ -68,6 +69,8 @@ public class DimensionAttribute {
private List<String> dimensionAttributeValues;
private ArrayNode criteriaGroups;
@JsonIgnore
private String dimIdJoinColumn;
@ -97,7 +100,7 @@ public class DimensionAttribute { @@ -97,7 +100,7 @@ public class DimensionAttribute {
public static String generateDimensionTableAlias(String joincolumn) {
if (joincolumn != null) {
return joincolumn.replaceFirst("_id$", "");
return joincolumn.replaceFirst("_(id|lid)$", "");
}
return null;
}
@ -120,6 +123,13 @@ public class DimensionAttribute { @@ -120,6 +123,13 @@ public class DimensionAttribute {
return this.attributeTable.caption;
}
public boolean isHidden() {
if(this.attributeTable.isHidden == null) {
return false;
}
return this.attributeTable.isHidden.booleanValue();
}
public String getColumnname() {
return this.attributeTable.columnname;
}
@ -243,6 +253,9 @@ public class DimensionAttribute { @@ -243,6 +253,9 @@ public class DimensionAttribute {
}
public boolean isHierarchicalFilter() {
if(this.attributeTable.hierarchicalFilter == null) {
return false;
}
return this.attributeTable.hierarchicalFilter.booleanValue();
}
@ -266,4 +279,20 @@ public class DimensionAttribute { @@ -266,4 +279,20 @@ public class DimensionAttribute {
this.attributeTable.attrConformedId = stringId;
}
public Integer getPosition() {
return this.attributeTable.position;
}
public String getDefaultRelease() {
return this.attributeTable.defaultRelease;
}
public ArrayNode getCriteriaGroups() {
return this.attributeTable.criteriaGroups;
}
public void setCriteriaGroups(ArrayNode criteriaGroups) {
this.criteriaGroups = criteriaGroups;
}
}

2
src/de/superx/bianalysis/models/Filter.java

@ -45,7 +45,7 @@ public class Filter { @@ -45,7 +45,7 @@ public class Filter {
if(dim.getAlias() != null) {
this.dimensionTableAlias = dim.getAlias();
} else {
this.dimensionTableAlias = joincolumn.replaceFirst("_id$", "");
this.dimensionTableAlias = joincolumn.replaceFirst("_(id|lid)$", "");
}
}

4
src/de/superx/bianalysis/models/Measure.java

@ -70,7 +70,7 @@ public class Measure { @@ -70,7 +70,7 @@ public class Measure {
private static String generatefilterDimensionTableAlias(String filterJoincolumn) {
if (filterJoincolumn != null) {
return filterJoincolumn.replaceFirst("_id$", "");
return filterJoincolumn.replaceFirst("_(id|lid)$", "");
}
return null;
}
@ -119,7 +119,7 @@ public class Measure { @@ -119,7 +119,7 @@ public class Measure {
}
public ColumnType getMeasureType() {
return this.measureDto.measureType;
return ColumnType.valueOf(this.measureDto.measureType);
}
public Identifier getMeasureFilterId() {

20
src/de/superx/bianalysis/repository/DimensionAttributeRepository.java

@ -8,6 +8,7 @@ import org.springframework.data.repository.CrudRepository; @@ -8,6 +8,7 @@ import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.RepositoryDefinition;
import org.springframework.data.repository.query.Param;
import de.superx.bianalysis.FaultyMetadataException;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.repository.dto.AttributeDto;
import de.superx.jdbc.repository.BiaAdminCrudRepository;
@ -19,6 +20,11 @@ public interface DimensionAttributeRepository extends BiaAdminCrudRepository<Att @@ -19,6 +20,11 @@ public interface DimensionAttributeRepository extends BiaAdminCrudRepository<Att
Optional<AttributeDto> findById(Identifier id);
default AttributeDto findByIdOrThrow(Identifier id) {
return findById(id)
.orElseThrow(() -> new FaultyMetadataException(id));
}
@Query(
"SELECT da.id"
+ " FROM metadata.dimension_attribute da"
@ -39,4 +45,18 @@ public interface DimensionAttributeRepository extends BiaAdminCrudRepository<Att @@ -39,4 +45,18 @@ public interface DimensionAttributeRepository extends BiaAdminCrudRepository<Att
)
Identifier findAttributesByIdAndFactTable(@Param("attrId") String confAttrId, @Param("factId") String factId);
@Query("SELECT * FROM metadata.dimension_attribute WHERE criteria_groups IS NOT NULL")
List<AttributeDto> findByNonEmptyCriteriaGroup();
Optional<AttributeDto> findByDimensionIdAndAttrConformedId(Identifier dimensionId, String attrConformedId);
}

6
src/de/superx/bianalysis/repository/DimensionRepository.java

@ -8,6 +8,7 @@ import org.springframework.data.repository.CrudRepository; @@ -8,6 +8,7 @@ import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.RepositoryDefinition;
import org.springframework.data.repository.query.Param;
import de.superx.bianalysis.FaultyMetadataException;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.repository.dto.DimensionDto;
import de.superx.jdbc.repository.BiaAdminCrudRepository;
@ -47,4 +48,9 @@ public interface DimensionRepository extends BiaAdminCrudRepository<DimensionDto @@ -47,4 +48,9 @@ public interface DimensionRepository extends BiaAdminCrudRepository<DimensionDto
+ " AND conformed IS NOT NULL"
)
List<Identifier> getUsedConformedDimensionsByFactTable(@Param("factId") String factId);
default DimensionDto findByIdOrThrow(Identifier id) {
return findById(id)
.orElseThrow(() -> new FaultyMetadataException(id));
}
}

102
src/de/superx/bianalysis/repository/dto/AttributeDto.java

@ -1,55 +1,85 @@ @@ -1,55 +1,85 @@
package de.superx.bianalysis.repository.dto;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.models.CriteriaGroup;
import de.superx.bianalysis.service.DbMetaAdapter;
import de.superx.jdbc.entity.EntityBase;
import de.superx.jdbc.model.DynamicFieldType;
import de.superx.jdbc.model.EntityDescriptor;
import de.superx.jdbc.model.TableRef;
import de.superx.rest.model.ColumnType;
import de.superx.rest.model.FieldType;
import de.superx.rest.model.Item;
@Table(schema = "metadata", value = "dimension_attribute")
public class AttributeDto extends EntityBase {
@Id
@DynamicFieldType(label="ID", readOnly = true)
@DynamicFieldType(label="ID", readOnly = true, visibleInSimplifiedForm = false)
public Identifier id;
@DynamicFieldType(label="Titel")
@EntityDescriptor
@DynamicFieldType(label="Attributsbezeichnung")
public String caption;
@DynamicFieldType(label="Beschreibung", editControlType=FieldType.TextArea)
public String description;
@DynamicFieldType(label="Dimension ID", readOnly = true)
@DynamicFieldType(label="Dimension", readOnly = true, visibleInSimplifiedForm = true)
@TableRef(schema = "metadata", table = "dimension", keyField = "id", labelField = "caption")
@Column(value = "dimension_id")
public Identifier dimensionId;
@DynamicFieldType(label="Spaltenname", readOnly = true)
public String columnname;
@DynamicFieldType(label="Sortierspalte", readOnly = true)
@DynamicFieldType(label="Sortierspalte", readOnly = true, visibleInSimplifiedForm = false)
@Column(value = "sort_order_column")
public String sortOrderColumn;
@DynamicFieldType(label="Filter-Auswahl")
@DynamicFieldType(label="Filter-Auswahl", readOnly = true, visibleInSimplifiedForm = false)
@Column(value = "filter_selection")
public String filterSelection;
@DynamicFieldType(label="Hierarchie", editControlType=FieldType.Select, columnType = ColumnType.BooleanColumn, readOnly = true)
@DynamicFieldType(label="Hierarchie", editControlType=FieldType.Select, columnType = ColumnType.BooleanColumnBiAnalysis, readOnly = true, visibleInSimplifiedForm = false)
@Column(value = "hierarchical_filter")
public Boolean hierarchicalFilter;
@DynamicFieldType(label="Conformed ID", readOnly = true)
@DynamicFieldType(label="Ausgeblendet", editControlType=FieldType.Select, columnType = ColumnType.BooleanColumnBiAnalysis, visibleInSimplifiedForm = false)
@Column(value = "is_hidden")
public Boolean isHidden;
@DynamicFieldType(label="Gemeinsame Attribute", readOnly = true, visibleInSimplifiedForm = true)
@TableRef(schema = "metadata", table = "dimension_attribute", keyField = "id", labelField = "caption")
@Column(value = "conformed")
public String attrConformedId;
@DynamicFieldType(label="Auslieferungsversion")
@DynamicFieldType(label="Auslieferungsversion", visibleInSimplifiedForm = false)
@Column(value = "default_release")
public String defaultRelease;
@DynamicFieldType(label="Position", visibleInSimplifiedForm = false)
public Integer position;
@DynamicFieldType(label="Criteria Groups", editControlType=FieldType.TextArea, readOnly = false, visibleInSimplifiedForm = false)
@Column(value = "criteria_groups")
public ArrayNode criteriaGroups;
public AttributeDto() {}
@Override
@ -62,4 +92,60 @@ public class AttributeDto extends EntityBase { @@ -62,4 +92,60 @@ public class AttributeDto extends EntityBase {
return false;
}
@Override
public List<Item> getCellSpecificItems(String fieldName, DataSource ds) {
List<Item> items = new ArrayList<Item>();
if (fieldName.equals("filterSelection")) {
items.add(new Item("Kompletter Wertebereich", "show_all"));
items.add(new Item("Tatsächlich vorkommende Werte", "show_existing_only"));
items.add(new Item("Von erster bis letzter Ausprägung", "show_range"));
} else if(fieldName.equals("defaultRelease")) {
items = DbMetaAdapter.getDefaultReleaseValues(ds);
}
//else if(fieldName.equals("criteriaGroups")) {
// String jsonString = "";
//
//try {
// jsonString = new ObjectMapper().writeValueAsString(this.criteriaGroups);
//} catch (JsonProcessingException e) {
// jsonString = e.getMessage();
// throw new IllegalArgumentException("Failed to serialize CriteriaGroup list to JSON", e);
//}
// items.add(new Item(jsonString, jsonString));
//}
return items;
}
@JsonIgnore
public List<CriteriaGroup> readCriteriaGroups(){
List<CriteriaGroup> groups = new ArrayList<>();
ObjectMapper mapper = new ObjectMapper();
try {
groups = mapper.convertValue(criteriaGroups, new TypeReference<List<CriteriaGroup>>() {});
} catch (Exception e) {
throw new RuntimeException("Failed to parse JSON array to CriteriaGroup list", e);
}
return groups;
}
@JsonIgnore
public String getEmptyLabel() {
return this.readCriteriaGroups().stream()
.filter(p -> p.isElse)
.findFirst()
.map(p -> p.caption)
.orElse("n.v.");
}
@JsonIgnore
public String getColumnNameFromCaption() {
String newColumnName = caption.toLowerCase()
.replaceAll("\\s+", "_")
.replaceAll("[^a-z0-9-]", "_");
return newColumnName;
}
}

46
src/de/superx/bianalysis/repository/dto/DimensionDto.java

@ -1,62 +1,79 @@ @@ -1,62 +1,79 @@
package de.superx.bianalysis.repository.dto;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.service.DbMetaAdapter;
import de.superx.jdbc.entity.EntityBase;
import de.superx.jdbc.model.DynamicFieldType;
import de.superx.jdbc.model.EntityDescriptor;
import de.superx.rest.model.ColumnType;
import de.superx.rest.model.FieldType;
import de.superx.rest.model.Item;
import de.superx.jdbc.model.TableRef;
@Table(schema="metadata", value = "dimension")
public class DimensionDto extends EntityBase{
@Id
@DynamicFieldType(label="ID", readOnly = true)
@DynamicFieldType(label="ID", readOnly = true, visibleInSimplifiedForm = false)
public Identifier id;
@EntityDescriptor
@DynamicFieldType(label="Titel")
@DynamicFieldType(label="Dimensionsbezeichnung")
public String caption;
@DynamicFieldType(label="Beschreibung", editControlType=FieldType.TextArea)
public String description;
@DynamicFieldType(label="Faktentabelle ID", readOnly = true)
@DynamicFieldType(label="Faktentabelle", readOnly = true, visibleInSimplifiedForm = true)
@TableRef(schema = "metadata", table = "facttable", keyField = "id", labelField = "caption")
@Column(value = "facttable_id")
public Identifier factTableId;
@DynamicFieldType(label="Tabellenname", readOnly = true)
public String tablename;
@DynamicFieldType(label="Join-Spalte", readOnly = true)
@DynamicFieldType(label="Join-Spalte", readOnly = true, visibleInSimplifiedForm = false)
public String joincolumn;
@DynamicFieldType(label="Join-Alias", readOnly = true)
@DynamicFieldType(label="Join-Alias", readOnly = true, visibleInSimplifiedForm = false)
public String alias;
@DynamicFieldType(label="Hierarchie", editControlType=FieldType.Select, columnType = ColumnType.BooleanColumn)
@DynamicFieldType(label="Hierarchie", editControlType=FieldType.Select, columnType = ColumnType.BooleanColumnBiAnalysis, readOnly = true, visibleInSimplifiedForm = false)
@Column(value = "is_hierarchy")
public Boolean isHierarchy;
@DynamicFieldType(label="Historisch", editControlType=FieldType.Select, columnType = ColumnType.BooleanColumn)
@DynamicFieldType(label="Historisch", editControlType=FieldType.Select, columnType = ColumnType.BooleanColumnBiAnalysis, readOnly = true, visibleInSimplifiedForm = false)
@Column(value = "is_historical")
public Boolean isHistorical;
@DynamicFieldType(label="Conformed ID", readOnly = true)
@DynamicFieldType(label="Gemeinsame Dimension", readOnly = true, visibleInSimplifiedForm = true)
@TableRef(schema = "metadata", table = "dimension", keyField = "id", labelField = "caption")
public String conformed;
@DynamicFieldType(label="ID Spalte", readOnly = true)
@DynamicFieldType(label="ID Spalte", readOnly = true, visibleInSimplifiedForm = false)
@Column(value = "id_column")
public String idColumn;
@DynamicFieldType(label="Auslieferungsversion")
@DynamicFieldType(label="Auslieferungsversion", visibleInSimplifiedForm = false)
@Column(value = "default_release")
public String defaultRelease;
@DynamicFieldType(label="Ausgeblendet", editControlType=FieldType.Select, columnType = ColumnType.BooleanColumnBiAnalysis, visibleInSimplifiedForm = false)
@Column(value = "is_hidden")
public Boolean isHidden;
@DynamicFieldType(label="Position", visibleInSimplifiedForm = false)
public Integer position;
public DimensionDto() {}
@Override
@ -69,4 +86,13 @@ public class DimensionDto extends EntityBase{ @@ -69,4 +86,13 @@ public class DimensionDto extends EntityBase{
return false;
}
@Override
public List<Item> getCellSpecificItems(String fieldName, DataSource ds) {
List<Item> items = new ArrayList<Item>();
if(fieldName.equals("defaultRelease")) {
items = DbMetaAdapter.getDefaultReleaseValues(ds);
}
return items;
}
}

30
src/de/superx/bianalysis/repository/dto/FactDto.java

@ -1,36 +1,45 @@ @@ -1,36 +1,45 @@
package de.superx.bianalysis.repository.dto;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.service.DbMetaAdapter;
import de.superx.jdbc.entity.EntityBase;
import de.superx.jdbc.model.DynamicFieldType;
import de.superx.jdbc.model.EntityDescriptor;
import de.superx.jdbc.model.TableRef;
import de.superx.rest.model.FieldType;
import de.superx.rest.model.Item;
@Table(schema = "metadata", value = "facttable")
public class FactDto extends EntityBase {
@Id
@DynamicFieldType(label="ID", readOnly = true)
@DynamicFieldType(label="ID", readOnly = true, visibleInSimplifiedForm = false)
public Identifier id;
@EntityDescriptor
@DynamicFieldType(label="Titel")
@DynamicFieldType(label="Faktentabellenbezeichnug")
public String caption;
@DynamicFieldType(label="Sachgebiet", editControlType=FieldType.Select, readOnly = true)
public Integer sachgebiettid;
@DynamicFieldType(label="Beschreibung", editControlType=FieldType.TextArea)
public String description;
@DynamicFieldType(label = "Sachgebiet", editControlType = FieldType.Select, readOnly = true)
@TableRef(table = "sachgebiete", keyField = "tid", labelField = "name")
public Integer sachgebiettid;
@DynamicFieldType(label="Tabellenname", readOnly = true)
public String tablename;
@DynamicFieldType(label="Auslieferungsversion")
@DynamicFieldType(label="Auslieferungsversion", visibleInSimplifiedForm = false)
@Column(value = "default_release")
public String defaultRelease;
@ -45,4 +54,13 @@ public class FactDto extends EntityBase { @@ -45,4 +54,13 @@ public class FactDto extends EntityBase {
public boolean canBeDeletedByUser() {
return false;
}
@Override
public List<Item> getCellSpecificItems(String fieldName, DataSource ds) {
List<Item> items = new ArrayList<Item>();
if(fieldName.equals("defaultRelease")) {
items = DbMetaAdapter.getDefaultReleaseValues(ds);
}
return items;
}
}

24
src/de/superx/bianalysis/repository/dto/JsonArrayToStringDeserializer.java

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
package de.superx.bianalysis.repository.dto;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.DeserializationContext;
import java.io.IOException;
import java.io.StringWriter;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonArrayToStringDeserializer extends JsonDeserializer<String> {
private static final ObjectMapper mapper = new ObjectMapper();
@Override
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
if (p.currentToken() == JsonToken.START_ARRAY) {
JsonNode node = p.readValueAsTree();
return mapper.writeValueAsString(node); // Correct way to serialize JsonNode
}
return p.getValueAsString();
}
}

95
src/de/superx/bianalysis/repository/dto/MeasureDto.java

@ -1,53 +1,69 @@ @@ -1,53 +1,69 @@
package de.superx.bianalysis.repository.dto;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.dao.DataAccessException;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import org.springframework.jdbc.core.JdbcTemplate;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.service.DbMetaAdapter;
import de.superx.jdbc.entity.EntityBase;
import de.superx.jdbc.model.DynamicFieldType;
import de.superx.jdbc.model.EntityDescriptor;
import de.superx.rest.model.ColumnType;
import de.superx.rest.model.FieldType;
import de.superx.rest.model.Item;
import de.superx.jdbc.model.TableRef;
@Table(schema = "metadata", value = "measure")
public class MeasureDto extends EntityBase {
@Id
@DynamicFieldType(label="ID", readOnly = true)
@DynamicFieldType(label="ID", readOnly = true, visibleInSimplifiedForm = false)
public Identifier id;
@EntityDescriptor
@DynamicFieldType(label="Titel")
@DynamicFieldType(label="Kennzahlenbezeichnung")
public String caption;
@DynamicFieldType(label="Beschreibung", editControlType=FieldType.TextArea)
public String description;
@DynamicFieldType(label="Spaltenname")
public String columnname;
@DynamicFieldType(label="Faktentabelle ID", readOnly = true)
@DynamicFieldType(label="Faktentabelle", readOnly = true, visibleInSimplifiedForm = true)
@TableRef(schema = "metadata", table = "facttable", keyField = "id", labelField = "caption")
@Column(value = "facttable_id")
public Identifier factTableId;
@DynamicFieldType(label="Filter ID", readOnly = true)
@DynamicFieldType(label="Spaltenname", readOnly = true)
public String columnname;
@DynamicFieldType(label="Filter", visibleInSimplifiedForm = false, readOnly = true)
@TableRef(schema = "metadata", table = "measure_filter", keyField = "id", labelField = "caption")
@Column(value = "measure_filter_id")
public Identifier measureFilterId;
@DynamicFieldType(label="Aggregationstyp")
@DynamicFieldType(label="Aggregationstyp", readOnly = true)
@Column(value = "aggregation_type")
public String aggregationType;
@DynamicFieldType(label="Datentyp", readOnly = true)
@DynamicFieldType(label="Datentyp", visibleInSimplifiedForm = false, readOnly = true)
@Column(value = "measure_type")
public ColumnType measureType;
public String measureType;
@DynamicFieldType(label="Auslieferungsversion")
@DynamicFieldType(label="Auslieferungsversion", visibleInSimplifiedForm = false)
@Column(value = "default_release")
public String defaultRelease;
@DynamicFieldType(label="Ausgeblendet", editControlType=FieldType.Select, columnType = ColumnType.BooleanColumnBiAnalysis, visibleInSimplifiedForm = false)
@Column(value = "is_hidden")
public Boolean isHidden;
public MeasureDto() {};
@Override
@ -60,4 +76,61 @@ public class MeasureDto extends EntityBase { @@ -60,4 +76,61 @@ public class MeasureDto extends EntityBase {
return false;
}
@Override
public List<Item> getCellSpecificItems(String fieldName, DataSource ds) {
List<Item> items = new ArrayList<Item>();
if (fieldName.equals("aggregationType")) {
items.add(new Item("Summe (sum)", "sum"));
items.add(new Item("Anzahl (count)", "count"));
items.add(new Item("Anzahl unterschiedlicher Werte (distinct-count)", "distinct-count"));
items.add(new Item("Durchschnitt (avg)", "avg"));
items.add(new Item("Minimum (min)", "min"));
items.add(new Item("Maximum (max)", "max"));
items.add(new Item("Standardabweichung (std)", "std"));
items.add(new Item("Varianz (var)", "var"));
} else if(fieldName.equals("measureType")) {
items.add(new Item("Ganzzahl", "IntegerColumn"));
items.add(new Item("Dezimalzahl", "DecimalColumn"));
} else if(fieldName.equals("columnname")) {
if (this.factTableId == null) return items;
JdbcTemplate jt = new JdbcTemplate(ds);
String queryTableName = "SELECT tablename FROM metadata.facttable WHERE id = ?";
String tableName = null;
try {
tableName = jt.queryForObject(queryTableName, String.class, this.factTableId.composedId);
if (tableName == null || tableName.isEmpty()) {
System.err.println("No table name found for id: " + this.factTableId);
return items;
}
String sql = "SELECT column_name FROM information_schema.columns " +
"WHERE table_schema = ? AND table_name = ? " +
"ORDER BY ordinal_position";
List<String> columnNames = jt.queryForList(sql, String.class, "presentation", tableName);
if (columnNames == null || columnNames.isEmpty()) {
return items;
}
for (String columnName : columnNames) {
if (columnName != null && !columnName.isEmpty()) {
items.add(new Item(columnName, columnName));
}
}
} catch (DataAccessException dae) {
System.err.println("Database error while retrieving table or columns: " + dae.getMessage());
} catch (Exception ex) {
System.err.println("Unexpected error: " + ex.getMessage());
}
} else if(fieldName.equals("defaultRelease")) {
items = DbMetaAdapter.getDefaultReleaseValues(ds);
}
return items;
}
}

43
src/de/superx/bianalysis/repository/dto/MeasureFilterDto.java

@ -1,30 +1,39 @@ @@ -1,30 +1,39 @@
package de.superx.bianalysis.repository.dto;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.dao.DataAccessException;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import org.springframework.jdbc.core.JdbcTemplate;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.service.DbMetaAdapter;
import de.superx.jdbc.entity.EntityBase;
import de.superx.jdbc.model.DynamicFieldType;
import de.superx.jdbc.model.EntityDescriptor;
import de.superx.rest.model.FieldType;
import de.superx.rest.model.Item;
@Table(schema = "metadata", value = "measure_filter")
public class MeasureFilterDto extends EntityBase {
@Id
@DynamicFieldType(label="ID", readOnly = true)
@DynamicFieldType(label="ID", readOnly = true, visibleInSimplifiedForm = false)
public Identifier id;
@EntityDescriptor
@DynamicFieldType(label="Titel")
@DynamicFieldType(label="Kennzahlenfilterbezeichnung")
public String caption;
@DynamicFieldType(label="Beschreibung", editControlType=FieldType.TextArea)
public String description;
@DynamicFieldType(label="Attribute ID", readOnly = true)
@DynamicFieldType(label="Attribute", readOnly = false, visibleInSimplifiedForm = true)
@Column(value = "dimension_attribute_id")
public Identifier dimensionAttributeId;
@ -40,7 +49,7 @@ public class MeasureFilterDto extends EntityBase { @@ -40,7 +49,7 @@ public class MeasureFilterDto extends EntityBase {
@Column(value = "excluded_values")
public String excludedValues;
@DynamicFieldType(label="Auslieferungsversion")
@DynamicFieldType(label="Auslieferungsversion", visibleInSimplifiedForm = false)
@Column(value = "default_release")
public String defaultRelease;
@ -56,4 +65,30 @@ public class MeasureFilterDto extends EntityBase { @@ -56,4 +65,30 @@ public class MeasureFilterDto extends EntityBase {
return false;
}
@Override
public List<Item> getCellSpecificItems(String fieldName, DataSource ds) {
List<Item> items = new ArrayList<Item>();
if(fieldName.equals("defaultRelease")) {
items = DbMetaAdapter.getDefaultReleaseValues(ds);
} else if(fieldName.equals("dimensionAttributeId")) {
try {
JdbcTemplate jt = new JdbcTemplate(ds);
String sql = "SELECT d.caption || ' - ' || da.caption || ' (' || da.id || ')' AS label,"
+ " da.id AS value"
+ " FROM metadata.dimension_attribute da"
+ " LEFT JOIN metadata.dimension d"
+ " ON d.id = da.dimension_id"
+ " ORDER BY 1 ASC";
return jt.query(sql, (rs, rowNum) -> new Item(rs.getString("label"), rs.getString("value")));
} catch (DataAccessException dae) {
System.err.println("Database error while retrieving table or columns: " + dae.getMessage());
} catch (Exception ex) {
System.err.println("Unexpected error: " + ex.getMessage());
}
}
return items;
}
}

104
src/de/superx/bianalysis/rest/BiAnalysisAdminApi.java

@ -0,0 +1,104 @@ @@ -0,0 +1,104 @@
package de.superx.bianalysis.rest;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.models.Dimension;
import de.superx.bianalysis.models.FactTable;
import de.superx.bianalysis.models.Measure;
import de.superx.bianalysis.repository.dto.AttributeDto;
import de.superx.bianalysis.service.BiAnalysisRightService;
import de.superx.bianalysis.service.DbMetaAdapter;
import de.superx.common.NotYetImplementedException;
import de.superx.rest.RestControllerBase;
@RestController
@RequestMapping("/api/bianalysis/admin")
@PreAuthorize("hasAuthority('RIGHT_CS_BIA_ANALYSIS_MANAGE_METADATA')")
public class BiAnalysisAdminApi extends RestControllerBase {
static Logger logger = Logger.getLogger(BiAnalysisAdminApi.class);
@Autowired
DbMetaAdapter dbAdapter;
@Autowired
BiAnalysisRightService userService;
@Override
protected Logger getLogger() {
return logger;
}
@RequestMapping(method = RequestMethod.GET, path = "/facttables")
public List<FactTable> listFactTables() throws NotYetImplementedException {
return dbAdapter.getFactTables();
}
@RequestMapping(method = RequestMethod.GET, path = "/dimensions")
public List<Dimension> listDimensions(@RequestParam(value = "facttable_id") String factId) {
return dbAdapter.getDimensions(new Identifier(factId));
}
@RequestMapping(method = RequestMethod.GET, path = "/measures")
public List<Measure> listMeasures(@RequestParam(value = "facttable_id") String factId) {
return dbAdapter.getMeasures(new Identifier(factId));
}
@RequestMapping(method = RequestMethod.PUT, path = "/attribute-group")
public Identifier saveAttributeGroup(@RequestBody final AttributeDto attributeGroup, @RequestParam(value = "dimension_id") Identifier dimensionId) {
if(attributeGroup.id != null && attributeGroup.id.composedId != null && !attributeGroup.id.composedId.isBlank()) {
dbAdapter.deleteColumnForAttributeGroup(attributeGroup.id, dimensionId);
}
AttributeDto savedAttribute = dbAdapter.saveAttributeGroup(attributeGroup, dimensionId);
if(savedAttribute!= null && savedAttribute.id != null) {
try {
dbAdapter.saveAttributeGroupColumn(savedAttribute, false);
dbAdapter.saveAttributeGroupColumn(savedAttribute, true);
} catch (Exception e) {
logger.error(e);
dbAdapter.deleteAttributeGroupById(savedAttribute.id);
}
} else {
logger.error(attributeGroup);
throw new RuntimeException("ERROR saving Attribute Group.");
}
return savedAttribute.id;
}
@RequestMapping(method = RequestMethod.PUT, path = "/attribute-group/validate")
public List<String> validateAttributeGroup(@RequestBody final AttributeDto attributeGroup, @RequestParam(value = "dimension_id") Identifier dimensionId) {
return dbAdapter.validateAttibuteGroup(attributeGroup, dimensionId);
}
@RequestMapping(method = RequestMethod.DELETE, path = "/attribute-group")
public void deleteAttributeGroup(@RequestParam(value = "attribute_group_id") Identifier attributeGroupId) {
dbAdapter.deleteAttributeGroupById(attributeGroupId);
}
@RequestMapping(method = RequestMethod.GET, path = "/all-attribute-groups")
public List<AttributeDto> listAllAttributeGroups() {
List<AttributeDto> groups = dbAdapter.getAttributeGroups();
return groups;
}
@RequestMapping(method = RequestMethod.GET, path = "/dimensionAttributeValues")
public List<String> listAttributeValues (@RequestParam(value = "attribute_id") List<Identifier> ids) {
return dbAdapter.getValuesForAttributes(ids);
}
@RequestMapping(method = RequestMethod.PUT, path = "/hideAttribute")
public void hideAttribute (@RequestBody final Boolean hide, @RequestParam(value = "attribute_id") Identifier id) {
dbAdapter.hideAttributeById(id, hide);
}
}

3
src/de/superx/bianalysis/rest/BiAnalysisApi.java

@ -76,7 +76,7 @@ public class BiAnalysisApi extends RestControllerBase { @@ -76,7 +76,7 @@ public class BiAnalysisApi extends RestControllerBase {
int sachgebietTid = dbAdapter.getSachgebietByFactTableId(facttable_id);
rightsService.checkSachgebiet(sachgebietTid, Right.CREATE_ANALYSIS);
rightsService.checkFactTable(new Identifier(facttable_id), Right.CREATE_ANALYSIS);
return dbAdapter.getDimensions(new Identifier(facttable_id));
return dbAdapter.getDimensionsWithoutHidden(new Identifier(facttable_id));
}
// TODO: zeig in benamung does es sich vllt. um eine reduzierte liste handelt
@ -234,6 +234,7 @@ public class BiAnalysisApi extends RestControllerBase { @@ -234,6 +234,7 @@ public class BiAnalysisApi extends RestControllerBase {
throw new Exception("FEHLER: Berichtskonfiguration konnte nicht gefunden werden.");
}
checkCreateRightForFactTables(reportOpt.get().reportDefinition.factTableIds);
rightsService.checkDeleteRights();
dbAdapter.deleteById(id);
return true;
} catch(Exception e) {

19
src/de/superx/bianalysis/service/BiAnalysisManager.java

@ -15,6 +15,7 @@ import de.superx.bianalysis.ReportMetadata; @@ -15,6 +15,7 @@ import de.superx.bianalysis.ReportMetadata;
import de.superx.bianalysis.ResultBuilder;
import de.superx.bianalysis.ResultMerger;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.models.DimensionAttribute;
import de.superx.bianalysis.sqlgeneration.SQLGenerator;
import de.superx.bianalysis.sqlgeneration.SQLGeneratorTotals;
import de.superx.common.NotYetImplementedException;
@ -22,6 +23,7 @@ import de.superx.rest.model.Item; @@ -22,6 +23,7 @@ import de.superx.rest.model.Item;
import de.superx.rest.model.Result;
import de.superx.rest.model.Row;
import de.superx.rest.model.TreeNode;
import de.superx.spring.service.UserService;
@Service
public class BiAnalysisManager {
@ -31,6 +33,9 @@ public class BiAnalysisManager { @@ -31,6 +33,9 @@ public class BiAnalysisManager {
@Autowired
BiAnalysisRightService biAnalysisRightService;
@Autowired
UserService userService;
public Result createResult(ReportDefinition reportDefinition, DbMetaAdapter dbAdapter) throws Exception {
List<Result> results = new ArrayList<>();
@ -64,7 +69,10 @@ public class BiAnalysisManager { @@ -64,7 +69,10 @@ public class BiAnalysisManager {
private static void checkColLimit(ReportDefinition reportDefinition, DbMetaAdapter dbAdapter, ReportMetadata metadata) throws NotYetImplementedException {
final int POSTGRES_MAX_COL_LIMIT = 1664;
int resultCols = dbAdapter.getColNumbers(metadata.topDimensionAttributes, metadata.filters);
int resultCols = 1;
for (DimensionAttribute dimensionAttribute : metadata.topDimensionAttributes) {
resultCols *= dimensionAttribute.getDimensionAttributeValues().size();
}
resultCols *= reportDefinition.measureIds.size();
if(resultCols > POSTGRES_MAX_COL_LIMIT - 1) {
throw new NotYetImplementedException("FEHLER: Ihre Anfrage überschreitet das Spaltenlimit. "
@ -85,8 +93,13 @@ public class BiAnalysisManager { @@ -85,8 +93,13 @@ public class BiAnalysisManager {
List<ColumnElement> columnElements = ColumnElementBuilder.buildColumnElements(metadata);
List<Item> sqlStatements = new ArrayList<>();
String reportSQL = new SQLGenerator(metadata, columnElements).buildFormattedSqlStatement();
String totalsColumnSQL = SQLGeneratorTotals.generateTotalsColumnSQL(metadata);
String userName = userService.currentUserDetails().getUsername();
String schemaName = "presentation";
if ( DbMetaAdapter.rechteModus == DbMetaAdapter.Rechtekonzept.SchemaBased) {
schemaName = "presentation_" + userName;
}
String reportSQL = new SQLGenerator(metadata, columnElements, schemaName).buildFormattedSqlStatement();
String totalsColumnSQL = SQLGeneratorTotals.generateTotalsColumnSQL(metadata, schemaName);
sqlStatements.add(new Item("noAggregatesSQL", reportSQL));
sqlStatements.add(new Item("totalsColumnSQL", totalsColumnSQL));

7
src/de/superx/bianalysis/service/BiAnalysisRightService.java

@ -48,6 +48,13 @@ public class BiAnalysisRightService { @@ -48,6 +48,13 @@ public class BiAnalysisRightService {
}
}
public void checkDeleteRights() {
SxUser user = (SxUser) userService.currentUserDetails();
if ( user != null && !user.getHis1Rights().contains("RIGHT_CS_BIA_ANALYSIS_DELETE_ANALYSIS")) {
throw new AccessDeniedException("No right to delete analysis");
}
}
public List<Integer> getSachgebiete(Right... rights) {
List<String> values = getRightParamValues(RightParam.TOPIC_AREA, rights);
List<String> valuesForTopics = dbAdapter.getSachgebieteForFactTables(getRightParamValues(RightParam.TOPIC, rights));

561
src/de/superx/bianalysis/service/DbMetaAdapter.java

@ -4,9 +4,12 @@ import java.sql.ResultSet; @@ -4,9 +4,12 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.StringJoiner;
import java.util.stream.Collectors;
@ -16,6 +19,7 @@ import org.springframework.beans.factory.InitializingBean; @@ -16,6 +19,7 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.stereotype.Service;
import de.superx.bianalysis.FaultyMetadataException;
@ -23,6 +27,8 @@ import de.superx.bianalysis.ReportDefinition; @@ -23,6 +27,8 @@ import de.superx.bianalysis.ReportDefinition;
import de.superx.bianalysis.ReportMetadata;
import de.superx.bianalysis.StoredReport;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.models.Condition;
import de.superx.bianalysis.models.CriteriaGroup;
import de.superx.bianalysis.models.Dimension;
import de.superx.bianalysis.models.DimensionAttribute;
import de.superx.bianalysis.models.FactTable;
@ -30,7 +36,6 @@ import de.superx.bianalysis.models.Filter; @@ -30,7 +36,6 @@ import de.superx.bianalysis.models.Filter;
import de.superx.bianalysis.models.Measure;
import de.superx.bianalysis.repository.DimensionAttributeRepository;
import de.superx.bianalysis.repository.DimensionRepository;
import de.superx.bianalysis.repository.FactRepository;
import de.superx.bianalysis.repository.MeasureFilterRepository;
import de.superx.bianalysis.repository.MeasureRepository;
import de.superx.bianalysis.repository.StoredReportRepository;
@ -39,17 +44,22 @@ import de.superx.bianalysis.repository.dto.DimensionDto; @@ -39,17 +44,22 @@ import de.superx.bianalysis.repository.dto.DimensionDto;
import de.superx.bianalysis.repository.dto.FactDto;
import de.superx.bianalysis.repository.dto.MeasureDto;
import de.superx.bianalysis.repository.dto.MeasureFilterDto;
import de.superx.bianalysis.sqlgeneration.AttributeGroupQueryBuilder;
import de.superx.bianalysis.sqlgeneration.SQLGenerator;
import de.superx.bianalysis.sqlgeneration.SqlQuery;
import de.superx.common.NotYetImplementedException;
import de.superx.jdbc.entity.Sachgebiet;
import de.superx.jdbc.entity.Systeminfo;
import de.superx.jdbc.repository.SachgebieteRepository;
import de.superx.jdbc.repository.SysteminfoRepository;
import de.superx.rest.model.Item;
import de.superx.spring.service.UserService;
@Service()
public class DbMetaAdapter implements InitializingBean {
@Autowired
FactRepository factRepository;
// @Autowired
// FactRepository factRepository;
@Autowired
MeasureRepository measureRepository;
@ -72,19 +82,51 @@ public class DbMetaAdapter implements InitializingBean { @@ -72,19 +82,51 @@ public class DbMetaAdapter implements InitializingBean {
@Autowired
SysteminfoRepository systeminfoRepository;
@Autowired
UserService userService;
@Autowired
DataSource dataSource;
private JdbcTemplate jt;
public enum Rechtekonzept {
None,
SchemaBased,
CTEBased
}
public static final Rechtekonzept rechteModus = Rechtekonzept.None;
@Override
public void afterPropertiesSet() throws Exception {
this.jt = new JdbcTemplate(dataSource);
}
private List<FactDto> getFactDtos(String sql) {
List<FactDto> factDtos = new ArrayList<FactDto>();
SqlRowSet result = jt.queryForRowSet(sql);
result.beforeFirst();
while (result.next()) {
FactDto fd = new FactDto();
fd.id = new Identifier(result.getString("id"));
fd.caption = result.getString("caption");
fd.tablename = result.getString("tablename");
fd.defaultRelease = result.getString("default_release");
fd.sachgebiettid = Integer.valueOf(result.getInt("sachgebiettid"));
fd.description = result.getString("description");
factDtos.add(fd);
}
return factDtos;
}
public List<FactTable> getFactTables() throws NotYetImplementedException {
return getFactTables(new ArrayList<>(), new ArrayList<>());
}
public List<FactTable> getFactTables(List<Integer> sachgebieteTids, List<Identifier> facts) throws NotYetImplementedException {
try {
List<FactTable> factTables = this.factRepository.findAll()
List<FactDto> fdtos = getFactDtos("SELECT * FROM " + getSchemaName("metadata") + ".facttable;");
List<FactTable> factTables = fdtos
.stream()
.filter(f -> getSachgebietForFacttable(f.sachgebiettid.intValue()).tid.intValue() != -1)
.filter(f -> sachgebieteTids.isEmpty() || sachgebieteTids.contains(Integer.valueOf(f.sachgebiettid.intValue())))
@ -198,6 +240,23 @@ public class DbMetaAdapter implements InitializingBean { @@ -198,6 +240,23 @@ public class DbMetaAdapter implements InitializingBean {
}
public List<Dimension> getDimensionsWithoutHidden(Identifier factTableId){
List<Dimension> dimensions = new ArrayList<>();
for (Dimension dimension : getDimensions(factTableId)) {
if(dimension.isHidden()) {
continue;
}
dimensions.add(dimension);
List<DimensionAttribute> attributes = new ArrayList<>();
for (DimensionAttribute attribute : dimension.getDimensionAttributes()) {
if(!attribute.isHidden()) {
attributes.add(attribute);
}
}
dimension.setDimensionAttributes(attributes);
}
return dimensions;
}
public List<Dimension> getDimensions(Identifier factTableId) {
List<Dimension> dimensions = new ArrayList<>();
@ -210,15 +269,27 @@ public class DbMetaAdapter implements InitializingBean { @@ -210,15 +269,27 @@ public class DbMetaAdapter implements InitializingBean {
Dimension dimConf = getDimension(new Identifier(dimension.getConformed()));
dimension.conformedCaption = dimConf.getCaption();
dimension.conformedDescription = dimConf.getDescription();
if(attr.isEmpty() && !dimension.getConformed().isEmpty()) {
attr = getAttributesOfDimension(new Identifier(dimension.getConformed()));
for( DimensionAttribute a : attr) {
boolean allAttributesAreCustom = attr.isEmpty() ||
attr.stream().allMatch(a -> "custom".equals(a.getDefaultRelease()));
//TODO dont send just the attribute if all attributes have also a
// criteria Groups
if (allAttributesAreCustom && !dimension.getConformed().isEmpty()) {
// Add conformed attributes
List<DimensionAttribute> conformedAttrs = getAttributesOfDimension(new Identifier(dimension.getConformed()));
conformedAttrs.forEach(a -> {
a.setAttrConformedId(a.getStringId());
a.setHierarchy(dimConf.isHierarchy());
}
a.setCriteriaGroups(a.getCriteriaGroups());
});
attr.addAll(conformedAttrs);
dimension.setDimensionAttributes(attr);
continue;
}
}
for(DimensionAttribute a : attr) {
if(a.getAttrConformedId() != null) {
@ -230,6 +301,11 @@ public class DbMetaAdapter implements InitializingBean { @@ -230,6 +301,11 @@ public class DbMetaAdapter implements InitializingBean {
}
}
dimensions.sort(Comparator.comparing(
Dimension::getPosition,
Comparator.nullsLast(Integer::compareTo)
));
return dimensions;
}
@ -239,7 +315,7 @@ public class DbMetaAdapter implements InitializingBean { @@ -239,7 +315,7 @@ public class DbMetaAdapter implements InitializingBean {
DimensionAttribute attr = getDimensionAttributeById(id);
Dimension dim = getDimension(attr.getDimensionId());
attr.setDimension(dim);
Optional<FactDto> factOpt = factRepository.findById(dim.getId());
Optional<FactDto> factOpt = getFactDtoById(dim.getId());
if(factOpt.isPresent()) {
if(!factTables.contains(factOpt.get().id)) {
continue;
@ -254,6 +330,18 @@ public class DbMetaAdapter implements InitializingBean { @@ -254,6 +330,18 @@ public class DbMetaAdapter implements InitializingBean {
return attributes;
}
private Optional<FactDto> getFactDtoById(Identifier id) {
String sql = String.format("SELECT * FROM %s.facttable WHERE id = '%s';",
getSchemaName("metadata"),
id.toString());
List<FactDto> fdtos = getFactDtos(sql);
Optional<FactDto> factOpt = Optional.ofNullable(null);
if (fdtos.size() > 0) {
factOpt = Optional.ofNullable(fdtos.get(0));
}
return factOpt;
}
public List<String> getDimensionAttributeValues(List<DimensionAttribute> attributes, List<Identifier> factTables) {
List<String> result = new ArrayList<String>();
List<String> tables = new ArrayList<String>();
@ -263,15 +351,25 @@ public class DbMetaAdapter implements InitializingBean { @@ -263,15 +351,25 @@ public class DbMetaAdapter implements InitializingBean {
}
tables.add(attr.getTablename());
for(Identifier factId : factTables) {
FactTable fact = getFactTable(factId);
Dimension dim = getDimension(attr.getDimensionId());
List<String> values = getDimensionAttributeValues(attr, dim, fact);
result.addAll(values);
result.addAll(getValuesOfAttribute(attr, factId, null, null));
}
}
return result;
}
public List<String> getValuesOfAttribute(DimensionAttribute attr, Identifier factId, List<Filter> filtersInDimension, Boolean hideEmptyColumns) {
FactTable fact = getFactTable(factId);
Identifier dimId = getRolePlayingDimensionWithNoAttributes(attr.getId().composedId, factId.composedId);
Dimension dim = null;
if(dimId != null){
dim = getDimension(dimId);
} else {
dim = getDimension(attr.getDimensionId());
}
List<String> values = getDimensionAttributeValues(attr, dim, fact, filtersInDimension, hideEmptyColumns);
return values;
}
public List<List<Object>> getDimensionAttributeValuesHierarchy(Identifier attribute_id) {
DimensionAttribute attr = getDimensionAttributeById(attribute_id);
Dimension dim = getDimension(attr.getDimensionId());
@ -289,20 +387,26 @@ public class DbMetaAdapter implements InitializingBean { @@ -289,20 +387,26 @@ public class DbMetaAdapter implements InitializingBean {
return filters;
}
public List<String> getDimensionAttributeValues(DimensionAttribute attr, Dimension dim, FactTable factTable) {
public List<String> getDimensionAttributeValues(DimensionAttribute attr, Dimension dim, FactTable factTable, List<Filter> filtersInDimension, Boolean hideEmptyColumns) {
String sortOrderColumnName = attr.getSortOrderColumn() != null ? attr.getSortOrderColumn(): attr.getColumnname();
String templateSql =
"SELECT DISTINCT d.%s AS value, d.%s, " +
"array_position(array[%s], d.%s::text) " +
"FROM presentation.%s d";
"FROM " + getSchemaName() + ".%s d";
if(dim != null
&& attr.getFilterSelection() != null
&& attr.getFilterSelection().equals("show_existing_only")) {
/// default
if((factTable != null && attr.getFilterSelection() == null
|| (dim != null && attr.getFilterSelection().equals("show_existing_only"))) && hideEmptyColumns == null
|| hideEmptyColumns != null && hideEmptyColumns.booleanValue() == true) {
String idColumn = "id";
if(attr.getDimIdJoinColumn() != null && !attr.getDimIdJoinColumn().isBlank()) {
idColumn = attr.getDimIdJoinColumn();
}
templateSql += " INNER JOIN presentation." + factTable.getTablename()
+ " f ON d.id = f." + dim.getJoincolumn();
templateSql += " INNER JOIN " + getSchemaName() + "." + factTable.getTablename()
+ " f ON d." + idColumn + " = f." + dim.getJoincolumn();
}
templateSql += " WHERE d.%s IS NOT NULL ";
@ -311,17 +415,37 @@ public class DbMetaAdapter implements InitializingBean { @@ -311,17 +415,37 @@ public class DbMetaAdapter implements InitializingBean {
&& attr.getFilterSelection() != null
&& attr.getFilterSelection().equals("show_range")) {
templateSql += " AND d.id BETWEEN ("
String idColumn = "id";
if(attr.getDimIdJoinColumn() != null && !attr.getDimIdJoinColumn().isBlank()) {
idColumn = attr.getDimIdJoinColumn();
}
templateSql += " AND d." + idColumn + " BETWEEN ("
+ "SELECT MIN(" + dim.getJoincolumn() + ")"
+ " FROM presentation." + factTable.getTablename()
+ " FROM " + getSchemaName() + "." + factTable.getTablename()
+ ") AND ("
+ "SELECT MAX(" + dim.getJoincolumn()
+ " FROM presentation." + factTable.getTablename() + ")";
+ " FROM " + getSchemaName() + "." + factTable.getTablename() + ")";
}
if(filtersInDimension != null) {
boolean first = true;
for (Filter filter : filtersInDimension) {
templateSql += " AND ";
first = true;
for( String filterValue : filter.filterValues) {
if(first) {
first = false;
} else {
templateSql += " OR ";
}
templateSql += " d." + filter.columnname + " = " + "'" + filterValue + "'";
}
}
}
// TODO: sometimes we need DESC
templateSql += " ORDER BY 3, 2 ASC;";
String query = String.format(
templateSql,
attr.getColumnname(),
@ -339,7 +463,7 @@ public class DbMetaAdapter implements InitializingBean { @@ -339,7 +463,7 @@ public class DbMetaAdapter implements InitializingBean {
}
public List<List<Object>> getDimensionAttributeValuesHierarchy(String columname, String tablename) {
String query = "select distinct id, parent_id, "+columname+" from presentation." + tablename;
String query = "select distinct id, parent_id, "+columname+" from " + getSchemaName() + "." + tablename;
List<List<Object>> values = jt.query(query,
new Object[0],
new RowMapper<List<Object>>() {
@ -399,7 +523,7 @@ public class DbMetaAdapter implements InitializingBean { @@ -399,7 +523,7 @@ public class DbMetaAdapter implements InitializingBean {
}
for (int i = 0; i < maxLvl; i++) {
String sql = "select count(*) from presentation." + dimTable + "_hierarchy"
String sql = "select count(*) from " + getSchemaName() + "." + dimTable + "_hierarchy"
+ " where ";
StringJoiner filterJoiner = new StringJoiner(" OR ");
@ -441,7 +565,7 @@ public class DbMetaAdapter implements InitializingBean { @@ -441,7 +565,7 @@ public class DbMetaAdapter implements InitializingBean {
continue;
}
}
String sql = String.format("SELECT count(DISTINCT %s) FROM presentation.%s WHERE %s IS NOT NULL", dimensionAttribute.getColumnname(), dimensionAttribute.getTablename(), dimensionAttribute.getColumnname());
String sql = String.format("SELECT count(DISTINCT %s) FROM " + getSchemaName() + ".%s WHERE %s IS NOT NULL", dimensionAttribute.getColumnname(), dimensionAttribute.getTablename(), dimensionAttribute.getColumnname());
int value = jdbcTemplate.queryForObject(sql, new Object[] {}, Integer.class).intValue();
num *= value;
}
@ -457,7 +581,6 @@ public class DbMetaAdapter implements InitializingBean { @@ -457,7 +581,6 @@ public class DbMetaAdapter implements InitializingBean {
*/
public Identifier getRolePlayingDimensionWithNoAttributes(String attrId, String factId) {
Identifier confDimId = dimensionRepository.findDimensionIdForAttribute(attrId);
System.out.println(attrId);
List<Identifier> preids = dimensionRepository.getRolePlayingIds(confDimId.composedId, factId);
if(preids.size() == 1) {
return preids.get(0);
@ -489,7 +612,14 @@ public class DbMetaAdapter implements InitializingBean { @@ -489,7 +612,14 @@ public class DbMetaAdapter implements InitializingBean {
}
public boolean checkIfFactTableHasMeasure(Identifier measure, Identifier fact) {
return factRepository.hasFactTableMeasure(fact.composedId, measure.composedId);
String sql = String.format("SELECT *"
+ " FROM %s.facttable f"
+ " LEFT JOIN %s.measure m"
+ " ON m.facttable_id = f.id"
+ " WHERE f.id = '%s'"
+ " AND m.id = '%s'", getSchemaName("metadata"), getSchemaName("metadata"), fact.composedId, measure.composedId);
List<FactDto> fdtos = getFactDtos(sql);
return fdtos.size() > 0;
}
public String getLastUpdate(int tid) {
@ -502,7 +632,22 @@ public class DbMetaAdapter implements InitializingBean { @@ -502,7 +632,22 @@ public class DbMetaAdapter implements InitializingBean {
}
public String getFactTableNameMaxBridgeLvl(Identifier fact, Identifier attr) {
return factRepository.getFactTableNameForAttribute(fact.composedId, attr.composedId);
String sql = String.format("SELECT *"
+ " FROM %s.dimension_attribute da"
+ " LEFT JOIN %s.dimension d"
+ " ON d.id = da.dimension_id"
+ " LEFT JOIN %s.facttable f"
+ " ON f.id = d.facttable_id"
+ " WHERE f.id = '%s'"
+ " AND (da.conformed = '%s' OR da.id = '%s')",
getSchemaName("metadata"),
getSchemaName("metadata"),
getSchemaName("metadata"),
fact.composedId,
attr.composedId,
attr.composedId);
List<FactDto> fdtos = getFactDtos(sql);
return fdtos.get(0).tablename;
}
public DataSource getDataSource() {
@ -510,7 +655,7 @@ public class DbMetaAdapter implements InitializingBean { @@ -510,7 +655,7 @@ public class DbMetaAdapter implements InitializingBean {
}
public int getSachgebietByFactTableId(String factTableId) {
Optional<FactDto> fact = this.factRepository.findById(new Identifier(factTableId));
Optional<FactDto> fact = getFactDtoById(new Identifier(factTableId));
if(fact.isPresent()) {
return fact.get().sachgebiettid.intValue();
}
@ -572,6 +717,12 @@ public class DbMetaAdapter implements InitializingBean { @@ -572,6 +717,12 @@ public class DbMetaAdapter implements InitializingBean {
List<DimensionAttribute> attributes = attr.stream()
.map(a -> new DimensionAttribute(a))
.collect(Collectors.toList());
attributes.sort(Comparator.comparing(
DimensionAttribute::getPosition,
Comparator.nullsLast(Integer::compareTo)
));
return attributes;
}
@ -604,13 +755,15 @@ public class DbMetaAdapter implements InitializingBean { @@ -604,13 +755,15 @@ public class DbMetaAdapter implements InitializingBean {
public List<Measure> getMeasures(Identifier factTableId) {
List<Measure> measures = new ArrayList<>();
for (MeasureDto measureDto : measureRepository.findByFactTableId(factTableId)) {
if(!(measureDto.isHidden.booleanValue())) {
measures.add(new Measure(measureDto));
}
}
return measures;
}
public FactTable getFactTable(Identifier factTableId) {
Optional<FactDto> optFact = factRepository.findById(factTableId);
Optional<FactDto> optFact = getFactDtoById(factTableId);
if(optFact.isEmpty()) {
throw new FaultyMetadataException(factTableId, "Fact");
}
@ -621,13 +774,349 @@ public class DbMetaAdapter implements InitializingBean { @@ -621,13 +774,349 @@ public class DbMetaAdapter implements InitializingBean {
* Generates the SQL which returns the max depth for a hierarchy.
* (Unfortunately i can't think of a better way to achieve this without relying on additional SQL)
*/
private static String buildMaxHierarchyLvlSQL(DimensionAttribute bridgeAttr, String factTable, List<Filter> filters, String dimTab) {
private String buildMaxHierarchyLvlSQL(DimensionAttribute bridgeAttr, String factTable, List<Filter> filters, String dimTab) {
String idColumn = bridgeAttr.getDimIdJoinColumn();
if(idColumn == null) {
idColumn = "id";
}
// TODO: filters
String sql = "SELECT MAX(lvl) "
+ "FROM presentation."+ factTable + " fw "
+ "LEFT JOIN presentation."+dimTab+"_hierarchy h "
+ "ON h." + bridgeAttr.getDimIdJoinColumn() +" = fw."+bridgeAttr.getJoincolumn();
+ "FROM " + getSchemaName() + "."+ factTable + " fw "
+ "LEFT JOIN " + getSchemaName() + "."+dimTab+"_hierarchy h "
+ "ON h." + idColumn +" = fw."+bridgeAttr.getJoincolumn();
return sql;
}
public static List<Item> getDefaultReleaseValues(DataSource dataSource) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql =
"SELECT default_release FROM metadata.facttable UNION " +
"SELECT default_release FROM metadata.dimension UNION " +
"SELECT default_release FROM metadata.dimension_attribute UNION " +
"SELECT default_release FROM metadata.measure UNION " +
"SELECT default_release FROM metadata.measure_filter";
List<String> results = jdbcTemplate.queryForList(sql, String.class);
if(!results.contains("custom")) {
results.add("custom");
}
List<Item> items = new ArrayList<Item>();
for (String value : results) {
if (value != null && !value.isEmpty()) {
items.add(new Item(value, value));
}
}
return items;
}
public void saveAllAttributeGroups() {
List<AttributeDto> groups = this.dimensionAttrRepo.findByNonEmptyCriteriaGroup();
for (AttributeDto attribute : groups) {
saveAttributeGroupColumn(attribute, false);
saveAttributeGroupColumn(attribute, true);
}
}
public void saveAttributeGroupColumn(AttributeDto attribute, boolean isSortOrder) {
// Attribute and Dimension for which the attribute group was created
DimensionDto dimension = this.dimensionRepository.findByIdOrThrow(attribute.dimensionId);
String columnname = attribute.columnname;
if(isSortOrder) {
if(attribute.sortOrderColumn != null && !attribute.sortOrderColumn.isBlank()) {
columnname += attribute.sortOrderColumn;
} else {
columnname += "_sort_order";
}
}
String tableName = "presentation." + dimension.tablename;
String columnSql = String.format("""
ALTER TABLE %s DROP COLUMN IF EXISTS %s;
ALTER TABLE %s ADD COLUMN %s text;
""", tableName, columnname, tableName, columnname);
List<CriteriaGroup> groups = attribute.readCriteriaGroups();
SqlQuery query = AttributeGroupQueryBuilder.buildColumnQuery(groups, tableName, isSortOrder, columnname);
jt.execute(columnSql);
jt.update(query.getSql(), query.getParams(), query.getTypes());
}
private static List<String> getAllColumns(List<CriteriaGroup> groups) {
Set<String> columns = new LinkedHashSet<>();
for (CriteriaGroup group : groups) {
if (!group.isElse) {
collectColumns(group.conditions, columns);
}
}
return new ArrayList<>(columns);
}
private static void collectColumns(List<Object> conditions, Set<String> columns) {
for (Object obj : conditions) {
if (Condition.isCondition(obj)) {
Condition condition = Condition.fromMap(obj);
columns.add(condition.column);
} else if (CriteriaGroup.isGroup(obj)) {
CriteriaGroup subgroup = CriteriaGroup.fromMap(obj);
// Recursively collect from nested groups
collectColumns(subgroup.conditions, columns);
}
}
}
public List<String> validateAttibuteGroup(AttributeDto attribute, Identifier dimensionId) {
DimensionDto dimension = this.dimensionRepository.findByIdOrThrow(dimensionId);
String tableName = "presentation." + dimension.tablename;
List<CriteriaGroup> groups = attribute.readCriteriaGroups();
List<String> allColumns = getAllColumns(groups);
String colList = String.join(", ", allColumns);
SqlQuery query = AttributeGroupQueryBuilder.buildValidationQuery(tableName, colList, groups);
List<String> results = jt.query(query.getSql(), query.getParams(), query.getTypes(),
(rs, rowNum) -> {
StringJoiner row = new StringJoiner(", ");
for (String col : allColumns) {
row.add(col +"=" + "\"" + rs.getString(col) + "\"");
}
return row.toString();
});
return results;
}
public AttributeDto saveAttributeGroup(AttributeDto attributeGroup, Identifier dimensionId) {
// if an id is present we edit this attribute and if not we create a new one
boolean editAttribute = attributeGroup.id != null &&
attributeGroup.id.composedId != null &&
!attributeGroup.id.composedId.isEmpty();
// validate that caption is there
if(attributeGroup.caption == null || attributeGroup.caption.isBlank()) {
throw new FaultyMetadataException("Die Bezeichnung des Attributes darf nicht leer sein.");
}
// validate that caption is unique
Optional<AttributeDto> attributeOpt = this.dimensionAttrRepo.findByDimensionId(dimensionId)
.stream().filter(a -> a.caption.equals(attributeGroup.caption)).findFirst();
if(!editAttribute && attributeOpt.isPresent()) {
throw new FaultyMetadataException("Attribut mit der Bezeichnung '"+ attributeGroup.caption + "' existiert bereits.");
}
// create or update attribute
Identifier targetAttributeId = attributeGroup.id; // null for new attributes
Identifier targetDimensionId = dimensionId;
AttributeDto updatedOrCreatedAttribute;
if(editAttribute) {
// If we edit an attribute we need to set its the conformed id (if it is a
// role playing dimension) since we can not be sure that it is included
String conformedDimensionId = this.dimensionAttrRepo.findByIdOrThrow(attributeGroup.id).attrConformedId;
updatedOrCreatedAttribute =
saveAttribute(attributeGroup, targetAttributeId, targetDimensionId, false, new Identifier(conformedDimensionId));
} else {
updatedOrCreatedAttribute =
saveAttribute(attributeGroup, null, targetDimensionId, false, null);
}
// If a dimension is a role playing dimension we want to add the attribute
// to its conformed dimension. But since attributes can belong to a role playing
// dimension without belonging to its conformed dimension we need to first check
// if all columns in the criteria groups occur in the conformed dimension. If
// thats not the case we add the new attribute to only the role playing dimension.
DimensionDto dimension = this.dimensionRepository.findByIdOrThrow(dimensionId);
if(dimension.conformed != null && !dimension.conformed.isBlank()) {
List<String> attributeColumns = this.dimensionAttrRepo
.findByDimensionId(dimensionId)
.stream()
.map(d -> d.columnname)
.collect(Collectors.toList());
List<CriteriaGroup> groups = attributeGroup.readCriteriaGroups();
List<String> allColumns = getAllColumns(groups);
if(attributeColumns.containsAll(allColumns)) {
targetDimensionId = new Identifier(dimension.conformed);
if(editAttribute) {
Identifier confId = new Identifier(updatedOrCreatedAttribute.attrConformedId);
saveAttribute(attributeGroup, confId, targetDimensionId, true, null);
} else {
AttributeDto confAttr = saveAttribute(attributeGroup, null, targetDimensionId, true, null);
updatedOrCreatedAttribute =
saveAttribute(attributeGroup, updatedOrCreatedAttribute.id, dimensionId, false, confAttr.id);
}
}
}
// This block is executed in one of two cases:
// 1. The passed dimension 'dimensionId' is a conformed dimension
// -> we need to create all the role playing attributes for the before
// created conformed attribute
// 2. The passed dimension 'dimensionId' is a role playing dimension for which
// we created a role playing attribute AND a conformed attribute. The
// 'targetDimensionId' was then set to its conformed dimension.
// -> we need to create all the role playing attributes for the before
// created conformed attribute
if(targetDimensionId.namespace.startsWith("conf")) {
List<DimensionDto> rolePlayingDimensions = new ArrayList<DimensionDto>();
for (DimensionDto d : this.dimensionRepository.findAll()) {
if(d.conformed != null && d.conformed.equals(targetDimensionId.composedId)) {
if(d.id.equals(dimensionId)) {
// We passed a role playing dimension to this method and already created
// the attribute for it, therefore we do not need to create it again
continue;
}
rolePlayingDimensions.add(d);
}
}
for (DimensionDto dimensionDto : rolePlayingDimensions) {
Identifier targetAttribute = null;
if(editAttribute) {
// We edited the attribute therefore we also need to edit the role
// playing attributes by providing their id
String conformedId = updatedOrCreatedAttribute.attrConformedId;
if(conformedId == null || conformedId.isBlank()) {
conformedId = updatedOrCreatedAttribute.id.composedId;
}
Optional<AttributeDto> attr = dimensionAttrRepo.findByDimensionIdAndAttrConformedId(dimensionDto.id, conformedId);
if(attr.isPresent()) {
targetAttribute = attr.get().id;
}
}
saveAttribute(attributeGroup, targetAttribute, dimensionDto.id, true, new Identifier(updatedOrCreatedAttribute.attrConformedId));
}
} else {
// a non-conformed non-role-playing dimension
// ignore for now
}
return updatedOrCreatedAttribute;
}
private AttributeDto saveAttribute(AttributeDto attributeGroup, Identifier targetAttributeId, Identifier targetDimensionId, boolean isHidden, Identifier conformedAttribute) {
AttributeDto newAttrDto = new AttributeDto();
newAttrDto.id = targetAttributeId;
newAttrDto.dimensionId = targetDimensionId;
newAttrDto.caption = attributeGroup.caption;
newAttrDto.description = attributeGroup.description;
newAttrDto.columnname = attributeGroup.getColumnNameFromCaption();
newAttrDto.criteriaGroups = attributeGroup.criteriaGroups;
newAttrDto.isHidden = Boolean.valueOf(isHidden);
newAttrDto.defaultRelease = "custom";
if(conformedAttribute != null) {
newAttrDto.attrConformedId = conformedAttribute.composedId;
}
return this.dimensionAttrRepo.save(newAttrDto);
}
public void deleteAttributeGroupById(Identifier attributeId) {
AttributeDto attribute = this.dimensionAttrRepo.findByIdOrThrow(attributeId);
deleteColumnForAttributeGroup(attributeId, attribute.dimensionId);
if(attribute.attrConformedId != null) {
for (AttributeDto rolePlayingAttribute : this.dimensionAttrRepo.findAll()) {
if(rolePlayingAttribute.attrConformedId != null &&
!rolePlayingAttribute.attrConformedId.isBlank() &&
rolePlayingAttribute.attrConformedId.equals(attribute.attrConformedId)) {
this.dimensionAttrRepo.deleteById(rolePlayingAttribute.id);
}
}
this.dimensionAttrRepo.deleteById(attribute.attrConformedId);
} else {
this.dimensionAttrRepo.deleteById(attribute.id);
}
this.dimensionAttrRepo.deleteById(attributeId);
}
public void deleteColumnForAttributeGroup(Identifier attrId, Identifier dimId) {
AttributeDto attribute = this.dimensionAttrRepo.findByIdOrThrow(attrId);
DimensionDto dimension = this.dimensionRepository.findByIdOrThrow(dimId);
String tablename = dimension.tablename;
String columnname = attribute.columnname;
String sql = """
ALTER TABLE presentation.%s
DROP COLUMN IF EXISTS %s;
ALTER TABLE presentation.%s
DROP COLUMN IF EXISTS %s_sort_order;
""".formatted(tablename, columnname, tablename, columnname);
jt.update(sql);
}
public List<AttributeDto> getAttributeGroups() {
return this.dimensionAttrRepo.findByNonEmptyCriteriaGroup();
}
public List<String> getValuesForAttributes(List<Identifier> ids){
List<String> result = new ArrayList<String>();
List<String> tables = new ArrayList<String>();
for (Identifier id : ids) {
DimensionAttribute attr = getDimensionAttributeById(id);
Dimension dim = getDimension(attr.getDimensionId());
attr.setDimension(dim);
if(tables.contains(attr.getTablename())) {
continue;
}
tables.add(attr.getTablename());
String sortOrderColumnName = attr.getSortOrderColumn() != null ? attr.getSortOrderColumn(): attr.getColumnname();
String templateSql =
"SELECT DISTINCT d.%s AS value, d.%s, " +
"array_position(array[%s], d.%s::text) " +
"FROM presentation.%s d";
templateSql += " WHERE d.%s IS NOT NULL ";
// TODO: sometimes we need DESC
templateSql += " ORDER BY 3, 2 ASC;";
String query = String.format(
templateSql,
attr.getColumnname(),
sortOrderColumnName,
DimensionAttribute.specialValueListForSql(),
attr.getColumnname(),
attr.getTablename(),
attr.getColumnname()
);
List<String> values = jt.query(query, (rs, rowNum) -> rs.getString("value"))
.stream().distinct().collect(Collectors.toList());
result.addAll(values);
}
return result;
}
public void hideAttributeById(Identifier id, Boolean hide) {
AttributeDto attributeDto = this.dimensionAttrRepo.findByIdOrThrow(id);
attributeDto.isHidden = hide;
this.dimensionAttrRepo.save(attributeDto);
}
private String getSchemaName() {
return getSchemaName("presentation");
}
private String getSchemaName(String sourceSchema) {
String userName = userService.currentUserDetails().getUsername();
String schemaName = sourceSchema;
if ( DbMetaAdapter.rechteModus == DbMetaAdapter.Rechtekonzept.SchemaBased) {
schemaName = sourceSchema + "_" + userName;
}
return schemaName;
}
}

168
src/de/superx/bianalysis/sqlgeneration/AttributeGroupQueryBuilder.java

@ -0,0 +1,168 @@ @@ -0,0 +1,168 @@
package de.superx.bianalysis.sqlgeneration;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import java.util.StringJoiner;
import de.superx.bianalysis.FaultyMetadataException;
import de.superx.bianalysis.models.Condition;
import de.superx.bianalysis.models.CriteriaGroup;
public class AttributeGroupQueryBuilder {
public final static String DEFAULT_LOGIC_CRITERIA_GROUP = "AND";
public static StringJoiner buildConditionClause(List<String> caseParams, List<Integer> argTypes, CriteriaGroup group) {
StringJoiner joinerConditions = null;
if(group.logic != null) {
joinerConditions = new StringJoiner(" " + group.logic + " ");
} else {
joinerConditions = new StringJoiner(" " + DEFAULT_LOGIC_CRITERIA_GROUP + " ");
}
for (Object obj : group.conditions) {
if (Condition.isCondition(obj)) {
Condition condition = Condition.fromMap(obj);
switch (condition.operator.toUpperCase()) {
case "BETWEEN":
if (condition.values == null || condition.values.size() != 2) {
throw new FaultyMetadataException("BETWEEN requires exactly two values: " + condition.column);
}
joinerConditions.add(condition.column + " BETWEEN ? AND ?");
caseParams.add(condition.values.get(0));
caseParams.add(condition.values.get(1));
argTypes.add(Integer.valueOf(Types.VARCHAR));
argTypes.add(Integer.valueOf(Types.VARCHAR));
break;
case "=", "!=":
joinerConditions.add(condition.column + " " + condition.operator + " ?");
caseParams.add(condition.value);
argTypes.add(Integer.valueOf(Types.VARCHAR));
break;
case "IN", "NOT IN":
StringJoiner inJoiner = new StringJoiner(" ");
inJoiner.add(condition.column);
inJoiner.add(condition.operator + " (");
StringJoiner joiner = new StringJoiner(", ");
for (String value : condition.values) {
joiner.add("?");
caseParams.add(value);
argTypes.add(Integer.valueOf(Types.VARCHAR));
}
inJoiner.add(joiner.toString());
joinerConditions.add(inJoiner.toString() + " )");
break;
case "<", ">", ">=", "<=":
boolean isNumber = true;
try {
Double.parseDouble(condition.value);
} catch (NumberFormatException e) {
isNumber = false;
}
if(isNumber) {
String check = "%s ~ E'^-?\\\\d+$' AND %s::int %s ?";
joinerConditions.add(String.format(check, condition.column, condition.column, condition.operator));
caseParams.add(condition.value);
argTypes.add(Integer.valueOf(Types.INTEGER));
} else {
joinerConditions.add(condition.column + " " + condition.operator + " ?");
caseParams.add(condition.value);
argTypes.add(Integer.valueOf(Types.VARCHAR));
}
break;
default:
throw new FaultyMetadataException("Unsupported operator: " + condition.operator);
}
} else if (CriteriaGroup.isGroup(obj)) {
// Recursively handle nested groups
CriteriaGroup subGroup = CriteriaGroup.fromMap(obj);
StringJoiner subClause = buildConditionClause(caseParams, argTypes, subGroup);
joinerConditions.add("(" + subClause + ")");
}
}
return joinerConditions;
}
public static SqlQuery buildColumnQuery(List<CriteriaGroup> groups, String tableName, boolean isSortOrder, String columnname) {
List<String> caseParams = new ArrayList<>();
StringBuilder caseBuilder = new StringBuilder("CASE ");
List<Integer> argTypes = new ArrayList<>();
int sortOrderColumnNumber = 1;
for (CriteriaGroup group : groups) {
if(group.conditions == null) {
continue;
}
caseBuilder.append("WHEN ");
StringJoiner joinerConditions = buildConditionClause(caseParams, argTypes, group);
caseBuilder.append(joinerConditions.toString());
caseBuilder.append(" THEN ? ");
if(isSortOrder) {
caseParams.add(String.valueOf(sortOrderColumnNumber++));
argTypes.add(Integer.valueOf(Types.INTEGER));
} else {
caseParams.add(group.caption);
argTypes.add(Integer.valueOf(Types.VARCHAR));
}
}
caseBuilder.append("ELSE ? END");
if(isSortOrder) {
caseParams.add(String.valueOf(sortOrderColumnNumber++));
argTypes.add(Integer.valueOf(Types.INTEGER));
} else {
String emptyLabel = groups.stream()
.filter(p -> p.isElse)
.findFirst()
.map(p -> p.caption)
.orElse("n.v.");
caseParams.add(emptyLabel);
argTypes.add(Integer.valueOf(Types.VARCHAR));
}
String updateSql = "UPDATE %s SET %s = %s"
.formatted(tableName, columnname, caseBuilder);
Object[] params = caseParams.toArray();
int[] types = argTypes.stream().mapToInt(Integer::intValue).toArray();
return new SqlQuery(updateSql, params, types);
}
public static SqlQuery buildValidationQuery(String tableName, String colList, List<CriteriaGroup> groups) {
StringJoiner selectStatements = new StringJoiner(" INTERSECT ");
List<String> caseParams = new ArrayList<>();
List<Integer> argTypes = new ArrayList<>();
for (CriteriaGroup group : groups) {
if(group.isElse) {
continue;
}
StringBuilder criteraStmt = new StringBuilder("SELECT " + colList);
StringJoiner selectParams = new StringJoiner(", ");
criteraStmt.append(selectParams);
criteraStmt.append(" FROM ");
criteraStmt.append(tableName);
criteraStmt.append(" WHERE ");
StringJoiner joinerConditions = buildConditionClause(caseParams, argTypes, group);
criteraStmt.append(joinerConditions.toString());
selectStatements.add(criteraStmt);
}
Object[] params = caseParams.toArray();
int[] types = argTypes.stream().mapToInt(Integer::intValue).toArray();
return new SqlQuery(selectStatements.toString(), params, types);
}
}

19
src/de/superx/bianalysis/sqlgeneration/SQLGenerator.java

@ -100,7 +100,16 @@ public class SQLGenerator { @@ -100,7 +100,16 @@ public class SQLGenerator {
public ReportMetadata reportMetadata;
public List<ColumnElement> columnElements;
public char formatSql = ' ';
public static String PRESENTATION_SCHEMA = "presentation_user";
private final static String HIERARCHY_MODEL_SUFFIX = "_hierarchy";
private String presentationSchema = "presentation";
public SQLGenerator(ReportMetadata reportMetadata, List<ColumnElement> columnElements,
String presentationSchema) {
this.reportMetadata = reportMetadata;
this.columnElements = columnElements;
this.presentationSchema = presentationSchema;
}
public SQLGenerator(ReportMetadata reportMetadata, List<ColumnElement> columnElements) {
this.reportMetadata = reportMetadata;
@ -120,7 +129,7 @@ public class SQLGenerator { @@ -120,7 +129,7 @@ public class SQLGenerator {
StringBuilder statement = new StringBuilder();
statement.append("SELECT ");
statement.append(buildSelectSection());
statement.append(formatSql + "FROM presentation." + reportMetadata.factTable.getTablename() );
statement.append(formatSql + "FROM " + presentationSchema + "." + reportMetadata.factTable.getTablename() );
statement.append(buildJoinSection());
statement.append(buildFilterSection());
statement.append(buildGroupBySection());
@ -258,7 +267,7 @@ public class SQLGenerator { @@ -258,7 +267,7 @@ public class SQLGenerator {
}
String join = String.format(
" JOIN presentation.%s AS %s ON %s.%s = %s.%s",
" JOIN " + presentationSchema + ".%s AS %s ON %s.%s = %s.%s",
dimensionTable,
attr.getDimensionTableAlias(),
reportMetadata.factTable.getTablename(),
@ -297,7 +306,7 @@ public class SQLGenerator { @@ -297,7 +306,7 @@ public class SQLGenerator {
for (int i = reportMetadata.minBridgeLvl; i < reportMetadata.maxBridgeLvl; i++) {
resultBuilder
.append(filter.joincolumn)
.append(filter.dimensionTableAlias)
.append(".ancestor_")
.append(filter.columnname)
.append('[').append(i).append("] IN (")
@ -308,9 +317,9 @@ public class SQLGenerator { @@ -308,9 +317,9 @@ public class SQLGenerator {
resultBuilder.append(" OR ");
}
}
if(!resultBuilder.isEmpty()) {
groups.add(resultBuilder.toString());
}
} else {
groups.add(filter.dimensionTableAlias + "." + filter.columnname + " IN (" + filter.getValues() + ")");
}

5
src/de/superx/bianalysis/sqlgeneration/SQLGeneratorTotals.java

@ -69,11 +69,14 @@ public class SQLGeneratorTotals { @@ -69,11 +69,14 @@ public class SQLGeneratorTotals {
}
public static String generateTotalsColumnSQL(ReportMetadata metadata) {
return generateTotalsColumnSQL(metadata, null);
}
public static String generateTotalsColumnSQL(ReportMetadata metadata, String presentationSchema) {
if(metadata.topDimensionAttributes.isEmpty()) {
return "";
}
SQLGenerator generator = new SQLGenerator(metadata);
SQLGenerator generator = new SQLGenerator(metadata, null, presentationSchema);
String finalSQL = buildTotalsColumnSQL(generator, metadata.maxBridgeLvl)
+ generator.buildOrderBySection();
return finalSQL;

18
src/de/superx/bianalysis/sqlgeneration/SqlQuery.java

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
package de.superx.bianalysis.sqlgeneration;
public class SqlQuery {
private final String sql;
private final Object[] params;
private final int[] types;
public SqlQuery(String sql, Object[] params, int[] types) {
this.sql = sql;
this.params = params;
this.types = types;
}
public String getSql() { return sql; }
public Object[] getParams() { return params; }
public int[] getTypes() { return types; }
}

103
src/de/superx/bin/ComponentAdminCLI.java

@ -17,21 +17,22 @@ import org.apache.commons.cli.HelpFormatter; @@ -17,21 +17,22 @@ import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.springframework.batch.core.ExitStatus;
import org.springframework.beans.BeansException;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import de.superx.job.ContainerNode;
import de.superx.rest.EtlJobApi;
import de.superx.rest.model.job.Component;
import de.superx.rest.model.job.JobExecutionStatus;
import de.superx.rest.model.job.StepExecutionStatus;
import de.superx.servlet.SuperXManager;
import de.superx.servlet.SxPools;
import de.superx.spring.HisInOneConfiguration;
import de.superx.spring.batch.His1DataSources;
import de.superx.spring.batch.tasklet.ExecuteSqlScriptTasklet;
import de.superx.spring.cli.config.CLIConfig;
import de.superx.spring.config.BatchConfig;
import de.superx.spring.config.DataJdbcConfiguration;
@ -73,18 +74,24 @@ public class ComponentAdminCLI { @@ -73,18 +74,24 @@ public class ComponentAdminCLI {
+ "this file gets written automatically when starting the web application.";
private static boolean FILESYSTEM = false;
private enum ExitStatus { SUCCESS, FAILURE };
static Logger logger = Logger.getLogger(ComponentAdminCLI.class);
public static void main(String[] args) {
ExitStatus exitStatus = ExitStatus.SUCCESS;
BasicConfigurator.configure(); // initializes console logging to stdout
Logger.getRootLogger().setLevel(Level.INFO);
System.setProperty(SuperXManager.SUPER_X_HISINONE_VERSION, "non-empty-value");
Options options = createOptions();
CommandLine parsedArgs = parseArgs(args, options);
logOptions(parsedArgs);
if (parsedArgs.hasOption("h")) {
printHelp(options);
System.exit(0);
}
} else {
// Optionen
if(parsedArgs.hasOption("f")) {
FILESYSTEM = true;
}
@ -92,9 +99,14 @@ public class ComponentAdminCLI { @@ -92,9 +99,14 @@ public class ComponentAdminCLI {
if(parsedArgs.hasOption("s")) {
initTablesForEmptyDB();
}
if(parsedArgs.hasOption("m")) {
ExecuteSqlScriptTasklet.FAIL_ON_MISSING_SCRIPT = true;
}
if(parsedArgs.hasOption("lg")) {
setBatchLoggerToOneFile();
}
// Ausführung
SuperXManager.initKettleEnv(createContext());
if (parsedArgs.hasOption("la")) {
printAllJobs();
@ -103,23 +115,25 @@ public class ComponentAdminCLI { @@ -103,23 +115,25 @@ public class ComponentAdminCLI {
} else if (parsedArgs.hasOption("le")) {
printEtlJobs();
} else if (parsedArgs.hasOption("i")) {
installComponents(parsedArgs);
exitStatus = installComponents(parsedArgs);
} else if (parsedArgs.hasOption("d")) {
deinstallComponent(parsedArgs);
exitStatus = deinstallComponent(parsedArgs);
} else if (parsedArgs.hasOption("u")) {
upgradeComponents(parsedArgs);
exitStatus = upgradeComponents(parsedArgs);
} else if (parsedArgs.hasOption("ua")) {
upgradeAll();
exitStatus = upgradeAll();
} else if (parsedArgs.hasOption("e")) {
etlJobs(parsedArgs);
exitStatus = etlJobs(parsedArgs);
} else if (parsedArgs.hasOption("r")) {
reloadModule();
exitStatus = reloadModule();
} else if (parsedArgs.hasOption("if")) {
installFunctions(parsedArgs);
exitStatus = installFunctions(parsedArgs);
} else {
printHelp(options);
}
}
System.exit(exitStatus.ordinal());
}
private static void logOptions(CommandLine parsedArgs) {
logger.info("Starting with the following options:");
@ -152,14 +166,13 @@ public class ComponentAdminCLI { @@ -152,14 +166,13 @@ public class ComponentAdminCLI {
}
}
private static void installComponents(CommandLine parsedArgs) {
private static ExitStatus installComponents(CommandLine parsedArgs) {
String[] components = parsedArgs.getOptionValues("i");
String currentComp = null;
try (GenericApplicationContext context = createContext()) {
initSxPools();
EtlJobApi componentApi = context.getBean(EtlJobApi.class);
for (String comp : components) {
try {
currentComp = comp;
Long jobStartStatus = Long.valueOf(-1);
if(!FILESYSTEM) {
@ -177,24 +190,28 @@ public class ComponentAdminCLI { @@ -177,24 +190,28 @@ public class ComponentAdminCLI {
DataSource dataSource = context.getBean(His1DataSources.class).get("eduetl");
SuperXManager.setWebInfFilePath(dataSource);
}
} catch (Exception e) {
logger.error("ERROR installing component " + comp, e);
}
}
} catch (BeansException be) {
handleBeansException(be);
return ExitStatus.FAILURE;
} catch (Exception e) {
handleJobException(e, currentComp);
return ExitStatus.FAILURE;
}
return ExitStatus.SUCCESS;
}
private static void reloadModule() {
private static ExitStatus reloadModule() {
try (GenericApplicationContext context = createContext()){
initSxPools();
initSuperXManager();
EtlJobApi componentApi = context.getBean(EtlJobApi.class);
componentApi.writeJobsToDb();
} catch (Exception e) {
logger.error("Error reloading modules:", e);
return ExitStatus.FAILURE;
}
return ExitStatus.SUCCESS;
}
private static void printHelp(Options options) {
@ -232,7 +249,7 @@ public class ComponentAdminCLI { @@ -232,7 +249,7 @@ public class ComponentAdminCLI {
System.out.println("installed: " + comp.isInstalled());
}
private static void deinstallComponent(CommandLine parsedArgs) {
private static ExitStatus deinstallComponent(CommandLine parsedArgs) {
String comp = parsedArgs.getOptionValue("d");
System.out.println(comp);
try (GenericApplicationContext context = createContext()) {
@ -242,12 +259,15 @@ public class ComponentAdminCLI { @@ -242,12 +259,15 @@ public class ComponentAdminCLI {
handleStartResult(jobStartStatus, componentApi);
} catch (BeansException be) {
handleBeansException(be);
return ExitStatus.FAILURE;
} catch (Exception e) {
handleJobException(e, comp);
return ExitStatus.FAILURE;
}
return ExitStatus.SUCCESS;
}
private static void upgradeComponents(CommandLine parsedArgs) {
private static ExitStatus upgradeComponents(CommandLine parsedArgs) {
String[] components = parsedArgs.getOptionValues("u");
String currentComp = null;
try (GenericApplicationContext context = createContext()) {
@ -264,12 +284,15 @@ public class ComponentAdminCLI { @@ -264,12 +284,15 @@ public class ComponentAdminCLI {
}
} catch (BeansException be) {
handleBeansException(be);
return ExitStatus.FAILURE;
} catch (Exception e) {
handleJobException(e, currentComp);
return ExitStatus.FAILURE;
}
return ExitStatus.SUCCESS;
}
private static void installFunctions(CommandLine parsedArgs) {
private static ExitStatus installFunctions(CommandLine parsedArgs) {
String[] components = parsedArgs.getOptionValues("if");
try (GenericApplicationContext context = createContext()) {
initSxPools();
@ -283,18 +306,20 @@ public class ComponentAdminCLI { @@ -283,18 +306,20 @@ public class ComponentAdminCLI {
}
boolean exitFailure = false;
for (String comp : components) {
componentApi.installModuleFunctions(comp);
exitFailure = componentApi.installModuleFunctions(comp);
}
if(exitFailure) {
System.out.println(("Beim Ausführen einer Aktion ist ein Fehler aufgetreten:"));
System.exit(1);
logger.error(("Beim Ausführen einer Aktion ist ein Fehler aufgetreten."));
return ExitStatus.FAILURE;
}
} catch (BeansException be) {
handleBeansException(be);
return ExitStatus.FAILURE;
}
return ExitStatus.SUCCESS;
}
private static void upgradeAll() {
private static ExitStatus upgradeAll() {
try (GenericApplicationContext context = createContext()) {
initSxPools();
EtlJobApi componentApi = context.getBean(EtlJobApi.class);
@ -302,12 +327,15 @@ public class ComponentAdminCLI { @@ -302,12 +327,15 @@ public class ComponentAdminCLI {
handleStartResult(jobStartStatus, componentApi);
} catch (BeansException be) {
handleBeansException(be);
return ExitStatus.FAILURE;
} catch (Exception e) {
handleJobException(e, null);
return ExitStatus.FAILURE;
}
return ExitStatus.FAILURE;
}
private static void etlJobs(CommandLine parsedArgs) {
private static ExitStatus etlJobs(CommandLine parsedArgs) {
String[] jobIds = parsedArgs.getOptionValues("e");
String currentJobId = null;
try (GenericApplicationContext context = createContext()) {
@ -331,9 +359,12 @@ public class ComponentAdminCLI { @@ -331,9 +359,12 @@ public class ComponentAdminCLI {
}
} catch (BeansException be) {
handleBeansException(be);
return ExitStatus.FAILURE;
} catch (Exception e) {
handleJobException(e, currentJobId);
return ExitStatus.FAILURE;
}
return ExitStatus.SUCCESS;
}
private static void handleStartResult(Long jobStartStatus, EtlJobApi componentApi) {
@ -344,10 +375,12 @@ public class ComponentAdminCLI { @@ -344,10 +375,12 @@ public class ComponentAdminCLI {
JobExecutionStatus es = componentApi.getStatus(jobStartStatus);
if ("FAILED".equals(es.exitStatus.getExitCode())) {
EtlJobApi.outputErrorSummary(es, System.err);
System.exit(1);
}
} catch (Exception e) {
System.err.println(("Beim Ausführen der Aktion ist ein Fehler aufgetreten:"));
e.printStackTrace();
System.exit(1);
}
}
@ -362,23 +395,13 @@ public class ComponentAdminCLI { @@ -362,23 +395,13 @@ public class ComponentAdminCLI {
}
private static boolean isHauptladeroutine(String comp, EtlJobApi etlJob) {
List<Component> installJobs = etlJob.getEtlJobs();
for (Component comp_meta : installJobs) {
if (comp_meta != null && comp_meta.getAbbreviation().equals(comp) && comp_meta.isDatabaseConnected()) {
return true;
}
}
return false;
Component comp_meta = etlJob.getComponentAndConnectorDetails(comp);
return comp_meta != null && comp_meta.isDatabaseConnected();
}
private static boolean isLoadTransform(String comp, EtlJobApi etlJob) {
List<Component> installJobs = etlJob.getEtlJobs();
for (Component comp_meta : installJobs) {
if (comp_meta != null && comp_meta.getAbbreviation().equals(comp) && !comp_meta.isDatabaseConnected()) {
return true;
}
}
return false;
Component comp_meta = etlJob.getComponentAndConnectorDetails(comp);
return comp_meta !=null && !comp_meta.isDatabaseConnected();
}
private static void printAllJobs() {
@ -430,6 +453,8 @@ public class ComponentAdminCLI { @@ -430,6 +453,8 @@ public class ComponentAdminCLI {
options.addOption(opt);
opt = new Option("s", "setup", false, "setup minimal list of tables necessary for kern install");
options.addOption(opt);
opt = new Option("m", "fail-on-missing-script", false, "Fail if a referenced SQL script is missing during execution");
options.addOption(opt);
opt = new Option("la", "list-all", false, "list all available components");
options.addOption(opt);
opt = new Option("li", "list-installables", false, "list all installable components");

3
src/de/superx/bin/ExecuteMask.java

@ -54,6 +54,7 @@ import de.superx.servlet.XmlTransformer; @@ -54,6 +54,7 @@ import de.superx.servlet.XmlTransformer;
import de.superx.spring.cli.config.CLIConfig;
import de.superx.spring.config.BatchConfig;
import de.superx.spring.config.DataJdbcConfiguration;
import de.superx.spring.config.ServiceConfig;
import net.sf.jasperreports.engine.JRException;
public class ExecuteMask {
@ -551,7 +552,7 @@ public class ExecuteMask { @@ -551,7 +552,7 @@ public class ExecuteMask {
* - so it's alright to override some beans via "CLIConfig"
*/
if (APPLICATION_CONTEXT == null) {
APPLICATION_CONTEXT = new AnnotationConfigApplicationContext(BatchConfig.class, DataJdbcConfiguration.class, CLIConfig.class);
APPLICATION_CONTEXT = new AnnotationConfigApplicationContext(BatchConfig.class, DataJdbcConfiguration.class, CLIConfig.class, ServiceConfig.class);
}
return APPLICATION_CONTEXT;
}

5
src/de/superx/bin/fm/EtlStarter.java

@ -236,10 +236,7 @@ public class EtlStarter implements TemplateTransformModel { @@ -236,10 +236,7 @@ public class EtlStarter implements TemplateTransformModel {
@Override
public void beforeExecution(Job ajob, JobEntryCopy jobEntryCopy, JobEntryInterface jobEntryInterface) {
if (jobEntryCopy.isStart()) {
return;
}
String name = jobEntryCopy.getName();
String name = ajob.getJobname() + "_" + jobEntryCopy.getName();
int count = jobEntryCounts.containsKey(name) ? jobEntryCounts.get(name).intValue() + 1 : 1;
jobEntryCounts.put(name, Integer.valueOf(count));
if (jobEntryCounts.get(name).intValue() > 10) {

11
src/de/superx/common/SxUser.java

@ -486,6 +486,17 @@ public class SxUser extends User implements Serializable, UserDetails, GrantedAu @@ -486,6 +486,17 @@ public class SxUser extends User implements Serializable, UserDetails, GrantedAu
return SxUser.this.role;
}
});
// add rights
for (String right : rightsMap.keySet()) {
authorities.add(new GrantedAuthority() {
@Override
public String getAuthority() {
return right;
}
});
}
return authorities;
}

7
src/de/superx/conf/ApplicationConfig.java

@ -15,13 +15,15 @@ public class ApplicationConfig { @@ -15,13 +15,15 @@ public class ApplicationConfig {
enum ValType {
bool,
string
string,
integer
;
}
public enum Key {
init_health_check("init.health_check", ValType.bool)
init_health_check("init.health_check", ValType.bool),
dbt_job_execution_timeout_seconds("dbt.job_execution_timeout_seconds", ValType.integer)
;
@ -46,6 +48,7 @@ public class ApplicationConfig { @@ -46,6 +48,7 @@ public class ApplicationConfig {
switch (valType) {
case bool: return BooleanUtils.toBooleanObject(val);
case string: return val;
case integer: return Integer.valueOf(val);
}
} catch (Exception ex) {
logger.error("Couldn't parse value " + val, ex);

18
src/de/superx/db/HikariSqlExceptionOverride.java

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
package de.superx.db;
import java.sql.SQLException;
import com.zaxxer.hikari.SQLExceptionOverride;
public class HikariSqlExceptionOverride implements SQLExceptionOverride {
@java.lang.Override
public Override adjudicate(SQLException sqlException) {
Override defaultOverride = SQLExceptionOverride.super.adjudicate(sqlException);
String sqlState = sqlException.getSQLState();
// PostgreSQL liefert bei sowas wie "TRUNCATE TABLE...." ohne CASCADE ein "Feature unsupported" (0A000)
// wir wollen aber, dass danach die Connection weiterverwendet werden kann!
return "0A000".equals(sqlState) ? Override.DO_NOT_EVICT : defaultOverride;
}
}

322
src/de/superx/dbt/DbtManager.java

@ -6,8 +6,9 @@ import java.io.BufferedReader; @@ -6,8 +6,9 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.net.URI;
import java.nio.file.Path;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
@ -16,7 +17,6 @@ import java.util.HashMap; @@ -16,7 +17,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.StringJoiner;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@ -26,9 +26,11 @@ import org.apache.commons.lang3.SystemUtils; @@ -26,9 +26,11 @@ import org.apache.commons.lang3.SystemUtils;
import org.jfree.util.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -37,23 +39,19 @@ import com.zaxxer.hikari.HikariDataSource; @@ -37,23 +39,19 @@ import com.zaxxer.hikari.HikariDataSource;
import de.superx.rest.EtlJobApi;
import de.superx.rest.model.job.Component;
import de.superx.servlet.SuperXManager;
import de.superx.spring.HIS1Databases;
@Service
public class DbtManager implements Runnable {
@Autowired
EtlJobApi etlJobApi;
@Autowired
DataSource dataSource;
static Logger logger = LoggerFactory.getLogger(DbtManager.class);
private final boolean isLinux = SystemUtils.IS_OS_LINUX;
private final Path dbtInstallDirUser = Path.of(SuperXManager.getWEB_INFPfad(),
"..",
"dbt",
"dbt_" + (isLinux? "linux" : "windows"))
.toAbsolutePath().normalize();
private final Path dbtInstallDirEnv = Path.of(SuperXManager.getWEB_INFPfad(),
"..",
"dbt",
"dbt_env_" + (isLinux? "linux" : "windows"))
.toAbsolutePath().normalize();
private Path dbtInstallDir;
private String pythonExecutable = "python";
private String user = "postgres";
@ -71,17 +69,18 @@ public class DbtManager implements Runnable { @@ -71,17 +69,18 @@ public class DbtManager implements Runnable {
private List<JsonNode> dbtLog = new ArrayList<>();
private JsonNode stats;
private EtlJobApi etlJobApi;
public DbtManager(final Path projectPath, String select) {
this(projectPath, select, true, false);
private boolean shouldGenerateDoc = true;
public void init(final Path projectPath, String select) {
init(projectPath, select, true, false);
}
public DbtManager(final Path projectPath, String select, boolean test) {
this(projectPath, select, true, test);
public void init(final Path projectPath, String select, boolean test) {
init(projectPath, select, true, test);
}
public DbtManager(final Path projectPath, String select, boolean readDBProperties, boolean test) {
public void init(final Path projectPath, String select, boolean readDBProperties, boolean test) {
if (!projectPath.toFile().isDirectory()) {
throw new RuntimeException(projectPath.toAbsolutePath() + " is no directory!");
}
@ -94,50 +93,95 @@ public class DbtManager implements Runnable { @@ -94,50 +93,95 @@ public class DbtManager implements Runnable {
throw new RuntimeException(projectPath + " is no dbt project directory (no profiles.yml found)!");
}
this.projectPath = projectPath.toAbsolutePath().normalize();
this.pythonExecutable = getPython3ExecutableName();
this.dbtInstallDir = DbtUtils.getDbtInstallDir();
this.pythonExecutable = DbtUtils.getPython3ExecutableName();
this.select = select;
this.test = test;
// reset state members
this.process = null;
this.dbtLog = new ArrayList<>();
this.runtimeErrors = "";
this.modelCount = 0;
this.stats = null;
if(this.test) {
this.shouldGenerateDoc = false;
}
// TODO: there has to be a better way
if (readDBProperties) {
try {
Map<String,String> eduetl = HIS1Databases.getConnection("eduetl");
user = eduetl.get("user");
password = eduetl.get("password");
host = eduetl.get("host");
port = eduetl.get("dbserverport");
db = eduetl.get("database");
HikariDataSource eduetl = (HikariDataSource) dataSource;
String jdbcUrl = eduetl.getJdbcUrl();
String cleanUrl = jdbcUrl.substring(5); // remove "jdbc:"
URI uri = URI.create(cleanUrl);
String eduetlHost = uri.getHost();
int eduetlPort = uri.getPort(); // returns -1 if no port specified
String eduetlFinalPort = String.valueOf(eduetlPort != -1 ? Integer.valueOf(port) : "5432");
String eduetlUsername = "";
String eduetlDbName = "";
try(Connection con = dataSource.getConnection()){
eduetlUsername = con.getMetaData().getUserName();
eduetlDbName = con.getCatalog();
}
this.user = eduetlUsername;
this.password = eduetl.getPassword();
this.host = eduetlHost;
this.port = eduetlFinalPort;
this.db = eduetlDbName;
} catch (Exception e) {
throw new RuntimeException("Couldn't get connection info for eduetl", e);
}
}
if (dbtInstallDirEnv.toFile().isDirectory()) {
dbtInstallDir = dbtInstallDirEnv;
} else {
dbtInstallDir = dbtInstallDirUser;
}
}
@Override
public void run() {
Path dbt = getDbtPath();
List<String> pbCommand = new ArrayList<String>(Arrays.asList(pythonExecutable, dbt.toString(), "--log-format", "json", "--no-use-colors"));
if(!isLinux && dbtInstallDirEnv.toFile().isDirectory()) {
// On Windows, when using a virtual environment, we can run the dbt executable directly
// without invoking it through the python interpreter
pbCommand.remove(0);
private List<String> buildDbtCommand() {
String dbt = DbtUtils.getDbtBinaryPath().toString();
logger.info("Project path: "+ projectPath.toString());
logger.info("dbt_bin: "+ dbt.toString());
List<String> baseCommand = new ArrayList<String>(Arrays.asList(
pythonExecutable,
dbt,
"--log-format",
"json",
"--no-use-colors"
));
if(!isLinux && DbtUtils.isVirtualEnvInstalled()) {
// On Windows, when using a virtual environment, we must run the dbt
// executable directly without invoking it through the python interpreter
baseCommand.remove(0);
}
if(this.test) {
pbCommand.add("test");
baseCommand.add("test");
} else {
pbCommand.addAll(Arrays.asList("build", "--resource-types", "snapshot", "seed", "model"));
baseCommand.addAll(Arrays.asList(
"build",
"--resource-types",
"snapshot",
"seed",
"model"
));
}
if(select != null && !select.isBlank()) {
pbCommand.add("--select");
pbCommand.add(select);
baseCommand.add("--select");
baseCommand.add(select);
}
logger.info("Project path: "+ projectPath.toString());
logger.info("dbt_bin: "+ dbt.toString());
return baseCommand;
}
@Override
public void run() {
List<String> pbCommand = buildDbtCommand();
logger.info(Arrays.toString(pbCommand.toArray()));
ProcessBuilder p = new ProcessBuilder(pbCommand).directory(projectPath.toFile());
Map<String,String> env = getComponentStatus();
@ -164,14 +208,14 @@ public class DbtManager implements Runnable { @@ -164,14 +208,14 @@ public class DbtManager implements Runnable {
var line = "";
ObjectMapper objectMapper = new ObjectMapper();
while((line = reader.readLine()) != null) {
logger.info(line);
JsonNode node = objectMapper.readTree(line.getBytes());
logger.info(node.get("info").get("msg").asText());
JsonNode data = node.get("data");
if (data.get("stats") != null) {
stats = node;
} else {
if (data.has("index")) {
modelCount = data.get("index").asInt();
modelCount = Math.max(modelCount, data.get("index").asInt());
}
dbtLog.add(node);
}
@ -180,20 +224,12 @@ public class DbtManager implements Runnable { @@ -180,20 +224,12 @@ public class DbtManager implements Runnable {
logger.error("Couldn't start dbt run!", e);
this.runtimeErrors = ("Couldn't start dbt run!\n" + e.getMessage());
} finally {
if(!this.test) {
if(this.shouldGenerateDoc) {
generateDocs(env);
}
}
}
public String getPythonExecutableName() {
return pythonExecutable;
}
public Path getDbtBinDir() {
return Path.of(dbtInstallDir.toString(), "bin");
}
private Map<String,String> getComponentStatus() {
Map<String,String> result = new HashMap<>();
EtlJobApi api = etlJobApi == null ? SuperXManager.getBean(null, EtlJobApi.class) : etlJobApi;
@ -244,13 +280,9 @@ public class DbtManager implements Runnable { @@ -244,13 +280,9 @@ public class DbtManager implements Runnable {
return success;
}
public String getPythonVersion() {
return getPythonVersion(pythonExecutable);
}
public void generateDocs(Map<String,String> env) {
try {
Path dbt = getDbtPath();
Path dbt = DbtUtils.getDbtBinaryPath();
List<String> pbCommand = new ArrayList<String>(Arrays.asList(pythonExecutable, dbt.toString(), "--no-use-colors", "docs", "generate"));
if(select != null && !select.isBlank()) {
pbCommand.add("--select");
@ -272,40 +304,53 @@ public class DbtManager implements Runnable { @@ -272,40 +304,53 @@ public class DbtManager implements Runnable {
}
}
public static String getPythonVersion(String executable) {
public int getNodeCount() {
int lineNr = 0;
try {
ProcessBuilder p = new ProcessBuilder(executable, "--version");
p.redirectErrorStream(true);
Process process = p.start();
try (InputStreamReader input = new InputStreamReader(process.getInputStream());
BufferedReader br = new BufferedReader(input)) {
String output = br.lines().collect(Collectors.joining("\n"));
return output.substring(output.indexOf(' ') + 1);
}
} catch (Exception iox) {
throw new RuntimeException("Couldn't execute " + executable
+ ". Is Python 3 installed and in PATH?", iox);
Path dbt = DbtUtils.getDbtBinaryPath();
List<String> pbCommand = new ArrayList<String>(Arrays.asList(
pythonExecutable, dbt.toString(),
"ls",
"--resource-types"
));
if(this.test) {
pbCommand.add("test");
} else {
pbCommand.addAll(Arrays.asList(
"snapshot",
"seed",
"model"
));
}
if(select != null && !select.isBlank()) {
pbCommand.add("--select");
pbCommand.add(select);
}
public static String getPython3ExecutableName() {
String[] executables = {"python", "python3", "python.bat"};
String version = "";
for (String executable : executables) {
try {
version = getPythonVersion(executable);
if (version.startsWith("3")) {
return executable;
ProcessBuilder pb = new ProcessBuilder(pbCommand).directory(projectPath.toFile());
Map<String,String> env = getComponentStatus();
env.putAll(getDbtEnvironment());
pb.environment().putAll(env);
pb.redirectErrorStream(true);
Process p = pb.start();
final InputStream stdoutInputStream = p.getInputStream();
final BufferedReader stdoutReader =
new BufferedReader(new InputStreamReader(stdoutInputStream));
String line = "";
while ((line = stdoutReader.readLine()) != null) {
if (!line.matches("(\\w+\\.)+\\w+$")) {
continue;
}
} catch (Exception ignored) {
// Intentionally ignoring exceptions here!
lineNr += 1;
logger.info(line);
}
} catch (Exception iox) {
throw new RuntimeException("Couldn't run dbt ls ", iox);
}
throw new RuntimeException("No Python 3 found in PATH!");
return lineNr;
}
public Map<String,String> getDbtEnvironment() {
Map<String,String> env = Map.ofEntries(
entry("PYTHONUSERBASE", dbtInstallDir.toString()),
@ -323,17 +368,6 @@ public class DbtManager implements Runnable { @@ -323,17 +368,6 @@ public class DbtManager implements Runnable {
return List.copyOf(this.dbtLog);
}
private Path getDbtPath() {
Path dbt = Path.of(getDbtBinDir().toString(), "dbt");
if (!isLinux && !dbtInstallDirEnv.toFile().isDirectory()) {
String[] majorMinor=getPythonVersion().split("\\.");
dbt = Path.of(dbtInstallDir.toString(), "Python" + majorMinor[0] + majorMinor[1], "Scripts", "dbt.exe").toAbsolutePath();
} else if (!isLinux) {
dbt = Path.of(dbtInstallDir.toString(), "Scripts", "dbt.exe").toAbsolutePath();
}
return dbt;
}
private static Optional<JsonNode> findFirstOccurence(String name, JsonNode searchNode) {
JsonNode parent = searchNode.findParent(name);
JsonNode result = parent != null ? parent.get(name) : null;
@ -368,11 +402,10 @@ public class DbtManager implements Runnable { @@ -368,11 +402,10 @@ public class DbtManager implements Runnable {
});
}
private static Map<String,String> getUnloadParams() {
DataSource ds = SuperXManager.getBean("dataSource", HikariDataSource.class);
private Map<String,String> getUnloadParams() {
Map<String,String> result = new HashMap<>();
if (ds != null) {
JdbcTemplate jt = new JdbcTemplate(ds);
if (dataSource != null) {
JdbcTemplate jt = new JdbcTemplate(dataSource);
result = jt.query("SELECT param_id, param_val FROM unload_params", new ResultSetExtractor<Map<String,String>>() {
@Override
public Map<String, String> extractData(ResultSet rs) throws SQLException, DataAccessException {
@ -395,50 +428,14 @@ public class DbtManager implements Runnable { @@ -395,50 +428,14 @@ public class DbtManager implements Runnable {
return result;
}
private static Path getDbtInstallDir() {
boolean isLinux = SystemUtils.IS_OS_LINUX;
Path dbtInstallDir = null;
final Path dbtInstallDirUser = Path.of(SuperXManager.getWEB_INFPfad(),
"..",
"dbt",
"dbt_" + (isLinux? "linux" : "windows"))
.toAbsolutePath().normalize();
final Path dbtInstallDirEnv = Path.of(SuperXManager.getWEB_INFPfad(),
"..",
"dbt",
"dbt_env_" + (isLinux? "linux" : "windows"))
.toAbsolutePath().normalize();
if (dbtInstallDirEnv.toFile().isDirectory()) {
dbtInstallDir = dbtInstallDirEnv;
} else {
dbtInstallDir = dbtInstallDirUser;
}
return dbtInstallDir;
}
public static String getBinInDbtDir(String bin) {
boolean isLinux = SystemUtils.IS_OS_LINUX;
String pythonExecutable = DbtManager.getPython3ExecutableName();
String version = DbtManager.getPythonVersion(pythonExecutable);
Path dbtInstallDir = getDbtInstallDir();
Path sl = Path.of(dbtInstallDir.toString(), "bin", bin);
if (!isLinux) {
String[] majorMinor=version.split("\\.");
sl = Path.of(dbtInstallDir.toString(), "Python" + majorMinor[0] + majorMinor[1], "Scripts", bin + ".exe").toAbsolutePath();
}
return sl.toString();
}
public static List<String> getStagingTables(String select) {
try {
Path dbtProjectDir = Path.of(SuperXManager.getWEB_INFPfad(), "..", "dbt", "projects", "hisinone", "transform");
ProcessBuilder builder = new ProcessBuilder(DbtManager.getPython3ExecutableName(), getBinInDbtDir("dbt"), "ls", "--select", select, "--output", "name").directory(dbtProjectDir.toFile());
ProcessBuilder builder = new ProcessBuilder(DbtUtils.getPython3ExecutableName(), DbtUtils.getDbtBinaryPath().toString(), "ls", "--select", select, "--output", "name").directory(dbtProjectDir.toFile());
Map<String, String> env = builder.environment();
env.put("COMP_RES_INSTALLED", "true");
env.put("DBT_DB", "eduetl");
env.put("PYTHONUSERBASE", getDbtInstallDir().toString());
env.put("PYTHONUSERBASE", DbtUtils.getDbtInstallDir().toString());
Process process = builder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
CompletableFuture<String> errFuture = readOutStream(process.getErrorStream());
@ -462,49 +459,8 @@ public class DbtManager implements Runnable { @@ -462,49 +459,8 @@ public class DbtManager implements Runnable {
return null;
}
public static void checkPythonCompatability(String pythonVersion) throws UnsupportedPythonVersionException{
try {
Path dbtInstallLib = Path
.of(SuperXManager.getWEB_INFPfad(), "..", "dbt", "dbt_linux", "lib")
.toAbsolutePath().normalize();
List<Path> files = Files
.list(dbtInstallLib)
.collect(Collectors.toList());
List<String> supportedVersions = new ArrayList<>();
for (Path path : files) {
String version = path.toString().split("python")[1];
supportedVersions.add(version);
}
String[] splitVersion = pythonVersion.split("\\.");
String userVersion = splitVersion[0] + "." + splitVersion[1];
if (!supportedVersions.contains(userVersion)) {
String errorMessage = "Unsupported version of Python: " + userVersion + "."
+ "Supported Versions: ";
StringJoiner joiner = new StringJoiner(", ");
for (String version : supportedVersions) {
joiner.add(version);
}
errorMessage += joiner.toString();
throw new UnsupportedPythonVersionException(errorMessage);
}
} catch (UnsupportedPythonVersionException e) {
throw e;
} catch (Exception e) {
// dont throw all other exceptions e.g. IOExceptions
e.printStackTrace();
}
}
// TODO This is a workaround to be able to "inject"
// Rest-API from Unit tests
// Maybe think about making DbtManager a bean?
// But how to handle the state / configuration done in constructors?
public void setEtlJobApi(EtlJobApi etlJobApi) {
this.etlJobApi = etlJobApi;
public void setShouldGenerateDoc(boolean shouldGenerateDoc) {
this.shouldGenerateDoc = shouldGenerateDoc;
}

59
src/de/superx/dbt/DbtMetrics.java

@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
package de.superx.dbt;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DbtMetrics {
private static final String METRICS_LINE = "Found (\\d+) models, (\\d+) snapshots, (\\d+) data tests, (\\d+) seeds,"
+ " (\\d+) sources, (\\d+) macros";
private static final Pattern METRICS_PATTERN = Pattern.compile(METRICS_LINE);
private int models;
private int snapshots;
private int tests;
private int seeds;
private int sources;
private int macros;
public DbtMetrics(String metricLine) {
Matcher metricsMatcher = METRICS_PATTERN.matcher(metricLine);
if (metricsMatcher.find()) {
models = Integer.parseInt(metricsMatcher.group(1));
snapshots = Integer.parseInt(metricsMatcher.group(2));
tests = Integer.parseInt(metricsMatcher.group(3));
seeds = Integer.parseInt(metricsMatcher.group(4));
sources = Integer.parseInt(metricsMatcher.group(5));
macros = Integer.parseInt(metricsMatcher.group(6));
}
}
public int getExecCount(boolean isTests) {
return isTests ? tests : models + snapshots + seeds;
}
public int getModels() {
return models;
}
public int getSnapshots() {
return snapshots;
}
public int getTests() {
return tests;
}
public int getSeeds() {
return seeds;
}
public int getSources() {
return sources;
}
public int getMacros() {
return macros;
}
}

176
src/de/superx/dbt/DbtUtils.java

@ -0,0 +1,176 @@ @@ -0,0 +1,176 @@
package de.superx.dbt;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.StringJoiner;
import java.util.stream.Collectors;
import org.apache.commons.lang3.SystemUtils;
import de.superx.servlet.SuperXManager;
import de.superx.util.PathAndFileUtils;
public class DbtUtils {
private final static boolean isLinux = SystemUtils.IS_OS_LINUX;
public static String getPythonVersion() {
return getPythonVersionForExecutable(getPython3ExecutableName());
}
public static String getPython3ExecutableName() {
String[] executables = {"python", "python3", "python.bat"};
for (String executable : executables) {
try {
String version = getPythonVersionForExecutable(executable);
if (version.startsWith("3")) {
return executable;
}
} catch (Exception ignored) {
// Continue to next executable
}
}
throw new RuntimeException("No Python 3 installation found in PATH!");
}
public static String getPythonVersionForExecutable(String executable) {
try {
ProcessBuilder p = new ProcessBuilder(executable, "--version");
p.redirectErrorStream(true);
Process process = p.start();
try (InputStreamReader input = new InputStreamReader(process.getInputStream());
BufferedReader br = new BufferedReader(input)) {
String output = br.lines().collect(Collectors.joining("\n"));
return output.substring(output.indexOf(' ') + 1);
}
} catch (Exception iox) {
throw new RuntimeException("Couldn't execute " + executable
+ ". Is Python 3 installed and in PATH?", iox);
}
}
private static Path getDbtFolder() {
return Path.of(SuperXManager.getWEB_INFPfad(), "..", "dbt");
}
private static Path getDbtInstallLib() {
return Path.of(getDbtFolder().toString(), "dbt_linux", "lib");
}
public static Path getDbtProjectDirectory() {
return Path.of(getDbtFolder().toString(), "projects", "hisinone", "transform");
}
public static Path getBiAnalysisMetadataFolder() {
return Path.of(getDbtFolder().toString(), "projects", "hisinone", "bianalysis_metadata");
}
public static Path getVirtualEnvPath() {
if(isLinux) {
return Path.of(getDbtFolder().toString(), "dbt_env_linux");
}
return Path.of(getDbtFolder().toString(), "dbt_env_windows");
}
public static Path getDbtInstallDir() {
if(isVirtualEnvInstalled()) {
return getVirtualEnvPath();
}
String folder = "dbt_windows";
if(isLinux) {
folder = "dbt_linux";
}
return Path.of(getDbtFolder().toString(), folder);
}
public static boolean isVirtualEnvInstalled() {
return getVirtualEnvPath().toFile().isDirectory();
}
public static Path getDbtBinaryFolder() {
if(isLinux) {
return Path.of(getDbtInstallDir().toString(), "bin");
}
if(isVirtualEnvInstalled()) {
return Path.of(getDbtInstallDir().toString(), "Scripts");
}
String pythonVersion = getPythonVersion();
String[] parts = pythonVersion.split("\\.");
String pythonFolderName = "Python" + parts[0] + parts[1];
return Path.of(getDbtInstallDir().toString(), pythonFolderName, "Scripts");
}
public static Path getDbtBinaryInBinaryFolder(String binary) {
String bin = binary;
if(!isLinux) {
bin += ".exe";
}
return Path.of(getDbtBinaryFolder().toString(), bin);
}
public static Path getDbtBinaryPath() {
if(isLinux) {
return Path.of(getDbtBinaryFolder().toString(), "dbt");
}
return Path.of(getDbtBinaryFolder().toString(), "dbt.exe");
}
public static void checkPythonCompatability() throws UnsupportedPythonVersionException{
try {
String pythonVersion = getPythonVersion();
Path dbtInstallLib = getDbtInstallLib();
List<Path> files = Files
.list(dbtInstallLib)
.collect(Collectors.toList());
List<String> supportedVersions = new ArrayList<>();
for (Path path : files) {
String version = path.toString().split("python")[1];
supportedVersions.add(version);
}
String[] splitVersion = pythonVersion.split("\\.");
String userVersion = splitVersion[0] + "." + splitVersion[1];
if (!supportedVersions.contains(userVersion)) {
String errorMessage = "Unsupported version of Python: " + userVersion + "."
+ "Supported Versions: ";
StringJoiner joiner = new StringJoiner(", ");
for (String version : supportedVersions) {
joiner.add(version);
}
errorMessage += joiner.toString();
throw new UnsupportedPythonVersionException(errorMessage);
}
} catch (UnsupportedPythonVersionException e) {
throw e;
} catch (Exception e) {
// dont throw all other exceptions e.g. IOExceptions
e.printStackTrace();
}
}
public static void main(String[] args) {
SuperXManager.setWEB_INFPfad(PathAndFileUtils.getWebinfPath());
DbtManager.getStagingTables("+fact_application");
System.out.println(getPythonVersion());
System.out.println(getPython3ExecutableName());
System.out.println(getDbtFolder());
System.out.println(getDbtProjectDirectory());
System.out.println(getDbtBinaryFolder());
System.out.println(getDbtBinaryPath());
}
}

52
src/de/superx/etl/biad/DBSource.java

@ -6,15 +6,14 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -6,15 +6,14 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import de.superx.job.ExtractAction;
@JsonDeserialize(using = DBSourceDeserializer.class)
public class DBSource {
public String name;
public String schema;
public String database;
public List<ExtractAction> tables;
private String name;
private String schema;
private String database;
private List<SourceTable> tables;
public DBSource(String name, String schema, String database, List<ExtractAction> tables) {
public DBSource(String name, String schema, String database, List<SourceTable> tables) {
super();
this.name = name;
this.schema = schema;
@ -22,4 +21,45 @@ public class DBSource { @@ -22,4 +21,45 @@ public class DBSource {
this.tables = tables;
}
public DBSource(String name, String schema, String database) {
super();
this.name = name;
this.schema = schema;
this.database = database;
}
public DBSource() { }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSchema() {
return schema;
}
public void setSchema(String schema) {
this.schema = schema;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
public List<SourceTable> getTables() {
return tables;
}
public void setTables(List<SourceTable> tables) {
this.tables = tables;
}
}

59
src/de/superx/etl/biad/DBSourceDeserializer.java

@ -1,59 +0,0 @@ @@ -1,59 +0,0 @@
package de.superx.etl.biad;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.TreeNode;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.node.IntNode;
import de.superx.job.ExtractAction;
import de.superx.spring.service.EntityJobDescriptionSource;
import de.superx.util.PathAndFileUtils;
public class DBSourceDeserializer extends StdDeserializer<DBSource> {
public DBSourceDeserializer() { this(null); }
public DBSourceDeserializer(Class<?> vc) { super(vc); }
@Override
public DBSource deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
String name = node.get("name").asText();
String database = node.get("database").asText();
String schema = node.get("schema").asText();
List<ExtractAction> tables = new ArrayList<>();
for (JsonNode tableNode : node.get("tables")) {
if(tableNode.has("custom")) {
// a custom table is created and filled in its own sql script
continue;
}
String tableName = tableNode.get("name").asText();
String unlFile = PathAndFileUtils.buildUnlFile(EntityJobDescriptionSource.BIAD_COMPONENT_ABBREVIATION, tableName);
String extractionScript = "";
if(tableNode.has("extraction-script")) {
extractionScript = tableNode.get("extraction-script").asText();
}
String extractionExclude = "";
if(tableNode.has("extraction-exclude")) {
extractionExclude = tableNode.get("extraction-exclude").asText();
}
tables.add(new ExtractAction(tableName, tableName, extractionScript, extractionExclude, schema, unlFile,
"hisinone", Integer.valueOf(440), null));
}
return new DBSource(name, database, schema, tables);
}
}

60
src/de/superx/etl/biad/SourceTable.java

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
package de.superx.etl.biad;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SourceTable {
private String name;
@JsonProperty("extraction-include")
private List<String> extractionInclude;
@JsonProperty("extraction-script")
private String extractionScript;
private Boolean manual;
public SourceTable(){ }
public SourceTable(String tableName, List<String> list) {
this.name = tableName;
this.extractionInclude = list;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getExtractionInclude() {
return extractionInclude;
}
public void setExtractionInclude(List<String> extractionInclude) {
this.extractionInclude = extractionInclude;
}
public String getExtractionScript() {
return extractionScript;
}
public void setExtractionScript(String extractionScript) {
this.extractionScript = extractionScript;
}
public Boolean isManual() {
return this.manual;
}
public void setManual(Boolean manual) {
this.manual = manual;
}
}

22
src/de/superx/etl/biad/SourcesYML.java

@ -11,8 +11,10 @@ import com.fasterxml.jackson.databind.json.JsonMapper; @@ -11,8 +11,10 @@ import com.fasterxml.jackson.databind.json.JsonMapper;
public class SourcesYML {
public Integer version;
public List<DBSource> sources;
private Integer version;
private List<DBSource> sources;
public SourcesYML() {}
public static SourcesYML fromJson(File jsonFile) {
ObjectMapper mapper = JsonMapper.builder().findAndAddModules().build();
@ -29,4 +31,20 @@ public class SourcesYML { @@ -29,4 +31,20 @@ public class SourcesYML {
return yml;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
public List<DBSource> getSources() {
return sources;
}
public void setSources(List<DBSource> sources) {
this.sources = sources;
}
}

4
src/de/superx/jdbc/entity/Sichten.java

@ -48,10 +48,10 @@ public class Sichten extends EntityBase { @@ -48,10 +48,10 @@ public class Sichten extends EntityBase {
@DynamicFieldType(label = "Quelle", editControlType = FieldType.TextArea, visibleInSimplifiedForm = false)
public String quelle;
@DynamicFieldType(label = "Aktiv", editControlType = FieldType.Select)
//Als Ja/nein Auswahl
@DynamicFieldType(label = "Aktiv", editControlType = FieldType.Select, columnType = ColumnType.BooleanColumn)
public Integer aktiv;
//Als Ja/nein Auswahl
@DynamicFieldType(label = "Button 'Stand' anzeigen", visibleInSimplifiedForm = false)
public Integer standbutton;

1
src/de/superx/jdbc/model/TableRef.java

@ -9,6 +9,7 @@ import java.lang.annotation.Target; @@ -9,6 +9,7 @@ import java.lang.annotation.Target;
@Target(ElementType.FIELD)
public @interface TableRef {
public String table();
public String schema() default "public";
public String keyField();
public String labelField();
}

19
src/de/superx/jdbc/repository/BiaAdminCrudRepository.java

@ -10,6 +10,10 @@ import java.util.Optional; @@ -10,6 +10,10 @@ import java.util.Optional;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.NoRepositoryBean;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import de.superx.bianalysis.metadata.Identifier;
import de.superx.bianalysis.repository.dto.DimensionDto;
import de.superx.jdbc.entity.Entity;
@ -156,6 +160,13 @@ public interface BiaAdminCrudRepository<T extends Entity> extends CrudRepository @@ -156,6 +160,13 @@ public interface BiaAdminCrudRepository<T extends Entity> extends CrudRepository
return de.memtext.util.DateUtils.formatUS(new java.sql.Date(((java.util.Date) defaultValue).getTime()));
} else if (controlType == FieldType.Select && defaultValue != null) {
return defaultValue.toString();
} else if(controlType == FieldType.TextArea && defaultValue instanceof ArrayNode) {
try {
return new ObjectMapper().writeValueAsString((ArrayNode) defaultValue);
} catch (JsonProcessingException e) {
e.printStackTrace();
return e.getMessage();
}
}
if (defaultValue instanceof String) {
return defaultValue.toString().trim();
@ -170,8 +181,12 @@ public interface BiaAdminCrudRepository<T extends Entity> extends CrudRepository @@ -170,8 +181,12 @@ public interface BiaAdminCrudRepository<T extends Entity> extends CrudRepository
if (fieldType != null && fieldType.columnType() == ColumnType.BooleanColumn) {
items.add(new Item("Nein", "0"));
items.add(new Item("Ja", "1"));
} else if (annotation != null) {
items = brs.getItemsFromKeytable(annotation.table(), annotation.labelField(), annotation.keyField());
} else if (fieldType != null && fieldType.columnType() == ColumnType.BooleanColumnBiAnalysis) {
items.add(new Item("Nein", "false"));
items.add(new Item("Ja", "true"));
}
else if (annotation != null) {
items = brs.getItemsFromKeytable(annotation.schema(), annotation.table(), annotation.labelField(), annotation.keyField());
}
return items;
}

4
src/de/superx/jdbc/repository/HoererstatusRepository.java

@ -6,8 +6,8 @@ import org.springframework.data.repository.RepositoryDefinition; @@ -6,8 +6,8 @@ import org.springframework.data.repository.RepositoryDefinition;
import de.superx.jdbc.entity.Hoererstatus;
@RepositoryDefinition(domainClass = Hoererstatus.class, idClass = Integer.class)
public interface HoererstatusRepository extends BiaAdminCrudRepository<Hoererstatus> {
//@RepositoryDefinition(domainClass = Hoererstatus.class, idClass = Integer.class)
public interface HoererstatusRepository /* extends BiaAdminCrudRepository<Hoererstatus> */ {
Optional<Hoererstatus> findByEintrag(String eintrag);

4
src/de/superx/jdbc/repository/KoepfeOderFaelleRepository.java

@ -6,8 +6,8 @@ import org.springframework.data.repository.RepositoryDefinition; @@ -6,8 +6,8 @@ import org.springframework.data.repository.RepositoryDefinition;
import de.superx.jdbc.entity.KoepfeOderFaelle;
@RepositoryDefinition(domainClass = KoepfeOderFaelle.class, idClass = Integer.class)
public interface KoepfeOderFaelleRepository extends BiaAdminCrudRepository<KoepfeOderFaelle> {
//@RepositoryDefinition(domainClass = KoepfeOderFaelle.class, idClass = Integer.class)
public interface KoepfeOderFaelleRepository /* extends BiaAdminCrudRepository<KoepfeOderFaelle> */ {
Optional<KoepfeOderFaelle> findByEintrag(String eintrag);

8
src/de/superx/jdbc/repository/SichtenRepository.java

@ -1,8 +1,14 @@ @@ -1,8 +1,14 @@
package de.superx.jdbc.repository;
import java.util.Optional;
import org.springframework.data.repository.RepositoryDefinition;
import de.superx.jdbc.entity.Sichten;
@RepositoryDefinition(domainClass = Sichten.class, idClass = Integer.class)
public interface SichtenRepository extends BiaAdminCrudRepository<Sichten> {}
public interface SichtenRepository extends BiaAdminCrudRepository<Sichten> {
Optional<Sichten> findByBeschreibung(String name);
}

4
src/de/superx/jdbc/repository/SosStatusRepository.java

@ -6,8 +6,8 @@ import org.springframework.data.repository.RepositoryDefinition; @@ -6,8 +6,8 @@ import org.springframework.data.repository.RepositoryDefinition;
import de.superx.jdbc.entity.SosStatus;
@RepositoryDefinition(domainClass = SosStatus.class, idClass = Integer.class)
public interface SosStatusRepository extends BiaAdminCrudRepository<SosStatus> {
//@RepositoryDefinition(domainClass = SosStatus.class, idClass = Integer.class)
public interface SosStatusRepository /* extends BiaAdminCrudRepository<SosStatus> */ {
Optional<SosStatus> findByEintrag(String eintrag);

4
src/de/superx/job/ActionNode.java

@ -25,12 +25,12 @@ public abstract class ActionNode { @@ -25,12 +25,12 @@ public abstract class ActionNode {
LOAD_MONDRIAN_SCHEMA(LoadMondrianSchemaAction.class, 12),
UNKNOWN(null, 13),
EXTRACT(ExtractAction.class, 14),
LOAD_DBT_SOURCE(LoadDbtSource.class, 15),
UPGRADE_DBFORMS_CONFIG(UpgradeDbFormsConfigAction.class, 16),
EXECUTE_DBT(ExecuteDbtAction.class, 17),
UPDATE_METADATA(UpdateMetadataAction.class, 18),
EXECUTE_SQLFLUFF(ExecuteSQLFluffAction.class, 19),
REMOVE_SPRING_BATCH_HISTORY(RemoveSpringBatchHistoryAction.class, 20)
REMOVE_SPRING_BATCH_HISTORY(RemoveSpringBatchHistoryAction.class, 20),
EXECUTE_ACTION_GROUP(ExecuteActionGroupAction.class, 21),
;
private Class<? extends ActionNode> clazz;

13
src/de/superx/job/ExecuteActionGroupAction.java

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
package de.superx.job;
public class ExecuteActionGroupAction extends ActionNode {
public ExecuteActionGroupAction() {
super();
}
public ExecuteActionGroupAction(Integer systemInfoId) {
super("Create Attribute Groups ", null, systemInfoId, true, ActionType.EXECUTE_ACTION_GROUP);
}
}

3
src/de/superx/job/ExecuteSQLFluffAction.java

@ -4,4 +4,7 @@ public class ExecuteSQLFluffAction extends ActionNode { @@ -4,4 +4,7 @@ public class ExecuteSQLFluffAction extends ActionNode {
public ExecuteSQLFluffAction (String name, String id, Integer systemInfoId, boolean active, Integer custom) {
super(name, id, systemInfoId, active, custom, ActionType.EXECUTE_SQLFLUFF);
}
public ExecuteSQLFluffAction () {}
}

23
src/de/superx/job/ExtractAction.java

@ -1,6 +1,9 @@ @@ -1,6 +1,9 @@
package de.superx.job;
import java.io.File;
import java.util.List;
import de.superx.etl.biad.SourceTable;
public class ExtractAction extends ActionNode {
@ -9,25 +12,35 @@ public class ExtractAction extends ActionNode { @@ -9,25 +12,35 @@ public class ExtractAction extends ActionNode {
public String sourceTable;
public String stagingTable;
public String extractionScript;
public String extractionExclude;
public List<String> extractionInclude;
public String dataSource;
public ExtractAction(String id, String table, String extractionScript, String extractionExclude, String stagingSchema, String unlFile, String dataSource, Integer systemInfoId, String mod) {
public ExtractAction(String id, String table, String extractionScript, List<String> extractionInclude, String stagingSchema, String unlFile, String dataSource, Integer systemInfoId, String mod) {
super(makeName(id, unlFile, dataSource), null, systemInfoId, true, ActionType.EXTRACT);
this.sourceTable = table;
this.extractionScript = (extractionScript.isBlank()) ? "1=1" : extractionScript;
this.extractionExclude = extractionExclude;
this.extractionScript = (extractionScript == null || extractionScript.isBlank()) ? "1=1" : extractionScript;
this.extractionInclude = extractionInclude;
this.stagingSchema = (stagingSchema.isBlank()) ? "public" : stagingSchema;
this.stagingTable = String.format("%s", table);
//this.stagingTable = String.format("%s_%s", mod, table);
this.unlFile = unlFile;
this.dataSource = dataSource;
}
public ExtractAction(String table, List<String> extractionInclude) {
this.sourceTable = table;
this.extractionInclude = extractionInclude;
}
public ExtractAction() {
super();
}
public static ExtractAction createFromSourceTable(SourceTable table, String unlFile, String schema) {
return new ExtractAction(table.getName(), table.getName(),
table.getExtractionScript(), table.getExtractionInclude(),
schema, unlFile, "hisinone", Integer.valueOf(440), null);
}
private static String makeName(String id, String unlFile, String dataSource) {
String name = "Extract " + id + " " + unlFile.substring(unlFile.lastIndexOf(File.separatorChar) + 1);
if (dataSource != null && !dataSource.isEmpty()) {

6
src/de/superx/job/LoadAction.java

@ -13,8 +13,13 @@ public class LoadAction extends ActionNode { @@ -13,8 +13,13 @@ public class LoadAction extends ActionNode {
public String tableName;
public String unlFilePath;
public boolean usePostgresCopyApi = true;
public boolean isCsv;
public LoadAction(Integer systemInfoId, boolean refresh, String delimiter, boolean header, String database, String tableName, String unlFilePath) {
this(systemInfoId, refresh, delimiter, header, database, tableName, unlFilePath, false);
}
public LoadAction(Integer systemInfoId, boolean refresh, String delimiter, boolean header, String database, String tableName, String unlFilePath, boolean isCsv) {
super("load " + tableName, null, systemInfoId, true, ActionType.LOAD);
this.refresh = refresh;
this.delimiter = delimiter;
@ -22,5 +27,6 @@ public class LoadAction extends ActionNode { @@ -22,5 +27,6 @@ public class LoadAction extends ActionNode {
this.tableName = tableName;
this.unlFilePath = unlFilePath;
this.database = database;
this.isCsv = isCsv;
}
}

16
src/de/superx/job/LoadDbtSource.java

@ -1,16 +0,0 @@ @@ -1,16 +0,0 @@
package de.superx.job;
public class LoadDbtSource extends ActionNode {
public String databaseSystem;
public String sqlScriptPath;
public LoadDbtSource(String databaseSystem, Integer systemInfoId, String sqlScriptPath) {
super("Load script " + sqlScriptPath, null, systemInfoId, true, ActionType.LOAD_DBT_SOURCE);
this.databaseSystem = databaseSystem;
this.sqlScriptPath = sqlScriptPath;
}
public LoadDbtSource() { super(); }
}

99
src/de/superx/rest/EtlJobApi.java

@ -6,6 +6,9 @@ import java.io.IOException; @@ -6,6 +6,9 @@ import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -19,7 +22,6 @@ import org.apache.log4j.Logger; @@ -19,7 +22,6 @@ import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobInstance;
@ -47,6 +49,8 @@ import org.springframework.core.io.support.EncodedResource; @@ -47,6 +49,8 @@ import org.springframework.core.io.support.EncodedResource;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@ -71,6 +75,7 @@ import de.superx.rest.util.ComponentComparator; @@ -71,6 +75,7 @@ import de.superx.rest.util.ComponentComparator;
import de.superx.spring.batch.His1DataSources;
import de.superx.spring.batch.job.BiJobLoggingListener;
import de.superx.spring.batch.job.JobUtils;
import de.superx.spring.batch.tasklet.TaskletContext;
import de.superx.spring.batch.util.StepCounter;
import de.superx.spring.service.BatchJobDescriptionAdapter;
import de.superx.spring.service.DbJobDescriptionAdapter;
@ -134,6 +139,7 @@ public class EtlJobApi extends RestControllerBase { @@ -134,6 +139,7 @@ public class EtlJobApi extends RestControllerBase {
BatchJobDescriptionAdapter batchJobDescriptionAdapter;
private BiJobLoggingListener jobLoggingListener;
private TaskletContext taskletContext;
private static final ObjectMapper EXIT_STATUS_MAPPER = exit_status_mapper();
@ -235,7 +241,8 @@ public class EtlJobApi extends RestControllerBase { @@ -235,7 +241,8 @@ public class EtlJobApi extends RestControllerBase {
String component = id.substring(0, compEndIndex).toLowerCase();
String sourcedb = getDataSource(component);
ContainerNode root = jobDescriptionSource.getJobById(id);
ContainerNode root = Optional.ofNullable(jobDescriptionSource.getJobById(id))
.orElseThrow(() -> new IllegalArgumentException("Job with ID '" + id + "' not found"));
// If we execute a 'Sonderladeroutine' we need to override the source system
// see ticket #300998
@ -252,6 +259,18 @@ public class EtlJobApi extends RestControllerBase { @@ -252,6 +259,18 @@ public class EtlJobApi extends RestControllerBase {
if (sourceDatabase != null) {
sourcedb = sourceDatabase;
}
if(root.getJobType().equals(JobType.install_upgrade)) {
JobParametersBuilder parameterBuilder = new JobParametersBuilder();
try {
parameterBuilder.addJobParameters(createVersionParameter(component));
parameterBuilder.addJobParameters(createChecksumParameter(component));
} catch (IOException e) {
e.printStackTrace();
}
return executeJob(sourcedb, root, parameterBuilder.toJobParameters());
}
return executeJob(sourcedb, root);
}
@ -275,12 +294,27 @@ public class EtlJobApi extends RestControllerBase { @@ -275,12 +294,27 @@ public class EtlJobApi extends RestControllerBase {
public Long executeJob(String sourceDatabase, ContainerNode root )
throws DuplicateJobException, JobExecutionAlreadyRunningException, JobRestartException,
JobInstanceAlreadyCompleteException, JobParametersInvalidException {
return executeJob(sourceDatabase, root, null);
}
public void executeJobSync(String sourceDatabase, ContainerNode root) throws DuplicateJobException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException {
try {
setSyncExecution();
executeJob(sourceDatabase, root);
} finally {
unsetSyncExecution();
}
}
public Long executeJob(String sourceDatabase, ContainerNode root, JobParameters additionalParameters)
throws DuplicateJobException, JobExecutionAlreadyRunningException, JobRestartException,
JobInstanceAlreadyCompleteException, JobParametersInvalidException {
if (isAnyJobInstanceRunning()) {
return Long.valueOf(-1);
}
StepCounter stepCounter = new StepCounter();
Job job = createBatchJob(root, sourceDatabase, stepCounter);
return startJob(job, stepCounter.getCount(), null);
return startJob(job, stepCounter.getCount(), additionalParameters);
}
@RequestMapping(path="/job/install/{component}", method=RequestMethod.GET)
@ -445,7 +479,8 @@ public class EtlJobApi extends RestControllerBase { @@ -445,7 +479,8 @@ public class EtlJobApi extends RestControllerBase {
public Job createBatchJob(ContainerNode root, String sourceDatabase, StepCounter stepCounter) {
jobLoggingListener = new BiJobLoggingListener(root.name, root.getJobSource());
return batchJobDescriptionAdapter.transformToBatchJob(root, sourceDatabase, stepCounter, jobLoggingListener);
taskletContext = new TaskletContext();
return batchJobDescriptionAdapter.transformToBatchJob(root, sourceDatabase, stepCounter, jobLoggingListener, taskletContext);
}
@RequestMapping(path="/jobExecutionStatus/{jobExecutionId}", method = RequestMethod.GET)
@ -453,6 +488,8 @@ public class EtlJobApi extends RestControllerBase { @@ -453,6 +488,8 @@ public class EtlJobApi extends RestControllerBase {
userService.checkEtlJobRights();
JobExecution jobExecution = jobExplorer.getJobExecution(jobExecutionId);
JobExecutionStatus jobExecutionStatus = JobUtils.getJobExecutionStatus(jobExecution, jobExplorer);
int internalStepsExecuted = taskletContext.getInternalProgress();
jobExecutionStatus.incrementExecutedStepsCount(internalStepsExecuted);
if(jobLoggingListener != null) {
jobExecutionStatus.log = jobLoggingListener.getNextLogSection();
if (jobExecutionStatus.exitStatus.getExitCode().equals("FAILED")) {
@ -479,6 +516,10 @@ public class EtlJobApi extends RestControllerBase { @@ -479,6 +516,10 @@ public class EtlJobApi extends RestControllerBase {
jobExecutionInfos.add(new JobExecutionInfo(jobExecution));
}
}
JobExecutionInfo running = getRunningJob();
if (running.jobExecutionId.longValue() != -1) {
jobExecutionInfos.add(running);
}
return jobExecutionInfos;
}
@ -645,6 +686,7 @@ public class EtlJobApi extends RestControllerBase { @@ -645,6 +686,7 @@ public class EtlJobApi extends RestControllerBase {
}
jobRegistry.register(new ReferenceJobFactory(job));
JobExecution jobExecution = null;
JobLauncher executor = jobLauncher;
if(RUN_SYNC) {
TaskExecutorJobLauncher sycJobLauncher = new TaskExecutorJobLauncher();
sycJobLauncher.setJobRepository(this.jobRepository);
@ -653,10 +695,9 @@ public class EtlJobApi extends RestControllerBase { @@ -653,10 +695,9 @@ public class EtlJobApi extends RestControllerBase {
} catch (Exception e) {
logger.error("Couldn't call afterPropertiesSet()", e);
}
jobExecution = sycJobLauncher.run(job, jobParameters);
} else {
jobExecution = jobLauncher.run(job, jobParameters);
executor = sycJobLauncher;
}
jobExecution = executor.run(job, jobParameters);
return jobExecution.getId();
}
@ -717,6 +758,50 @@ public class EtlJobApi extends RestControllerBase { @@ -717,6 +758,50 @@ public class EtlJobApi extends RestControllerBase {
return count.intValue() == 1;
}
public Component getComponentAndConnectorDetails(String abbreviation) {
JdbcTemplate jt = new JdbcTemplate(dataSource);
Component component = jt.query(
"SELECT systeminfo.tid AS systeminfo_id,"
+ " trim(systeminfo.name) AS name,"
+ " trim(db_version.his_system) AS abbreviation,"
+ " unload_params.param_val AS db,"
+ " systeminfo.datum AS last_update"
+ " FROM systeminfo"
+ " JOIN db_version"
+ " ON db_version.systeminfo_id = systeminfo.tid"
+ " LEFT JOIN unload_params"
+ " ON unload_params.param_id='SOURCESYSTEM'"
+ " AND unload_params.systeminfo_id = systeminfo.tid"
+ " WHERE trim(db_version.his_system)=?",
new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, abbreviation);
}
},
new ResultSetExtractor<Component>() {
@Override
public Component extractData(ResultSet rs) throws SQLException, DataAccessException {
if(rs.next()) {
String dbName = rs.getString("db");
boolean databaseConnected = false;
if (dbName != null) {
databaseConnected = dataSources.containsKey(dbName);
}
return new Component(
rs.getString("name"),
rs.getString("abbreviation"),
rs.getInt("systeminfo_id"),
dbName,
rs.getTimestamp("last_update"),
databaseConnected,
true);
}
return null;
}
});
return component;
}
public List<Component> getAllComponentAndConnectorDetails() {
JdbcTemplate jt = new JdbcTemplate(dataSource);

19
src/de/superx/rest/LogsProvider.java

@ -6,6 +6,8 @@ import java.net.URISyntaxException; @@ -6,6 +6,8 @@ import java.net.URISyntaxException;
import javax.ws.rs.core.Context;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@ -14,13 +16,18 @@ import org.springframework.web.bind.annotation.RestController; @@ -14,13 +16,18 @@ import org.springframework.web.bind.annotation.RestController;
import de.memtext.util.FileUtils;
import de.superx.common.SxUser;
import de.superx.servlet.LogInit;
import de.superx.servlet.SuperXManager;
import de.superx.util.PathAndFileUtils;
import jakarta.servlet.http.HttpServletRequest;
@RestController
@RequestMapping("/api/logs")
public class LogsProvider {
private static Logger logger = LoggerFactory.getLogger(LogsProvider.class);
@RequestMapping(path = "/{logtype}", method = RequestMethod.GET)
public String printLogs(@PathVariable(value = "logtype") String logtype,
@RequestParam("loglines") Integer loglines,
@ -113,4 +120,16 @@ public class LogsProvider { @@ -113,4 +120,16 @@ public class LogsProvider {
}
@RequestMapping(path = "/reload_log4j", method = RequestMethod.GET)
public static String reloadLog4J(@Context HttpServletRequest httpRequest) {
logger.info("*** log4j.properties neu einlesen ***");
String webInfPath = PathAndFileUtils.getWebinfPath();
File propertiesFile = new File(webInfPath + File.separator + "log4j.properties");
String logDir = webInfPath + File.separator + "logs";
if (LogInit.reloadLog4J(propertiesFile, logDir)) {
return "Log-Konfiguration erfolgreich neu eingelesen.";
}
return "Log-Konfiguration konnte nicht neu eingelesen werden.";
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save