diff --git a/src-modules/module/sxc/conf/sxc.xml b/src-modules/module/sxc/conf/sxc.xml
index fa99735..daadcb4 100644
--- a/src-modules/module/sxc/conf/sxc.xml
+++ b/src-modules/module/sxc/conf/sxc.xml
@@ -1233,6 +1233,18 @@ parent="SuperX-Connect">Abfragen zur Administration von SuperX-Connect
$SXC_PFAD/masken
+
+
+
+ $SXC_PFAD/masken
+
+
+
+
+
+ $SXC_PFAD/masken
+
+
@@ -1274,6 +1286,31 @@ parent="SuperX-Connect">Abfragen zur Administration von SuperX-Connect
+
+
+
@@ -1301,6 +1338,7 @@ parent="SuperX-Connect">Abfragen zur Administration von SuperX-Connect
+
@@ -1317,6 +1355,7 @@ parent="SuperX-Connect">Abfragen zur Administration von SuperX-Connect
+
@@ -1326,6 +1365,31 @@ parent="SuperX-Connect">Abfragen zur Administration von SuperX-Connect
+
+
+
@@ -1353,6 +1417,7 @@ parent="SuperX-Connect">Abfragen zur Administration von SuperX-Connect
+
@@ -1371,6 +1436,7 @@ parent="SuperX-Connect">Abfragen zur Administration von SuperX-Connect
+
diff --git a/src-modules/module/sxc/masken/47200_felderinfo.unl b/src-modules/module/sxc/masken/47200_felderinfo.unl
index ae4fcd9..617286a 100644
--- a/src-modules/module/sxc/masken/47200_felderinfo.unl
+++ b/src-modules/module/sxc/masken/47200_felderinfo.unl
@@ -1,35 +1,24 @@
-47200^Spaltenlayout^3000^350^-1^140^180^1^char^31^1^1^<>SELECT uniquename,\
- caption\
-FROM rpta_column_layout \
-where uniquename in ('sos_stud_zugang_abgang')\
-order by sortnr, caption\
- ;^ ^<>SELECT uniquename,\
- caption\
-FROM rpta_column_layout \
-where uniquename='sos_stud_zugang_abgang';^
-47201^Seit Semester^10^0^0^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by tid DESC;^ ^<> select tid,eintrag from semester where today() between sem_beginn and sem_ende;^
+47201^Seit Semester^10^0^0^140^80^1^integer^30^0^1^<> select tid, eintrag from semester \
+where substring('' || tid from 5 for 1)='2' \
+and sem_beginn < today() order by tid DESC;^ ^<> select tid, eintrag from semester \
+where substring('' || tid from 5 for 1)='2' \
+and sem_beginn < (today()-(3*365)) order by tid DESC limit 1;^
47202^Fächer^30^0^0^130^200^6^integer^1000^0^12^<> select tid,name,sortnr from sichten where art='Fächer-Sicht' order by 3,2;^ ^ ^
47203^Abschluss^40^0^0^100^200^3^char^1500^0^12^<> select tid,name,sortnr from sichten where art='SOS-Abschluss-Sicht' order by 3,2;^ ^ ^
47204^bis Fachsemester^1000^300^-1^200^100^1^integer^30^0^0^^ ^ ^
-47205^Semestertyp^22^350^-1^140^80^1^integer^255^0^1^<> select 1,'nur Sommersemester' from xdummy union select 2,'nur Wintersemester' from xdummy^hidden^ ^
47206^Hochschulzugangsberechtigung^120^300^-1^200^200^1^sql^30^0^1^hs_zugangsber^ ^ ^
-47207^Bis Semester^20^350^-1^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by tid DESC;^ ^<> select tid,eintrag from semester where today() between sem_beginn and sem_ende;^
+47207^Bis Semester^20^350^-1^140^80^1^integer^30^0^1^<> select tid, eintrag from semester \
+where substring('' || tid from 5 for 1)='1' \
+and sem_beginn < today() order by tid DESC;^ ^<> select tid, eintrag from semester \
+where substring('' || tid from 5 for 1)='1' \
+and sem_beginn < today() order by tid DESC limit 1;^
47208^Staatsangehörigkeit^150^0^0^140^150^10^char^30^0^12^<> select tid,name,sortnr from sichten where art='SOS-Staaten-Sicht' order by 3,2;^ ^ ^
47209^Studiengang^25^0^0^140^150^50^char^1000^0^12^<> select tid,name,sortnr from sichten where art in ('SOS-Kostenstellen-Sicht', 'SOS-Studiengang-Sicht') order by 3,2;^ ^ ^
47210^Semester^100^0^0^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by tid DESC;^hidden^ ^
47211^Stichtag^23^330^-1^130^100^1^sql^30^1^1^<> select tid, name from sos_stichtag where stichtagsart='Studierende';^ ^<> select tid, name from sos_stichtag where stichtagsart='Studierende' and appl_key='1';^
47213^Jahr^110^0^0^140^80^1^integer^30^0^13^^ ^ ^
47214^Filter Studierende^100^0^0^140^150^1^sql^20^0^1^<> SELECT id,caption from sx_repository where aktiv =1 and today() between gueltig_seit and gueltig_bis and art='SOS_STUD_FILTER' order by 2;^ ^ ^
-47215^Nur Endsemester^21^0^0^140^80^1^integer^30^0^1^<> select 1,'ja' from xdummy^hidden^ ^
-47216^Matrikel-Nr.^35^350^-1^140^80^1^char^30^0^13^^ ^ ^
-47217^Grafik^1000^300^-1^170^150^1^char^30^0^1^<> --freemarker template\
-<#if K_VIZ_ZEITR_SEM_ANZ?exists>select uniquename, caption from viz_chart where maskeninfo_id=47140 and chart_active=1 order by 2;\
-<#else>\
-select 0,'Keine Visualisierungen verfügbar' from xdummy;\
-#if>^ ^<>--freemarker template\
-<#if K_VIZ_ZEITR_SEM_ANZ?exists>select uniquename, caption from viz_chart where maskeninfo_id=47140 and chart_active=1 order by 2 limit 1;\
-#if>^
+47216^Matrikel-Nr.^35^350^-1^140^80^1^integer^30^0^0^^ ^ ^
47218^Köpfe oder Fälle ?^0^0^0^140^150^1^sql^70^0^1^<> select apnr, eintrag from koepfe_oder_faelle order by 2^hidden^<> select apnr, eintrag from koepfe_oder_faelle where eintrag = 'Köpfe';^
-47219^tablestylesheet^1500^0^0^100^100^1^char^255^1^1^<> select filename,caption from sx_stylesheets S, sx_mask_style M where S.tid=M.stylesheet_id and M.maskeninfo_id=47140 order by ord^ ^<> select filename,caption from sx_stylesheets S, sx_mask_style M where S.tid=M.stylesheet_id and M.maskeninfo_id=47140 order by ord limit 1^
+47219^tablestylesheet^1500^0^0^100^100^1^char^255^0^1^<> select filename,caption from sx_stylesheets S, sx_mask_style M where S.tid=M.stylesheet_id and M.maskeninfo_id=47140 order by ord^hidden^<> select filename,caption from sx_stylesheets S, sx_mask_style M where S.tid=M.stylesheet_id and M.maskeninfo_id=47140 order by ord limit 1^
47222^Geschlecht^110^0^0^140^80^1^integer^30^0^1^<> SELECT apnr,druck FROM cif where key = 9003 and apnr between 1 and 4 order by 1;^hidden^ ^
-47223^Vergleichshochschule^100^0^0^140^80^1^char^255^0^18^^ ^<> select '../edit/sxc/sxc_hochschule_vergleichsgruppe_list.jsp' from xdummy;^
diff --git a/src-modules/module/sxc/masken/47200_masken_felder_bez.unl b/src-modules/module/sxc/masken/47200_masken_felder_bez.unl
index 7532d86..ce16da1 100644
--- a/src-modules/module/sxc/masken/47200_masken_felder_bez.unl
+++ b/src-modules/module/sxc/masken/47200_masken_felder_bez.unl
@@ -1,9 +1,7 @@
-47200^47200^
47200^47201^
47200^47202^
47200^47203^
47200^47204^
-47200^47205^
47200^47206^
47200^47207^
47200^47208^
@@ -12,10 +10,7 @@
47200^47211^
47200^47213^
47200^47214^
-47200^47215^
47200^47216^
-47200^47217^
47200^47218^
47200^47219^
47200^47222^
-47200^47223^
diff --git a/src-modules/module/sxc/masken/47200_maskeninfo.unl b/src-modules/module/sxc/masken/47200_maskeninfo.unl
index 2a20ebb..c2e2feb 100644
--- a/src-modules/module/sxc/masken/47200_maskeninfo.unl
+++ b/src-modules/module/sxc/masken/47200_maskeninfo.unl
@@ -1,139 +1,25 @@
-47200^Studierendenströme Hochschulvergleich^--Freemarker Template\
+47200^Studierendenströme Hochschulvergleich (intern)^--Freemarker Template\
<#include "SQL_lingua_franca"/>\
<#include "SuperX_general"/>\
--\
---Autor D. Quathamer 2024\
-\
->;]]>\
-\
-\
-\
-\
->;\
-\
-]]>\
->\
-/* and C.uniquename in (<>) */\
-order by CL.sortnr\
- ;\
-]]>\
-= <> */\
-/* and tid <= <> */\
-<#if "<>"="1" || "<>"="2">\
-and substring('' || tid from 5 for 1)='<>'\
-#if>\
-;\
-\
-]]>\
-\
-\
-\
-<#assign jahr_param="" />\
-<#assign jahr_filter="1=1" />\
-/* <#assign jahr_param="<>" /> */\
---Akad. Jahr 2022: WS + SS - Beispiel: WS 22/23 + SS 2023\
-<#if jahr_param !="">\
-<#assign jahr_filter="(" />\
-<#assign jahr_filter=jahr_filter + "(substring('' || sem_rueck_beur_ein from 5 for 1)='2' and val(substring('' || sem_rueck_beur_ein from 1 for 4))="+jahr_param+")" />\
-<#assign jahr_filter=jahr_filter + " or "/>\
-<#assign jahr_filter=jahr_filter + "(substring('' || sem_rueck_beur_ein from 5 for 1)='1' and (val(substring('' || sem_rueck_beur_ein from 1 for 4))-1)="+jahr_param+")" />\
-<#assign jahr_filter=jahr_filter + ")" />\
-#if>\
+--Autor D. Quathamer 2026\
\
<#assign semester_filter ="1=1\
-/* and sem_rueck_beur_ein >= <> */\
-/* and sem_rueck_beur_ein <= <> */\
+/* and A.sem_rueck_beur_ein >= <> */\
+/* and A.sem_rueck_beur_ein <= <> */\
" />\
-<#if "<>"="1" || "<>"="2">\
-<#assign semester_filter = semester_filter+ " and substring('' || sem_rueck_beur_ein from 5 for 1)='<>'" />\
-#if>\
-<#if "<>"="1">\
---nur Endsemester\
-<#assign semester_filter = semester_filter+ " and 1=1 and sem_rueck_beur_ein = "+endsemester /> \
-#if>\
\
-<#assign filter="<>\
-/* and sem_rueck_beur_ein = <> */\
-/* and stichtag = <> */\
+<#assign filter="1=1\
+/* and A.stichtag = <> */\
/* and <> */\
/* and <>*/\
/* and geschlecht = <> */\
/* and fach_sem_zahl <= <> */\
/* and substring('' || sem_rueck_beur_ein from 5 for 1)='<>' */\
/* and ${<>} */\
+/* and matrikel_nr=<> */\
" />\
\
-<#assign filter= filter + " and " + jahr_filter />\
-\
<#assign filter= filter + " and " + semester_filter />\
\
\
@@ -142,189 +28,80 @@ limit 2;\
/* <#assign filter = filter + " and stg in "+Fächer.allNeededKeysList /> --<> */\
/* <#assign filter = filter + " and tid_stg in (select L2.tid from lehr_stg_ab L2 where L2.abschluss in "+Abschluss.allNeededKeysList +")" /> --<> */\
\
+create temp table tmp_meta as\
+select\
+ H.hs_nr,\
+ H.name as hochschulinfo_name,\
+ (select datum from systeminfo where tid=7) as datenstand,\
+ (select version from db_version where his_system='sxc') as sxc_version,\
+ (case when K.apnr=1 then 'HISinOne-BI' else 'SuperX' end)::varchar(50) as dwh_name\
+ from hochschulinfo H, konstanten K\
+ where K.beschreibung='PLATTFORM'\
+;\
\
+create temp table tmp_sos_sos\
+as select matrikel_nr,sem_rueck_beur_ein as sem_rueck_beur_ein_max\
+from sos_sos\
+where 1=1\
+/* and matrikel_nr=<> */\
+;\
\
create temp table tmp_sos_stud_astat as\
-select dim_studiengang.tid as dim_studiengang_tid,\
-dim_studiengang.stg as dim_studiengang_stg,\
-dim_studiengang.stg_str as dim_studiengang_stg_str,\
-dim_studiengang.stg_ktxt as dim_studiengang_stg_ktxt,\
-dim_studiengang.stg_ltxt as dim_studiengang_stg_ltxt,\
-dim_studiengang.stg_astat as dim_studiengang_stg_astat,\
-dim_studiengang.stg_astat_str as dim_studiengang_stg_astat_str,\
-dim_studiengang.stg_astgrp as dim_studiengang_stg_astgrp,\
-dim_studiengang.stg_astgrp_str as dim_studiengang_stg_astgrp_str,\
-dim_studiengang.vertfg as dim_studiengang_vertfg,\
-dim_studiengang.vertfg_str as dim_studiengang_vertfg_str,\
-dim_studiengang.schwerpunkt as dim_studiengang_schwerpunkt,\
-dim_studiengang.schwerpunkt_str as dim_studiengang_schwerpunkt_str,\
-dim_studiengang.pversion as dim_studiengang_pversion,\
-dim_studiengang.kz_fach as dim_studiengang_kz_fach,\
-dim_studiengang.kz_fach_str as dim_studiengang_kz_fach_str,\
-dim_studiengang.abschluss as dim_studiengang_abschluss,\
-dim_studiengang.abschluss_str as dim_studiengang_abschluss_str,\
-dim_studiengang.abschluss_astat as dim_studiengang_abschluss_astat,\
-dim_studiengang.abschluss_astat_str as dim_studiengang_abschluss_astat_str,\
-dim_studiengang.abschlussart as dim_studiengang_abschlussart,\
-dim_studiengang.abschlussart_str as dim_studiengang_abschlussart_str,\
-dim_studiengang.abschluss_grp as dim_studiengang_abschluss_grp,\
-dim_studiengang.abschluss_grp_str as dim_studiengang_abschluss_grp_str,\
-dim_studiengang.text as dim_studiengang_text,\
-dim_studiengang.regel as dim_studiengang_regel,\
-dim_studiengang.stort as dim_studiengang_stort,\
-dim_studiengang.stort_str as dim_studiengang_stort_str,\
-dim_studiengang.fb as dim_studiengang_fb,\
-dim_studiengang.fb_str as dim_studiengang_fb_str,\
-dim_studiengang.lehr as dim_studiengang_lehr,\
-dim_studiengang.lehr_str as dim_studiengang_lehr_str,\
-dim_studiengang.stutyp as dim_studiengang_stutyp,\
-dim_studiengang.stutyp_str as dim_studiengang_stutyp_str,\
-dim_studiengang.stg_astat_bund as dim_studiengang_stg_astat_bund,\
-dim_studiengang.stg_astat_bund_str as dim_studiengang_stg_astat_bund_str,\
-dim_studiengang.abschluss_astat_bund as dim_studiengang_abschluss_astat_bund,\
-dim_studiengang.abschluss_astat_bund_str as dim_studiengang_abschluss_astat_bund_str,\
-dim_studiengang.stg_astat_sb as dim_studiengang_stg_astat_sb,\
-dim_studiengang.stg_astat_sb_str as dim_studiengang_stg_astat_sb_str,\
-dim_studiengang.fgrp as dim_studiengang_fgrp,\
-dim_studiengang.fgrp_str as dim_studiengang_fgrp_str,\
-dim_studiengang.sb as dim_studiengang_sb,\
-dim_studiengang.sb_str as dim_studiengang_sb_str,\
-dim_studiengang.abstgvnr as dim_studiengang_abstgvnr,\
-dim_studiengang.pversion_uniquename as dim_studiengang_pversion_uniquename,\
-dim_studiengang.pversion_kurztext as dim_studiengang_pversion_kurztext,\
-dim_studiengang.pversion_drucktext as dim_studiengang_pversion_drucktext,\
-dim_studiengang.unikey as dim_studiengang_unikey,\
-dim_studiengang.ist_lehramt as dim_studiengang_ist_lehramt,\
---dim_studiengang.stufrm_diff_rsz as dim_studiengang_stufrm_diff_rsz,\
-sos_stg_aggr.tid_stg as tid_stg,\
-sos_stg_aggr.ca12_staat as ca12_staat,\
-sos_stg_aggr.geschlecht as geschlecht,\
-sos_stg_aggr.alter as alter,\
-sos_stg_aggr.hzbart as hzbart,\
-sos_stg_aggr.hmkfzkz as hmkfzkz,\
-sos_stg_aggr.hmkfz as hmkfz,\
-sos_stg_aggr.semkfzkz as semkfzkz,\
-sos_stg_aggr.semkfz as semkfz,\
-sos_stg_aggr.hzbkfzkz as hzbkfzkz,\
-sos_stg_aggr.hzbkfz as hzbkfz,\
-sos_stg_aggr.hrst as hrst,\
-sos_stg_aggr.studiengang_nr as studiengang_nr,\
-sos_stg_aggr.fach_nr as fach_nr,\
-sos_stg_aggr.fach_sem_zahl as fach_sem_zahl,\
-sos_stg_aggr.sem_rueck_beur_ein as sem_rueck_beur_ein,\
-sos_stg_aggr.kz_rueck_beur_ein as kz_rueck_beur_ein,\
-sos_stg_aggr.klinsem as klinsem,\
-sos_stg_aggr.hssem as hssem,\
-sos_stg_aggr.stuart as stuart,\
-sos_stg_aggr.stufrm as stufrm,\
-sos_stg_aggr.stichtag as stichtag,\
-sos_stg_aggr.summe as summe,\
-sos_stg_aggr.hzbart_int as hzbart_int,\
-sos_stg_aggr.matrikel_nr as matrikel_nr,\
-sos_stg_aggr.ch27_grund_beurl as ch27_grund_beurl,\
-sos_stg_aggr.ch62_grund_exmatr as ch62_grund_exmatr,\
-sos_stg_aggr.hzbnote as hzbnote,\
-sos_stg_aggr.pseudonym as pseudonym,\
-sos_stg_aggr.sem_rueck_beur_ein_max as sem_rueck_beur_ein_max,\
-sos_stg_aggr.ruebeudat as ruebeudat,\
-sos_stg_aggr.semgewicht as semgewicht,\
-sos_stg_aggr.d_exmatr as d_exmatr,\
-sos_stg_aggr.second_nationality as second_nationality,\
-sos_stg_aggr.district_astat as district_astat,\
-sos_stg_aggr.country_astat as country_astat,\
-sos_stg_aggr.orgrole_valid_from as orgrole_valid_from,\
-sos_stg_aggr.orgrole_valid_to as orgrole_valid_to,\
-sos_stg_aggr.geb_gezahlt as geb_gezahlt,\
-sos_stg_aggr.aktiv as aktiv,\
-sos_stg_aggr.individual_number_of_semesters as individual_number_of_semesters,\
-sos_stg_aggr.ersthzbkfz as ersthzbkfz,\
-sos_stg_aggr.ersthzbkfzkz as ersthzbkfzkz,\
-sos_stg_aggr.ersthzbart as ersthzbart,\
-sos_stg_aggr.ersthzbjahr as ersthzbjahr,\
-sos_stg_aggr.ersthzbnote as ersthzbnote,\
-sos_stg_aggr.lepsem as lepsem,\
-sos_stg_aggr.stgsemgewicht as stgsemgewicht,\
-sos_stg_aggr.degree_program_id as degree_program_id,\
-sos_stg_aggr.endedat as endedat,\
-sos_stg_aggr.kz_rueck_beur_ein_tsg as kz_rueck_beur_ein_tsg,\
-sos_stg_aggr.endedat_tsg as endedat_tsg,\
-sos_stg_aggr.abmeldegrund as abmeldegrund,\
-sos_stg_aggr.abmeldegrund_tsg as abmeldegrund_tsg,\
-sos_stg_aggr.degree_program_uniquename as degree_program_uniquename,\
-sos_stg_aggr.aktiv_intern as aktiv_intern,\
-sos_stg_aggr.aktiv_intern_p as aktiv_intern_p,\
-sos_k_hrst.apnr as sos_k_hrst_apnr,\
-sos_k_hrst.kurz as sos_k_hrst_kurz,\
-sos_k_hrst.druck as sos_k_hrst_druck,\
-sos_k_hrst.astat as sos_k_hrst_astat,\
-sos_k_hrst.his_hrst as sos_k_hrst_his_hrst,\
-sos_k_stort.apnr as sos_k_stort_apnr,\
-sos_k_stort.kurz as sos_k_stort_kurz,\
-sos_k_stort.druck as sos_k_stort_druck,\
-sos_k_stort.astat as sos_k_stort_astat,\
-sos_k_stuart.apnr as sos_k_stuart_apnr,\
-sos_k_stuart.druck as sos_k_stuart_druck,\
-sos_k_stuart.astat as sos_k_stuart_astat,\
-sos_k_stufrm.apnr as sos_k_stufrm_apnr,\
-sos_k_stufrm.druck as sos_k_stufrm_druck,\
-sos_k_stufrm.astat as sos_k_stufrm_astat,\
-sos_k_stutyp.apnr as sos_k_stutyp_apnr,\
-sos_k_stutyp.druck as sos_k_stutyp_druck,\
-sos_k_stutyp.astat as sos_k_stutyp_astat,\
-null::varchar as dummy \
-from sos_stg_aggr\
-left outer join dim_studiengang on (dim_studiengang.tid=sos_stg_aggr.tid_stg)\
-left outer join sos_k_stort on (dim_studiengang.stort=sos_k_stort.apnr)\
-left outer join sos_k_stutyp on (sos_stg_aggr.stutyp=sos_k_stutyp.apnr)\
-left outer join sos_k_stuart on (sos_stg_aggr.stuart=sos_k_stuart.apnr)\
-left outer join sos_k_stufrm on (sos_stg_aggr.stufrm=sos_k_stufrm.apnr)\
-left outer join sos_k_hrst on (sos_stg_aggr.hrst=sos_k_hrst.apnr) \
-where 1=1\
+select \
+dim_studiengang.tid as dim_studiengang_tid,\
+A.sem_rueck_beur_ein as sem_rueck_beur_ein,\
+get_akad_jahr(A.sem_rueck_beur_ein,'P') as jahr,\
+A.kz_rueck_beur_ein as kz_rueck_beur_ein,\
+A.summe as summe,\
+A.matrikel_nr as matrikel_nr,\
+O.sem_rueck_beur_ein_max,\
+S.sem_beginn,\
+S.sem_ende\
+from semester S, tmp_sos_sos O,sos_stg_aggr A\
+left outer join dim_studiengang on (dim_studiengang.tid=A.tid_stg)\
+where O.matrikel_nr=A.matrikel_nr\
+and S.tid=A.sem_rueck_beur_ein\
+and A.studiengang_nr=1\
+and A.fach_nr=1\
and ${filter}\
;\
\
select \
--zuerst die Basisdaten:\
- (select hs_nr from hochschulinfo) as hs_nr,\
- (select name from hochschulinfo) as hochschulinfo_name,\
- 'Studienjahr'::varchar(255) as studienjahr_label,\
- get_akad_jahr(sem_rueck_beur_ein,'P') as jahr,\
- case when substring('' || sem_rueck_beur_ein from 5 for 1)='2' and kz_rueck_beur_ein=3 then summe else 0 end as anfangsbestand,\
- (select '' from semester where sem_beginn <= current_date and sem_ende >= current_date and semester.tid= tmp_sos_stud_astat.sem_rueck_beur_ein \
-union select 'nein' where tmp_sos_stud_astat.sem_rueck_beur_ein_max <= tmp_sos_stud_astat.sem_rueck_beur_ein\
-union select 'ja' where add_sem(tmp_sos_stud_astat.sem_rueck_beur_ein,1) = tmp_sos_stud_astat.sem_rueck_beur_ein_max\
-union select 'ja' from xdummy where exists \
-(select S2.matrikel_nr from sos_stg_aggr S2 where S2.matrikel_nr=tmp_sos_stud_astat.matrikel_nr \
-and S2.sem_rueck_beur_ein=add_sem(tmp_sos_stud_astat.sem_rueck_beur_ein,1)\
-)\
-union select 'nein' from xdummy where not exists \
-(select S2.matrikel_nr from sos_stg_aggr S2 where S2.matrikel_nr=tmp_sos_stud_astat.matrikel_nr \
-and S2.sem_rueck_beur_ein=add_sem(tmp_sos_stud_astat.sem_rueck_beur_ein,1)\
-) order by 1 limit 1) as status_folgesem,\
- (case when exists (select L.matrikel_nr \
-from sos_lab_stg L, lehr_stg_ab L2, sos_stichtag I \
-where L2.tid=L.tid_stg and L.stichtag=I.tid \
+T.jahr,\
+case when substring('' || T.sem_rueck_beur_ein from 5 for 1)='2' and kz_rueck_beur_ein=3 then summe else 0 end as anfangsbestand,\
+--status Folgesemester:\
+(case when sem_beginn <= current_date and sem_ende >= current_date then '' \
+when sem_rueck_beur_ein_max = sem_rueck_beur_ein then 'nein'\
+when add_sem(T.sem_rueck_beur_ein,1) = T.sem_rueck_beur_ein_max then 'ja'\
+when exists \
+(select S2.matrikel_nr from sos_stg_aggr S2 where S2.matrikel_nr=T.matrikel_nr \
+and S2.sem_rueck_beur_ein=add_sem(T.sem_rueck_beur_ein,1)) then 'ja'\
+when not exists \
+(select S2.matrikel_nr from sos_stg_aggr S2 where S2.matrikel_nr=T.matrikel_nr \
+and S2.sem_rueck_beur_ein=add_sem(T.sem_rueck_beur_ein,1)) then 'nein'\
+else '' end)::varchar(50) as status_folgesem,\
+(case when exists (select L.matrikel_nr\
+from sos_lab_stg L, sos_stichtag I \
+where L.stichtag=I.tid \
and I.appl_key='2' \
-and L.matrikel_nr=tmp_sos_stud_astat.matrikel_nr \
-and L2.stg=tmp_sos_stud_astat.dim_studiengang_stg \
-and L2.abschluss=tmp_sos_stud_astat.dim_studiengang_abschluss \
+and L.matrikel_nr=T.matrikel_nr \
+--and L2.stg=tmp_sos_stud_astat.dim_studiengang_stg \
+--and L2.abschluss=tmp_sos_stud_astat.dim_studiengang_abschluss \
+and L.sem_d_abg_pruefung <= T.sem_rueck_beur_ein\
and L.pstatus='BE' \
and L.abschnitt=2) then 1 else 0 end) as hauptpruefung,\
- case when kz_rueck_beur_ein in (1,2) then summe else 0 end as zugang,\
- case when kz_rueck_beur_ein in (1) then summe else 0 end as zugang_ersteinschr,\
- 0::integer as abgang,\
- summe as summe,\
+case when T.kz_rueck_beur_ein in (1,2) then T.summe else 0 end as zugang,\
+case when T.kz_rueck_beur_ein in (1) then T.summe else 0 end as zugang_ersteinschr,\
+0::integer as abgang,\
+T.summe as summe,\
0::integer as abgang_hauptpr,\
0::integer as abgang_ohne_hauptpr,\
0::integer as hauptpr_summe,\
0::integer as hauptpr_bleibt,\
- null::integer as endbestand,\
- 'SuperX' as dwh_name,\
- (select datum from systeminfo where tid=7) as datenstand,\
- (select version from db_version where his_system='sxc') as sxc_version,\
- null::char(1) as dummycol\
+ null::integer as endbestand\
into temp tmp_stud\
- from tmp_sos_stud_astat\
+ from tmp_sos_stud_astat T\
where 1=1 \
;\
-- select * from tmp_stud;\
@@ -338,18 +115,8 @@ update tmp_stud set hauptpr_bleibt=summe where hauptpruefung=1 and status_folges
--ergebnistabelle:\
select \
--zuerst die nicht-Aggregate:\
- -- preparingColumns ausgeschlossen, da sie von processingColumns aggregiert werden\
- -- computedColumns immer mitnehmen, da später im finalen select verarbeitet\
- hs_nr,\
- hochschulinfo_name,\
- studienjahr_label,\
jahr,\
- -- status_folgesem,\
- -- hauptpruefung,\
null::integer as endbestand,\
- dwh_name,\
- datenstand,\
- sxc_version,\
--dann die Aggregate:\
sum(abgang) as abgang,\
sum(abgang_hauptpr) as abgang_hauptpr,\
@@ -365,103 +132,85 @@ update tmp_stud set hauptpr_bleibt=summe where hauptpruefung=1 and status_folges
from tmp_stud\
where 1=1\
group by\
- 1,2,3,4,5,6,7,8\
+ 1,2\
;\
- update tmp_stud2 set endbestand= anfangsbestand+zugang-abgang;\
+update tmp_stud2 set endbestand= anfangsbestand+zugang-abgang;\
\
- drop table if exists tmp_sos_stud_astat;\
- drop table if exists tmp_stud;\
+drop table if exists tmp_sos_stud_astat;\
+drop table if exists tmp_stud;\
+drop table if exists tmp_sos_sos;\
\
select \
- hs_nr\
- as hs_nr\
-\
- ,\
- hochschulinfo_name\
- as hochschulinfo_name\
-\
- ,\
- studienjahr_label\
- as studienjahr_label\
-\
- ,\
- jahr\
- as jahr\
-\
- ,\
- anfangsbestand\
- as anfangsbestand\
-\
- ,\
- zugang\
- as zugang\
-\
- ,\
- zugang_ersteinschr\
- as zugang_ersteinschr\
-\
- ,\
- abgang\
-\
- ,\
- abgang_hauptpr\
-\
- ,\
- abgang_ohne_hauptpr\
-\
- ,\
- hauptpr_summe\
-\
- ,\
- hauptpr_bleibt\
-\
- ,\
- endbestand\
-\
- ,\
- dwh_name\
- as dwh_name\
-\
- ,\
- datenstand\
- as datenstand\
-\
- ,\
- sxc_version\
- as sxc_version\
-\
- \
- from tmp_stud2\
- order by \
- 1\
- ,\
-2\
- ,\
-3\
- ,\
-4\
- ,\
-5\
- ,\
-6\
- ,\
-7\
- ,\
-8\
- ,\
-9\
- ,\
-10\
- ,\
-11\
- ,\
-12\
- ,\
-13\
- ,\
-14\
- ,\
-15\
- ,\
-16\
- ;^select xil_proplist from maskeninfo where tid=48000^Studienfach^Anzahl bzw. Anteil^Studierende (Anfangsbestand, Zugang und Abgang) pro Hochschule und Studienjahr^select cleanup_stmt from maskeninfo where tid=48000^^2^850^540^^1^<>SELECT description FROM rpta_column_layout where uniquename=<>;^
+M.hs_nr,\
+M.hochschulinfo_name,\
+'Studienjahr' as studienjahr_label,\
+'' || jahr as jahr,\
+anfangsbestand,\
+zugang,\
+zugang_ersteinschr,\
+abgang,\
+abgang_hauptpr,\
+abgang_ohne_hauptpr,\
+hauptpr_summe,\
+hauptpr_bleibt,\
+endbestand,\
+M.dwh_name,\
+M.datenstand,\
+M.sxc_version\
+ from tmp_stud2, tmp_meta M\
+ order by 1,2,3,4,5,6,7,8,9,10,11,12,13,14\
+ ;^XIL List\
+ sizable_columns horizontal_scrolling\
+ drop_and_delete movable_columns \
+ white_space_color=COLOR_WHITE fixed_columns=1\
+ min_heading_height=55\
+Column CID=0 heading_text="Hochschule_ID" center_heading explanation="Amtliche Standortnummer"\
+ row_selectable heading_platform readonly\
+ width=10 text_size=60\
+Column CID=0 heading_text="Hochschule_NAME" center_heading explanation=""\
+ row_selectable heading_platform readonly\
+ width=10 text_size=60\
+Column CID=0 heading_text="Semester" center_heading explanation=""\
+ row_selectable heading_platform readonly\
+ width=10 text_size=60\
+Column CID=0 heading_text="Jahr" center_heading explanation="(WS + darauffolgendes SS)"\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Anfangsbestand" center_heading explanation="Studierende im WiSe"\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Zugang" center_heading explanation="Studierende (Erst- und Neueinschreiber) im WiSe und SoSe"\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Zugang_Ersteinschreibung" center_heading explanation="Studierende (Ersteinschreiber) im WiSe und SoSe"\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Abgang" center_heading explanation="Exmatrikuliert"\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Abgang_mit_Hauptpruefung" center_heading explanation="Hauptprüfung, im Folgesemester nicht eingeschrieben"\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Abgang_ohne_Hauptpruefung" center_heading explanation="Keine Hauptprüfung, im Folgesemester nicht eingeschrieben"\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Hauptpruefung_gesamt" center_heading explanation="Hauptprüfung"\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Hauptpruefung_bleibt" center_heading explanation="Hauptprüfung, im Folgesem.- eingeschrieben"\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Endbestand" center_heading explanation="Endbestand (Anfangsbestand + Zugang - Abgang)"\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Quellsystem" center_heading explanation=""\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Datenstand" center_heading explanation=""\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+Column CID=0 heading_text="Version-Export" center_heading explanation=""\
+ row_selectable heading_platform readonly\
+ width=5 text_size=60\
+@@@^Studienfach^Anzahl bzw. Anteil^Studierende (Anfangsbestand, Zugang und Abgang) pro Hochschule und Studienjahr^drop table tmp_meta;\
+drop table tmp_stud2;^^2^850^540^^1^ ^
diff --git a/src-modules/module/sxc/masken/47230_felderinfo.unl b/src-modules/module/sxc/masken/47230_felderinfo.unl
new file mode 100644
index 0000000..0a448bf
--- /dev/null
+++ b/src-modules/module/sxc/masken/47230_felderinfo.unl
@@ -0,0 +1,43 @@
+47230^Spaltenlayout^3000^350^-1^140^180^1^char^31^1^1^<>SELECT uniquename,\
+ caption\
+FROM rpta_column_layout \
+where uniquename in ('sos_stud_zugang_abgang')\
+order by sortnr, caption\
+ ;^ ^<>SELECT uniquename,\
+ caption\
+FROM rpta_column_layout \
+where uniquename='sos_stud_zugang_abgang';^
+47231^Seit Semester^10^0^0^140^80^1^integer^30^0^1^<> select tid, eintrag from semester \
+where substring('' || tid from 5 for 1)='2' \
+and sem_beginn < today() order by tid DESC;^ ^<> select tid, eintrag from semester \
+where substring('' || tid from 5 for 1)='2' \
+and sem_beginn < (today()-(3*365)) order by tid DESC limit 1;^
+47232^Fächer^30^0^0^130^200^6^integer^1000^0^12^<> select tid,name,sortnr from sichten where art='Fächer-Sicht' order by 3,2;^ ^ ^
+47233^Abschluss^40^0^0^100^200^3^char^1500^0^12^<> select tid,name,sortnr from sichten where art='SOS-Abschluss-Sicht' order by 3,2;^ ^ ^
+47234^bis Fachsemester^1000^300^-1^200^100^1^integer^30^0^0^^ ^ ^
+47235^Semestertyp^22^350^-1^140^80^1^integer^255^0^1^<> select 1,'nur Sommersemester' from xdummy union select 2,'nur Wintersemester' from xdummy^hidden^ ^
+47236^Hochschulzugangsberechtigung^120^300^-1^200^200^1^sql^30^0^1^hs_zugangsber^ ^ ^
+47237^Bis Semester^20^350^-1^140^80^1^integer^30^0^1^<> select tid, eintrag from semester \
+where substring('' || tid from 5 for 1)='1' \
+and sem_beginn < today() order by tid DESC;^ ^<> select tid, eintrag from semester \
+where substring('' || tid from 5 for 1)='1' \
+and sem_beginn < today() order by tid DESC limit 1;^
+47238^Staatsangehörigkeit^150^0^0^140^150^10^char^30^0^12^<> select tid,name,sortnr from sichten where art='SOS-Staaten-Sicht' order by 3,2;^ ^ ^
+47239^Studiengang^25^0^0^140^150^50^char^1000^0^12^<> select tid,name,sortnr from sichten where art in ('SOS-Kostenstellen-Sicht', 'SOS-Studiengang-Sicht') order by 3,2;^ ^ ^
+47240^Semester^100^0^0^140^80^1^integer^30^0^1^<> select tid, eintrag from semester order by tid DESC;^hidden^ ^
+47241^Stichtag^23^330^-1^130^100^1^sql^30^1^1^<> select tid, name from sos_stichtag where stichtagsart='Studierende';^ ^<> select tid, name from sos_stichtag where stichtagsart='Studierende' and appl_key='1';^
+47243^Jahr^110^0^0^140^80^1^integer^30^0^13^^ ^ ^
+47244^Filter Studierende^100^0^0^140^150^1^sql^20^0^1^<> SELECT id,caption from sx_repository where aktiv =1 and today() between gueltig_seit and gueltig_bis and art='SOS_STUD_FILTER' order by 2;^ ^ ^
+47245^Nur Endsemester^21^0^0^140^80^1^integer^30^0^1^<> select 1,'ja' from xdummy^hidden^ ^
+47246^Matrikel-Nr.^35^350^-1^140^80^1^char^30^0^13^^ ^ ^
+47247^Grafik^1000^300^-1^170^150^1^char^30^0^1^<> --freemarker template\
+<#if K_VIZ_ZEITR_SEM_ANZ?exists>select uniquename, caption from viz_chart where maskeninfo_id=47140 and chart_active=1 order by 2;\
+<#else>\
+select 0,'Keine Visualisierungen verfügbar' from xdummy;\
+#if>^ ^<>--freemarker template\
+<#if K_VIZ_ZEITR_SEM_ANZ?exists>select uniquename, caption from viz_chart where maskeninfo_id=47140 and chart_active=1 order by 2 limit 1;\
+#if>^
+47248^Köpfe oder Fälle ?^0^0^0^140^150^1^sql^70^0^1^<> select apnr, eintrag from koepfe_oder_faelle order by 2^hidden^<> select apnr, eintrag from koepfe_oder_faelle where eintrag = 'Köpfe';^
+47249^tablestylesheet^1500^0^0^100^100^1^char^255^1^1^<> select filename,caption from sx_stylesheets S, sx_mask_style M where S.tid=M.stylesheet_id and M.maskeninfo_id=47140 order by ord^ ^<> select filename,caption from sx_stylesheets S, sx_mask_style M where S.tid=M.stylesheet_id and M.maskeninfo_id=47140 order by ord limit 1^
+47252^Geschlecht^110^0^0^140^80^1^integer^30^0^1^<> SELECT apnr,druck FROM cif where key = 9003 and apnr between 1 and 4 order by 1;^hidden^ ^
+47253^Vergleichshochschule^100^0^0^140^80^1^char^255^0^18^^ ^<> select '../edit/sxc/sxc_hochschule_vergleichsgruppe_list.jsp' from xdummy;^
diff --git a/src-modules/module/sxc/masken/47230_maske_system_bez.unl b/src-modules/module/sxc/masken/47230_maske_system_bez.unl
new file mode 100644
index 0000000..5a3e198
--- /dev/null
+++ b/src-modules/module/sxc/masken/47230_maske_system_bez.unl
@@ -0,0 +1 @@
+47230^360^
diff --git a/src-modules/module/sxc/masken/47230_masken_felder_bez.unl b/src-modules/module/sxc/masken/47230_masken_felder_bez.unl
new file mode 100644
index 0000000..2c80910
--- /dev/null
+++ b/src-modules/module/sxc/masken/47230_masken_felder_bez.unl
@@ -0,0 +1,21 @@
+47230^47230^
+47230^47231^
+47230^47232^
+47230^47233^
+47230^47234^
+47230^47235^
+47230^47236^
+47230^47237^
+47230^47238^
+47230^47239^
+47230^47240^
+47230^47241^
+47230^47243^
+47230^47244^
+47230^47245^
+47230^47246^
+47230^47247^
+47230^47248^
+47230^47249^
+47230^47252^
+47230^47253^
diff --git a/src-modules/module/sxc/masken/47230_maskeninfo.unl b/src-modules/module/sxc/masken/47230_maskeninfo.unl
new file mode 100644
index 0000000..2518451
--- /dev/null
+++ b/src-modules/module/sxc/masken/47230_maskeninfo.unl
@@ -0,0 +1,248 @@
+47230^Studierendenströme Hochschulvergleich (extern)^--Freemarker Template\
+<#include "SQL_lingua_franca"/>\
+<#include "SuperX_general"/>\
+--\
+--Autor D. Quathamer 2024\
+\
+>;]]>\
+\
+\
+\
+\
+>;\
+\
+]]>\
+>\
+/* and C.uniquename in (<>) */\
+order by CL.sortnr\
+ ;\
+]]>\
+= <> */\
+/* and tid <= <> */\
+<#if "<>"="1" || "<>"="2">\
+and substring('' || tid from 5 for 1)='<>'\
+#if>\
+;\
+\
+]]>\
+\
+\
+\
+<#assign semester_filter ="1=1\
+/* and A.sem_rueck_beur_ein >= <> */\
+/* and A.sem_rueck_beur_ein <= <> */\
+" />\
+\
+<#assign filter="1=1\
+/* and A.stichtag = <> */\
+/* and <> */\
+/* and <>*/\
+/* and geschlecht = <> */\
+/* and fach_sem_zahl <= <> */\
+/* and substring('' || sem_rueck_beur_ein from 5 for 1)='<>' */\
+/* and ${<>} */\
+" />\
+\
+<#assign filter= filter + " and " + semester_filter />\
+\
+\
+<#assign filter = filter + " and 's_' || tid_stg in "+Studiengang.allNeededKeysList /> \
+/* <#assign filter = filter + " and '' || ca12_staat in "+Staatsangehörigkeit.allNeededKeysList /> --<> */\
+/* <#assign filter = filter + " and stg in "+Fächer.allNeededKeysList /> --<> */\
+/* <#assign filter = filter + " and tid_stg in (select L2.tid from lehr_stg_ab L2 where L2.abschluss in "+Abschluss.allNeededKeysList +")" /> --<> */\
+\
+create temp table tmp_meta as\
+select\
+ H.hs_nr,\
+ H.name as hochschulinfo_name,\
+ (select datum from systeminfo where tid=7) as datenstand,\
+ (select version from db_version where his_system='sxc') as sxc_version,\
+ (case when K.apnr=1 then 'HISinOne-BI' else 'SuperX' end)::varchar(50) as dwh_name\
+ from hochschulinfo H, konstanten K\
+ where K.beschreibung='PLATTFORM'\
+;\
+\
+\
+create temp table tmp_sos_stud_astat as\
+select \
+dim_studiengang.tid as dim_studiengang_tid,\
+A.sem_rueck_beur_ein as sem_rueck_beur_ein,\
+get_akad_jahr(A.sem_rueck_beur_ein,'P') as jahr,\
+A.kz_rueck_beur_ein as kz_rueck_beur_ein,\
+A.summe as summe,\
+A.matrikel_nr as matrikel_nr,\
+O.sem_rueck_beur_ein as sem_rueck_beur_ein_max,\
+S.sem_beginn,\
+S.sem_ende\
+from semester S, sos_sos O,sos_stg_aggr A\
+left outer join dim_studiengang on (dim_studiengang.tid=A.tid_stg)\
+where O.matrikel_nr=A.matrikel_nr\
+and S.tid=A.sem_rueck_beur_ein\
+and A.studiengang_nr=1\
+and A.fach_nr=1\
+and ${filter}\
+;\
+\
+select \
+ --zuerst die Basisdaten:\
+T.jahr,\
+case when substring('' || T.sem_rueck_beur_ein from 5 for 1)='2' and kz_rueck_beur_ein=3 then summe else 0 end as anfangsbestand,\
+--status Folgesemester:\
+(case when sem_beginn <= current_date and sem_ende >= current_date then '' \
+when sem_rueck_beur_ein_max = sem_rueck_beur_ein then 'nein'\
+when add_sem(T.sem_rueck_beur_ein,1) = T.sem_rueck_beur_ein_max then 'ja'\
+when exists \
+(select S2.matrikel_nr from sos_stg_aggr S2 where S2.matrikel_nr=T.matrikel_nr \
+and S2.sem_rueck_beur_ein=add_sem(T.sem_rueck_beur_ein,1)) then 'ja'\
+when not exists \
+(select S2.matrikel_nr from sos_stg_aggr S2 where S2.matrikel_nr=T.matrikel_nr \
+and S2.sem_rueck_beur_ein=add_sem(T.sem_rueck_beur_ein,1)) then 'nein'\
+else '' end)::varchar(50) as status_folgesem,\
+(case when exists (select L.matrikel_nr\
+from sos_lab_stg L, sos_stichtag I \
+where L.stichtag=I.tid \
+and I.appl_key='2' \
+and L.matrikel_nr=T.matrikel_nr \
+--and L2.stg=tmp_sos_stud_astat.dim_studiengang_stg \
+--and L2.abschluss=tmp_sos_stud_astat.dim_studiengang_abschluss \
+and L.sem_d_abg_pruefung <= T.sem_rueck_beur_ein\
+and L.pstatus='BE' \
+and L.abschnitt=2) then 1 else 0 end) as hauptpruefung,\
+case when T.kz_rueck_beur_ein in (1,2) then T.summe else 0 end as zugang,\
+case when T.kz_rueck_beur_ein in (1) then T.summe else 0 end as zugang_ersteinschr,\
+0::integer as abgang,\
+T.summe as summe,\
+ 0::integer as abgang_hauptpr,\
+ 0::integer as abgang_ohne_hauptpr,\
+ 0::integer as hauptpr_summe,\
+ 0::integer as hauptpr_bleibt,\
+ null::integer as endbestand\
+ into temp tmp_stud\
+ from tmp_sos_stud_astat T\
+ where 1=1 \
+ ;\
+-- select * from tmp_stud;\
+ \
+update tmp_stud set abgang=summe where status_folgesem='nein';\
+update tmp_stud set abgang_hauptpr=summe where status_folgesem='nein' and hauptpruefung=1;\
+update tmp_stud set abgang_ohne_hauptpr=summe where status_folgesem='nein' and hauptpruefung=0;\
+update tmp_stud set hauptpr_summe=summe where hauptpruefung=1;\
+update tmp_stud set hauptpr_bleibt=summe where hauptpruefung=1 and status_folgesem='ja';\
+\
+ --ergebnistabelle:\
+ select \
+ --zuerst die nicht-Aggregate:\
+ jahr,\
+ null::integer as endbestand,\
+ --dann die Aggregate:\
+ sum(abgang) as abgang,\
+ sum(abgang_hauptpr) as abgang_hauptpr,\
+ sum(abgang_ohne_hauptpr) as abgang_ohne_hauptpr,\
+ sum(hauptpr_summe) as hauptpr_summe,\
+ sum(hauptpr_bleibt) as hauptpr_bleibt,\
+ sum(anfangsbestand) as anfangsbestand,\
+ sum(zugang) as zugang,\
+ sum(zugang_ersteinschr) as zugang_ersteinschr,\
+ sum(summe) as summe,\
+ null::char(1) as dummycol\
+ into temp tmp_stud2\
+ from tmp_stud\
+ where 1=1\
+ group by\
+ 1,2\
+ ;\
+update tmp_stud2 set endbestand= anfangsbestand+zugang-abgang;\
+\
+drop table if exists tmp_sos_stud_astat;\
+drop table if exists tmp_stud;\
+ \
+ select \
+M.hs_nr,\
+M.hochschulinfo_name,\
+'Studienjahr' as studienjahr_label,\
+jahr,\
+anfangsbestand,\
+zugang,\
+zugang_ersteinschr,\
+abgang,\
+abgang_hauptpr,\
+abgang_ohne_hauptpr,\
+hauptpr_summe,\
+hauptpr_bleibt,\
+endbestand,\
+M.dwh_name,\
+M.datenstand,\
+M.sxc_version\
+ from tmp_stud2, tmp_meta M\
+ order by 1,2,3,4,5,6,7,8,9,10,11,12,13,14\
+ ;^select xil_proplist from maskeninfo where tid=48000^Studienfach^Anzahl bzw. Anteil^Studierende (Anfangsbestand, Zugang und Abgang) pro Hochschule und Studienjahr^drop table tmp_meta;\
+drop table tmp_stud2;^^2^850^540^^1^<>SELECT description FROM rpta_column_layout where uniquename=<>;^
diff --git a/src-modules/module/sxc/masken/47230_sachgeb_maske_bez.unl b/src-modules/module/sxc/masken/47230_sachgeb_maske_bez.unl
new file mode 100644
index 0000000..8e08f39
--- /dev/null
+++ b/src-modules/module/sxc/masken/47230_sachgeb_maske_bez.unl
@@ -0,0 +1 @@
+360^47230^
diff --git a/src-modules/module/sxc/schluesseltabellen/sx_stylesheets_einfuegen.sql b/src-modules/module/sxc/schluesseltabellen/sx_stylesheets_einfuegen.sql
index 7e30aaf..f62fe3f 100755
--- a/src-modules/module/sxc/schluesseltabellen/sx_stylesheets_einfuegen.sql
+++ b/src-modules/module/sxc/schluesseltabellen/sx_stylesheets_einfuegen.sql
@@ -14,25 +14,40 @@ select sp_table_exists('viz_chart') from xdummy;
<#assign masken = [
{"mask":"47140", "filename":"tabelle_html.xsl", "ord":"10"}
+] />
+<#assign stylesheet = [
] />
<#else>
<#assign masken = [
-{"mask":"47140", "filename":"tabelle_html.xsl", "ord":"10"}
+{"mask":"47140", "filename":"tabelle_html.xsl", "ord":"10"},
+{"mask":"47140", "filename":"viz_html_chart_viewer.xsl", "ord":"20"}
] />
-#if>
-
<#assign stylesheet = [
+{"filename":"viz_html_chart_viewer.xsl",
+"caption":"Diagramm-Viewer (einfach)",
+"description":"Viewer-Stylesheet für VIZ Charts in einer Einzelansicht",
+"relation":"table",
+"contenttype":"text/html",
+"is_generic":"0",
+"toolbar_icon_filepath":"",
+"usage_resultset_data":"T",
+"stylesheet_type":"XSL",
+"jr_datasource":""
+}
] />
+
+#if>
+
+
<#assign stylesheet_field = [
] />
-
--Hier eventuell notwendige delete's auf die Tabellen sx_mask_style, sx_stylesheets oder stylesheet_field einfügen.
<@sx_stylesheets_insert
diff --git a/src-modules/module/sxc/schluesseltabellen/viz_chart.unl b/src-modules/module/sxc/schluesseltabellen/viz_chart.unl
new file mode 100644
index 0000000..d2b7e62
--- /dev/null
+++ b/src-modules/module/sxc/schluesseltabellen/viz_chart.unl
@@ -0,0 +1,23 @@
+324^echarts_line_y_sxc_stud_anteilfs1^Anteil der Studienanfänger_innen (Hochschulvergleich)^ ^{"version":"0.2b","id":1,"name":"","renderer":"echarts","dataSources":[{"value":"0","nr":1,"name":"Tab. 1","isDefault":true}],\
+"targetDiv":"","chartElements":[{"elemID":1,"vizTypeUniquename":"echarts_line_y","caption":"echarts_line_y","datasource":"0","elementTypeProperties":[{"nr":1,"vizTypePropertyUniquename":"x","caption":"X-Achse","propertyValue":"sem_rueck_beur_ein_str","propertyType":"string"},\
+{"nr":1,"vizTypePropertyUniquename":"y","caption":"Y-Achse","propertyValue":"anteil","propertyType":"string"}]},\
+{"elemID":2,"vizTypeUniquename":"echarts_line_y","caption":"echarts_line_y","datasource":"0","elementTypeProperties":[{"nr":2,"vizTypePropertyUniquename":"x","caption":"X-Achse","propertyValue":"sem_rueck_beur_ein_str","propertyType":"string"},\
+{"nr":2,"vizTypePropertyUniquename":"y","caption":"Y-Achse","propertyValue":"sxc_stud_anteil_anf_vergleich1","propertyType":"string"}]},\
+{"elemID":3,"vizTypeUniquename":"echarts_line_y","caption":"echarts_line_y","datasource":"0","elementTypeProperties":[{"nr":3,"vizTypePropertyUniquename":"x","caption":"X-Achse","propertyValue":"sem_rueck_beur_ein_str","propertyType":"string"},\
+{"nr":3,"vizTypePropertyUniquename":"y","caption":"Y-Achse","propertyValue":"sxc_stud_anteil_anf_vergleich2","propertyType":"string"}]}],\
+"chartPropertiesUsed":[{"name":"caption","vizPropertyVariablename":"caption","propertyValue":"Anteil der Studienanfänger_innen (Hochschulvergleich)"}],\
+"dataTransformation":[]}^^^29.04.2026^29.04.2026^47140^^3^ ^^1^800^600^100^60^0^
+323^echarts_line_y_sxc_stud_sh1^Studienanfänger_innen 1. HS (Hochschulvergleich)^ ^{"version":"0.2b","id":1,"name":"","renderer":"echarts","dataSources":[{"value":"0","nr":1,"name":"Tab. 1","isDefault":true}],\
+"targetDiv":"","chartElements":[{"elemID":1,"vizTypeUniquename":"echarts_line_y","caption":"echarts_line_y","datasource":"0","elementTypeProperties":[{"nr":1,"vizTypePropertyUniquename":"x","caption":"X-Achse","propertyValue":"sem_rueck_beur_ein_str","propertyType":"string"},\
+{"nr":1,"vizTypePropertyUniquename":"y","caption":"Y-Achse","propertyValue":"summe_hs1","propertyType":"string"}]}],\
+"chartPropertiesUsed":[{"name":"caption","vizPropertyVariablename":"caption","propertyValue":"Studienanfänger_innen 1. HS (Hochschulvergleich)"},\
+{"name":"x","vizPropertyVariablename":"x","propertyValue":"sem_rueck_beur_ein_str","propUnit":""},\
+{"name":"x","vizPropertyVariablename":"x","propertyValue":"sem_rueck_beur_ein_str","propUnit":""},\
+{"name":"y","vizPropertyVariablename":"y","propertyValue":"summe_hs1","propUnit":""},\
+{"name":"y","vizPropertyVariablename":"y","propertyValue":"summe_hs1","propUnit":""}],\
+"dataTransformation":[]}^^^29.04.2026^29.04.2026^47140^^3^ ^^1^800^600^100^60^0^
+322^echarts_line_y_sxc_vergleich1^Studierende (Hochschulvergleich)^ ^{"version":"0.2b","id":1,"name":"","renderer":"echarts","dataSources":[{"value":"0","nr":1,"name":"Tab. 1","isDefault":true}],\
+"targetDiv":"","chartElements":[{"elemID":1,"vizTypeUniquename":"echarts_line_y","caption":"echarts_line_y","datasource":"0","elementTypeProperties":[{"nr":1,"vizTypePropertyUniquename":"x","caption":"X-Achse","propertyValue":"sem_rueck_beur_ein_str","propertyType":"string"},\
+{"nr":1,"vizTypePropertyUniquename":"y","caption":"Y-Achse","propertyValue":"summe","propertyType":"string"}]}],\
+"chartPropertiesUsed":[{"name":"caption","vizPropertyVariablename":"caption","propertyValue":"Studierende / Studienanfänger_innen (Hochschulvergleich)"}],\
+"dataTransformation":[]}^^^29.04.2026^29.04.2026^47140^^3^ ^^1^800^600^100^60^0^
diff --git a/src-modules/module/sxc/schluesseltabellen/viz_chart_fuellen.sql b/src-modules/module/sxc/schluesseltabellen/viz_chart_fuellen.sql
new file mode 100644
index 0000000..029a33d
--- /dev/null
+++ b/src-modules/module/sxc/schluesseltabellen/viz_chart_fuellen.sql
@@ -0,0 +1,64 @@
+--freemarker template
+
+
+select count(*) from systeminfo where tid=320;
+
+
+
+<#if viz_installed==1>
+
+delete from viz_chart where uniquename in (select uniquename from tmp_viz_chart)
+and is_custom=0;
+
+select sp_update_sequence('viz_chart');
+
+insert into viz_chart(
+uniquename,
+ caption,
+ description,
+ chartmodel,
+ preview_svg,
+ userinfo_id,
+ creation_date,
+ update_date,
+ maskeninfo_id,
+ mask_params,
+ renderer_id,
+ chartmodel_miniature,
+ chart_position,
+ chart_active,
+ chart_width,
+ chart_height,
+ chart_miniature_width,
+ chart_miniature_height,
+ is_custom)
+ select
+
+uniquename,
+ caption,
+ description,
+ chartmodel,
+ preview_svg,
+ userinfo_id,
+ creation_date,
+ update_date,
+ maskeninfo_id,
+ mask_params,
+ renderer_id,
+ chartmodel_miniature,
+ chart_position,
+ chart_active,
+ chart_width,
+ chart_height,
+ chart_miniature_width,
+ chart_miniature_height,
+ is_custom
+FROM tmp_viz_chart
+where is_custom=0;
+
+#if>
+
+
+drop table tmp_viz_chart;
+
+
diff --git a/src-modules/module/sxc/schluesseltabellen/viz_chart_unload.x b/src-modules/module/sxc/schluesseltabellen/viz_chart_unload.x
new file mode 100755
index 0000000..ac9755a
--- /dev/null
+++ b/src-modules/module/sxc/schluesseltabellen/viz_chart_unload.x
@@ -0,0 +1,33 @@
+#!/bin/bash
+#entlädt nur die charts, die Teil der Auslieferung sind:
+
+DOQUERY "select tid,
+ uniquename,
+ caption,
+ description,
+ chartmodel,
+ preview_svg,
+ userinfo_id,
+ creation_date,
+ update_date,
+ maskeninfo_id,
+ mask_params,
+ renderer_id,
+ chartmodel_miniature,
+ chart_position,
+ chart_active,
+ chart_width,
+ chart_height,
+ chart_miniature_width,
+ chart_miniature_height,
+ is_custom --,
+ -- js_handler ,
+ -- chart_card_class,
+ -- chart_container_class,
+ -- chart_container_id,
+ -- chart_class_name,
+ -- chart_element_id,
+ -- chart_title_position
+ from viz_chart where is_custom=0 and maskeninfo_id=47140 order by uniquename" false ^ viz_chart.unl txt
+
+
diff --git a/src-modules/module/sxc/schluesseltabellen/viz_chart_upload.x b/src-modules/module/sxc/schluesseltabellen/viz_chart_upload.x
new file mode 100755
index 0000000..2a64955
--- /dev/null
+++ b/src-modules/module/sxc/schluesseltabellen/viz_chart_upload.x
@@ -0,0 +1,33 @@
+#!/bin/bash
+#lädt nur die charts, die Teil der Auslieferung sind:
+
+DOQUERY "drop table if exists tmp_viz_chart ;"
+DOQUERY "create table tmp_viz_chart(
+tid SERIAL not null,
+uniquename VARCHAR(255) not null,
+caption VARCHAR(255) ,
+description TEXT ,
+chartmodel TEXT ,
+preview_svg TEXT ,
+userinfo_id INTEGER ,
+creation_date DATE default today(),
+update_date DATE default today(),
+maskeninfo_id INTEGER ,
+mask_params TEXT ,
+renderer_id INTEGER ,
+chartmodel_miniature TEXT ,
+chart_position CHAR(10) ,
+chart_active SMALLINT default 1 ,
+chart_width VARCHAR(255) default '600' ,
+chart_height VARCHAR(255) default '400' ,
+chart_miniature_width VARCHAR(255) default '200' ,
+chart_miniature_height VARCHAR(255) default '100' ,
+is_custom SMALLINT
+
+)
+;"
+
+sx_auto_upload_table.x tmp_viz_chart viz_chart.unl
+
+DOSQL viz_chart_fuellen.sql
+