Der Formular-Dashboard-Link (Gruppe "IT", IT Object ueber it_landscape)
war auf erpnext.itsdave.de seit dem 2026-04-24 in der Datenbank aktiv,
lag aber nur als uncommittete developer_mode-Rueckschreibung im
Produktivbaum und waere beim naechsten Checkout verloren gewesen.
Mitgenommen: naming_rule "Expression (old style)" -> "Expression" und
row_format "Dynamic" (beides Frappe-Normalisierung beim Speichern).
get_attendance_list fragte den DocType `Attendance` ab, den es seit dem
v16-Stand ohne hrms nicht mehr gibt. Der DoesNotExistError riss die
gesamte Kette get_data -> compare_hours -> get_target_hours mit, der
Dashboard-Chart "Meine Performance" blieb fuer alle Nutzer auf "Loading"
haengen (ITSD-22440).
Quelle sind jetzt genehmigte HR Absence Requests, deren Abwesenheitsart
das Soll reduziert (HR Absence Type.affects_target_hours). Halbe Tage
(half_day_start/half_day_end) halbieren das Tagessoll.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Das von uv gebundelte Python (python-build-standalone) bringt OpenSSL
ohne legacy-Provider mit, weshalb hashlib.new('md4') fehlschlägt. ldap3
braucht MD4 aber für NTLM-Auth gegen AD - sichtbar im Workflow-Schritt
'5. AD Computer-Daten speichern' der MSP Documentation als Fehler
'unsupported hash type MD4'.
- Monkey-Patch in tactical-rmm.py: hashlib.new('md4') fällt auf
pycryptodome's MD4 zurück
- pycryptodome zu requirements.txt hinzugefügt
- Toten Prototyp active_directory_tools.py entfernt (nicht importiert,
Logik längst in tactical-rmm.py:fetch_and_store_ad_user_data übernommen)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>