diff --git a/homepage/cwsvHomepage/forms/cwsvAufnahmeantrag.pdf b/homepage/cwsvHomepage/forms/cwsvAufnahmeantrag.pdf index a096017..0555296 100644 Binary files a/homepage/cwsvHomepage/forms/cwsvAufnahmeantrag.pdf and b/homepage/cwsvHomepage/forms/cwsvAufnahmeantrag.pdf differ diff --git a/homepage/cwsvHomepage/forms/cwsvGebuehrenordnung.pdf b/homepage/cwsvHomepage/forms/cwsvGebuehrenordnung.pdf index 7636ec2..fff21bc 100644 Binary files a/homepage/cwsvHomepage/forms/cwsvGebuehrenordnung.pdf and b/homepage/cwsvHomepage/forms/cwsvGebuehrenordnung.pdf differ diff --git a/homepage/participo/.vscode/launch.json b/homepage/participo/.vscode/launch.json index 35e98dd..ba74655 100644 --- a/homepage/participo/.vscode/launch.json +++ b/homepage/participo/.vscode/launch.json @@ -6,7 +6,7 @@ "configurations": [ { "name": "post", - "type": "python", + "type": "debugpy", "request": "launch", "program": "testApi.py", "console": "integratedTerminal", @@ -18,7 +18,7 @@ }, { "name": "getTrainees", - "type": "python", + "type": "debugpy", "request": "launch", "program": "testApi.py", "console": "integratedTerminal", @@ -26,5 +26,17 @@ "args": [ "GET", "--endpoint", "trainees" ] - } ] + }, + { + "name": "bdCheck", + "type": "debugpy", + "request": "launch", + "program": "bdCheck.py", + "console": "integratedTerminal", + "justMyCode": true, + "args": [ + + ] + }, + ] } \ No newline at end of file diff --git a/homepage/participo/bdCheck.py b/homepage/participo/bdCheck.py index 517ff82..66584ca 100644 --- a/homepage/participo/bdCheck.py +++ b/homepage/participo/bdCheck.py @@ -3,71 +3,109 @@ from datetime import datetime from MatrixIm import MatrixIm -def get_days_since_birthday(birthday: datetime.date, today: datetime.date=datetime.now()) -> int: +def get_days_since_birthday( + birthday: datetime.date, today: datetime.date = datetime.now() +) -> int: # get number of days distance to birthday in this year: this_year = (datetime(today.year, birthday.month, birthday.day) - today).days # The birthday is already past return it if this_year <= 0: return this_year # otherwise we have to take the distance to last years birthday - return (datetime(today.year-1, birthday.month, birthday.day) - today).days + return (datetime(today.year - 1, birthday.month, birthday.day) - today).days -def get_days_until_birthday(birthday: datetime.date, today: datetime.date=datetime.now()) -> int: + +def get_days_until_birthday( + birthday: datetime.date, today: datetime.date = datetime.now() +) -> int: # get number of days distance to birthday in this year: this_year = (datetime(today.year, birthday.month, birthday.day) - today).days # The birthday is already past return it if this_year >= 0: return this_year # otherwise we have to take the distance to next years birthday - return (datetime(today.year+1, birthday.month, birthday.day) - today).days - + return (datetime(today.year + 1, birthday.month, birthday.day) - today).days with open("testApi.config.yaml", "r") as yaml_file: from yaml import safe_load + config = safe_load(yaml_file) -trainees = [{ - "name": {"family": t['name'], "given": t['vorname']} - , "date_of_birth": datetime.strptime(t['gebDatum'], "%Y-%m-%d") -} for t in testApi.apiCall.call( +response = testApi.apiCall.call( method="GET", host="cwsvJudo.bplaced.net", url="participo/api/trainees", - headers={ - "Authorization": f"Basic: {config['apiKey']}" - } -) if t['gebDatum'] not in [None, "0000-00-00"]] - - -MatrixIm.post( - message="last birthdays: \n" + "\n".join([ - f"- {t['name']['given']} {t['name']['family']}: {get_days_since_birthday(t['date_of_birth'])} ({t['date_of_birth'].strftime('%d.%m.')})" - for t in sorted( - [t for t in trainees if get_days_since_birthday(t['date_of_birth'])>-14] - , key=lambda t: get_days_since_birthday(t['date_of_birth']) - ) - ]) - , home_server_url="https://matrix.org" - , room_id="!vFXxgKsLbRLdWCSTIO:matrix.org" - , credentials={ - 'user': "@ukenth-the-grumpy:matrix.org" - , 'password': "DQpSs1yn9Y26c1zo" - } + headers={"Authorization": f"Basic: {config['apiKey']}"}, ) -MatrixIm.post( - message="next birthdays: \n" + "\n".join([ - f"- {t['name']['given']} {t['name']['family']}: {get_days_until_birthday(t['date_of_birth'])} ({t['date_of_birth'].strftime('%d.%m.')})" - for t in sorted( - [t for t in trainees if get_days_until_birthday(t['date_of_birth'])<14] - , key=lambda t: get_days_until_birthday(t['date_of_birth']) +try: + trainees = [ + { + "name": {"family": t["name"], "given": t["vorname"]}, + "date_of_birth": datetime.strptime(t["gebDatum"], "%Y-%m-%d"), + } + for t in testApi.apiCall.call( + method="GET", + host="cwsvJudo.bplaced.net", + url="participo/api/trainees", + headers={"Authorization": f"Basic: {config['apiKey']}"}, ) - ]) - , home_server_url="https://matrix.org" - , room_id="!vFXxgKsLbRLdWCSTIO:matrix.org" - , credentials={ - 'user': "@ukenth-the-grumpy:matrix.org" - , 'password': "DQpSs1yn9Y26c1zo" - } -) \ No newline at end of file + if t["gebDatum"] not in [None, "0000-00-00"] + ] + + MatrixIm.post( + message="last birthdays: \n" + + "\n".join( + [ + f"- {t['name']['given']} {t['name']['family']}: {get_days_since_birthday(t['date_of_birth'])} ({t['date_of_birth'].strftime('%d.%m.')})" + for t in sorted( + [ + t + for t in trainees + if get_days_since_birthday(t["date_of_birth"]) > -14 + ], + key=lambda t: get_days_since_birthday(t["date_of_birth"]), + ) + ] + ), + home_server_url="https://matrix.org", + room_id="!vFXxgKsLbRLdWCSTIO:matrix.org", + credentials={ + "user": "@ukenth-the-grumpy:matrix.org", + "password": "DQpSs1yn9Y26c1zo", + }, + ) + + MatrixIm.post( + message="next birthdays: \n" + + "\n".join( + [ + f"- {t['name']['given']} {t['name']['family']}: {get_days_until_birthday(t['date_of_birth'])} ({t['date_of_birth'].strftime('%d.%m.')})" + for t in sorted( + [ + t + for t in trainees + if get_days_until_birthday(t["date_of_birth"]) < 14 + ], + key=lambda t: get_days_until_birthday(t["date_of_birth"]), + ) + ] + ), + home_server_url="https://matrix.org", + room_id="!vFXxgKsLbRLdWCSTIO:matrix.org", + credentials={ + "user": "@ukenth-the-grumpy:matrix.org", + "password": "DQpSs1yn9Y26c1zo", + }, + ) +except Exception as e: + MatrixIm.post( + message=f"bdCheck: Exception {e} ({repr(e)})\nResponse was {response}", + home_server_url="https://matrix.org", + room_id="!vFXxgKsLbRLdWCSTIO:matrix.org", + credentials={ + "user": "@ukenth-the-grumpy:matrix.org", + "password": "DQpSs1yn9Y26c1zo", + }, + ) diff --git a/infoZettelOrg/.vscode/settings.json b/infoZettelOrg/.vscode/settings.json index 2ac4e3a..52afae8 100644 --- a/infoZettelOrg/.vscode/settings.json +++ b/infoZettelOrg/.vscode/settings.json @@ -1,6 +1,11 @@ { - "cSpell.language": "de-DE", - "cSpell.words": [ - "Generationenturnier" - ] + "cSpell.language": "de-DE", + "cSpell.words": [ + "Generationenturnier", + "Goshi", + "hallengerechte", + "Karateka", + "Little", + "Sachsenhalle" + ] } diff --git a/infoZettelOrg/eMailReceiverLists/digiPassDsvgo.json b/infoZettelOrg/eMailReceiverLists/digiPassDsvgo.json new file mode 100644 index 0000000..d3aad53 --- /dev/null +++ b/infoZettelOrg/eMailReceiverLists/digiPassDsvgo.json @@ -0,0 +1,278 @@ +[ + { + "id": "1", + "loginName": "marko", + "pwHash": "$2y$10$Dw0HYuSGqU58lpRp0Em46.b.X0KYTrUNtgdkIH6lWVWOnD.lMvuJS", + "pwAlg": "", + "name": "Bunzel", + "vorname": "Marko", + "gebDatum": "1982-05-22", + "kinder": "1,2,13,30,40,45,49,80,82,83,84,89,93,95,97,98,99,100", + "eltern": "", + "eMail": [ + "cwsvjudo@arcor.de" + ], + "attribute": "wantsNewsletter=true", + "config": "{\"colors\":{\"backgroundColor\":\"#7f7f7f\",\"highlightColor\":\"#3f3f3f\",\"buttonColor\":\"#1f1f1f\"}}", + "corona_eMail": "marko.bunzel@arcor.de", + "corona_telephon": "015901631103", + "corona_PLZ": "09117", + "machsUploadUrl": "https://www.magentacloud.de/share/itaja0u0ho", + "machsUploadPw": "dohk3Ei0" + }, + { + "id": "2", + "loginName": "NickW", + "pwHash": "$2y$10$I9KY//8lSiOVhN.MTqQk0.G4PejVSa82yoGjFhBTaU7fYQ3AuY5de", + "pwAlg": "", + "name": "Weidensager", + "vorname": "Nick", + "gebDatum": "1997-05-02", + "kinder": "2", + "eltern": "", + "eMail": [ + "nick.weidensager@web.de" + ], + "attribute": "wantsNewsletter=true", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "https://www.magentacloud.de/share/jnz7kxem1p", + "machsUploadPw": "ooz6va0E" + }, + { + "id": "6", + "loginName": "AlexanderDumler", + "pwHash": "", + "pwAlg": "", + "name": "Dumler", + "vorname": "Alexander", + "gebDatum": "0000-00-00", + "kinder": "7", + "eltern": "", + "eMail": [ + "alled82@gmx.de" + ], + "attribute": "wantsNewsletter=true", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "", + "machsUploadPw": "" + }, + { + "id": "7", + "loginName": "ArthurDumler", + "pwHash": "", + "pwAlg": "", + "name": "Dumler", + "vorname": "Arthur", + "gebDatum": "2007-12-24", + "kinder": "", + "eltern": "6", + "eMail": [ + "dumlerarthur2412@gmail.com" + ], + "attribute": "", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "https://www.magentacloud.de/share/9h8jg3qojw", + "machsUploadPw": "ne4Meit4" + }, + { + "id": "20", + "loginName": "elternBrittnacher", + "pwHash": "$2y$10$HBejDZ.Ke7bYoaRZcATwAeTb.qqb1WjdzWho.aI987sOVFtMDlc62", + "pwAlg": "", + "name": "Brittnacher", + "vorname": "Eltern", + "gebDatum": "0000-00-00", + "kinder": "19", + "eltern": "", + "eMail": [ + "stephanie.brittnacher@gmail.com" + ], + "attribute": "wantsNewsletter=true", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "", + "machsUploadPw": "" + }, + { + "id": "59", + "loginName": "fuchshund", + "pwHash": "$2y$10$5d8bWf/xSktW/QNDDsdeC.tm1gJok7FGCpBcauUuiFg3ezWWcyoHu", + "pwAlg": "", + "name": "Ulbricht", + "vorname": "Thomas", + "gebDatum": "0000-00-00", + "kinder": "19", + "eltern": "", + "eMail": [ + "thomas@blankfuchs.de" + ], + "attribute": "wantsNewsletter=true", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "", + "machsUploadPw": "" + }, + { + "id": "85", + "loginName": "elternGerlach", + "pwHash": "$2y$10$WfSIntzXxRbfmFXi7fFV4ehHXyOdBwPArWYl1tzu6VWcDQBfeI1b2", + "pwAlg": "", + "name": "Gerlach", + "vorname": "Eltern", + "gebDatum": "0000-00-00", + "kinder": "82,83,84", + "eltern": "", + "eMail": [ + "manja.bunzel@gmx.de", + "michael_gerlach@gmx.net" + ], + "attribute": "", + "config": "", + "corona_eMail": "manja.bunzel@gmx.de", + "corona_telephon": "01637529146", + "corona_PLZ": "09224", + "machsUploadUrl": "", + "machsUploadPw": "" + }, + { + "id": "103", + "loginName": "elternBoehme", + "pwHash": "$2y$10$wvmShRitXx12hKy8uGogQemifFPOJ1O0/g5Ne5.ht672BJPE51CYK", + "pwAlg": "", + "name": "B\u00f6hme", + "vorname": "Eltern", + "gebDatum": "0000-00-00", + "kinder": "102", + "eltern": "", + "eMail": [ + "jeannette.boehme@mail.de", + "marcus.boehme@mail.de" + ], + "attribute": "", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "", + "machsUploadPw": "" + }, + { + "id": "108", + "loginName": "elternRichter", + "pwHash": "", + "pwAlg": "", + "name": "Richter", + "vorname": "Eltern", + "gebDatum": "0000-00-00", + "kinder": "106,107", + "eltern": "", + "eMail": [ + "grericht@gmail.com" + ], + "attribute": "", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "", + "machsUploadPw": "" + }, + { + "id": "110", + "loginName": "elternOrtmans", + "pwHash": "", + "pwAlg": "", + "name": "Ortmans", + "vorname": "Eltern", + "gebDatum": "0000-00-00", + "kinder": "109", + "eltern": "", + "eMail": [ + "jortmans@gmx.de" + ], + "attribute": "", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "", + "machsUploadPw": "" + }, + { + "id": "113", + "loginName": "ElternEberlein", + "pwHash": "", + "pwAlg": "", + "name": "Eberlein", + "vorname": "Eltern", + "gebDatum": "0000-00-00", + "kinder": "111,112", + "eltern": "", + "eMail": [ + "jana.eberlein@yahoo.de" + ], + "attribute": "", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "", + "machsUploadPw": "" + }, + { + "id": "115", + "loginName": "elternKutschmann", + "pwHash": "", + "pwAlg": "", + "name": "Kutschmann", + "vorname": "Eltern", + "gebDatum": "0000-00-00", + "kinder": "114", + "eltern": "", + "eMail": [ + "uwe.schwerdtfeger@uni-dortmund.de", + "pia.kutschmann@uni-dortmund.de" + ], + "attribute": "", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "", + "machsUploadPw": "" + }, + { + "id": "119", + "loginName": "elternBondar", + "pwHash": "", + "pwAlg": "", + "name": "Bondar", + "vorname": "Eltern", + "gebDatum": "0000-00-00", + "kinder": "118", + "eltern": "", + "eMail": [ + "bondar.mata@gmail.com" + ], + "attribute": "", + "config": "", + "corona_eMail": "", + "corona_telephon": "", + "corona_PLZ": "", + "machsUploadUrl": "", + "machsUploadPw": "" + } +] diff --git a/infoZettelOrg/newsletter/KW03-Trainingsverlegung.md b/infoZettelOrg/newsletter/KW03-Trainingsverlegung.md index 399228a..6d212bf 100644 --- a/infoZettelOrg/newsletter/KW03-Trainingsverlegung.md +++ b/infoZettelOrg/newsletter/KW03-Trainingsverlegung.md @@ -25,7 +25,6 @@ Die Großen haben sich entschieden, dieses Mal bei Tischtennis mitzumachen: - Hallengerechte Sportkleidung (Schuhe mit abriebfesten, hellen Sohlen) - Wer kann, bring bitte seinen eigenen Schläger mit. Wer keinen haben sollte: 4 hätte ich zum ausleihen. - ## Schwimmtreff 19.01.25 Wer möchte, kann mich am Sonntag, dem 19.01.2025 zum Schwimmen begleiten, denn zusammen mach Sport mehr Spaß: diff --git a/infoZettelOrg/newsletter/KW04-NoSwimming.md b/infoZettelOrg/newsletter/KW04-NoSwimming.md new file mode 100644 index 0000000..7bfc38d --- /dev/null +++ b/infoZettelOrg/newsletter/KW04-NoSwimming.md @@ -0,0 +1,46 @@ +--- +title: Newsletter KW04 +--- + +Hallo liebe Eltern, +hallo liebe Judoka! + +- [Absage Schwimmtreff 25.01.25](#absage-schwimmtreff-250125) +- [Erinnerung Trainingsverlegung am 24.01.25](#erinnerung-trainingsverlegung-am-240125) +- [Ankündigung Training in Selbstverteidigung](#ankündigung-training-in-selbstverteidigung) +- [Anstehende Wettkämpfe](#anstehende-wettkämpfe) + +## Absage Schwimmtreff 25.01.25 + +Leider muss ich zumindest meine Beteiligung am Schwimmtreff dieses Wochenende leider absagen. Ihr könnt natürlich trotzdem Schwimmen gehen. + +## Erinnerung Trainingsverlegung am 24.01.25 + +Am Freitag, dem 24.01.2025, tauschen wir wieder einmal mit den Karateka den Trainingsort und trainieren im [Gymnastikraum der Sachsenhalle][mapSachsenhalle]. Für die Kleinen-Training heißt das: + +- 24.01.2025 +- 16:00 -- 17:45 Uhr +- [Gymnastikraum der Sachsenhalle][mapSachsenhalle] + +Die Großen haben sich entschieden, dieses Mal bei Tischtennis mitzumachen: + +- 24.01.2025 +- 18:00 -- 19:30 Uhr +- [Gymnastikraum der Sachsenhalle][mapSachsenhalle] +- hallengerechte Sportkleidung (Schuhe mit abriebfesten, hellen Sohlen) +- Wer kann, bring bitte seinen eigenen Schläger mit. Wer keinen haben sollte: 4 hätte ich zum ausleihen. + +## Ankündigung Training in Selbstverteidigung + +Am 14.02. werden wir im Freitagstraining der Großen eine Einheit Selbstverteidigungstraining absolvieren. Dazu kommt ein Gasttrainer von Karate zu uns. Wäre natürlich schön wenn sich die Großen den Termin freihalten, damit sich der Gastrainerauftritt auch lohnt. + +## Anstehende Wettkämpfe + +- 2025-02-08 - [24. Neujahrsturnier][wkNJT-A] (U9, U13, F, M, Ü30) +- 2025-02-09 - [24. Neujahrsturnier][wkNJT-B] (U11, U15, U18) +- 2025-02-16 - [Little Otto Goshi Liga][wkLOGL-A] (U9, U11) + +[mapSachsenhalle]: https://osm.org/go/0MIYhooV9-- +[wkNJT-A]: http://cwsvjudo.bplaced.net/participo/event#234 +[wkNJT-B]: http://cwsvjudo.bplaced.net/participo/event#235 +[wkLOGL-A]: http://cwsvjudo.bplaced.net/participo/events#246 diff --git a/infoZettelOrg/newsletter/KW07-SV.md b/infoZettelOrg/newsletter/KW07-SV.md new file mode 100644 index 0000000..aed1030 --- /dev/null +++ b/infoZettelOrg/newsletter/KW07-SV.md @@ -0,0 +1,18 @@ +--- +title: Newsletter KW07 +--- + +Hallo liebe Eltern, +hallo liebe Judoka! + +## Erinnerung Training in Selbstverteidigung + +Diesen Freitag wird beim Training der Großen ein Gasttrainer eine kleine Einheit Selbstverteidigung halten. Daher noch einmal der Appell an die Großen zahlreich zu erscheinen, damit sich der Gastrainerauftritt auch lohnt. + +## Absage Schwimmtreff 16.02.25 + +Am 16.02. wird es wegen des ersten Kampftages der [Little-Otto-Goshi-Liga][wkLOGL-A] leider keinen Schwimmtreff geben. + +MsG marko + +[wkLOGL-A]: http://cwsvjudo.bplaced.net/participo/events#246 diff --git a/infoZettelOrg/newsletter/KW11-DigitalerPassDsvgo.md b/infoZettelOrg/newsletter/KW11-DigitalerPassDsvgo.md new file mode 100644 index 0000000..f9de555 --- /dev/null +++ b/infoZettelOrg/newsletter/KW11-DigitalerPassDsvgo.md @@ -0,0 +1,12 @@ +--- +title: Digitaler Judo Pass - DSVGO +--- + +Hallo liebe Judoka, +hallo liebe Eltern! + +Im Jahre 2025 wird der alte Judopass in Papierform abgelöst von einer digitalen Version. Ich bin derzeit im Prozess der Übernahme der alten Pässe in das neue System. Die persönlichen Daten der Judoka, die bisher im Pass standen, werden nun digital gespeichert und verarbeitet. Dazu benötige ich Eure Zustimmung. Das ganze kann durch eine einfache Antwort - Ja/Nein - auf diese E-Mail erledigt werden. Wer vorher gerne noch mehr über den digitalen Judopass erfahren möchte, kann auch gerne nachfragen. + +Bitte gebt mir eine kurze Ja/Nein-Rückmeldung, ob ich eure Pässe digitalisieren darf. + +MsG marko diff --git a/mitglieder/passdaten.md b/mitglieder/passdaten.md index 86bdfe3..faa1e34 100644 --- a/mitglieder/passdaten.md +++ b/mitglieder/passdaten.md @@ -17,4 +17,5 @@ | Richter | Friedrich | 2008-10-03 | Chemnitz | deutsch | M | 2024-05-25 | 24008882 | | Richter | August | 2012-06-14 | Chemnitz | deutsch | M | 2024-05-25 | 24008883 | | Chernov | Artem | 2016-05-23 | Charkow | ukrainisch | M | 2024-05-25 | 24008884 | -| Leonie | Ortmans | 2014-05-16 | Stolberg (Rheinland) | deutsch | F | 2024-05-25 | 24008885 | +| Ortmans | Leonie | 2014-05-16 | Stolberg (Rheinland) | deutsch | F | 2024-05-25 | 24008885 | +| Eberlein | Johanna | 2015-12-08 | (Chemnitz) | (deutsch) | F | | | \ No newline at end of file diff --git a/org/unfallmeldung-2025-02-08-LeonieOrtmans.pdf b/org/unfallmeldung-2025-02-08-LeonieOrtmans.pdf new file mode 100644 index 0000000..b0eb722 Binary files /dev/null and b/org/unfallmeldung-2025-02-08-LeonieOrtmans.pdf differ diff --git a/org/unfallmeldung-2025-02-08-NickWeidensager.pdf b/org/unfallmeldung-2025-02-08-NickWeidensager.pdf new file mode 100644 index 0000000..30a81c8 Binary files /dev/null and b/org/unfallmeldung-2025-02-08-NickWeidensager.pdf differ diff --git a/org/verein/ÜL-Abrechnungsbogen-MarkoBunzel-2024-2HJ.pdf b/org/verein/ÜL-Abrechnungsbogen-MarkoBunzel-2024-2HJ.pdf new file mode 100644 index 0000000..53697ea Binary files /dev/null and b/org/verein/ÜL-Abrechnungsbogen-MarkoBunzel-2024-2HJ.pdf differ diff --git a/org/verein/ÜL-Abrechnungsbogen-NickWeidersager-2024-2HJ.pdf b/org/verein/ÜL-Abrechnungsbogen-NickWeidersager-2024-2HJ.pdf new file mode 100644 index 0000000..83c5d4a Binary files /dev/null and b/org/verein/ÜL-Abrechnungsbogen-NickWeidersager-2024-2HJ.pdf differ