Skip to main content

ArbeitszeitCheck - Releases

← App details

Nextcloud 35

ArbeitszeitCheck 1.2.6
Release Details
UpdatedApril 24, 2026, 10:32 a.m.
Changelog

Hinzugefügt

  • Forensik bei Abwesenheitsfreigaben: approved_by_user_id wird nun direkt am Abwesenheitsdatensatz gespeichert (Freigabe/Ablehnung/Auto-Freigabe), inkl. Migration und API-Ausgabe.

Geändert

  • Integrität der Urlaubsanspruch-Snapshots: Deterministisches Key-Upsert auf (user_id, period_key, as_of_date) ergänzt und per Migrations-Unique-Index auf Datenbankebene abgesichert.
  • Nebenläufigkeitskontrolle in kritischen Workflows: Create/Update/Approve/Reject/Substitute-Flows sind nun mit nutzerspezifischen Mutations-Locks plus transaktionalen Rechecks/Row-Locks abgesichert, um Race-Conditions bei Überschneidungen und Überfreigaben zu verhindern.
  • Release-Absicherung: Workflow-bezogene Unit- und Integrationstests wurden auf die gehärteten Mutationspfade angepasst und erfolgreich ausgeführt.

Behoben

  • Legacy-Snapshot-Reparaturpfad: Upsert behandelt historische fehlerhafte Zeilen sowie parallele Unique-Key-Konflikte robust via deterministischem Retry-Update.
  • Race-Condition bei Resturlaub-Updates: VacationYearBalanceMapper::upsert löst gleichzeitige Unique-Key-Konflikte jetzt per Re-Read/Update-Fallback.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureFCaNQEccscnzM6rLSgigNgiMK//Ogy4aLpQQ02I290SKuEd1galIkTleu42bUC3jUHSHpnmIDlaOC359unS4KGTEy3nmCdndzTjnZo6r+Pbk9+/vFkufLmhW6rckhWRuZ5FaTDQEtSuZXf/xGdfbdoy0emnIb+n76unzaXXDRbRwiofg80WVWY3ejgfixFajIBo0pYBiWHsjvjA66KtZXYxALqBikSLtr7Qo2BNssYqyDpxnPXjrpabkjwefBgBEro9vtBMgdxO1BiXf2R7YQK7tdea1b1+Z0SPhktPHoetniDAHnLzFucaQdwMVT4jiqwldo5wArfOLOWnFHa3jBDLUVc3RCov3/euMcr2GKxwYR6Zxjuwb++CAMTv4wKuKhju4tfWm6KQfUXCVMciK56XxAvwhf0FzlGBpT0+YORUBc7r0OSm1SbO5R8E6wOF6sUM9QhQCz+VFFyo5QEXxME0pV+yDzFFCBCulYH5VFq+cTXXZ9Cg7LaafpLP0dm3xJ+bnjLf/sNziApiMCQsOvK5DQ/tH6NS1qf87PZdb2FeciFFCO9eZw5JP842ePPPdbfq6hhz36BOv2gHqY3b4ze2H8Jp08II7/a3FWKbkz0nXN0G0HLQYDkBAa22Sn/c6Io6hGcQI/0fuW8pHJjhI6VgoCZpdY+dVD00/7Pu/HXw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.5
Release Details
UpdatedApril 22, 2026, 7:23 p.m.
Changelog

Geändert

  • Release-Paket aktualisiert: App-Metadaten auf 1.2.5 angehoben und den signierten Release-Artefaktsatz für App-Store- und GitHub-Veröffentlichung neu erzeugt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureZpb9Oh1bIRpGiO5z2K6o3xhzr43wa8RdfzfLXHg7sEGwS8tzN8GaAdyCnk4IoZbFQbrcrwdyFCK2ifzBqN9OrxHGAqGpFLeQOaHUDcH/imXCIFxYAch8kwW545iujuTkvSBdlIFa+DAG6lFFRngQPO2aO9gC1B0Vp6wLTAjI5NDNeM6nVNyCIhbvaC4jUfIrTjrCfvgQ4hgpJ29pYU0GdY6bEgwKCQQgUuJVEB6Hoay1M40Xq8eLzdT/UfobFlC1nV4Anda02g1AeoM04FrJQUfD6lCo0s5pFYAJ82EM5OyzWwi/xgEv4y54tao/UBX6yoUvIdHa7yh6bfoKy0dQmzb+iHl8eQTAzCVQAgWWu58F5J+k884kYMwBNBdcuymPnszTlypmrQoRRjvI+UI2f8taEikdX2EUAbwHkBU8U8CG98NogPFy/w9drgLqq6gvBCtuuz3BLC7fsEfA2/Lx4XYEwCdbvoFMc2GNZJMIujhs1jsbk0Hzscz3NCmaILzbZpfKr59xfZy/bxNl2Yi8nl6L9tJRyaLdxJ7urZthACHIdATnAqGretxEcTox69OnoR+Pir+0N/8ujZ3Z2K2C/5zu/QGwGgaz+WeoKCwGjmTb3JCG3jh340kFLnp8TnzUiZpduSj4Bz4o7yojTzFAPoQrTUYZrv0llb8PGSoPI8w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.4
Release Details
UpdatedApril 22, 2026, 7:18 p.m.
Changelog

Geändert

  • Release-Stand veröffentlichbar gemacht: App-Metadaten auf 1.2.4 angehoben und ein neuer signierter Release-Artefaktsatz (Archiv, Checksummen, App-Store-Signatur) für App-Store-/GitHub-Veröffentlichung erstellt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturefOspm7RunA6JBPSZZ3vwdD+rRVZ5qOeMbZFcndytc+ZU00QoTdCYDFaEsDlUZtuCnpLGgwQ1x8o0jBhi409JtsZrNyD99XhzBZCKNl/nysKo/jDLa3h1msZ/AWKtjJUlyLxEPvPLzM2e/bg7DVOJKi0lsvq6nmUxJEhlLmhdgaONOlbAsBdtrtTKOO7DSxslFRRW0fmofVEdH8lL+5y0l/RtV5Gd6bMtpQ5bzHSoai9OMuOBFJ98QX9k/vX4qAuJUGVRvivJmMXDmiD/kPvezmia5no32RbXtYgYBUVY3Y9kfOza3mdFIwlHSD0bnjCI22QWUCBa5v59k+OuMPzPxCy+bzBl/M6Fu09TrNCDJvejpF/y9vKl7Wxgdz4ynaA2EZZ+RN15cGiTdOWVzjcWtnXBMSh9RCnBZqSCz8dFq1qVLUy16lBciLRNa6HofkEvemUN1oLbokZKLQlyXMFNxT8Ny3udUaOa5qKFDLbwgTttFuHDfn4NWOeI7JQgJ5kntg2KMpB4VYXvDwODCEcolniDL08kWuPbxOxd0tTR55+seYBfrSQrrGt46a4Vcp683MvMn8fx/el7vSPx9ifD1cUd6KMf/fi5IJF+pohxoCZlNepNdQGmaKNfWh87EGsdUl7089uKLWdwGWeGoHdxrBuRBhcfIU1HvCH+KVcvT9A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.3
Release Details
UpdatedApril 21, 2026, 8:11 p.m.
Changelog

Geändert

  • Release-Paket aktualisiert: Neues signiertes App-Store-/GitHub-Release-Archiv für den aktuellen Code-Stand mit Docker-basiertem Signatur-Workflow erstellt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturexYrrvEAHPwtfVHCBhNEEi7sX2LvqPOYNCC1AOYXNIeoRkUCxYLFTc29MwrgaUMoSLGtoZDChDD2eKsUH6MY+y5Jk79dKZg/ngf2/YBQpmMevl8Lp5eSGo2QES6rBtWYa1GFOEd6sVU6RLcy9tNL3toOxw5Te3QTskzeamEGChd0JYprcLZSWJG1kRu8Y8c32p5Rwbwu1tuq3AAW+i/6Bq4bxztKR6PGkZ6uyTbVaW3p0PwMFoJxceVu0/MsbMpftQaGQHr/1h6nBvbuj1WBkfi9W0PHrl+0zRn+5FwoUU9dECfeHuQAAcXOcJsKT979ewplb5+vPgNSeN2SSTWoGs9eYYIvUzznpyhuqSa1aplwXO/U0xyTXeUE5fiAQFlbnxtZ7gjmeLBkbAR/gF4aCX3NEPGLtw24gY8jomJ67+foeoM1+AJM73aFgTH0NjYKUetACRTFgB6gJPXl97JrJxd7sTeg6xiqlNKrWSvxiAO8XkjHCUV1BaPmoRtyfcNnLxmf0MGCVUuO4btz7JH5qy3q4H8XecbNYpnEeer8qxzTkw3toonE4+LVgbHV0nW6uu/gfEvDtYZI0wKx/A4vQYSQ7WEprMn9SbjnXbaMFOcG81GT2HifhcWZH0/YfFzz+sRng/TvZOkuf2iUq/9EjnKwkyygMSlHE7Si3kYXldKc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.2
Release Details
UpdatedApril 21, 2026, 8:07 p.m.
Changelog

Behoben

  • Lokalisierte Dezimaleingaben in den Admin-Einstellungen: Tagesstunden-Felder akzeptieren jetzt zuverlässig Kommawerte wie 7,74 und behalten zwei Nachkommastellen korrekt bei.
  • Parsing bei Legacy-Hours-Payloads: Time-Entry-Endpunkte verarbeiten optionale Stundenwerte nun konsistent mit Komma und Punkt, sodass in rückwärtskompatiblen Requests keine stillen Abschneidungen mehr auftreten.

Geändert

  • Präzisionshinweise in Eingabefeldern: step-Werte und Hilfetexte wurden auf Zwei-Nachkommastellen-Szenarien (z. B. 38,7-Stunden-Woche) abgestimmt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureeG9EHR4R6Kg1X8OQ9g5Q0yPR7Y7yp+snb/sVhhLXEOtBIFd4xLZd/xi0GuLYF4KBZlPCH1GbRCy+q/kbjx7MyqlO2rHn3Cef0MnwJoLp9czZFJOjVJJpkoZNf/o9hh2OpeK+sNS7ghXfC5Pax2oicQFmeQeKQKLaTwn0AcJgvQrF1laVjQiXQopE98v16iClBjZ+KuybKcRmglxbd1N8dx69nBB0uyLQdkQIhnwHccyrlPCBzsXq55AtIEXGsitgXtquHKOk1bzBwM3uwQZoNRi4RIB/zWmOv0c7+71QTw0i1DMUsz+FUrTw+bBY0FnZe/Q9ageaUvwOb4bHUJYt1cuWPGEufAUC1w7ONCfHGASNkDv34msX4MQEaMf28k8ohtWlX/fzNIxL63Erijyanuo1tf9hZFeYEXmCKwXAeWOL0O/lXWcTGTvEOAD96sSv6RIcIOwHBLqxGUHiCQzJkKZJ3hjv3rrpOeneCLOz/jMNJrEgYCihLn1J8cUEPPeP6VH3rNthDuQOVCi63v+0X1uubbM6DQheViBYTA/z4wEAP/2YsA6rsXATB0JR4pOIxlsiT0MgjxIyrfctOJP/4zMU4645rSmZE+NS0TF46gpf8DF6ai0zilMmaHf9xY72qGZTICjvtIUcmwbMhRMqG9fmYomv5U2/jd3rubayPDg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.1
Release Details
UpdatedApril 21, 2026, 10:50 a.m.
Changelog

Behoben

  • Wiederzugriff auf pausierte Einträge: Pausierte Einträge sind im Bearbeiten-/Löschen-Workflow wieder erreichbar und werden beim Speichern mit Endzeit konsistent als completed finalisiert.
  • Fortsetzen statt Duplikat bei gleichem Tag: Clock In setzt einen pausierten Tages-Eintrag fort, statt einen neuen automatischen Eintrag zu erzeugen; die Pausenlücke wird korrekt als Break-Historie archiviert.
  • Historische Restfälle bei paused: Neue Migration Version1020Date20260421000000 repariert verbleibende verwaiste paused-Datensätze (auch Fälle außerhalb der früheren Einmal-Migration).

Hinzugefügt

  • Auto-Fallback mit Nachvollziehbarkeit: Zeiteinträge speichern jetzt ended_reason und policy_applied (z. B. manual_clock_out oder auto_break_fallback) für klare Audit-/Export-Nachweise.
  • Einmalige Nutzerinfo nach Auto-Ausstempeln: Beim nächsten Statusabruf wird eine neutrale, konkrete Meldung mit Uhrzeit und Regel eingeblendet.
  • Urlaubsanspruch-Policy-Engine: Neue berechnungslogikbasierte Anspruchsermittlung mit Modi manual_fixed, model_based_simple, tariff_rule_based und manual_exception inkl. Simulations-Endpunkt für Admins.
  • Tarifregel-Datenmodell und APIs: Versionierte Tarif-Regelwerke/Module sowie Admin-Endpunkte zum Erstellen, Aktualisieren, Aktivieren, Stilllegen und Zuweisen von Urlaubs-Policies.
  • Snapshots der Anspruchsberechnung: Persistente Snapshots (at_entitlement_snapshots) mit Berechnungstrace/Policy-Fingerprint für Nachvollziehbarkeit und Diagnose.
  • Neue Admin-Seite „Benachrichtigungen“: Eigene Oberfläche für HR-Empfänger und Ereignis-Matrix inkl. dedizierter Notifications-API.

Geändert

  • Fallback-Logik differenziert nach Einsatzart: Für Schichtarbeit gilt standardmäßig eine strikte Fallback-Regel; für Nicht-Schichtmodelle eine flexible Regel mit tagsüber konfigurierbarem Ruhefenster (z. B. Familien-/Mittagsunterbrechung ohne Auto-Ausstempeln).
  • Export-Transparenz: CSV/JSON-Zeilen enthalten jetzt ended_reason und policy_applied, damit automatische Beendigungen in Reports eindeutig erkennbar sind.
  • Urlaubsallokation integriert: Jahresallokation nutzt nun die neue VacationEntitlementEngine und liefert Quelle/Regelwerk/Trace in der Ergebnisstruktur zurück.
  • Migrations-Kompatibilität: Bestehende Urlaubswerte aus Nutzer-Modellzuweisungen werden in Policy-Zuordnungen überführt (Version1018Date20260420123000), damit Bestandsinstallationen konsistent weiterlaufen.
  • Admin-Einstellungsfluss für Abwesenheiten: Carryover-/Rollover-, Vertretungs- und E-Mail-Schalter sind zentral über die neue Notifications-Seite/API steuerbar.
  • Schema Arbeitszeitmodelle: at_models enthält jetzt work_days_per_week (Version1019Date20260420150000) als Grundlage für Formeln.

Behoben

  • Aufräumen bei Nutzerlöschung: Beim Entfernen eines Nutzers werden jetzt auch Urlaubs-Policy-Zuordnungen und Entitlement-Snapshots gelöscht (keine verwaisten Policy-/Berechnungsdaten).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturewHjRsCMFlhEA9EgrgvzuDGiwQsEIOmqNFH9oA9Fs+lJZOluUc6XSmPeZow7uso0PwR/b5YYt+f8KmOoIwuJepnD1TTa5ClzBP5zx5gZq+KIloaEGzVPTnHvHJuc4V8q4A5BYEXvYrVvEuPgufr8BOBNy4SLwMKYQlJR0LhDLn3ShHowJ+VDaUSUjOtUih0uUCsNI54HhaAAa3EfKpgDqc2+jhM7WvnIzDGRVYF4HbPBYPpn+1eWOyOlOgq0YIy5M8+4shNLiGeIRo7Uepk9+HnDm6vjLdYB2iE9AMl+vSCGSdQTrP0Z5ceXZBZT/bM0t4Af3EfAP5seJ/sSQIYs1a5T8RIneJ7DwyFbZdGelFSSBZoMGDevr4IUUfAB3NIKNlPZsxAOv9elrF4AjLJZhDVB6i7OSVeER7yLqrIgMhBFXiFpr095gYQ7Wn6VCcBWwWVS7cWXa0xN9Yl00mn0z9GcVagRvncJ28Y0wSgk+GP/BDalUHmD7wHSL3pyXIWxpqQ2OJHi/xT5Myx4T+HVsywgRwAFaOLjV+hm8hkJLxd70WG0e1oo21m/DtTZZ1R44+BDdRGMJIcabWxJ/zFhYSZvVmoL2dpUlJhPgBBp1Y9Xp5pF0zOeLiGSMR4ON/Iys2jpsbAd0/TxW55NaEFOpZRRNYt3VoZJ8oqM1n1sHZX4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.0
Release Details
UpdatedApril 21, 2026, 10:08 a.m.
Changelog

Behoben

  • Zeitzonen-Konsistenz (Europe/Berlin): Server-/PHP-Zeitzone für ArbeitszeitCheck auf Deutschland ausgerichtet; neue Migration Version1015Date20260415120000 konvertiert bestehende UTC-DATETIME-Werte in App-Tabellen nach Europe/Berlin und setzt app_timezone explizit.
  • Ausstempeln-Semantik korrigiert: clockOut() finalisiert Einträge nun zuverlässig mit end_time und status=completed (statt paused ohne Endzeit). Dadurch sind Exporte/Reports wieder vollständig und konsistent.
  • Historische Pausiert-Einträge repariert: Migration schließt verwaiste Einträge mit status=paused und end_time IS NULL automatisch über end_time = updated_at und Statuswechsel auf completed.
  • Mehrfach-Pausen ohne Datenverlust: Beim Start einer weiteren Pause wird die zuvor abgeschlossene Pause zuerst in breaks (JSON) archiviert; Break-Dauern bleiben vollständig für ArbZG-Prüfungen erhalten.
  • Break-Status-Berechnung korrigiert: getBreakStatus() zählt aktive Sitzungszeit nicht mehr doppelt; Warnstufen und Restpausen-Hinweise sind wieder korrekt.
  • Export-Spalten korrigiert: duration_hours liefert jetzt Brutto-Dauer (Wall-Clock), working_hours Netto-Arbeitszeit (abzgl. Pausen). Vorher waren beide Spalten identisch.

Geändert

  • Export-Transparenz: CSV/JSON-Exporte enthalten jetzt explizite Zeitzonen-Metadaten (timezone, exported_at), damit nachgelagerte Systeme die Uhrzeiten eindeutig interpretieren.
  • UI-Klarheit: Dashboard zeigt sichtbaren Zeitzonen-Hinweis (Europe/Berlin (MEZ/MESZ)), Export-Hinweis auf der Zeiteintragsseite nennt die verwendete Zeitzone.
  • Bediensicherheit: Vor Clock Out erscheint eine Bestätigungsabfrage mit klarer Abgrenzung zwischen „Pause starten“ und „Ausstempeln“.
  • Admin-Transparenz: In den Admin-Einstellungen wird die konfigurierte Zeitzone sichtbar angezeigt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureu3gPfbToOow1ecZSrYUbhzoOp6/Fb3syYzSdx9CNYBvsUDqkoBODyN714AKc/4PF8hYrf+nk+A7ICF0GC94uBW8MsNWCHRQ1GEmhhaNSePTNjV+JCCOR9SINE1JCYVSh4avkBX7evJrRZFTOoxRGZxKBSY8ubYG71+F/N22A3qH8wzu6yYMBi0hrt1oVOfFkhrkBKeEwip7Bm0vrEzfrhnNJ3qsqf5q52F9sxUFZNT+/JLDBPu/ZAokssMJGTgbmKwdc3qQzdI/d0zNPuZJwUNjjgvU+TLeFJRkOKNghRfdkVotVcm63NmAf9afJJx3QkCTOTbMchC9sKyvlnIbG68WUZvsiAUPRW5o2XxXK71zZo8y+GC65ZazjioV/4ANt6sEItnJ0MSylRmWFEXMTMJHgCiqqp9hwZwxs0IicHLsRRsnUDdT7yMgOdB7082cnUFJtWM9Me2uSvYx4QUfPosWZhkMqpwagxJ80EnYSfc12/cEXbr58MbdqyQeCj2dUG1iBPw0eVooOWxf9UwOnNaUKV6ynEGok/mYM3qS8XnNElFpliKoRAfBtgLsCpV7O/ChhjE0gPNILNasGMiofSaAd4cHZjSZI/7Cm6FkOSrGju6XCPubM6XeYLbyZ8pv1htd1H1NzUIsWYXG23nPhICNAdOvEcbIXWEw8H5b2Xtw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.14
Release Details
UpdatedApril 14, 2026, 9:48 a.m.
Changelog

Behoben

  • Genehmigungs-Deadlock (App-Teams): Abwesenheiten und Zeiteintrags-Korrekturen behandeln „hat Kolleg:innen“ nicht mehr wie „hat eine:n Vorgesetzte:n“. Auto-Genehmigung, wenn kein zuweisbarer Genehmiger existiert, folgt TeamResolverService::hasAssignableManagerForEmployee() (explizite Team-Manager bei App-Teams; Legacy-Gruppenmodus weiterhin Kollegen-Proxy). Verhindert Anträge, die dauerhaft auf Managerfreigabe warten, obwohl niemand freigeben darf.
  • Zeiteintrags-Korrekturen: Gleiche Zuweisbarkeitsregel wie bei Abwesenheiten (zuvor nur Kollegen-IDs).
  • Admin-Users API auf /index.php-Instanzen: Refresh/Edit/History/Update nutzen nun zuverlässig aufgelöste App-URLs; fehlerhafte Requests wie search=[object PointerEvent] treten nicht mehr auf.
  • Admin-Teams und Settings auf Rewrite-losen Setups: Zentrale URL-Auflösung enthält jetzt einen robusten /index.php-Fallback, wenn OC.generateUrl() im Seitenkontext fehlt oder unvollständig ist.

Hinzugefügt

  • Repair-Schritt ReleaseStuckPendingAbsences: setzt nach Migration verbliebene pending-Abwesenheiten unter derselben Bedingung automatisch auf genehmigt (idempotent).
  • Frontend-URL-Sicherheitsleitplanken: Die gemeinsame AJAX-Schicht blockiert externe Cross-Origin-Calls standardmäßig (explizit allowExternal: true nötig); Unit-Tests decken URL-Normalisierung und External-Handling ab.
  • Lint-Leitplanken: ESLint-Regeln verhindern neue rohe fetch('/apps/arbeitszeitcheck/...')-Aufrufe und implizite externe fetch(...)-Nutzung außerhalb der vorgesehenen Abstraktionen.

Geändert

  • UX: Abwesenheiten zeigen einen Hinweis, wenn App-Teams aktiv sind und kein Genehmiger zugeordnet ist; in der Detailansicht erscheint bei veralteten hängenden Anträgen ein Warnhinweis (bis Repair/Admin die Teamkonfiguration korrigiert).
  • Frontend-Architektur: ArbeitszeitCheckUtils stellt nun zentral getRequestToken(), resolveUrl() und isExternalUrl() bereit; genutzt u. a. in admin-users, reports, settings und validation.
  • Mobile UX Konsistenz (WCAG 2.1 AA): iPhone-Safe-Area-konforme Abstände, bessere Touch-Targets, klarere Abschnittsstruktur und visuelle Hierarchie für Nutzerseiten (dashboard, time-entries, absences) sowie Managerseiten (manager-dashboard, manager-time-entries, Mitarbeiter-Abwesenheiten).

Dokumentation

  • Nutzerhandbücher (EN/DE), tests/WORKFLOW_ROLE_MATRIX.md und Entwicklerdokumentation zur Semantik „zuweisbarer Manager“ und zum Repair-Schritt ergänzt.
  • README und Entwicklerdokumentation um zentrale Frontend-URL-Policy, striktes External-Call-Verhalten und Mobile/iOS-Layout-Hinweise ergänzt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVBSDJh3veK9J7eUDKGFw/xB1ypmBQrjMDzamatQfncYem1qg9kNVWAnHDH+fGRlFJtrBH+fOu+MRTFZuK78DU/W18IQglCtTbsH4MdaHLHTwVz2JOxeGJWmx2p1yK0ulK0vbDgCLXQu5B8gR/L/JYRGFo0+FpwuRvxrpp1BWrX5m9mQLgoxn3hOj2r+F2m0wYdEDWhksF6VzLbHyr3pIT9hu6p1owuAZzr3Nqtva4tZK0WGgn8xa5bDwZqJdWSyQJ04JiCZisftYCOJz8HNfq6o4MFTLF0aQpYxUH8wf6gz5pkfUOKIemq4Ui8GqRr3Fxo/DW2APAk0GcwWyY8ypEiY2RNi6IkGv3K9p8mFamDxirDeurOX/hwNia1Lt4HCqzJATjWpmaCEAoBQWfOCgozI9o+h8cI9LhHp3LvK3VxFD/s9xjJPFLZ9y8b98hufe13Uq5/NYzqo2vQ1DgQXyCbRjsiMbqDvz+yyDmXM+JPV8U8gTKxTD8y19VoiVIlWhAsI/zBmxHC84G2htaCHBws47cGhmJVvQDXGz/1aae9J0of1bGoOIERyEFSOAzmUN9fcvdVbN+77wn70QQ1k7GQcw6jAEScIQq8Pt8n7pBTECeECk6K4baNfaTT2+kZKLCdD1mdaJII84B8+XXxmxIk+VI1sarNlMIvPAk3FQjww=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.13
Release Details
UpdatedApril 13, 2026, 10:46 a.m.
Changelog

Hinzugefügt

  • Monatsabschluss: Karenz und Auto-Finalisierung: Admin-Einstellung month_closure_grace_days_after_eom (0–90, Standard 0). Nach Monatsende haben Mitarbeitende so viele Kalendertage zur manuellen Finalisierung; ist der Monat danach noch offen, finalisiert ein täglicher Hintergrundauftrag automatisch (gleicher Snapshot wie manuell). Ausstehende Zeiteintragsfreigaben und offene Abwesenheits-Workflows blockieren die Auto-Finalisierung. Wiederöffnen bleibt Administrator:innen vorbehalten.
  • App-Admin-Whitelist: Neue Admin-Einstellung app_admin_user_ids, um die Administration von ArbeitszeitCheck auf eine ausgewählte Teilmenge der Nextcloud-Admins zu begrenzen. Leere Auswahl bleibt rückwärtskompatibel (alle Nextcloud-Admins dürfen die App verwalten).
  • Docker-Testziel für Security-Role-Gating: Verdrahtung von scripts/test-security-role-gating-docker.sh über make test-security-role-gating-docker und composer test:security-role-gating:docker für schnelle Autorisierungs-Regressionstests im Container-Setup.

Geändert

  • Monatsabschluss UX/API: Klarere Karten-UI, sichtbares Erfolgs-/Fehlerfeedback (WCAG), serverseitiges canFinalize mit lokalisierten Sperrgründen; manuelle Finalisierung lehnt zukünftige Kalendermonate ab; Abwesenheits-Workflow (pending, substitute_pending, substitute_declined) zusätzlich zu ausstehenden Zeiteintragskorrekturen; API 401 bei fehlender Anmeldung wo passend; Admin: eigener Abschnitt „Monatsabschluss“; Karenzfeld bleibt editierbar mit Hinweis, dass der Wert gespeichert wird und bei aktivierter Funktion gilt; Wiederöffnen mit durchsuchbarer Mitarbeitenden-Auswahl und klarerer Rollenbeschreibung; Validierungsfehler mit höherem Kontrast über Themes hinweg. Auto-Finalize protokolliert Einzelfehler.
  • Release-/Signatur-Workflow für Integritätsprüfung gehärtet: make release-signed signiert jetzt den entpackten Release-Archivinhalt (nicht den lokalen Entwicklungs-Checkout), prüft verbotene Entwicklungs-Pfade und packt das signierte Archiv für Deployment/App-Store neu.
  • Admin-Autorisierung zentral erzwungen: Zugriffe auf AdminController-Routen werden jetzt per Middleware auf App-Admin-Rechte geprüft; nicht berechtigte angemeldete Nutzer erhalten eine konsistente 403-Seite.

Dokumentation

  • Deployment-Hinweise ergänzt: Die Release-Dokumentation fordert nun explizit das Deployment aus dem signierten Tarball und beschreibt das typische Fehlerbild (.git/* / node_modules/*) bei versehentlicher Signierung eines Dev-Trees.
  • Deployment-Helferskript: release/deploy-from-release.sh hinzugefügt für Deployment aus signierten Release-Archiven mit Sicherheitsprüfungen (verbotene Pfade, erforderliche signature.json, optionales Disable/Enable und occ integrity:check-app).
  • Admin-Betrieb: Nutzer-/Entwicklerdokumentation ergänzt um Einrichtung der App-Admin-Whitelist, Rückfallverhalten bei leerer Auswahl und Verifikation des Role-Gatings im Docker-Testlauf.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureol/yHOgiMCOj+yYqb8HC0g5laqPih/kTTbBB12bDawwgGQGVdx+GCBNaSmM8Sgu2jRB6PJWwnF1qFQQ6MIHWCjFzuOQeyL+sDEGH0VhI/qgbCmyRKZnBKAyUq9BBrxux3zaI6cN6QD76nP27UCU4C/OxW87nybYxy4WqqdOSOR0Af9QMkUg/VZLhRatpageqRGkYSFl+3ZwEg8qhlpDyLH3lh3xSG6+tQsyy9yU4La+XDiZ63lG2yF1RWHQ1/irb+dRrPEs/I1wuLvdZL+6olqx7MTogIylUqrJyux7ycTUrC/sxTBsZYJUQ2vGFyGzO30qARQ+KSOJtai5Upcx7WZxHv98eS0X3FGI0QUhC2NwIE2ahn0mfH/YjuRW5wBn9nsDG03KPpDaMATyvxTD8BbzGTM9ziuMKfOzd2HfYxMWDX/GF4LWM/eXpqsO7E2veMjtIClAcMI6vZhJKVV4mxXHxMkFIdvTbaFmPrWEAhFRoI+0NHQ4y3ec+goBucU+E4gHCyicVOT0T4n3NH6U+nOs+95d5cSA85Dz+LF7ZLLYU/rxi1ybC36fVg8igg+P8YvH555KQNizrYNJ2xdglmirJcs0XcEwZ8/hVrWfzuLUgKbMNXlqa2dgRzMnfOy9b5bNUPez9FKsqEqAc66dUr9JnDiR+poFgQBlCAnZ7vbw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.12
Release Details
UpdatedApril 12, 2026, 4:25 p.m.
Changelog

Hinzugefügt

  • Revisionssichere Monatsfinalisierung (optional): Admin-Schalter month_closure_enabled (Standard aus). Mitarbeitende können einen vollen Kalendermonat finalisieren; die App speichert kanonischen JSON-Snapshot, SHA-256-Hashkette, Anhänge-Revisionen, Audit-Ereignisse und ein schlankes PDF. Finalisierte Monate sind über normale App-APIs nicht mehr änderbar; Administrator:innen können einen Monat mit Pflichtbegründung wieder öffnen (Audit). Monatsberichte für finalisierte Monate lesen den gespeicherten Snapshot. Datenbank: at_month_closure, at_month_closure_revision (Migration Version1014Date20260409120000).

Dokumentation

  • Nutzerhandbücher (DE/EN), Entwicklerdokumentation und Compliance-Hinweise zu Monatsabschluss, Aufbewahrung und Grenzen (Nachweis in der App, keine QES) ergänzt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature0mCLz3x6v/VzKxsK9I8J3HAMtz+lr9Z43v3UN+tH4hZeZLXvuXWayTxLB6EYKXXnNSfkvF5KMiYJqh3LJHUCTcPUgGfPqNDwCkkTK51T0cmghwWPQylVIe9L6My8a2Pu0sVCrG5P0Ev5t7wdLQNMSxKcHYKXYT7B2QvQG+ljdNKr1/ywfXDEpIg4yzCMnxVdfGIBiUNl4vUIYOXCNt30fUXiRCXHfl381LcA2Bv9ZP+Ddxk+qEpa1iuujWcRg6o32YRCESwDAO2IoXKEvLy16btLtNQd7wL+E6lhCfgST/jp+rWPxh4RSJ8kBlyaBYo8LqvhvMRpGqhYfNOJZTrq0BnKQZfjc1qnAcIHMDFjBfUwi8tp0/bmxOnXmMMFZZtGf6rGLUYinb470whWKydzhIib2K2kSTN9GrRvjmp+osUh9/qAlBzN5wRutIBewKqM8SkwJ52dYiYWU5jAyf3fVxXqRJs970WUccI7udQ8A7J9XqkmCRUBvl46mPugz0K481/X6cKHiZBK9681njxRWorGVGHpCiz92T+Ug2W+bRIBYLBM0oqPd9Dp2rXQ5+UFLDTC9eDG8WP3VVxsK7d5xtK/xWC1fSHy4c7Mgp8WAVITY1eU9ftn1tS8BHZxcgz7EvgtPmamoKwb55KKFTxQu4c6khCWaZ2pPQvXQjxtrNw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.11
Release Details
UpdatedApril 9, 2026, 2:45 p.m.
Changelog

Hinzugefügt

  • Manager-Ansicht „Mitarbeiter-Abwesenheiten“: Neue In-App-Seite und API für Manager/Admins zur Einsicht von Abwesenheiten mit sicherer Bereichsfilterung, Pagination und lokalisierten Statusbezeichnungen.
  • Kopierfunktion für Arbeitszeitmodelle: Neue Kopieraktion mit Modal-UX, eindeutiger Namensvorschlag-Logik und Schutz gegen Doppelklicks.

Geändert

  • Manager-Navigation / Sidebar: Struktur in klarere Manager-/Admin-Untermenüs überführt; Berichte in den Manager-Kontext verschoben; Compliance-Link zur besseren Übersicht umgruppiert.
  • UX Mitarbeiter-Zeiteinträge (Manager): Standard-Datumswerte sowie Datums-/Übersetzungsdarstellung im Filterfluss verbessert.
  • Kalender-Verhalten (Rollback-Bereinigung): Angefangene Funktionalität für direkte Kalendereinträge sowie zugehörige Admin-Optionen/Status/Test-Endpunkte wurde entfernt. Das unterstützte Verhalten bleibt unverändert: keine Synchronisation mit der Nextcloud-Kalender-App; optionale .ics-Anhänge werden weiterhin per E-Mail in den konfigurierten Abwesenheits-Workflows versendet.

Behoben

  • Arbeitszeitmodell-Modaldialoge: Interaktionsprobleme im Kopier-Modal, Darstellung des Quellmodells sowie Lokalisierung/Formatierung im Lösch-Dialog korrigiert.
  • Abwesenheits-iCal-Härtung: Strengere Status-/Datumsprüfungen, Empfänger-Deduplizierung und datenschutzärmere Beschreibungen für Vertretung/Manager ergänzt.

Dokumentation

  • Nutzerhandbücher und Changelogs an das finale Kalenderverhalten (optionale .ics-Mail, keine direkte Kalender-App-Synchronisation) sowie die aktuelle Manager/Admin-UX-Struktur angepasst.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureHwGRZcCLjb/plcL+LoYgcSBNEXoLoZU2DlOb7pcOx6X41OU6v9SkdO5YXOynEBr7kmViQeQzJfLyTUTRSfcqLlz4jC8KL7Xmaa7rImQ0EGSVpaBmmUuHC0MWlrhWWMEkG52smtFFalq0GZy0wLhcHRc6BtqCzilQLju2jS5SR6GTPWutj0i9LsbKsB6LFzkbc9cAbtcRCUjzx9A2oU/EAA1BhRBlyQTvR/OLyDa2FU/CBNWrm3I9293E+D9UP9gMBhKvSH5f1DXF/TpwiCEzYB/NRR0KBXvQb30whbv6O/WJfCEs9z1+wryRvNfGjT0+9X4C3tPtLTpyh7noU7NK7VzS0Cl0/TbACvlEY8yk9I+UPbNYA9jUiNny2JpAh6syrFE3k2RrhIpiJ9iLwqKgUYN2rlx6LFtqWP1NlIExC97DdmCTt1YRTyeDzi/NrZuGKHl5JBtCJWZalX6KwxjJd4oBrxoy1+i/2BLSpjoUlvPQ2FHPlqdtHWcIqryrVzmV+8ZJyxmo5EVJR6bmGESQjUovJ70j5KIltEg1OM/5MAyJ9hkIBJxjXiLTvocREbYOdoicChFs9aQFbDX0VN3BD4q6FNSiV5UXRsbzo57lxa4n51hB3tjoQAJ+rBlmMyVez7u1zNj+5X6lrvn7b5/5UQg2oHpaR8Hz1iPPou7E/GA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.10
Release Details
UpdatedApril 7, 2026, 7:49 p.m.
Changelog

Hinzugefügt

  • Urlaubsübertrag / Rollover: VacationRolloverService, Hintergrundauftrag, occ arbeitszeitcheck:vacation-rollover, Migration Version1013Date20260407120000 mit at_vacation_rollover_log; Unit-Tests.

Geändert

  • Frontend-L10n: Gemeinsame Partials templates/common/main-ui-l10n.php und teams-l10n.php, damit Übersetzungen früh verfügbar sind; zugehörige Template- und JS-Anpassungen.

Behoben

  • Manager-Dashboard — ausstehende Abwesenheiten: Die API liefert summary.typeLabel (serverseitig übersetzter Abwesenheitstyp); die Oberfläche nutzt das bevorzugt, damit Karten lokalisierte Bezeichnungen zeigen (z. B. Urlaub) statt Rohcodes wie vacation.

Dokumentation

  • docs/Developer-Documentation.en.md: API-Hinweis zu typeLabel bei Pending Approvals; Nutzerhandbücher EN/DE: Hinweis zu lokalisierten Abwesenheitstypen bei ausstehenden Genehmigungen.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturekmFxrMFQus0US44BSrw/0eOzjGU8zutOf6Q4Dqcc/39RNDiCiQOKB55We29dsKBZ77Qkk8fbitvBMURDmfLM21hqyrDTfltj77MNdonON7hcINJKQZG2fGLz3Rrc+10mDQDAiDqVQGOLrpJBQVuA+TxdUEA1C9+z0zwvmHLdlBEgXCw7k/4FoU8aKCA/Jcp02Fjr98PG+1MW5SbOtTs8oQG2iMpRe7Ogo+YzqZtU11KZ4tOr8zEblZeh7oSG+AaIlj16YscKKCWAL3MLmyRvYTXWpPgsu4xLp+AUvTGbSEKUlDeEznDDkGpUvVrd2pTm4Y7xyc8X8c/0WQRqWuioiqRLUHHldJg8MjgL4s7mQkqy95dfZ/xQRC9BAc/cbTceynA8PD5XILnQAVgVRe9hXsji6TgN2EURulrVsBbCN1wCAp/Be9FqH7NYiQYxhmVfYM3kmyMdVe/+owslEAaMcmjT/QcZQlCeJj5SNOXCqVwCsks0ijINP2utN0XO4mlHkCt712QwFAMw86rSjnuX7eA1W6w2OpFjFFobOekDaUgBs8ID4LMgpOWJSGTI2P9AHtBJTMNSrRmsMzQmafZYdBm2F9gO4tz9ktxbhcmBFWpTvNHZimE6Re354pnTOQIQ4yCKU+8VsqYEJxdxe1JYXE2yTeNCKOCcIywL8/hvVS0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.6
Release Details
UpdatedMarch 27, 2026, 6:08 p.m.
Changelog

Hinzugefügt

  • Entwicklung: CLI occ arbeitszeitcheck:generate-test-data für deterministische Demo-Daten (Zeiteinträge, Abwesenheiten, optional Verstöße, Demo-App-Team) zum Testen von UI, Berichten und Workflows.

Behoben

  • Berichte-UI: Berichtstyp-Karten werden bei teambezogenem Scope nicht mehr fälschlich deaktiviert.
  • Berichte (Tests): CSV-Download-Test nutzt DataDownloadResponse::render() für den Dateiinhalt.
  • Team-Berichte: Nutzer-IDs werden vor Berechtigungsprüfung und Aggregation dedupliziert (keine Doppelzählung bei Mehrfach-Teams).
  • Abwesenheits-Badges: Besser lesbare, theme-sichere Kontraste für Urlaub / Krank / Homeoffice / Sonstiges.

Geändert

  • Kompatibilität (Dev): Lokale Entwicklungsumgebungen an Nextcloud 33.x ausgerichtet (z. B. offizielles nextcloud-Docker-Image).
  • Berichte-Layout: Zu aggressive Vollbreiten-Regel für das Parameterformular zurückgenommen (verbessert Scroll/Layout).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturehE0UvSaJEnunYMHOd5u3aR+5MyAg2Pl78l3t75Fx494nh6CzImBfoaswZXb9agJ6Iz1orktgFsKlTqfZoSGNxuZHRiRjcbtC+LsLLQsjONX5i5UOXK6crz87+6TEDAPkgdr318s+w9qHvTic2kdcdx+rpqbBSMIAgU/GuVZjyp4wtCV2Ti9VFR1pFzAlmH95b6WVCQCdTYmWs7LsLY//midoEYCd8JXSicLvr2nobqTL/soYZdR/39931AgpiUO5B9Rd0Wo7NVhk8C59bmlNqkLa8UDZHTZ/Eseks/njP9CdRsgdaUiqIm3libscOPzoFg2abyJpIZUV/nV8acOq8dh/XNNVRuLxxHs5v5FcByrnuxE4G1IbyC/FtB1KFRQlGF+rwwSEzBKdkNCdH5zbJ//gEgRfjZJb/Ijtma9+14jeRub/oLHQx0Mkh27aVMBPbqDI8LeuOLWo4Gbd4RXFknth02gSZpk1/Ko4uE90R44RcO2YUS58qvKQkickIoDEQId9w55FIEyP7LIAZa2bXl9qYZAA+CHCwixsBKi3a+yADg/wWaN4roVQ4LobTjp1adPOOVWbTHSemHRgEsqpboMxRXcrRWan8pNiQrnvTbJwIu9i3Q6zgHtHXe6RviFMzwiMJQTdvLhhHuANr9Lt04cCZjPS2dWfjGCZKVfo7hM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.5
Release Details
UpdatedMarch 26, 2026, 6:57 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturedkvj+LT0qxzHO59iXnzyYCXDEgfS9OMri9yD8QWcQqS/VPzNKFBHIHDqX/2JmnEuQFM6sKf+jyx0QORDIAC4h2XiZoUlJe+MHgZQGGqa/mA/SGFQtwzlxWw2A4Drm1ioGkOIwhGo5Ny0zIogawfyhPtDQX7Mjj2K9x5+OSHQKtQs8LGRiyy7EsVJUC4fWworktCvuqRYpvR+rY2GfSu0CcWWZVItcEYqAfDFl3UvmWag299QrF1g7SOVY1EcoDH2B+O2mOwXwj6JjWNhz4iUkdcbkthaHPwZ12cUTOYLOtopIILuRTdlXiYWqYvLn24yZUObqmS0LbNcyzAF8gF8LDOmp08FxRCo6NY4L9HJcvgaR4qDkOpiC1aj/9FK8LmRnmdOvH9FHIqr2P6eBP4uoetMWoMbW3QAqvizVMDYPe96Qj1m/Cwp2ogV5+D0JOt1Ms02LGHZ3pcBp0vojoUu52pdP+dXL1d0ZN4rzSPEVQboJllQz4dyahtQ55l2EuDdk6VVf35oOPFLt5HqIF84tFYbY4moxafMunMI2lSWeRj0jCxApnTcrjuWDRuG8Q/fv3Za2gtkSsx9XNLPAb6YNOrgKFEeZRtSIp7L2V6shwxn9H4PG2uETboUm44RWkoZO+JZFtNTTlZpij4B5mRvo/OamgruxwI6YgplBQXObSw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.4
Release Details
UpdatedMarch 26, 2026, 6:40 p.m.
Changelog

Behoben

  • Routing/Kompatibilität: indexApi()-Kompatibilitätsaliases für Legacy-Endpunkte ergänzt, um 500-Fehler in den Nextcloud-Logs zu verhindern.
  • PHP-Fatals: Konstruktor-Signaturprobleme in AbsenceService und ComplianceService behoben (konnte die App beim Laden von Services oder beim Speichern von Einstellungen zum Absturz bringen).
  • Reports-Sicherheit: Vorschau-Endpunkte gehärtet (start <= end Validierung + maximale Zeitraumbegrenzung) um DoS-Risiken durch untrusted Parameter zu reduzieren.
  • Admin-“Gesamte Organisation”: Admin-Organisation-Scope korrekt verarbeitet (userId="" = alle aktivierten Nutzer) inklusive passender Zugriffsprüfung, damit Preview/Download konsistent bleiben.
  • Reports-Rendering: Preview-Darstellung für Abwesenheiten und Compliance verbessert, sodass sie zur tatsächlichen Ergebnisstruktur passt.

Geändert

  • Reports-UI-Semantik: Team-Scope auf Team-Overview-/Export-Semantik eingeschränkt (verhindert irreführende Preview/Downloads).
  • Organisation-Download Hinweis: UI-Hinweis ergänzt, dass Organisation-Download erst vollständig unterstützt ist, sobald dedizierte Organization-Export-Endpunkte verfügbar sind.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureB+kiXQiNbiYsWVOlB3wiTffKZj021JMzAUzhQRYuwQmpszoGICQ7cCChEeggNXAMuOsRrPkznqB190jArt5Sfp7zKL5I3Z7IjyH6ur4aAqf6Tddq93/6Vb4W4ud9G30AJhkh3X0PBZ98bcOPcrxiaMrOqHryaIkcQ0os1pJnCAZ5v/zmUZGz/rVHxc0VNUGGvJZnx8Odwgd0r9z3McM4r9LL7n9+CrwtDMOVS/fUwAapkdaqM381pkLCa5BHM8VJd+ARz7Tt8rPVuVBwXDR9pkq38eoD9tQ61QVbCqrfsf4/8LgcbNlrHjWVRrAtUirX38JlJgFBKvmzaORvsgylNFggcrZ7sIx4o29kPPkFWZaUee0TKI/uc3WlThNIj/i4+sVTZ2Um23cfon/wr/sHByJIMOsFrw60s6RPm/XjAxeTnJbrm61ms9a0kKTodDR7puH0guqBQJX/CTJUQxcoPmKcfVqqblI2Ll/efOzi/BHYEEuiMGRVfYmuwtlALuFODD8ALFhf8EYmnB2EyCTLJwR+1bSUQF6/a/p4PP9cVSRKDbfYY3rpSU/QXbM3XTn3fET1dqE98FWEqPK6iNKdoMrcsZ4gkKNMNYKpAjMB9kbemHOVPNCIDVTIkYsVQO/edieH4N3EPouwzLWCvQVqWpb8h7SPbTslAhg45WtVByU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.3
Release Details
UpdatedMarch 19, 2026, 2:41 p.m.
Changelog

Behoben

  • ArbZG-Compliance: Pausenprüfung korrigiert (9h/45min-Zweig erreichbar; Prüfung ≥9h vor ≥6h)
  • Manager-Logik: employeeHasManager() nutzt nun getManagerIdsForEmployee() statt getColleagueIds()
  • Berichte: getTeamHoursSummary() berücksichtigt Periodenparameter (Woche/Monat)
  • Admin-Benutzer: hasTimeEntriesToday pro Benutzer statt systemweit
  • UserSettingsMapper: Falsy-Null/Leerstring-Behandlung in getIntegerSetting, getFloatSetting, getStringSetting
  • Routing: exportUsers-Route vor getUser verschoben (Shadowing behoben)
  • Version1009-Migration: MySQL-Backticks durch portablen QueryBuilder ersetzt; OCP\DB\Types
  • Doppelte Notifier-Registrierung: Aus Application.php boot() entfernt
  • API-Sicherheit: Generische Fehlermeldungen statt roher Exceptions (SubstituteController, GdprController)
  • PDF-Export: HTTP 422 mit klarer Meldung statt stillem CSV-Fallback
  • LIKE-Injection: WorkingTimeModelMapper::searchByName() verwendet escapeLikeParameter()
  • XSS: Modal-Titel in components.js escaped; compliance-violations.js innerHTML escaped
  • Admin-Einstellungen: CSRF-requesttoken ergänzt
  • AbsenceService DI: Konstruktorargument-Reihenfolge (IDBConnection) korrigiert
  • Admin-Feiertage und -Einstellungen: englische Quellstrings für l10n
  • UserDeletedListener: TeamMemberMapper und TeamManagerMapper per Injection
  • XSS: Team-Namen in admin-teams.js bereinigt

Geändert

  • CSS: Shadow-Light-Variable, scopierte Resets, Dark-Mode color-mix, semantische Farben, Navigationshöhe/z-index
  • Uhr-Buttons: Doppel-Submit-Guard (deaktiviert während API-Aufrufen)
  • initTimeline(): Max-Retry (20) gegen Endlosschleife
  • Barrierefreiheit: aria-label auf Header-Buttons, Label für Admin-Suche, aria-modal im Willkommens-Dialog, englische l10n-Keys in Navigation
  • Dokumentation: Interne Docs entfernt; docs/README ergänzt; Repo-URLs korrigiert
  • Manager-Dashboard: l10n von PHP an JS übergeben für Übersetzungen
  • Constants.php; benutzerfreundliche Fehlermeldungen
  • Zeiteintrags-Export: Optional (per Admin-Einstellung) können Einträge, die über Mitternacht laufen, im CSV/JSON-Export rein darstellungsbezogen in zwei Kalendertage segmentiert werden (vor/nach 00:00). Die zugrundeliegende Arbeitszeit- und ArbZG-Compliance-Berechnung bleibt unverändert auf Basis des originalen, unsplitteten Zeiteintrags.

Hinzugefügt

  • Version1010-Migration: Zusammengesetzte Indizes auf at_entries, at_violations, at_holidays, at_absences
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturePf3DfgKP/j8T95ElL4ORpuPFeD3UHt901udriCVI1yQdyRJDTp5Z8tHcaFpLRjjmjW8c1nFIEjrFVTjl5UNnPTTWzwf1+Woci/TtIHa7lDkMftxjIIVMf7khRJ6NGriUQD1WVS6Hqdi+FWafgnIqn7dO728K+lB3rFSlgoCoQgQpjjJ/D+N5yynIi44wiD7F8PngozN58wUdWoW02zBX3W+ndpEZXmrY2srqPndhBrlg4cOrE8cWSUFe9wtwSaopkDZPSl85Wsg7nwDOJGV1JaFzDdBxyHATs3kxJnsntXePI1j/O8bcWR69o45JkDY458TsiA0qweFMx5A3Ioh5K0Rrp4UQREthUP83sEzQCIo9ztzB3oeFr1sAs+/dfauAPLsHWNG3NO70fZ82RnsRKuhklTbL8RQ6gc2a3rqrOLSPypyLsv6+UxyoKwm41cggNl4UnhyUhoa33IjBiEoZDXTfB2d+fNZoTXkOYZdDTKcC9bNMc+mo8guNkTxqAYw8Ian0V7vmLs0uBJ9JYyyy5k8AUd+8ijMokWm/2VKPCbDga4mmZevp3KqSpVOqXYBJXmMzJH2Vf+LXZYjRHTScFQ92bXVz7VRRNoz+LEtZy4QYIT9u+YCIvu7ddT5RZmA08HIWU52W/jWQQiKraZE/Nw8Ks4VQBfB6TX+wDCGadBs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.2
Release Details
UpdatedMarch 11, 2026, 11:36 a.m.
Changelog

Geändert

  • Langfristiges Refactoring: Ersetzung aller \OC::$server-Verwendungen durch OCP-APIs und Konstruktor-Injection
  • CSPService: ContentSecurityPolicyNonceManager per Konstruktor injiziert
  • Controller: manuelles cspNonce entfernt (configureCSP übernimmt dies); IURLGenerator und IConfig injiziert, wo nötig
  • PageController: IURLGenerator und IConfig injiziert; übergibt urlGenerator an Templates
  • HealthController: IDBConnection für Datenbank-Check injiziert
  • ProjectCheckIntegrationService: LoggerInterface statt OC::$server->getLogger() injiziert
  • Templates: \OC::$server durch \OCP\Server::get() (öffentliche OCP-API) ersetzt
  • GitHub-Actions-Release-Workflow hinzugefügt (.github/workflows/release.yml)
  • PageControllerTest mit vollständigen Konstruktor-Mocks aktualisiert
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVdOLtKkuJFOvqioRam3iZGmEiSQrA4Xc99thIdm97dMKFlfHskcRIG34rWiqftbbIh+6CgWWxu+YdQOLSV63qOtZ7rH/rl1x5hnhaR4GBDbTtnE/frmfTJYlpHlKVw9KSyniEEAE30lLl5tuYA/4myl+9N6abL+9oJpQo8nAY2oApVgdJQFHPvUPeaJ6q0Qb6GUkOTwZo/UgmT0cIqTL7Ymkvkp3OGE1nRr2hD+T5aFyXu0E3IfS5m+eete4Xdn5TcSYzWVB3oBdMxmRTUtracW4ar/ZstAIwsVxmrLcW4/2AgvUQrrAZ87EBNNoiekUF+nJogWpFeh1n6lN7ZbuUSQJaQtlquovukPbnOgO1AAFe3EMG2DmBtlbyn/jt8/DY5ql8VTDp62eKDJxYTodidjAQYkqMEve7XuTtPgrNwG9c4hFNYS5fIGz07ER4otxErRKC25d89ql/bkSDre0IZPw/gTgdEjx71iD/UZBf9b2tzhMKpNfdtlkT0BV1mNOa376kZzYOk9DcpAaOgobPK00gb3ZeeODGn29N8LEvEAI5SCoa1m7eT4B0KbMQNtgDEUNZrrvRf3Tzpb0mL2QUmf5i3sn10IjQ6KdTDor1xWFEYIF03M240Dw5ml/UUrDgvXI9WZ1BzgyNDe2HAVeNPb9akpPHUWYkoe+uOoaf7A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.1
Release Details
UpdatedMarch 10, 2026, 10:18 p.m.
Changelog

Fixed

  • Resolved duplicate route names in absence API (absence#store, absence#show, absence#update, absence#delete)
  • Corrected settings class names in info.xml to use full OCA namespace
  • Added declare(strict_types=1) to routes.php

Changed

  • Removed non-existent screenshot references from info.xml until real screenshots are captured
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturec6nuFK9N2O61bf1GpNWz2G2FDt1GzTRzd2pXna6x5E/HI/m1e1dt8TheGnhfgYm/TY/o/W539hak3svOJbJmoJr/kmd7xVWRGnZH/PDBjROe5kwRIwWdZlR3z7DiOyTsZo44DBLvVFEaRMAjF4PpVpJxTIA0xV59d3YJHyFZXbMPxSvAbZu43bAjWU6kVGmfaKUOrW5d592aApbxQ+mwJS7LwFMXlxGSzyCTwYL3bMkwormPPS64RTJtrPhvImU09ACMsjwgERAuFGlvbGj8CiuXzAWoO7ISyxcsqiaw1jnA5OIlJ+hnQhUdYHtkIzdwNHxw4ItSBL3pSJjhwIyrs4zZRMkOVjTqDluDfmvbx3Ir9cglVHlMGGTOOJtuyU0PmL0Fo9HZ2R0Noz9w8T3cpetxRG+B+mSWapUblbM+BT6aIvfHMjSzvI0qjwzcczwVzkYJISHReObwYFpeVs5W7cW1gXY2mx42Q/fPqDkrM5wEiuYJ98QG7Y67uhYZce9wmAp0Pygx0UJILj4fNPLuA27hVOp3++x0rOxhEl1A4v0tgiX5pVRYK3qwf1vHFl3zSGgldQs2WUmJ6CoPWbIE6hzmtRUGMzSOnKEK+2eLHej/Edzdo75nVZd6maKXVAY1L+z74IK61HvJ6kQ0QXFO7urWBZJg+IfxzR6W4mrvZnY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32

Nextcloud 34

ArbeitszeitCheck 1.6.6
Release Details
UpdatedAug. 8, 2026, 11:25 a.m.
Changelog

Fixed

  • Manager employee absence create (NC 34): ManagerController::createEmployeeAbsence no longer calls protected Request::getContent() (fatal Error on every manager sick/vacation record). Reads the JSON body via public IRequest::getParams(), matching createEmployeeTimeEntry and the employee absence path.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureRorK2I8JwFLha7AQa/M+VQXBDGpr4PrPkbl4tAE3v7ZoNxgsZEEfFeLCgfXIgXmdxVH9pB6j9VjNTkITjUczkV1OCDlrHDnbkwQiJljpLbdxMi85TY3J0IazHyBVlMJK5pEHGNfBbowdk4hP9ePSqirCttayNIKNTEkWD8fh3yhv9GPaf/yvVY8sdwNC6MrJCKW5Ww5GeoEc8SdDqKXe8tNi66sKBmxZ9HF6y06Xwjtxr68Jir69HZGpdIq58aB0tTbYF6ABFof7dxni4YULDSXKpiK865quxaG1Rl93SyGR7UTgKydzSoQQC7TuGCapyyM/Jifv4/2mFQeOoW30dWwxqTTPzdck2QXLt8Ix0KFK4WDQtGcoTAhGhuo1IBwvR/I9wH34D8bBxmTbA4kfZ0F/DdA9lzVt8S56xuJZ7KgDj5yr8YLdbOBiODLg4Z2PMCnZociuz3eqSd8bfjJBqd9LmOGbHg+d8OkzCLF8sW3Gwnihhmbg5HPQdps9Wl5umTL9sjFadQtDr+tWiIIqIqbo1++9L6jBFCpUb9+cmD+08t+HzLa1F+2tqAIBeAvIld+tPs8CnhapsjUhNRu1K12CP1yYoNMx2bb4s7hfM3xNZlNk4OPIlGFpg8OVH0/BbJFgg6VGzi4mwA5zUFTR9PKCN7wRoVIaNZND9vEYOEg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.5
Release Details
UpdatedAug. 5, 2026, 11:21 a.m.
Changelog

Fixed

  • Admin notifications layout (HTTP 500): unescaped % in premium help copy (50% = 0.50) crashed L10N vsprintf → guest/error shell (body-login + guest.css) centered the sidebar and checkbox labels. Literal percents use %%; JS placeholder strings go through TemplateL10n.
  • Admin notifications interaction jump: initVacationUnitMigration referenced l10n outside init() (ReferenceError) and soft-keyboard reveal scrolled checkboxes/radios into a visualViewport feedback loop — clicking controls no longer throws or yanks the page.
  • Focus/select page jumps (global): soft-keyboard helper never scrolls for selects, date/time, or desktop focus; only reveals typed fields when the keyboard has shrunk the visual viewport; jump nav stays in document flow (no sticky chrome) on all admin settings pages.
  • Notifications page clarity: six card-level jump pills with matching card titles (Absences & vacation, Calendar & email, Overtime alerts/bank, Hour premiums, HR office) and a one-line lead — same words in nav and headings.
  • Premium categories table UX: fixed column widths, left-aligned category labels, proper checkbox touch targets, and % beside the percent field (no more stacked/centered mess).
  • BANSS vacation-unit migrate crash window: pending flag + committed audit detection finishes the IConfig unit flip if the process dies after DB commit (never leaves hour magnitudes labeled as days). Heal also runs on every getUnit() read path (not only Apply).
  • DATEV premiums vs closed months: sealed months always export frozen month-closure premium buckets (NN-06), including mid-month ranges; half-open exclusive end from ExportController no longer bleeds +1 day into the next month.
  • Anniversary mode switch: calendar→anniversary requires explicit missing-hire acknowledgement when employment starts are missing (VAC_YEAR_MISSING_HIRE_ACK_REQUIRED).
  • Vacation mutations during unit migrate: create/update/shorten/approve/cancel vacation refuse with VAC_UNIT_MIGRATE_IN_PROGRESS while the migration lock or pending crash-window flag is set.
  • Month-close premium seal: policy load + classification share one exclusive azc/pp/policy lock with admin policy save so sealed snapshots cannot mix versions.
  • BANSS migration UX: visible 7.7 callout + “Use 7.7” control; confirm dialogs show the conversion factor.
  • Employee app hours preview: debit preview is hours-only (no holiday-blind weekday estimate).
  • Anniversary approval lock: FOR UPDATE scope follows hire-anniversary windows (not blind calendar Jan–Dec).
  • Vacation year mode flip: refreshes open allocations for access-allowed users (AC-101.4); audit records hire-ack count + refresh count.
  • Hours-mode rollover: VacationRolloverService receives VacationUnitService so carryover writes keep carryover_hours (no silent clear-to-days).
  • Migrate-idle on balance CLI/rollover: import + automatic rollover refuse while unit migration is in progress.
  • Migrate-idle TOCTOU: writers hold LOCK_SHARED on azc/vu/migrate for the whole critical section (withIdleShared / absence shared hold); migrate still takes exclusive.
  • Year-mode flip race: exclusive azc/vy/mode + migrate-idle shared around config write + AC-101.4 refresh; reports allocationsFailedCount; refuses during unit migrate.
  • Bachus admin UX: vacation year/unit as giant choice cards; long help + FIFO/overlap/DATEV collapsed under “More options”; short first-paint copy.
  • Premium policy busy: concurrent admin save returns HTTP 409 PREMIUM_POLICY_BUSY (injectable ILockingProvider for deterministic tests).
  • Premium tagged_multi: no longer sums money into total_valued_hours; unique wall-clock total_classified_hours; DST night-window coverage.
  • Mobile clock-in (Kommen): mutating API calls now always send a JSON body with Content-Type: application/json, so reverse proxies/WAFs no longer return opaque HTTP 400 without a message. Error envelopes include stable error_code values; mobile surfaces server messages (or localized fallbacks) instead of English “Request failed (400)”.
  • Web / desklet clock actions: clock-out, break start/end, daily-max enforcement, and dashboard desklet POSTs now always send a JSON body (same proxy-safe contract as mobile). Desklet and widget errors forward business-rule messages and error_code instead of a generic “Action failed”.
  • Desklet project selection: when ProjectCheck linking is enabled, the dashboard desklet shows an accessible project picker before Kommen and posts projectCheckProjectId with clock-in; daily-maximum callout hides clock-in until the next day. When ProjectCheck is installed but linking is off, the desklet shows a clear neutral callout (same guidance as the full dashboard / mobile home).
  • Desklet template vars: workspace partial reads $_['deskletConfig'] / $_['l'] (OCP\Template assign), so project options and JSON config actually reach the rendered HTML.
  • Utils.ajax empty POST: bare mutating calls via ArbeitszeitCheckUtils.ajax now send JSON.stringify({}) with Content-Type: application/json (no Content-Type-without-body).
  • Admin kiosk/license/tariff/holidays DELETE/POST: shared normalizeMutatingFetchInit forces a JSON body whenever Content-Type claims JSON (or when the body is missing on mutating verbs), closing the same proxy-400 class on revoke/clear-license/holiday-delete paths.
  • Mobile project selection: home dashboard and manual time-entry expose ProjectCheck assignable projects when admin linking is enabled; accessible project picker before Kommen/Weiterarbeiten and on create-entry.
  • Today’s hours: getTodayHours() no longer clamps to the daily maximum, so UI and error copy report real worked hours.
  • Lock conflicts: HTTP 423 responses include error_code=locked and a duplicated message field for clients.

Added

  • Companion contract coverage: T-MOB-02 additive-key assertions; Kiosk 1.0.6 version alignment (Employee 1.0.4 unit-aware remains publish-ready off-host).
  • Mobile home payload fields atDailyMaximum and projectCheck for companion clients; callouts when daily max is reached or ProjectCheck linking is installed but disabled.
  • Dashboard widget clockIn accepts optional projectCheckProjectId.
  • Desklet config exposes projectCheck projects and l10n for the project picker / daily-maximum notice.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureBSyYbL7wN3/nmA1S//VEI5bgCaMf6YYxvSgfSulJAqE4TLWuk5nw2EUqAPA175tUddw2/8StCGbQMgJxduw4ktCwHbUVeLS7Qf6EQneT/YJQgWQoLlgskRE6awPaa0qyvzsLAY/iHIPadw4CBMlMwWoLnXhH2w9Iix753bkzog6VaKqMxW62E/HDw2WtUXkXoC4RuWkOJ5YJOZ4d8ctaccIXze/dUwW9tQrA8wtYruAv/8X3xM8F1tGx7wQVeR/Xz8/B24TyN6YWvuDKloVayIPU92Lae40mdv2ICfTeqCnV4zuYtjaTG3IoiYliXV9F4o8uUAK0n5YaJKvHM7TcdOmflARfXWIs21cP9saJGiyaTCQFJVumETaHsX3QWUXDxoI2X4aAcoAYBuSADMhIhFS5SVXBYZjOVMUIIrPt6/zq7XuWZJpk9ZydIY9GM3oGmPzeC14HXOtXXLP/E8cpVYUrWcDMfQPVlAYjj/pqvUmp0hi/2fuDPsY9q9ce5njRG7dXQQoQiK3FGd71xICgFi2HOCYcf4Mo/M0HYCaPqe+GmXHCUMRt/aVV2ElSW/LMu+ArCPpGLHoi/DkT22KbflVNd+CgdfBq7+F6dwxcBvVMcY9TNPCHmsdE5DKx3ZCcun/tSXRKOOidUqRiSd94oiL/jjECVMN8xxX0xf3UHZo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.4
Release Details
UpdatedAug. 2, 2026, 12:13 p.m.
Changelog

Added

  • Portfolio access door: Administration can switch between Open (everyone with app access) and Restricted mode with explicit user and group allowlists; deleted users are removed from the allowlist automatically.

Changed

  • l10n: Expanded EN/DE catalogs (DACH holiday regions, clearer admin and report copy) and refreshed secondary locales.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureSOiaMXZNekxFez7VU+BALHSm6OTEH16YKXxXUX8I3HFV+ZVH1OTmMXgKgG9dVyKmlSyWkDMpWLhd0zILoPj9CW2/kt06+Vc+ACA3FdvS9qutfWNRvaAwehJv1Udvvd5IS/Kf03kX1kgQgRgfroPI/ts91L5nnHVsA4dwIDU4pEXCEFdNykVEJfXoux0uvXQGhLSp8KQhMR9tN0JIY4CgXiHcAQ0Ra5ptfwTU7YUrYwObu72EAaUvSUZuoUdhq+vY8cYTuw76k9HY1LXIe5rwg4tm5DxPmPxHRHdoVNCmCNu2j++rs+2GqNW25esEk+6e8pdEV2fZFClNDFaUsNBda5Fy8Y0RFVl6T2K79vcILVvnU6osegWQ/3Q/B7nDLfNpCJ4ggp6AkfgsurCYVraSz5fXkJiPO8mn0Ns5WELtZhn8Wvp49g950ai7Q98YbIkzjlvDm6KpLesjy+dJ+rtDNqvhYObV+YTuwOOZLytHoGy9OhZy8pRuavwLoWYfZ0BFKFDdcBJGB7yj9+du1fZTlHEJ01b6mii0s3if8a21RcuEKsCbmiR5LjVB3ACofuYUhfJ07B1XSikkYqsaO02Lccya1DpJOodYwXmmjdWQL/Hr6qjiMad4Hn9yuzgxYluZen0vMpIRMGTZC90SI4/KYA4q+VLWB3K2XI6qmk2UdYA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.3
Release Details
UpdatedJuly 31, 2026, 12:19 p.m.
Changelog

Added

  • Companion API floor: OCS capabilities now expose arbeitszeitcheck.companion.min (1) so DutyCheck / AudioCheck mobile clients can fail closed with app_outdated when the server companion contract is missing or newer than the installed app.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVn8EWsz1515elQgMot1LvIlsZA6IsVOUHRSGG0JsXbOZNHwXVupMo/n4TaNxcQGd9NWAFZRCfLqvqZrhuz68M0UAS2f4HhNV6oHId/FgVoEp0BqOh6JBNboReVsBWUM785PZiPHgybmAZPkHAkTfnp26j3X39tQHq7fIVLvfzFP2UayidATIgF6V8zDJ/3HnnujVyhhWtHWlYETkovnD4rrD4yMrNpf1D6LeyO7a+WedmSMggKSrxC/Ik7i01siE9HJuz9NqbEPXMtUrjRTn9MPaTDQ22ENrdTmkN7ShGN9iBevEfYyeBvAZnw0beh/eSdAYQT6/kKNsY8RCHiXTt6rQl+KIuylm8KvttahtQ5RvXzI7la75eAhDZW0L6IwQW6S797pe/74yhTS3UTss7DdXmIwsM3pq874zXaiVH7eEfbY/vK3g1NOQLwgMi/n8+Q4+eTSWs5xKvB4HKm65bUwCksowxYDmXHtJjInv20pM5kCbtSbF3bbjoTxnU4fNgeTjt5bDO6gFrsyQPmtPZrzOMtA4xPbHgR+evNz0Q4Uv1XnP83AsEZAiWVeIzDap7C1rAiuBfXdSm39snmThW7fAf0uNbtpMwLVLQIfhQ3hM/cS7Rsw5BzSGWRhTRnU91BFCQ1MtTPiM2WidwtXAc/4/rgd+EBsbn+wAevOst9Q=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.2
Release Details
UpdatedJuly 29, 2026, 6:34 p.m.
Changelog

Fixed

  • Austrian break-split UX (web): the time-entry form and correction dialog no longer show “Compliant” for illegal AZG §11 splits that still sum to 30 minutes (e.g. 20+10). Client validation mirrors BreakSplitValidator; the server remains authoritative. Bootstrap complianceParams now includes allowedBreakSplitPatterns like the mobile capabilities block.
  • Admin settings region consistency: country→region repair uses values written in the same request and skips no-op POSTs (empty body still returns 400), so unit mocks and concurrent saves cannot wipe a just-saved region.
  • Compliance PDF export honesty: format=pdf for compliance reports returns HTTP 422 with a clear error (same as time-entry/absence exports) instead of silently downloading CSV.
  • Capabilities accessibility claim: advertise WCAG AA (matches product/E2E target), not AAA.
  • License trust anchor: AZC_VENDOR_PUBLIC_KEY_B64 env override is gated to PHPUnit / explicit AZC_ALLOW_VENDOR_KEY_OVERRIDE=1 so a compromised environment cannot swap the vendor public key on a live instance.
  • Cross-product license rejection: AZC2 payloads that carry a foreign product marker (e.g. deskcheck) are rejected even if the wire prefix and signature verify.

Added

  • Vitest coverage for client break-split evaluation; PHPUnit contract that AT web bootstrap exposes split patterns; suite legacy-isolation unit + integration guards.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature1TSX5RmOZ9/ZxeuN3pqf+J5X53S2citY3TCgMQuU6wd8Vz+fOszY1q7TJ7gYTthLJzBb32jfrRWanwVuUvjCu4ZbCE0mymuHsUJHtTJuEvFrEkcXyFE+9eEow1jIUqKljhPhnrUXEGigKGk0r3WxEYJoQpctvVdQ3sNdxQnDQOVpc3l0qitegM/+Y62bVRoNuvBisoKojpaZKaAjrBXzN9dghMbtIqmJmaQrJncjLlEBcT6AiwgxmeWOOp31PuIo367Cub46ogY0WGRj7qZjLsOmzVjvL+XzzSI/PAzyMn1qwvlJf/vl+go0jXAmcpY2/G2MO6msn8TH3CB4VDew5fl4ieBCxgFy4Xn6PklT1w+Lgo5fBeR9qkyNJIE3YvF21gw+fd6RVLrvWbBQkN1kMAsLnlCeXlaWGSo8P1tJfp5zEkylMCrJxwcUEX83j+yBKKDP+AVP/AnG64mh6MXmMAd2FRMthdBihOgx1k/hYkv8qOsezPk4lUEBZcv1LduKA6bopa7iY/NdbEj9K2F+KGBI4XlrO4JlJMKNn6h+sfwr+1eysMGwWTTlBX58lTuZhUXyDqdk653suYaLUWWWVt4qp+GaM7zwOIsUTx+HRShduuyiE1J4M6NE0lyy7HYNEFLggCAqFAPhy/QwzDmNZJQBXfwyBwjce2iJZ1BHAs0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.23
Release Details
UpdatedJuly 21, 2026, 1:03 p.m.
Changelog

Changed

  • Kiosk pairing code TTL (temporary): pending terminal pairing codes now remain valid for 14 days instead of 10 minutes (KIOSK_PAIRING_TTL_SECONDS), so Google Play reviewers can pair the Terminal app from review notes without the code expiring before audit. Admin UI copy and all 10 locale catalogs updated accordingly. Revert to 600 seconds (10 minutes) after the Terminal app is published.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureK8NCV7JxMWpvTxVMotquZ/rRoRW4+5gPIIoHxoI2/O2WRrPc9QyF2idfMvbNyPDLyl1+yC9vrMeBcPcalJtRJN9j77BQlHtZ6puXYzvaxw3ZsJcbhVB4/wltySYueOyYXl+U6wrgsbD/vLODvzYHOEhquXCl3KsffNto6rpK3k32L1I4T6jc9rIFOIhFA4NHFK+D+Z+J8tID63miPI5F0OjBRTBXEKM7w3FMgf2JgrSAFop6jdYStfHARm3PR/W20KhJdwPTgUYo1NvRW2YiagUAj9GUc6DO0LkAUAXOkJN0EzquWEb+YvjaQH31VagKTkDN6Y+nwNz49kLsgoq8dWPjc/pBGDTtLaVsz0BaRJ0BVGeJmxwiFm35RNfbkcdxwIxjK3P37gl/tmrX9nZedShGyc6o22wy7gU0sXf7JjYT8Eaq2hsIXesxX+4cQwktbz9CZWYvZIZdLiJNyIPT4onuwQ8AcQf8KwLk0E6CJ+yXLCoSAHQOqe/GNqAOFLeWXjsUKsUujJlWt5SCKIjMiKccm4FMP1Fxpv4DP1V/xt6Qh8/8+wdjRU3qnsopZD4pC9YbPRtHOCzAa00z+etMvtF9KT9qfij65zAOKYOBeDLwwx5Un/Wys9sMnWdfYyA3JXeQF0r4XJ299M003AXlu4cqg7AObMZyRY0FXffJShk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.22
Release Details
UpdatedJuly 21, 2026, 8:01 a.m.
Changelog

Changed

  • Kiosk stamp errors are specific instead of generic: business-rule rejections during clock in/out and break start/end now return stable machine codes (KIOSK_ALREADY_CLOCKED_IN, KIOSK_NOT_CLOCKED_IN, KIOSK_ON_BREAK_END_FIRST, KIOSK_BREAK_ALREADY_STARTED, KIOSK_NOT_ON_BREAK, KIOSK_DAILY_HOURS_LIMIT, KIOSK_REST_PERIOD_REQUIRED, KIOSK_ACTION_REJECTED) instead of one opaque KIOSK_ACTION_INVALID, so terminals can show actionable messages.
  • Detailed compliance messages pass through: rest-period and daily-hours rejections keep the detailed, translated server message (which shift ended when, when clock-in is possible again) instead of a generic phrase.
  • HTTP semantics: kiosk state conflicts (already clocked in, break already started, end break first) answer 409 Conflict; compliance limits stay 400.

Fixed

  • Kiosk error copy translated: the new kiosk error messages ship in all 10 supported languages (en/de/fr/es/da/nl/it/pl/sv/nb) with full catalog parity.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureRlVyIvkEA56x2gahFj22+RQKrvgzWWPNmOR2MfQPp6zdnc5BzGS6MyfsPMqp/ctvm2RBSJUAAsODPdKCLf1Sh0PoRDTBe/hWJDO3jXeV5aEz1PSBnmDf7Sldoac+88v6VxjtW9kYRuICZK9g1wqg0dG+B87+WKUs8I2cuGf0sAcvWWlrXWFfC/bDUzsrFrRUT0mjYWvb6Y22/mFPycriZN6OmBoJe3xSgpbfgO0ZCsnQnUzwUqRyg0K/LSApJvFL7l+pUmFJOztYI8us/tbyeY9Fik8vHfXH0xM1K0Zi6j2AOhNDIdjNSxSXvbTxZRFSLIAY/iIlvj4DNXvQ3zhZTe80jCZ6P3hQSJKaiubbty41exokyBzsS/NEwByJ8QiOP57fN+gGSt30WoSMZ736+dyQ80iStyjZHOeL8jtX8SR7leiArQ7mUWqMbiAMkc5HRFXmIXXQi4yGjGzUtq5G/laHkn0t8Y7FyLVZ8xwWvdEpva1jEu1xPiRi8mSYpt3md3Iq6U2I1DdHzj5C74+bAloXlApLOkspaVsxAATj1V28zzGAdAdVEtnyYhLw1Qd5AGsj0XdwI66h208gD+O66A/WY6Ic0QfNu8jrCMP4C0ncCY9wFgmSKN0EJWxu9gvoa4Im2S6qwVUJPnYXNLCjbUEawXHgSoKITTWFcmc3Vlc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.21
Release Details
UpdatedJuly 20, 2026, 9:08 p.m.
Changelog

Fixed

  • Stuck badge scan cannot be cancelled: Admin “Cancel scan” no longer depends on acquiring exclusive DB locks. If locks are orphaned (crash or pre-1.5.20 truncated keys), cancel force-aborts: clears the enrollment, purges known lock rows for that employee/tablet, and returns success so a new card can be enrolled immediately.
  • Start / PIN / RFID blocked by orphan locks: starting a scan and assigning PIN/badge first retry briefly (live changes win by waiting), then purge the stuck keys once and retry — instead of looping on “already running” until the ~1h lock TTL. Live locks are never purged on first contact, so concurrent admin actions stay serialized.
  • Double-click on “Generate PIN” could return HTTP 500: a unique-constraint race between two concurrent PIN generates is now mapped to the retryable “busy” error instead of an unmapped server error.
  • Cancel hidden after reload: Cancel stays available whenever a tablet is selected in Kiosk admin, not only during an in-page poll, so stuck server-side scans can always be cleared.
  • German translations broken: l10n/de.js contained a syntax error (strings appended outside the catalog), which disabled the entire German catalog in the browser. All locale catalogs regenerated with full key parity across the 10 supported languages.

Changed

  • Kiosk maintenance: expired incomplete enrollments are garbage-collected every 15 minutes so tablets leave enrollment mode even if nobody cancelled.
  • Busy copy: no longer tells admins to “cancel first” in a way that implies cancel itself might be impossible.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureXiGxy0+z/IJbzrL+1Yzg5ixEp20L6DG6uicf5NP8MNCA7dfDJrGUdjbv3Bd3NHATtTIbmNJWiL4N0u/AFQj6Qb8HRRMNIBKBQpamATbxq5FfIVXCpSOpfMHT/sKjVq3SxCCdgV1XB3NqCbEtHuZmSH5mvNBfI0Nu/ZO584j2DM4qdvaDXcqyf0N69NUQuP8jiCEPjJ40DHNXfGTqnx4ExnnaBrfK6t+mQE/aFiezxGl4dH/JNWE4xikVbMWAdSxzN12YgI7AO2QyYk1TAeY4pohJwp+tclEyIkeFcLbFO3Tu1tQfHcKKCYEsNEilUF+k4eFg6xlnxDeU67EeWkpg4nxTuADqgx3myJauVioj1Ewe9HaMjXz5YmtpNPwYTqBK+sfU5GVoUTY0Nmmx6LlNOQYa31agiakLWwBV5SL17dNfOOjC5KooNHzK/CaiLmQupDmEA7cgA4oiwOC2cauVuxT4RaOKnKxWvp0rRErOkV71+oqyrwx1TcGIWx1YH0Atz5OujGrzm/b1ZlCXmL6AJm+qeOuA9lEa4ABbyZRBnO2G3Kec+oo8KmwJYeLjYZKj7MoJN5tho97ZK0yDIziW1YrGT6DcgL9jwW87W+r/jY2nfQ3w6aysWj8nSb21yF3e6hCKyMBgjLW/UFQTF4lxYXd3wfBPlgaWuk+GWxKYSaE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.20
Release Details
UpdatedJuly 20, 2026, 8:14 p.m.
Changelog

Fixed

  • DB lock keys truncated at 64 chars: exclusive locks for time tracking, absences, month closure, entitlement snapshots, and kiosk PIN/RFID/enrollment now use short stable keys (oc_file_locks.key is VARCHAR(64)). Over-long keys were truncated on insert so releaseLock never matched and mutations stayed stuck with LockedException / KIOSK_BUSY until TTL.
  • Stuck lock cleanup on upgrade: post-migration repair ClearStuckKioskEnrollmentLocks clears legacy over-long lock rows left behind by older builds.
  • Kiosk enrollment cancel races: cancel uses ordered user→terminal locks with short retries, returns stable idle/completed/cancelled outcomes, and no longer deadlocks or leaves Admin on a hard busy failure while a scan finishes.

Changed

  • Kiosk admin enrollment UX: numbered wizard steps, clearer assign/cancel controls, and improved enrollment panel feedback during badge scan.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureElgAE38RXS4k48RHQq3yjxfRczhfTySf1c5Q/t9Q/XFUzyDixdpFnqLPWxkRj0XaQ0xXIBaSsQza7zImW3cBAsoadS+o1O8eF5XlOJJJtwgBI8ucBJ+3y418M7XteL0O/6dsKL6kSIaUfaosb8r+ckSAhWK33dApIf+7x7eyqx8ueqNURmtTlGssUyDyPFJ6pMZaIpp9/AM1glFMTp3n7I6eDnsEFepyHew3NiNo4uaSuxSvKm4L7F7f+R4SEPWqmCI9bti6UR87n8Vo+OLYyC37Y0amL7K+m0Beh+RBSkEZE+7esQ6uVVFg6YMVJfoHO2UutCq2Z7KSr/z7a8cFFoMauK32S6bvzCWMf1aB4ogTOLzpB0Kngpd/Q0oSZrtFQjYomioRKk0kb/VCapR2jtRnTMXxdmwfPjWXkreWxpFskpiyRKWWTLKBaNAMWaOLQewtLdPhxaaGSmH9CTicrkQG8ssHsdU+7/y6aDkcSirhVEyqdEc9jEcdjX5vjPVXzZXA3Y0S53c3r+xnoA3bqx/aSdag2HFSmFILZsxJaKtXQGMbYwMF/SmUmK9lxA3r3EwtYW2Zf1qUDiWONOO5amOcCdNvUsN/RRfrI3o4RNDOTdMYbmAGnUGOKCkU/LOH0yLKnX4KIGnkQdTsmTFBS0P6G8B15m9j6PlPgQfXMw4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.19
Release Details
UpdatedJuly 20, 2026, 3:48 p.m.
Changelog

Fixed

  • Kiosk API JSON errors: unexpected and rate-limit failures now return stable JSON machine codes so Terminal clients can show actionable messages instead of opaque failures.
  • Stamp session recovery: one-shot kiosk session claims are released when a stamp mutation fails, so terminals can recover instead of staying stuck on a claimed session.
  • PHPUnit full suite: fixed a fatal from a redeclared template helper so the complete test run no longer aborts mid-suite.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureG2fJROM8ehTinPOpxRjAiqnMIVmQlVdPCsqXsV3UymF2qWHJ3bqZ1K5MroNW4h2VZuxvgpLJqjc3h0TS7pI6cuwO5/+cvlk2U3Wd0k6jQw/WjJmbgCnLoNoexz56BxJLzeRywusMxQWTa7Dq5AS6B8oOujZ8jngQIGq6iS3XMkjxYCClE5VI010tvhN1Y4sO2J6T74dTo+HoYe8vo37ijiJAwL8L9i0aSHlitoKi9PyL8xvpYYYZ+vf0twmqnDE5XsaUPIFPTJNC+UkyDzGQYQTrzZjts8QOEll2z7Gq7/uhWOAJ9TiCnHn+KRuuEs5ffP23x+bwd0THZBIyl4m6L7Dwnv5DnZrysYd5Zf65Cco9/429VHCD7qciLbOoT+rOC4dwIiC9U5fTTkLnLuTqM2CfB2WJuwwqYIN87afGELrlY9+Zn8/B5pfraX3C2jOD6+9/iwLn2zZ1qrep4XKUzJiKPM9UU7oE6OOXflJ1T3MR4rqT/lQNc9A8Rw6N18qk0418hCVyuDcYBP5SzPj/AAxJEF/IfHFzHqguD0PC17MBSXMnQk1G4o4BgoLsGOmphhtpTxQqpXeDsDrxd2lcjyRGi+PWR1GyIKhVxE1LZQebDYXmZJf4ykSiok9eFdcxgt4aVTE5Nfuw/0w9B3Tth/rmo6SsgKb+HKNgZmt5hTo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.18
Release Details
UpdatedJuly 20, 2026, 11:28 a.m.
Changelog

Changed

  • Full-width admin shells: My Settings and manager month-closures use the wide page shell instead of narrow constrained layouts.
  • Audit log filters: redesigned filter row layout (dates/actions, then user/action/entity) so fields no longer collapse into empty grid holes from shared page-pattern subgrid rules.
  • Reports export chooser: replaced nested badge cards with a theme-safe radiogroup of full-width options (solid icon wells, Selected state, keyboard arrow navigation).
  • Admin / manager surface polish: shared stat tiles and layout tweaks across dashboards, license, kiosk, users, and working-time models for clearer hierarchy and WCAG-friendlier contrast.

Fixed

  • Audit log / reports fetch races: ignore stale responses when a newer filter or export-option request is already in flight.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureBzLEZ4ZoxBh/uruDMsv6YAhJMZMfAzxeeyJgfUQ+8AOmDLxKmVuo7e4eKhVBygC3Sanoy+UgKgobHS2XzHPJGHQGMZ3nE1n/R+qCXtyL/bIuJkcHn9YHebUm3ptl6OVVbr4h8bDPtjJzDz6te10Q07c4mehR8/GR6+rz4rXHS/oQXb2XKAAs7IS15tDgn63y1uoCE1Wm6wSGGC7qUv71JjSsEgbAinr7K5NEgt5rQApVuaLp0kxvzSnZTcBfM8135izvptnnPaHB/QOTEzWzgr+A286fZM2DrDl1dS9/TmPRoHiaV+jsySN6tKqc/vkHWKgjGeDxcxF0lt4k21v9FVNYzA9UNK12qz/WI+KC5QynvYvGjk/RNCKaosTMLtWPCJsMwEj9DnW5zQ4Y7twfzr0KHbK3z+yL4K/cCATqqeBXESgI2icj/tYx8ghO7bmsR22MBUcs6FfU7ReG1lqEsd9lKfbKZA0qmS90ypLXwy8jODxnvvcFOOo19+DpPA4GPvtr7wgvYdlvpXBzWLguwV1ksmtcYB+mHV/W1v4h9lR0i2/ptjDn3xfDkp/TB6ZVP/AvHqf7+gZZYS4OMB6aJBC8b24MvN1pHihJHqC+dzx+0WTj2i4W57yG+abnaE/LM7TokkB2xdOCSDVq/wWaJIEwlOzXuvPkc4Y0+wlVCZo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.9
Release Details
UpdatedJuly 18, 2026, 4:47 p.m.
Changelog

Added

  • Dedicated admin user detail page: user editing moved off the users list onto its own detail view (route, template, and admin JS), with clearer navigation from the users overview.

Changed

  • Kiosk admin enrollment UX: improved enrollment polling, status feedback, and kiosk-facing copy during badge/PIN assignment.
  • Kiosk error messaging: clearer, actionable messages for common enrollment and credential failures.

Fixed

  • Kiosk identify/assign races: identify and assign flows now take enrollment locks so concurrent admin/kiosk actions cannot corrupt in-flight enrollment state.
  • Credential assignment under load: kiosk credential updates are serialized with enrollment so badge/PIN changes stay consistent with the active session.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureBp1Hm0lGcDtG8b3bi4qlMBJpvwwMEf/5grKKp5x6YsyBvy6nQ01+DNKhVb4jicPFWfsk3eJ7SlG0TReohIuCELyydXtc0EqNfx1DN0lAeNoKvuNkgS+StdDJ4KR4EGgCq68y02oX9r9lMK/V9UUfsTazyRkpHjl8AlOgt2B7Fvg+/CWof158M487DblxTaGuDu2ddgmGHv00Noc5KLezuIDWo60fwfP9m+ypf317gFcZTebwyHiY5Z5AH2XzobPQ3P6d3/d43RsyOqPa1VuTNh8lHXLTQiKnVMLxGYDzjxss+5cPafsoXOECbEUeeMCVfixXTedPuDvywyyb4LZhKaMJSiuMhupUzh20K3EbuEz9FeZkZAqhaGZPEvinaprUJ+7Az+0Or+2NM3DPPQItZJdtx8ZFPVc0oG53M+CQHpYIpDQq5i5obFU0gCCaVTWBgs5biS5i+vK77Y4tFaoUD+yxQ2XiIn2BPyuoW/s2RFIwe9Tq9O87887J5bbHUlx3WpJ5Ket8pLHXDHlftoN3GX+M+6CYMtF8UPVOU8rXiucruEcTk4XxonRPimtw8osFE78acp9NXMfFJxt4crdQ6WYv4IF3SC9IkBmZzUtmKA8M8o/ykz1HZsdwVaQ09ueYGJeX8cfqw96C7IDA6f9KjNAMYMFzq0LMiFU9GYoLwCc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.8
Release Details
UpdatedJuly 18, 2026, 11:18 a.m.
Changelog

Changed

  • Mobile / widget home payload: impliedDailyHours (contract daily target) is included alongside weekly hours so clients can show “Daily target” like the employee dashboard.

  • Session CSRF restored for browser cookie sessions on NoCSRFRequired APIs: mutating clock/absence/export endpoints that stay NoCSRFRequired for mobile Basic auth now re-require a valid request token whenever a Nextcloud session cookie is present. Mobile clients without session cookies are unchanged. Forged Authorization: Basic … headers can no longer bypass CSRF while the victim’s session cookie is sent.

Fixed

  • Absence cancel/delete/shorten race with approve: those mutations now take the same per-user absence lock and re-read status under the lock.
  • Status-path stale-pause repair / daily-max auto-complete: side effects run under the time-tracking user lock without nesting an outer DB transaction around a second lock acquisition.
  • Manual time entry create/update overlap races: overlap check + insert/update share the time-tracking user lock with clock mutations.
  • Month finalize/reopen TOCTOU: exclusive per-user/month lock around seal and reopen; calendar “today” / month-ended checks use organisation storage timezone.
  • Compliance cron / weekly average windows: use storage timezone instead of PHP default/new DateTime().
  • Absence business-day gates: “today” for cancel/shorten/substitute rules and vacation allocation reads use storage timezone.
  • Dashboard load-error callout: keeps aria-live="assertive" for screen readers; clock/break buttons guard double-submit client-side.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature1YxfevMESrUM//nCGciUukkJUENnGK1Zx28RQDbamoI4ObbLwsvsf3iXtY8HSWvdXU/CcaaIkhoTz1AgoDrrc9hEuKgB5n+wLwSasEnCOFuEB97+cRXwPFInFhWY8l6At1iKRcfa6CI/dQoGL39p5afqFF9LNwASQj3t72wAGMFUn582kRolB1QoKJH5YisXq3hOUfkRRxmCE1QYV+UPeTvxhLvFZgN62CZC53ZQl7q7xVvPUIszduNjkdzfa3h3phb52+cU0XS5jd1KBXzJPdP+JKAo07X5ctW9w1N1A854M0NViBcm7OsWz91eQTI0Rbbn8AeClAMMX+hD/x5SBLmP1hw5sveGM6aX9W68rAqy7A1215xvAwqRMHHe6Nccd6zLFUvh9Ll2SEA6E3UNbch3IgtlhgnBxhOjZMrVVUjci82Ue0zrIN6MFLI5yCWYQ9c9m9hSfDeqj0X3mjD17uTsba3l0YgnBV6WkoYcwphvDETTEd4QRPw4Yy3nm5cZ9JvWN+XG2wL7xuCw7O9/rQAIjXDlI4FuG577wSjEdTcgiHMeHsB1aA5HKdxMyRth60FhJqEveOxOJ3N9RUQUTpSgzVbJxablgHSt3r4QABIWQahY79VYUDLYXmd05v+PZWAOWUHS6waOIdM8NHRIfvVLq3qR3WVoSftNVN3I1VA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.7
Release Details
UpdatedJuly 18, 2026, 2:08 a.m.
Changelog

Added

  • Auto break setting exposed to clients: the dashboard widget data (and the mobile home dashboard payload built on it) now includes autoBreakCalculation, the personal "automatic ArbZG §4 break insertion" setting, so client apps can explain whether the server may insert breaks automatically.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature3lsfEckilfrV40shkUALmCLcnU3GVW0m3VI/iRg1JxxcpMSBtmCK+OFGPo1fKN3Zz2gTicFaavr/4pfdl8oD2HUCMsRJtzt2URItVhM2cEybhBr3G1p52hQWVoFGBb/1QOKflxFcbSAf7QLvA92Cje+qb8TUjyM5uNKLqEq/jr9y9nEH4afvS2LO8s47+akQn10KnlROcuIb3S6wx7yhNQUFsHnKYdUetzZJgTCxBFFrQ0llfDmFAJhnh1GFypqZ9MPhjbXqQBJ/lB9Unk/pekQqxaMREBY/K0gG7JEhmw6SPWcX5aGU3hmKvFLZB3lfWgt2EH4viQ5c6F/wqkM/fRZqZ4y/0kLHgr0KxMS/iJBTOISyGFxv31yEHQGbrUo6Rfr/8TXFYGuV2f63CyZIEe1s8WDdsGkakm+OnJTLUo1Rxu8s2LbECQJWYpIA/Xn546opsRPFtGFPWAPKJesHjmut1tKUrctx2zJxU30GFOkQ+U+nRrx2HRYGhJze+7OKxXCaW9imtsheFdb2AoPBmj12pN3ZHMWKjR4Um+v7LWKbOKjo7wzNTL85PsVPG8pF3TZa72jqqOZEZH34ayeUiv3n0lmt4aStaB3HYwb1yZOjH1oVZOhKmunDs4+naRLLweixcYyICLpCB6IPHSeByvzFUqxfmCAtaev1arL6FvQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.6
Release Details
UpdatedJuly 18, 2026, 1:33 a.m.
Changelog

Added

  • Mobile home dashboard endpoint: new GET /api/mobile/dashboard returns the full employee home payload (status, vacation entitlement/remaining, week hours, balance) for the proprietary employee mobile app, instead of the lean desklet summary.

Changed

  • Time-tracking status endpoint usable from the mobile app: GET status no longer requires a CSRF token, matching the other read-only mobile endpoints (still requires an authenticated session or app password).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturejIqTDpn3RCL8GdRV6/c46TD79xYOm5/UalYDOBjwkEukzMomLSYYlii5dfXyu+2FaGRqR782SaUf4Wl7TM+i54puPCDo0b97kZe68crptjpNCuNqhGcVg0DF/mYOjDIANClix84oRtzf41Utm38ctMxHCMQ53t2U314oTMRlruIJjpRXa2FJbKKuqa79jxOy6iz/26LBnIiIVF0RXB34qBMaFxy/YzzR4uHVs2uY5wDZUe/hlViFk+YQlwFWWulU+7HHQ2fBhky85qDvx6PyEKH0F6pk0k/6EuWFY++nC2zoYXtVl3biDN9st3lYPPgNWF63fUv+H/fmI6+TqbDTOCEolBMoKJIn3nK0Rs+kHqKoulkgkhYFxr2OzPNRW1Nf3YhRfUmp2QRdWw17pAeYdiivxAMtO1wtv0UXONTfdK0HjXPXkMRlQiTYTXuzyL/ZwsYhqk++4gLCdgsAjeYI+jQOid99iSkxcNkj/4xZPkaWqnoy2ScJZdakCAcsfnkzASOdcCoKIrsKvvam84nrg1wcKVNYpJL5H4W8t/LJmmiZw3GMdV07E7htCfY+6Ky8Gb71FNrlIQmD72HXtGeC11rbxR7D6lzTTRdo40n2YqglNEEmknElFubpYlUoOhqdwy0cCdHhuZbw98B8eFmF+RLfIsfjGWNVnSFrSg8lSuQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.5
Release Details
UpdatedJuly 17, 2026, 11:08 p.m.
Changelog

Changed

  • Vendor public key baked into the app: AZC2 license verification now uses the production Ed25519 vendor public key by default. Customer servers no longer need AZC_VENDOR_PUBLIC_KEY_B64 for real licenses from SbdLicenseOps to verify. The env var remains an optional override (tests / experiments only).
  • Clearer signature-mismatch warning: the admin license page no longer tells admins to configure AZC_VENDOR_PUBLIC_KEY_B64 as the primary fix.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturewFtcvk8BSgYUH7erpstedDBkV2MaKJZrLLW9Co8vzmPtwMccIiEaPN7rasvZJsq53IjE+mDSK+BzwrueIrN0XnCCvONC0R6ywYLYMBhMxZsZDiZrFYlFVMvcBq0I1h5aGBPsiYO8WYqTBN4DnX/xtsFORpTKJ+IVSDTw/tsTE40N+MIA+aCe0HJb3QZHXziYbxvPSAZIe6dI/v0+Lquii1anvf9k4oF+MfIo8a/7DB7jhY02BQ/8by8JG29AG86oL6wg7IShtR9sZlYD6aI+TBAJ7RZebFuqtta68WyRw8FL5rVy0O8DylWOCNFWundttwkUrL3WE8Mv07Rm+TpJbQ4uc0YdoSOfK2KNhx5VK4zO164z6twBJgusMDQzCoBSfsxtal6Zan8ORNvdh0hA/MI9lYnWX7gpJPdf5FGFoUgc7Oi9ASYC6j0TQE7vUr5kC8A2AoMnjahPykVc5x70NEIW8kboeeC0HjKxg7MNXSaCOJ49+7X7GnXate3cOTBem79vC59a2VvHjefomThLIF9ucnWS9zNXwgfxELPyIsCyKdTjM7Wbg8uD9fMhYZVgDlMLaa6Trj5jPayHMoKMHVY+4Rcd+iTWyGuTqsdyPPZbU/qBJCEhZej9uG1A7U0Pyrd9M+X+uoTxqQlBPFj1Y0blKosk7lPl0Buw2LyKK7s=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.4
Release Details
UpdatedJuly 17, 2026, 10:03 p.m.
Changelog

Changed

  • Kiosk admin UX overhaul: clearer three-step flow (find employee → allow access → assign badge/PIN), richer status labels, confirmations, and actionable error messages (including license/slot limits with a link to License administration).

Fixed

  • Kiosk admin APIs required CSRF again: removed NoCSRFRequired from admin JSON endpoints so state-changing kiosk actions are protected like other admin APIs.
  • Race conditions in kiosk pairing, enrollment, and PIN lockout: exclusive locks around terminal pairing, badge enrollment start/scan, and failed-PIN accounting so concurrent requests cannot double-consume license slots or skip lockout.
  • Badge enrollment only on active terminals: enrollment now requires a paired (active) terminal instead of accepting pending/revoked ones.
  • CSV credential import size limit: imports larger than 1 MB are rejected with a clear error instead of loading unbounded input.
  • Sensitive kiosk responses are not cached: pairing codes and one-time PINs are returned with Cache-Control: no-store.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureRYjKQgR7fhhltR+3iZrWtAevXZtgWOm72Sm9yskWQtXfDgcNiy4umdoCjPrr28t9NW+DASahC11vAFpT65cBVz3/uvuHLPlKtmUTDVb0MYX3FBdOnyYCERerVayRuVBosDJyRSylAsdOoHdvdwVZGzj3P7QTtRXgG3ZvKpg5vTUAvg4H20JknLPzrIRFUslZasnpEcgRpG2WCKLVESXcwdLFG0HTJzrZTwsxAYXd+jT5ciaJD1D3WiMZAjcNEzrPwIxk+KsRJLi1Ni1GVVmFvENUflrdXtUWCLTiixzEs6fsS2U1MrtnJ5ZZxGK9iVH48scHpKiJ4lGiXp48d6wnBuINz7JZ2HIrYQrrFCARNCMKW7j+5Gh4B8w+1UD1t1OtVkrrhgGGPOYToj/+dDHBDNedT+pbAQZx3h2GbjSIVY3cdCD4GRwcwxAjSu5sj0pqmXCPr5l1F8v6ClqmRvOAfFvnP+NC9uO+rZELc0MKPwZBy1ezIgCTiXgVgQk83jyI7Tf4UWSgP4biSpVFSVp/fZwNIetxiauxchKsGMHxuRtQbzCklKylhwf2h1pVuR/XfkxwsxEj3JHeUNXGfH9V85FGjW5P6oKeQaA1lvL9rn8/UhZqNC+LynlwFpUxPwbh5HZkkUsFLFGdPBz/uAmCFnFbErvejTYZZcy7xs0sEag=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.3
Release Details
UpdatedJuly 15, 2026, 10:38 a.m.
Changelog

Added

  • Instance-bound AZC2 licenses: license keys can now carry the Nextcloud instance ID and are rejected when applied on a different instance. The stored license state records the bound instance ID and a fingerprint of the applied key (migration 1033). The admin license page shows the instance ID to include when ordering a license.
  • Daily license maintenance job: a new background job re-applies license limits once a day, so expired licenses or reduced seat/terminal quotas take effect overnight instead of only on the next admin interaction.
  • Signature-verification warning in admin UI: if a stored license cannot be verified with the configured vendor public key, the admin page now shows a clear warning callout explaining the mismatch and how to fix it.

Changed

  • Mobile license gate covers the whole mobile API: previously only clock/break POST endpoints returned HTTP 402 without a valid mobile license; now all /api/* mobile requests are gated (bootstrap, kiosk, and admin endpoints excluded), with an explicit LICENSE_REQUIRED error code for clients.
  • Admin license page overhaul: redesigned layout with seat/terminal usage bars, assignment timestamps, and direct purchase/renewal contact actions.

Fixed

  • Kiosk terminal pairing could leak device slots: creating or activating a terminal now reserves the licensed device slot transactionally — if pairing fails midway, the reserved slot is revoked instead of staying occupied.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureXXtpAkga7MSWT0URLIx8lfJZkYdAp/OPaGbSyuv7lb7HoysNfKpK3Da+GcKbi0J1AdJUsSZJl5Q0Repec5Hc/V3cnykiuQn97n4JtNFKljd2oyjbs7YYvBuqGO6qA+wgATsrWijAI7uvVQwytYa5vwA6+lYkeuLgKZ0jbnnwL9YNvrHzzcu/8JWxMnZXHTQS06IvyIvVlPqYAunMgjnMLj6s9sxg7NOHWE8m2WKh2kHsHVHcVK7G2/zEGkXAt4vg9MOe9p3laDtnjue/eVtpc4ynogL/UX4O+X+ulnF7cJfJCR4FCu0meYwMuujgvJ42uS1DeBlICnV4+dIn4rYhxc8V54BMjlhTyeKCLFMAgs0myKVmfHvOElDCkB1Pu8RJcv8cAzG0FAGzOzwXIzapVAzrokquA4zOwQY7fgMYyFSZAuAxHEfQfkuLeZNPP/jhOPgm09N0NdFwGxOhwVEE1MVg0lFPOj+imT2M8kHKVuEyLV3wRFGbVG0Jjivo0NFEVFDI9x4ibnR3ixHTQhX/+XnRmkujPVF9JAHhRZlr+iuS/mWT4s0IkgdPjFprOi9YQH2zC42lqRpJCLx94EMqcTTFdM3y/rxFfDG/YNJgBr5MJSp6K0Krl/wjoBuNne5gzmjGV1PcaR0IpFgI74dXHU20pXtMvALHtD84HibTgMg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.2
Release Details
UpdatedJuly 11, 2026, 7:40 p.m.
Changelog

Added

  • Pre-migration backup before app updates: new BackupBeforeUpdate repair step runs automatically before schema migrations, plus occ arbeitszeitcheck:upgrade-backup for manual exports. Upgrade backups are catalogued with integrity checks and covered by unit/integration tests.

Fixed

  • Manager "Record time for an employee" failed with "Status is required" (#27): shipped in this build (documented for 1.5.1 but missing from the published tarball). Manager-recorded inserts now set status and audit justification before validation runs.
  • Data loss after disable during Nextcloud upgrade: UninstallRepairFlow now distinguishes disable from explicit removal — tables and settings are preserved on disable (including auto-disable during server upgrades); full cleanup runs only on app removal.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureJPP2H7l2IIixMFE7YJqvF+iaZB8L7+/0QAVjcbHaR+qQmRK/KO8lGTe6Jeiw+L4IMCATnqctysA7LzW/vHlSgVGgfmE4/kpi+zM7tGMvqKv+cmA0cTVJQhBRlw0G7g7keeDLScbID1eAIXXsjRJ1xhpyfUGSFYX53x+3dnHZ0GBdDKCfd1z+yp++QiTz1SQuAqjubLUvDTd/6ZugplY96nr8z6IkpsuzEjgcdkvySyFcoJNCJXWZGFkLlD2P0PEANvVR3dwW9Q2FLaqfgGTiJJ2vyL+BkFsCO8jqH/WOfWhw82HZJ4qprYQP2H5lGt1nCGDhojHhhFBOj5DOhlo435QYSWEdfoldqCj1Nsg2uqunul3xSg4cVX0E+K/IUmXCtIxjlIPthkJaVw0G/EPHBLsQzNeByeSuGGBeUQSbZRiXWEZRn3wglPAzGH0XCzMw3vfcNQrzAKns50WdqzDR2Y4mpPgb+6+IeEWWRz2gPQn4/0FGCVKBX2M41ElLgXGzAMiehCRISCJwQboMBhHf7oq4Jb/tHqEf7OYFz1gGaKBrUArZ4bvHF0cUNPq200s1vN7Cm8jJZaMCQtk5VlEDzuwuwrq3RNqlUaPoBLmISp6lW9UYpkpGjg2257meE+D9H6vd3+0uj/0jP/S1+V59E1+Q635m1D03KZqKYt/Z42w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.1
Release Details
UpdatedJune 18, 2026, 1:10 p.m.
Changelog

Behoben

  • Update auf 1.5.0 versetzte die gesamte Instanz in den Wartungsmodus (#24): Die anteilige Urlaubsberechnung aus 1.5.0 fügte VacationAllocationService eine 9. Konstruktor-Abhängigkeit (VacationProrationService) hinzu, doch die Container-Factory in Application.php der veröffentlichten Version übergab weiterhin nur 8 Argumente. Beim occ upgrade löst Nextcloud die Reparaturschritte über den Container auf, der dabei transitiv VacationAllocationService erzeugt — das fehlende Argument verursachte einen ArgumentCountError, brach das Upgrade ab und ließ den Server im Wartungsmodus, bis die App deaktiviert wurde. Die Factory übergibt jetzt alle 9 Abhängigkeiten.

Geändert

  • Das Sicherheitsnetz für die Dependency Injection wurde gehärtet, damit diese Art von Upgrade-Absturz nicht erneut ausgeliefert werden kann. Dies war der zweite ArgumentCountError beim Upgrade (nach 1.4.2); die bisherige Prüfung validierte nur die in info.xml aufgeführten Reparaturschritt-Klassen, sodass eine transitive Abhängigkeit wie VacationAllocationService durchrutschte. Das Release-Gate (scripts/check-repair-step-di.php) hatte zudem einen schlummernden Fehler: Eine falsche Namespace-Pfadauflösung führte dazu, dass die Argument-Anzahl-Prüfung faktisch nie lief. Das Gate wurde neu geschrieben:
  • es löst jetzt jede App-Klasse korrekt zu ihrer Quelldatei auf und
  • prüft die Konstruktor-Argumentanzahl jedes in Application.php registrierten Dienstes (nicht nur der Reparaturschritte) mithilfe des PHP-Tokenizers, sodass mehrzeilige Factories und Constructor Property Promotion exakt berücksichtigt werden.
  • Zwei neue automatisierte Wächter sichern dies ab: ServiceContainerDiRegistrationTest (statisch, reflexionsbasiert, alle registrierten Dienste) und ContainerServiceResolutionIntegrationTest, der alle registrierten Dienste über den echten Nextcloud-Container auflöst — genau jenen Weg, der beim Upgrade fehlschlägt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureu5YINc+PuS8hHrWz7yL/oEqD+JdCNSs2Gbuid0nMbFunQitWqgtsSNMPExv2ORm7Ll14LcjREkHyIRc0lv7px2fEXeIAI2rpvSf8NFAoamhuf4v4z/jY+LxxVyjkhhzWlX//Aar6TjUBLD0xk4MjOophqPY+f8ObHyW4SzSWMuElED0glM385ywWWwfVHbY5UWmzGwZ4qAAmshcE0tt2JZrlSAWXFUuTe/FdUKnUXoDVB9ahcBPitdxmF0UFHdX1+4OjSP8fu5m8KoMlM+qcZp9Nr9xxIiBZ9Ew4wnmhDq4cQqMzaBVMgW7gVv6KtehmP4W/3Hhyrtl5tUOB4cxTpnP1vNW0HMNgrNS2h8xsufOz0czSktu7YRstvcW95RWe9wZjH+pDwysBo05YfZPopBIu1eky+tF1jsvyBk9Z+aB6LnRTZ1qbtPZxK7Ce4QHsKzwTjtx7R/So/VUdSH64vkYI27ODmqn7rSjcmwCVbt4NDU7fog+47zmf6yiuML6GwUUQBdnMc5LpDUaKD+p2QdOzvQvU5ShCG0b63sTwHFBcG1KsTrIrQpG4BSF8wth7Uo58YmQHFX3G3Nk5XE02piwmkiySCTyLfTWd7bEu8AUrg71xJtVwrkXkgUmG+a632wfGZMvHHzv4A4r7pnXpIvKRhzmgGaB8Ap7GYxGXyf0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.0
Release Details
UpdatedJune 16, 2026, 11:37 a.m.
Changelog

Hinzugefügt

  • Anteiliger Urlaub bei unterjährigem Ein-/Austritt (#23): Beschäftigte, die unterjährig ein- oder austreten, erhalten ihren Jahresurlaubsanspruch jetzt anteilig zum tatsächlich beschäftigten Teil des Jahres gekürzt, statt immer die vollen Jahres­tage zu bekommen.
  • Neues optionales Eintrittsdatum und Austrittsdatum je Mitarbeitende unter Mitarbeitende → Bearbeiten. Sind beide leer, erfolgt keine Kürzung (voller Anspruch, unverändertes bisheriges Verhalten).
  • Neue globale Admin-Einstellung Anteiliger Urlaub → Berechnungsmethode: Volle Monate (Zwölftelung, deutscher Standard) — 1/12 je angefangenem Beschäftigungsmonat, ein Bruchteil von mindestens einem halben Tag wird aufgerundet (§ 5 BUrlG); oder Exakte Tage — Jahresanspruch × beschäftigte Tage ÷ Tage des Jahres.
  • Die Anspruchsvorschau im Admin-Bereich und der Erklär-Dialog „Wie wird mein Urlaubsanspruch berechnet?“ für Beschäftigte zeigen den gekürzten Wert mit deutlichem Hinweis, sodass die angezeigte Zahl stets dem nutzbaren Saldo entspricht.
  • Die Kürzung wird zur Nachvollziehbarkeit im Berechnungs-Trace und in historischen Snapshots festgehalten.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature04r3eUzf162DBb4dMPJS7sQivJmQuO0es5mnUkPeRArAB+uCEbjQ3bx9btbltRYiJEug5fBGCVSr6kgEdSF+kmTmsk4hsAnISA4gUix6cFj0aIynbPRlYoq4e2W6IORRT6/U6DtM+YWGZxWKc6pe5/3oZEwk6RzRin3ZPcggwNY19vUaT1gHCxewODk73kf0x6FWLjFrHi0r0GZ+ukGlOt3xcPaGqjdxtcSN0QaeskEd8pFJS6QLVeXL2+IYrc46PrqvvV1Sk07ivqJJWeesmj428W2cdcnyKAgBOB6pjkJBCevoV4PoLfmorojPJl2Qpms0/0TiJGyqV+EaExfWRLPxLFwmdPd6hBdT4s36giR75jOdklf/G1alKrcttNnRLzpjYUxyrUElB9DHKZhdKWiJOAHaHvTe2j3OPPF0gFwxCaDhrlDL8Yc6lBmIxwX6Y+Rer9/e1uhnykn5Ww2jIYqeC+ASqsDiOUhYBLKab42v8xlhK60hMMiZNpo3fIwpQ0/LQ/986VlTSPdjsPhjam+W8ONtqMFnAqRqxonAhMxvkOX0p3Rw4CdL21eQJyzeX+XACQEVENRqk3vQD3xev5y1sEFlcXxk75ogpieOfefiiysRWTHR044qYBpmHmjAn1qwwHf5oqo3fpIMZgTbsMzF7ZCluS09QQPXpE3eZsE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.4.2
Release Details
UpdatedJune 12, 2026, 3:45 p.m.
Changelog

Behoben

  • Fehlgeschlagenes App-Upgrade (1.3.x → 1.4.x): EnsureArbeitszeitCheckSchema war in Application.php nur mit IDBConnection registriert, der Reparaturschritt benötigt aber auch IConfig — das führte zu ArgumentCountError bei occ upgrade / Web-Updater und ließ die App im Zustand „Upgrade erforderlich“ mit fehlender Navigation hängen. Alle Reparaturschritte aus info.xml sind jetzt explizit im Container registriert; RepairStepDiRegistrationTest und erweiterter UpgradeRepairIntegrationTest verhindern ein Wiederauftreten.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureICs/E2o/tBf8TpCMYgReOuPLGeKrhCplYvNCM5kbNkP2HiqQRJpD2qPTc+fu2RgHBDtAdaahVDQfB6VdgqrhRMvFQVzqPTmRdNxjP/TJT6YYGllKwikajxlZVAL/05Duo9AyxWzdsjtM6R4WfUK3WvfMY2Mc7fd1JTmiVpAuX92FujyNmyZSh2NF82R4wU+IZiwK4elYnfxn4At/ebMmLW3wOLh/tfPPSlPGBBjEfmG8XMLf2y3fK+wFG5P2Hfr+NXWSj5xpRmXOF7lVfOFpD3r6/CN+RLy1uN9JWzcnL9SPNCgCTLblCyLDKv475PsGOJl9wXGnP9eFLxpfAAKIY1aspOaaX14XXVWMN4xqyCpKuJbdmalS24vKr85Ln0i1hkad00jLvPcCTOlLRfdogfn0ISYBNd+t8ifSWKEIw0geROiHVpUbGjHlPfizDkqLUw+k5ha0UJfoy826uoE7ewgO11uWR5pQ7y9+nClCrclHi9y6ULf+NYYJlCykzqCMQru4UtbDmmHG8nlBYWQnOo8GqyYhroPkauDbPrdoP36wOrX/xjbnewtttQpYgAHRU8q7I9OJ4Mu8WH0YgUym/AjuKpDkR+74A5HEvwW53X1Bah5660eGr1ZKPjpDdL0sG7UMoNHLzU/Yd/7LSTqqj4Nk4xDa0cEEukq+mVXLvMI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.4.1
Release Details
UpdatedJune 12, 2026, 2:57 p.m.
Changelog

Behoben

  • Datenverlust nach Nextcloud-Upgrade: UninstallDropTables erhält Tabellen und Einstellungen beim Deaktivieren (Durchlauf 1); die vollständige Bereinigung läuft nur beim Entfernen der App (Durchlauf 2). Behebt, dass das automatische Deaktivieren bei Server-Upgrades die Daten löschte, wenn die App wieder aktiviert wurde.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureiQlJrDXH7/uhJKsNav1Z0nd0WyEEeiwHOpwkEyFOxMEmxO+H7/ivVzHztsP8NJ1REWySBC7mN+WM8LcQxbVYgCY6hBWff6Bbv3BJgQLAkuqUc6onwZ2tAzaiuR/S0HMEPnCQjAcDWc6Jt7zdt6FjWgXQa35VP9/Mpui149Am3qwy5uhqLJeTo5qlKwMELHiG5Xyz+/9kUVgrk2QhfmK56LonLcDRhXIwyoi55nmwizFKFSvJ9zjWVhc3MIl+dXAxg5ZbSLrLmvnoJsDIEJDlh752mlm4Fx8+gX294Kc6WBg/nUIMWggoKJCHZI3pJ45GRxewYJsZs3viwR3k5rxtLwyZu+McnO2wz8RTC5KZdw6svEUpAORNxbnbAuqlJOqbSppJjlGW8jIKopLWwg55vo2hsf3ZaAuhsWy5/afb/b9+TFvlzSJmptWScz4R5sIvdLWnisas7ayRWO4xXi89VrTukwGLzbjXJIhHGp+U61/5uLu4A3PradgnP+qtg2zps927MDjgdEjBYjWw7MXrVds42/rXBRtN2VPnj7ou9cuFJNkFf/GfBaWRU47AxaXlEWz8nUTEfBnQZb0ugRuSRkqtWYMpYVv8A56EyjJABdpLyUjRu7MwSQN1PRBCIiMZMK+9BLeK4sgTzS2FOLtue76A9jbqUafuiNnGAsdd+nI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.2.6
Release Details
UpdatedApril 24, 2026, 10:32 a.m.
Changelog

Hinzugefügt

  • Forensik bei Abwesenheitsfreigaben: approved_by_user_id wird nun direkt am Abwesenheitsdatensatz gespeichert (Freigabe/Ablehnung/Auto-Freigabe), inkl. Migration und API-Ausgabe.

Geändert

  • Integrität der Urlaubsanspruch-Snapshots: Deterministisches Key-Upsert auf (user_id, period_key, as_of_date) ergänzt und per Migrations-Unique-Index auf Datenbankebene abgesichert.
  • Nebenläufigkeitskontrolle in kritischen Workflows: Create/Update/Approve/Reject/Substitute-Flows sind nun mit nutzerspezifischen Mutations-Locks plus transaktionalen Rechecks/Row-Locks abgesichert, um Race-Conditions bei Überschneidungen und Überfreigaben zu verhindern.
  • Release-Absicherung: Workflow-bezogene Unit- und Integrationstests wurden auf die gehärteten Mutationspfade angepasst und erfolgreich ausgeführt.

Behoben

  • Legacy-Snapshot-Reparaturpfad: Upsert behandelt historische fehlerhafte Zeilen sowie parallele Unique-Key-Konflikte robust via deterministischem Retry-Update.
  • Race-Condition bei Resturlaub-Updates: VacationYearBalanceMapper::upsert löst gleichzeitige Unique-Key-Konflikte jetzt per Re-Read/Update-Fallback.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureFCaNQEccscnzM6rLSgigNgiMK//Ogy4aLpQQ02I290SKuEd1galIkTleu42bUC3jUHSHpnmIDlaOC359unS4KGTEy3nmCdndzTjnZo6r+Pbk9+/vFkufLmhW6rckhWRuZ5FaTDQEtSuZXf/xGdfbdoy0emnIb+n76unzaXXDRbRwiofg80WVWY3ejgfixFajIBo0pYBiWHsjvjA66KtZXYxALqBikSLtr7Qo2BNssYqyDpxnPXjrpabkjwefBgBEro9vtBMgdxO1BiXf2R7YQK7tdea1b1+Z0SPhktPHoetniDAHnLzFucaQdwMVT4jiqwldo5wArfOLOWnFHa3jBDLUVc3RCov3/euMcr2GKxwYR6Zxjuwb++CAMTv4wKuKhju4tfWm6KQfUXCVMciK56XxAvwhf0FzlGBpT0+YORUBc7r0OSm1SbO5R8E6wOF6sUM9QhQCz+VFFyo5QEXxME0pV+yDzFFCBCulYH5VFq+cTXXZ9Cg7LaafpLP0dm3xJ+bnjLf/sNziApiMCQsOvK5DQ/tH6NS1qf87PZdb2FeciFFCO9eZw5JP842ePPPdbfq6hhz36BOv2gHqY3b4ze2H8Jp08II7/a3FWKbkz0nXN0G0HLQYDkBAa22Sn/c6Io6hGcQI/0fuW8pHJjhI6VgoCZpdY+dVD00/7Pu/HXw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.5
Release Details
UpdatedApril 22, 2026, 7:23 p.m.
Changelog

Geändert

  • Release-Paket aktualisiert: App-Metadaten auf 1.2.5 angehoben und den signierten Release-Artefaktsatz für App-Store- und GitHub-Veröffentlichung neu erzeugt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureZpb9Oh1bIRpGiO5z2K6o3xhzr43wa8RdfzfLXHg7sEGwS8tzN8GaAdyCnk4IoZbFQbrcrwdyFCK2ifzBqN9OrxHGAqGpFLeQOaHUDcH/imXCIFxYAch8kwW545iujuTkvSBdlIFa+DAG6lFFRngQPO2aO9gC1B0Vp6wLTAjI5NDNeM6nVNyCIhbvaC4jUfIrTjrCfvgQ4hgpJ29pYU0GdY6bEgwKCQQgUuJVEB6Hoay1M40Xq8eLzdT/UfobFlC1nV4Anda02g1AeoM04FrJQUfD6lCo0s5pFYAJ82EM5OyzWwi/xgEv4y54tao/UBX6yoUvIdHa7yh6bfoKy0dQmzb+iHl8eQTAzCVQAgWWu58F5J+k884kYMwBNBdcuymPnszTlypmrQoRRjvI+UI2f8taEikdX2EUAbwHkBU8U8CG98NogPFy/w9drgLqq6gvBCtuuz3BLC7fsEfA2/Lx4XYEwCdbvoFMc2GNZJMIujhs1jsbk0Hzscz3NCmaILzbZpfKr59xfZy/bxNl2Yi8nl6L9tJRyaLdxJ7urZthACHIdATnAqGretxEcTox69OnoR+Pir+0N/8ujZ3Z2K2C/5zu/QGwGgaz+WeoKCwGjmTb3JCG3jh340kFLnp8TnzUiZpduSj4Bz4o7yojTzFAPoQrTUYZrv0llb8PGSoPI8w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.4
Release Details
UpdatedApril 22, 2026, 7:18 p.m.
Changelog

Geändert

  • Release-Stand veröffentlichbar gemacht: App-Metadaten auf 1.2.4 angehoben und ein neuer signierter Release-Artefaktsatz (Archiv, Checksummen, App-Store-Signatur) für App-Store-/GitHub-Veröffentlichung erstellt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturefOspm7RunA6JBPSZZ3vwdD+rRVZ5qOeMbZFcndytc+ZU00QoTdCYDFaEsDlUZtuCnpLGgwQ1x8o0jBhi409JtsZrNyD99XhzBZCKNl/nysKo/jDLa3h1msZ/AWKtjJUlyLxEPvPLzM2e/bg7DVOJKi0lsvq6nmUxJEhlLmhdgaONOlbAsBdtrtTKOO7DSxslFRRW0fmofVEdH8lL+5y0l/RtV5Gd6bMtpQ5bzHSoai9OMuOBFJ98QX9k/vX4qAuJUGVRvivJmMXDmiD/kPvezmia5no32RbXtYgYBUVY3Y9kfOza3mdFIwlHSD0bnjCI22QWUCBa5v59k+OuMPzPxCy+bzBl/M6Fu09TrNCDJvejpF/y9vKl7Wxgdz4ynaA2EZZ+RN15cGiTdOWVzjcWtnXBMSh9RCnBZqSCz8dFq1qVLUy16lBciLRNa6HofkEvemUN1oLbokZKLQlyXMFNxT8Ny3udUaOa5qKFDLbwgTttFuHDfn4NWOeI7JQgJ5kntg2KMpB4VYXvDwODCEcolniDL08kWuPbxOxd0tTR55+seYBfrSQrrGt46a4Vcp683MvMn8fx/el7vSPx9ifD1cUd6KMf/fi5IJF+pohxoCZlNepNdQGmaKNfWh87EGsdUl7089uKLWdwGWeGoHdxrBuRBhcfIU1HvCH+KVcvT9A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.3
Release Details
UpdatedApril 21, 2026, 8:11 p.m.
Changelog

Geändert

  • Release-Paket aktualisiert: Neues signiertes App-Store-/GitHub-Release-Archiv für den aktuellen Code-Stand mit Docker-basiertem Signatur-Workflow erstellt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturexYrrvEAHPwtfVHCBhNEEi7sX2LvqPOYNCC1AOYXNIeoRkUCxYLFTc29MwrgaUMoSLGtoZDChDD2eKsUH6MY+y5Jk79dKZg/ngf2/YBQpmMevl8Lp5eSGo2QES6rBtWYa1GFOEd6sVU6RLcy9tNL3toOxw5Te3QTskzeamEGChd0JYprcLZSWJG1kRu8Y8c32p5Rwbwu1tuq3AAW+i/6Bq4bxztKR6PGkZ6uyTbVaW3p0PwMFoJxceVu0/MsbMpftQaGQHr/1h6nBvbuj1WBkfi9W0PHrl+0zRn+5FwoUU9dECfeHuQAAcXOcJsKT979ewplb5+vPgNSeN2SSTWoGs9eYYIvUzznpyhuqSa1aplwXO/U0xyTXeUE5fiAQFlbnxtZ7gjmeLBkbAR/gF4aCX3NEPGLtw24gY8jomJ67+foeoM1+AJM73aFgTH0NjYKUetACRTFgB6gJPXl97JrJxd7sTeg6xiqlNKrWSvxiAO8XkjHCUV1BaPmoRtyfcNnLxmf0MGCVUuO4btz7JH5qy3q4H8XecbNYpnEeer8qxzTkw3toonE4+LVgbHV0nW6uu/gfEvDtYZI0wKx/A4vQYSQ7WEprMn9SbjnXbaMFOcG81GT2HifhcWZH0/YfFzz+sRng/TvZOkuf2iUq/9EjnKwkyygMSlHE7Si3kYXldKc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.2
Release Details
UpdatedApril 21, 2026, 8:07 p.m.
Changelog

Behoben

  • Lokalisierte Dezimaleingaben in den Admin-Einstellungen: Tagesstunden-Felder akzeptieren jetzt zuverlässig Kommawerte wie 7,74 und behalten zwei Nachkommastellen korrekt bei.
  • Parsing bei Legacy-Hours-Payloads: Time-Entry-Endpunkte verarbeiten optionale Stundenwerte nun konsistent mit Komma und Punkt, sodass in rückwärtskompatiblen Requests keine stillen Abschneidungen mehr auftreten.

Geändert

  • Präzisionshinweise in Eingabefeldern: step-Werte und Hilfetexte wurden auf Zwei-Nachkommastellen-Szenarien (z. B. 38,7-Stunden-Woche) abgestimmt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureeG9EHR4R6Kg1X8OQ9g5Q0yPR7Y7yp+snb/sVhhLXEOtBIFd4xLZd/xi0GuLYF4KBZlPCH1GbRCy+q/kbjx7MyqlO2rHn3Cef0MnwJoLp9czZFJOjVJJpkoZNf/o9hh2OpeK+sNS7ghXfC5Pax2oicQFmeQeKQKLaTwn0AcJgvQrF1laVjQiXQopE98v16iClBjZ+KuybKcRmglxbd1N8dx69nBB0uyLQdkQIhnwHccyrlPCBzsXq55AtIEXGsitgXtquHKOk1bzBwM3uwQZoNRi4RIB/zWmOv0c7+71QTw0i1DMUsz+FUrTw+bBY0FnZe/Q9ageaUvwOb4bHUJYt1cuWPGEufAUC1w7ONCfHGASNkDv34msX4MQEaMf28k8ohtWlX/fzNIxL63Erijyanuo1tf9hZFeYEXmCKwXAeWOL0O/lXWcTGTvEOAD96sSv6RIcIOwHBLqxGUHiCQzJkKZJ3hjv3rrpOeneCLOz/jMNJrEgYCihLn1J8cUEPPeP6VH3rNthDuQOVCi63v+0X1uubbM6DQheViBYTA/z4wEAP/2YsA6rsXATB0JR4pOIxlsiT0MgjxIyrfctOJP/4zMU4645rSmZE+NS0TF46gpf8DF6ai0zilMmaHf9xY72qGZTICjvtIUcmwbMhRMqG9fmYomv5U2/jd3rubayPDg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.1
Release Details
UpdatedApril 21, 2026, 10:50 a.m.
Changelog

Behoben

  • Wiederzugriff auf pausierte Einträge: Pausierte Einträge sind im Bearbeiten-/Löschen-Workflow wieder erreichbar und werden beim Speichern mit Endzeit konsistent als completed finalisiert.
  • Fortsetzen statt Duplikat bei gleichem Tag: Clock In setzt einen pausierten Tages-Eintrag fort, statt einen neuen automatischen Eintrag zu erzeugen; die Pausenlücke wird korrekt als Break-Historie archiviert.
  • Historische Restfälle bei paused: Neue Migration Version1020Date20260421000000 repariert verbleibende verwaiste paused-Datensätze (auch Fälle außerhalb der früheren Einmal-Migration).

Hinzugefügt

  • Auto-Fallback mit Nachvollziehbarkeit: Zeiteinträge speichern jetzt ended_reason und policy_applied (z. B. manual_clock_out oder auto_break_fallback) für klare Audit-/Export-Nachweise.
  • Einmalige Nutzerinfo nach Auto-Ausstempeln: Beim nächsten Statusabruf wird eine neutrale, konkrete Meldung mit Uhrzeit und Regel eingeblendet.
  • Urlaubsanspruch-Policy-Engine: Neue berechnungslogikbasierte Anspruchsermittlung mit Modi manual_fixed, model_based_simple, tariff_rule_based und manual_exception inkl. Simulations-Endpunkt für Admins.
  • Tarifregel-Datenmodell und APIs: Versionierte Tarif-Regelwerke/Module sowie Admin-Endpunkte zum Erstellen, Aktualisieren, Aktivieren, Stilllegen und Zuweisen von Urlaubs-Policies.
  • Snapshots der Anspruchsberechnung: Persistente Snapshots (at_entitlement_snapshots) mit Berechnungstrace/Policy-Fingerprint für Nachvollziehbarkeit und Diagnose.
  • Neue Admin-Seite „Benachrichtigungen“: Eigene Oberfläche für HR-Empfänger und Ereignis-Matrix inkl. dedizierter Notifications-API.

Geändert

  • Fallback-Logik differenziert nach Einsatzart: Für Schichtarbeit gilt standardmäßig eine strikte Fallback-Regel; für Nicht-Schichtmodelle eine flexible Regel mit tagsüber konfigurierbarem Ruhefenster (z. B. Familien-/Mittagsunterbrechung ohne Auto-Ausstempeln).
  • Export-Transparenz: CSV/JSON-Zeilen enthalten jetzt ended_reason und policy_applied, damit automatische Beendigungen in Reports eindeutig erkennbar sind.
  • Urlaubsallokation integriert: Jahresallokation nutzt nun die neue VacationEntitlementEngine und liefert Quelle/Regelwerk/Trace in der Ergebnisstruktur zurück.
  • Migrations-Kompatibilität: Bestehende Urlaubswerte aus Nutzer-Modellzuweisungen werden in Policy-Zuordnungen überführt (Version1018Date20260420123000), damit Bestandsinstallationen konsistent weiterlaufen.
  • Admin-Einstellungsfluss für Abwesenheiten: Carryover-/Rollover-, Vertretungs- und E-Mail-Schalter sind zentral über die neue Notifications-Seite/API steuerbar.
  • Schema Arbeitszeitmodelle: at_models enthält jetzt work_days_per_week (Version1019Date20260420150000) als Grundlage für Formeln.

Behoben

  • Aufräumen bei Nutzerlöschung: Beim Entfernen eines Nutzers werden jetzt auch Urlaubs-Policy-Zuordnungen und Entitlement-Snapshots gelöscht (keine verwaisten Policy-/Berechnungsdaten).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturewHjRsCMFlhEA9EgrgvzuDGiwQsEIOmqNFH9oA9Fs+lJZOluUc6XSmPeZow7uso0PwR/b5YYt+f8KmOoIwuJepnD1TTa5ClzBP5zx5gZq+KIloaEGzVPTnHvHJuc4V8q4A5BYEXvYrVvEuPgufr8BOBNy4SLwMKYQlJR0LhDLn3ShHowJ+VDaUSUjOtUih0uUCsNI54HhaAAa3EfKpgDqc2+jhM7WvnIzDGRVYF4HbPBYPpn+1eWOyOlOgq0YIy5M8+4shNLiGeIRo7Uepk9+HnDm6vjLdYB2iE9AMl+vSCGSdQTrP0Z5ceXZBZT/bM0t4Af3EfAP5seJ/sSQIYs1a5T8RIneJ7DwyFbZdGelFSSBZoMGDevr4IUUfAB3NIKNlPZsxAOv9elrF4AjLJZhDVB6i7OSVeER7yLqrIgMhBFXiFpr095gYQ7Wn6VCcBWwWVS7cWXa0xN9Yl00mn0z9GcVagRvncJ28Y0wSgk+GP/BDalUHmD7wHSL3pyXIWxpqQ2OJHi/xT5Myx4T+HVsywgRwAFaOLjV+hm8hkJLxd70WG0e1oo21m/DtTZZ1R44+BDdRGMJIcabWxJ/zFhYSZvVmoL2dpUlJhPgBBp1Y9Xp5pF0zOeLiGSMR4ON/Iys2jpsbAd0/TxW55NaEFOpZRRNYt3VoZJ8oqM1n1sHZX4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.0
Release Details
UpdatedApril 21, 2026, 10:08 a.m.
Changelog

Behoben

  • Zeitzonen-Konsistenz (Europe/Berlin): Server-/PHP-Zeitzone für ArbeitszeitCheck auf Deutschland ausgerichtet; neue Migration Version1015Date20260415120000 konvertiert bestehende UTC-DATETIME-Werte in App-Tabellen nach Europe/Berlin und setzt app_timezone explizit.
  • Ausstempeln-Semantik korrigiert: clockOut() finalisiert Einträge nun zuverlässig mit end_time und status=completed (statt paused ohne Endzeit). Dadurch sind Exporte/Reports wieder vollständig und konsistent.
  • Historische Pausiert-Einträge repariert: Migration schließt verwaiste Einträge mit status=paused und end_time IS NULL automatisch über end_time = updated_at und Statuswechsel auf completed.
  • Mehrfach-Pausen ohne Datenverlust: Beim Start einer weiteren Pause wird die zuvor abgeschlossene Pause zuerst in breaks (JSON) archiviert; Break-Dauern bleiben vollständig für ArbZG-Prüfungen erhalten.
  • Break-Status-Berechnung korrigiert: getBreakStatus() zählt aktive Sitzungszeit nicht mehr doppelt; Warnstufen und Restpausen-Hinweise sind wieder korrekt.
  • Export-Spalten korrigiert: duration_hours liefert jetzt Brutto-Dauer (Wall-Clock), working_hours Netto-Arbeitszeit (abzgl. Pausen). Vorher waren beide Spalten identisch.

Geändert

  • Export-Transparenz: CSV/JSON-Exporte enthalten jetzt explizite Zeitzonen-Metadaten (timezone, exported_at), damit nachgelagerte Systeme die Uhrzeiten eindeutig interpretieren.
  • UI-Klarheit: Dashboard zeigt sichtbaren Zeitzonen-Hinweis (Europe/Berlin (MEZ/MESZ)), Export-Hinweis auf der Zeiteintragsseite nennt die verwendete Zeitzone.
  • Bediensicherheit: Vor Clock Out erscheint eine Bestätigungsabfrage mit klarer Abgrenzung zwischen „Pause starten“ und „Ausstempeln“.
  • Admin-Transparenz: In den Admin-Einstellungen wird die konfigurierte Zeitzone sichtbar angezeigt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureu3gPfbToOow1ecZSrYUbhzoOp6/Fb3syYzSdx9CNYBvsUDqkoBODyN714AKc/4PF8hYrf+nk+A7ICF0GC94uBW8MsNWCHRQ1GEmhhaNSePTNjV+JCCOR9SINE1JCYVSh4avkBX7evJrRZFTOoxRGZxKBSY8ubYG71+F/N22A3qH8wzu6yYMBi0hrt1oVOfFkhrkBKeEwip7Bm0vrEzfrhnNJ3qsqf5q52F9sxUFZNT+/JLDBPu/ZAokssMJGTgbmKwdc3qQzdI/d0zNPuZJwUNjjgvU+TLeFJRkOKNghRfdkVotVcm63NmAf9afJJx3QkCTOTbMchC9sKyvlnIbG68WUZvsiAUPRW5o2XxXK71zZo8y+GC65ZazjioV/4ANt6sEItnJ0MSylRmWFEXMTMJHgCiqqp9hwZwxs0IicHLsRRsnUDdT7yMgOdB7082cnUFJtWM9Me2uSvYx4QUfPosWZhkMqpwagxJ80EnYSfc12/cEXbr58MbdqyQeCj2dUG1iBPw0eVooOWxf9UwOnNaUKV6ynEGok/mYM3qS8XnNElFpliKoRAfBtgLsCpV7O/ChhjE0gPNILNasGMiofSaAd4cHZjSZI/7Cm6FkOSrGju6XCPubM6XeYLbyZ8pv1htd1H1NzUIsWYXG23nPhICNAdOvEcbIXWEw8H5b2Xtw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.14
Release Details
UpdatedApril 14, 2026, 9:48 a.m.
Changelog

Behoben

  • Genehmigungs-Deadlock (App-Teams): Abwesenheiten und Zeiteintrags-Korrekturen behandeln „hat Kolleg:innen“ nicht mehr wie „hat eine:n Vorgesetzte:n“. Auto-Genehmigung, wenn kein zuweisbarer Genehmiger existiert, folgt TeamResolverService::hasAssignableManagerForEmployee() (explizite Team-Manager bei App-Teams; Legacy-Gruppenmodus weiterhin Kollegen-Proxy). Verhindert Anträge, die dauerhaft auf Managerfreigabe warten, obwohl niemand freigeben darf.
  • Zeiteintrags-Korrekturen: Gleiche Zuweisbarkeitsregel wie bei Abwesenheiten (zuvor nur Kollegen-IDs).
  • Admin-Users API auf /index.php-Instanzen: Refresh/Edit/History/Update nutzen nun zuverlässig aufgelöste App-URLs; fehlerhafte Requests wie search=[object PointerEvent] treten nicht mehr auf.
  • Admin-Teams und Settings auf Rewrite-losen Setups: Zentrale URL-Auflösung enthält jetzt einen robusten /index.php-Fallback, wenn OC.generateUrl() im Seitenkontext fehlt oder unvollständig ist.

Hinzugefügt

  • Repair-Schritt ReleaseStuckPendingAbsences: setzt nach Migration verbliebene pending-Abwesenheiten unter derselben Bedingung automatisch auf genehmigt (idempotent).
  • Frontend-URL-Sicherheitsleitplanken: Die gemeinsame AJAX-Schicht blockiert externe Cross-Origin-Calls standardmäßig (explizit allowExternal: true nötig); Unit-Tests decken URL-Normalisierung und External-Handling ab.
  • Lint-Leitplanken: ESLint-Regeln verhindern neue rohe fetch('/apps/arbeitszeitcheck/...')-Aufrufe und implizite externe fetch(...)-Nutzung außerhalb der vorgesehenen Abstraktionen.

Geändert

  • UX: Abwesenheiten zeigen einen Hinweis, wenn App-Teams aktiv sind und kein Genehmiger zugeordnet ist; in der Detailansicht erscheint bei veralteten hängenden Anträgen ein Warnhinweis (bis Repair/Admin die Teamkonfiguration korrigiert).
  • Frontend-Architektur: ArbeitszeitCheckUtils stellt nun zentral getRequestToken(), resolveUrl() und isExternalUrl() bereit; genutzt u. a. in admin-users, reports, settings und validation.
  • Mobile UX Konsistenz (WCAG 2.1 AA): iPhone-Safe-Area-konforme Abstände, bessere Touch-Targets, klarere Abschnittsstruktur und visuelle Hierarchie für Nutzerseiten (dashboard, time-entries, absences) sowie Managerseiten (manager-dashboard, manager-time-entries, Mitarbeiter-Abwesenheiten).

Dokumentation

  • Nutzerhandbücher (EN/DE), tests/WORKFLOW_ROLE_MATRIX.md und Entwicklerdokumentation zur Semantik „zuweisbarer Manager“ und zum Repair-Schritt ergänzt.
  • README und Entwicklerdokumentation um zentrale Frontend-URL-Policy, striktes External-Call-Verhalten und Mobile/iOS-Layout-Hinweise ergänzt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVBSDJh3veK9J7eUDKGFw/xB1ypmBQrjMDzamatQfncYem1qg9kNVWAnHDH+fGRlFJtrBH+fOu+MRTFZuK78DU/W18IQglCtTbsH4MdaHLHTwVz2JOxeGJWmx2p1yK0ulK0vbDgCLXQu5B8gR/L/JYRGFo0+FpwuRvxrpp1BWrX5m9mQLgoxn3hOj2r+F2m0wYdEDWhksF6VzLbHyr3pIT9hu6p1owuAZzr3Nqtva4tZK0WGgn8xa5bDwZqJdWSyQJ04JiCZisftYCOJz8HNfq6o4MFTLF0aQpYxUH8wf6gz5pkfUOKIemq4Ui8GqRr3Fxo/DW2APAk0GcwWyY8ypEiY2RNi6IkGv3K9p8mFamDxirDeurOX/hwNia1Lt4HCqzJATjWpmaCEAoBQWfOCgozI9o+h8cI9LhHp3LvK3VxFD/s9xjJPFLZ9y8b98hufe13Uq5/NYzqo2vQ1DgQXyCbRjsiMbqDvz+yyDmXM+JPV8U8gTKxTD8y19VoiVIlWhAsI/zBmxHC84G2htaCHBws47cGhmJVvQDXGz/1aae9J0of1bGoOIERyEFSOAzmUN9fcvdVbN+77wn70QQ1k7GQcw6jAEScIQq8Pt8n7pBTECeECk6K4baNfaTT2+kZKLCdD1mdaJII84B8+XXxmxIk+VI1sarNlMIvPAk3FQjww=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.13
Release Details
UpdatedApril 13, 2026, 10:46 a.m.
Changelog

Hinzugefügt

  • Monatsabschluss: Karenz und Auto-Finalisierung: Admin-Einstellung month_closure_grace_days_after_eom (0–90, Standard 0). Nach Monatsende haben Mitarbeitende so viele Kalendertage zur manuellen Finalisierung; ist der Monat danach noch offen, finalisiert ein täglicher Hintergrundauftrag automatisch (gleicher Snapshot wie manuell). Ausstehende Zeiteintragsfreigaben und offene Abwesenheits-Workflows blockieren die Auto-Finalisierung. Wiederöffnen bleibt Administrator:innen vorbehalten.
  • App-Admin-Whitelist: Neue Admin-Einstellung app_admin_user_ids, um die Administration von ArbeitszeitCheck auf eine ausgewählte Teilmenge der Nextcloud-Admins zu begrenzen. Leere Auswahl bleibt rückwärtskompatibel (alle Nextcloud-Admins dürfen die App verwalten).
  • Docker-Testziel für Security-Role-Gating: Verdrahtung von scripts/test-security-role-gating-docker.sh über make test-security-role-gating-docker und composer test:security-role-gating:docker für schnelle Autorisierungs-Regressionstests im Container-Setup.

Geändert

  • Monatsabschluss UX/API: Klarere Karten-UI, sichtbares Erfolgs-/Fehlerfeedback (WCAG), serverseitiges canFinalize mit lokalisierten Sperrgründen; manuelle Finalisierung lehnt zukünftige Kalendermonate ab; Abwesenheits-Workflow (pending, substitute_pending, substitute_declined) zusätzlich zu ausstehenden Zeiteintragskorrekturen; API 401 bei fehlender Anmeldung wo passend; Admin: eigener Abschnitt „Monatsabschluss“; Karenzfeld bleibt editierbar mit Hinweis, dass der Wert gespeichert wird und bei aktivierter Funktion gilt; Wiederöffnen mit durchsuchbarer Mitarbeitenden-Auswahl und klarerer Rollenbeschreibung; Validierungsfehler mit höherem Kontrast über Themes hinweg. Auto-Finalize protokolliert Einzelfehler.
  • Release-/Signatur-Workflow für Integritätsprüfung gehärtet: make release-signed signiert jetzt den entpackten Release-Archivinhalt (nicht den lokalen Entwicklungs-Checkout), prüft verbotene Entwicklungs-Pfade und packt das signierte Archiv für Deployment/App-Store neu.
  • Admin-Autorisierung zentral erzwungen: Zugriffe auf AdminController-Routen werden jetzt per Middleware auf App-Admin-Rechte geprüft; nicht berechtigte angemeldete Nutzer erhalten eine konsistente 403-Seite.

Dokumentation

  • Deployment-Hinweise ergänzt: Die Release-Dokumentation fordert nun explizit das Deployment aus dem signierten Tarball und beschreibt das typische Fehlerbild (.git/* / node_modules/*) bei versehentlicher Signierung eines Dev-Trees.
  • Deployment-Helferskript: release/deploy-from-release.sh hinzugefügt für Deployment aus signierten Release-Archiven mit Sicherheitsprüfungen (verbotene Pfade, erforderliche signature.json, optionales Disable/Enable und occ integrity:check-app).
  • Admin-Betrieb: Nutzer-/Entwicklerdokumentation ergänzt um Einrichtung der App-Admin-Whitelist, Rückfallverhalten bei leerer Auswahl und Verifikation des Role-Gatings im Docker-Testlauf.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureol/yHOgiMCOj+yYqb8HC0g5laqPih/kTTbBB12bDawwgGQGVdx+GCBNaSmM8Sgu2jRB6PJWwnF1qFQQ6MIHWCjFzuOQeyL+sDEGH0VhI/qgbCmyRKZnBKAyUq9BBrxux3zaI6cN6QD76nP27UCU4C/OxW87nybYxy4WqqdOSOR0Af9QMkUg/VZLhRatpageqRGkYSFl+3ZwEg8qhlpDyLH3lh3xSG6+tQsyy9yU4La+XDiZ63lG2yF1RWHQ1/irb+dRrPEs/I1wuLvdZL+6olqx7MTogIylUqrJyux7ycTUrC/sxTBsZYJUQ2vGFyGzO30qARQ+KSOJtai5Upcx7WZxHv98eS0X3FGI0QUhC2NwIE2ahn0mfH/YjuRW5wBn9nsDG03KPpDaMATyvxTD8BbzGTM9ziuMKfOzd2HfYxMWDX/GF4LWM/eXpqsO7E2veMjtIClAcMI6vZhJKVV4mxXHxMkFIdvTbaFmPrWEAhFRoI+0NHQ4y3ec+goBucU+E4gHCyicVOT0T4n3NH6U+nOs+95d5cSA85Dz+LF7ZLLYU/rxi1ybC36fVg8igg+P8YvH555KQNizrYNJ2xdglmirJcs0XcEwZ8/hVrWfzuLUgKbMNXlqa2dgRzMnfOy9b5bNUPez9FKsqEqAc66dUr9JnDiR+poFgQBlCAnZ7vbw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.12
Release Details
UpdatedApril 12, 2026, 4:25 p.m.
Changelog

Hinzugefügt

  • Revisionssichere Monatsfinalisierung (optional): Admin-Schalter month_closure_enabled (Standard aus). Mitarbeitende können einen vollen Kalendermonat finalisieren; die App speichert kanonischen JSON-Snapshot, SHA-256-Hashkette, Anhänge-Revisionen, Audit-Ereignisse und ein schlankes PDF. Finalisierte Monate sind über normale App-APIs nicht mehr änderbar; Administrator:innen können einen Monat mit Pflichtbegründung wieder öffnen (Audit). Monatsberichte für finalisierte Monate lesen den gespeicherten Snapshot. Datenbank: at_month_closure, at_month_closure_revision (Migration Version1014Date20260409120000).

Dokumentation

  • Nutzerhandbücher (DE/EN), Entwicklerdokumentation und Compliance-Hinweise zu Monatsabschluss, Aufbewahrung und Grenzen (Nachweis in der App, keine QES) ergänzt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature0mCLz3x6v/VzKxsK9I8J3HAMtz+lr9Z43v3UN+tH4hZeZLXvuXWayTxLB6EYKXXnNSfkvF5KMiYJqh3LJHUCTcPUgGfPqNDwCkkTK51T0cmghwWPQylVIe9L6My8a2Pu0sVCrG5P0Ev5t7wdLQNMSxKcHYKXYT7B2QvQG+ljdNKr1/ywfXDEpIg4yzCMnxVdfGIBiUNl4vUIYOXCNt30fUXiRCXHfl381LcA2Bv9ZP+Ddxk+qEpa1iuujWcRg6o32YRCESwDAO2IoXKEvLy16btLtNQd7wL+E6lhCfgST/jp+rWPxh4RSJ8kBlyaBYo8LqvhvMRpGqhYfNOJZTrq0BnKQZfjc1qnAcIHMDFjBfUwi8tp0/bmxOnXmMMFZZtGf6rGLUYinb470whWKydzhIib2K2kSTN9GrRvjmp+osUh9/qAlBzN5wRutIBewKqM8SkwJ52dYiYWU5jAyf3fVxXqRJs970WUccI7udQ8A7J9XqkmCRUBvl46mPugz0K481/X6cKHiZBK9681njxRWorGVGHpCiz92T+Ug2W+bRIBYLBM0oqPd9Dp2rXQ5+UFLDTC9eDG8WP3VVxsK7d5xtK/xWC1fSHy4c7Mgp8WAVITY1eU9ftn1tS8BHZxcgz7EvgtPmamoKwb55KKFTxQu4c6khCWaZ2pPQvXQjxtrNw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.11
Release Details
UpdatedApril 9, 2026, 2:45 p.m.
Changelog

Hinzugefügt

  • Manager-Ansicht „Mitarbeiter-Abwesenheiten“: Neue In-App-Seite und API für Manager/Admins zur Einsicht von Abwesenheiten mit sicherer Bereichsfilterung, Pagination und lokalisierten Statusbezeichnungen.
  • Kopierfunktion für Arbeitszeitmodelle: Neue Kopieraktion mit Modal-UX, eindeutiger Namensvorschlag-Logik und Schutz gegen Doppelklicks.

Geändert

  • Manager-Navigation / Sidebar: Struktur in klarere Manager-/Admin-Untermenüs überführt; Berichte in den Manager-Kontext verschoben; Compliance-Link zur besseren Übersicht umgruppiert.
  • UX Mitarbeiter-Zeiteinträge (Manager): Standard-Datumswerte sowie Datums-/Übersetzungsdarstellung im Filterfluss verbessert.
  • Kalender-Verhalten (Rollback-Bereinigung): Angefangene Funktionalität für direkte Kalendereinträge sowie zugehörige Admin-Optionen/Status/Test-Endpunkte wurde entfernt. Das unterstützte Verhalten bleibt unverändert: keine Synchronisation mit der Nextcloud-Kalender-App; optionale .ics-Anhänge werden weiterhin per E-Mail in den konfigurierten Abwesenheits-Workflows versendet.

Behoben

  • Arbeitszeitmodell-Modaldialoge: Interaktionsprobleme im Kopier-Modal, Darstellung des Quellmodells sowie Lokalisierung/Formatierung im Lösch-Dialog korrigiert.
  • Abwesenheits-iCal-Härtung: Strengere Status-/Datumsprüfungen, Empfänger-Deduplizierung und datenschutzärmere Beschreibungen für Vertretung/Manager ergänzt.

Dokumentation

  • Nutzerhandbücher und Changelogs an das finale Kalenderverhalten (optionale .ics-Mail, keine direkte Kalender-App-Synchronisation) sowie die aktuelle Manager/Admin-UX-Struktur angepasst.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureHwGRZcCLjb/plcL+LoYgcSBNEXoLoZU2DlOb7pcOx6X41OU6v9SkdO5YXOynEBr7kmViQeQzJfLyTUTRSfcqLlz4jC8KL7Xmaa7rImQ0EGSVpaBmmUuHC0MWlrhWWMEkG52smtFFalq0GZy0wLhcHRc6BtqCzilQLju2jS5SR6GTPWutj0i9LsbKsB6LFzkbc9cAbtcRCUjzx9A2oU/EAA1BhRBlyQTvR/OLyDa2FU/CBNWrm3I9293E+D9UP9gMBhKvSH5f1DXF/TpwiCEzYB/NRR0KBXvQb30whbv6O/WJfCEs9z1+wryRvNfGjT0+9X4C3tPtLTpyh7noU7NK7VzS0Cl0/TbACvlEY8yk9I+UPbNYA9jUiNny2JpAh6syrFE3k2RrhIpiJ9iLwqKgUYN2rlx6LFtqWP1NlIExC97DdmCTt1YRTyeDzi/NrZuGKHl5JBtCJWZalX6KwxjJd4oBrxoy1+i/2BLSpjoUlvPQ2FHPlqdtHWcIqryrVzmV+8ZJyxmo5EVJR6bmGESQjUovJ70j5KIltEg1OM/5MAyJ9hkIBJxjXiLTvocREbYOdoicChFs9aQFbDX0VN3BD4q6FNSiV5UXRsbzo57lxa4n51hB3tjoQAJ+rBlmMyVez7u1zNj+5X6lrvn7b5/5UQg2oHpaR8Hz1iPPou7E/GA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.10
Release Details
UpdatedApril 7, 2026, 7:49 p.m.
Changelog

Hinzugefügt

  • Urlaubsübertrag / Rollover: VacationRolloverService, Hintergrundauftrag, occ arbeitszeitcheck:vacation-rollover, Migration Version1013Date20260407120000 mit at_vacation_rollover_log; Unit-Tests.

Geändert

  • Frontend-L10n: Gemeinsame Partials templates/common/main-ui-l10n.php und teams-l10n.php, damit Übersetzungen früh verfügbar sind; zugehörige Template- und JS-Anpassungen.

Behoben

  • Manager-Dashboard — ausstehende Abwesenheiten: Die API liefert summary.typeLabel (serverseitig übersetzter Abwesenheitstyp); die Oberfläche nutzt das bevorzugt, damit Karten lokalisierte Bezeichnungen zeigen (z. B. Urlaub) statt Rohcodes wie vacation.

Dokumentation

  • docs/Developer-Documentation.en.md: API-Hinweis zu typeLabel bei Pending Approvals; Nutzerhandbücher EN/DE: Hinweis zu lokalisierten Abwesenheitstypen bei ausstehenden Genehmigungen.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturekmFxrMFQus0US44BSrw/0eOzjGU8zutOf6Q4Dqcc/39RNDiCiQOKB55We29dsKBZ77Qkk8fbitvBMURDmfLM21hqyrDTfltj77MNdonON7hcINJKQZG2fGLz3Rrc+10mDQDAiDqVQGOLrpJBQVuA+TxdUEA1C9+z0zwvmHLdlBEgXCw7k/4FoU8aKCA/Jcp02Fjr98PG+1MW5SbOtTs8oQG2iMpRe7Ogo+YzqZtU11KZ4tOr8zEblZeh7oSG+AaIlj16YscKKCWAL3MLmyRvYTXWpPgsu4xLp+AUvTGbSEKUlDeEznDDkGpUvVrd2pTm4Y7xyc8X8c/0WQRqWuioiqRLUHHldJg8MjgL4s7mQkqy95dfZ/xQRC9BAc/cbTceynA8PD5XILnQAVgVRe9hXsji6TgN2EURulrVsBbCN1wCAp/Be9FqH7NYiQYxhmVfYM3kmyMdVe/+owslEAaMcmjT/QcZQlCeJj5SNOXCqVwCsks0ijINP2utN0XO4mlHkCt712QwFAMw86rSjnuX7eA1W6w2OpFjFFobOekDaUgBs8ID4LMgpOWJSGTI2P9AHtBJTMNSrRmsMzQmafZYdBm2F9gO4tz9ktxbhcmBFWpTvNHZimE6Re354pnTOQIQ4yCKU+8VsqYEJxdxe1JYXE2yTeNCKOCcIywL8/hvVS0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.6
Release Details
UpdatedMarch 27, 2026, 6:08 p.m.
Changelog

Hinzugefügt

  • Entwicklung: CLI occ arbeitszeitcheck:generate-test-data für deterministische Demo-Daten (Zeiteinträge, Abwesenheiten, optional Verstöße, Demo-App-Team) zum Testen von UI, Berichten und Workflows.

Behoben

  • Berichte-UI: Berichtstyp-Karten werden bei teambezogenem Scope nicht mehr fälschlich deaktiviert.
  • Berichte (Tests): CSV-Download-Test nutzt DataDownloadResponse::render() für den Dateiinhalt.
  • Team-Berichte: Nutzer-IDs werden vor Berechtigungsprüfung und Aggregation dedupliziert (keine Doppelzählung bei Mehrfach-Teams).
  • Abwesenheits-Badges: Besser lesbare, theme-sichere Kontraste für Urlaub / Krank / Homeoffice / Sonstiges.

Geändert

  • Kompatibilität (Dev): Lokale Entwicklungsumgebungen an Nextcloud 33.x ausgerichtet (z. B. offizielles nextcloud-Docker-Image).
  • Berichte-Layout: Zu aggressive Vollbreiten-Regel für das Parameterformular zurückgenommen (verbessert Scroll/Layout).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturehE0UvSaJEnunYMHOd5u3aR+5MyAg2Pl78l3t75Fx494nh6CzImBfoaswZXb9agJ6Iz1orktgFsKlTqfZoSGNxuZHRiRjcbtC+LsLLQsjONX5i5UOXK6crz87+6TEDAPkgdr318s+w9qHvTic2kdcdx+rpqbBSMIAgU/GuVZjyp4wtCV2Ti9VFR1pFzAlmH95b6WVCQCdTYmWs7LsLY//midoEYCd8JXSicLvr2nobqTL/soYZdR/39931AgpiUO5B9Rd0Wo7NVhk8C59bmlNqkLa8UDZHTZ/Eseks/njP9CdRsgdaUiqIm3libscOPzoFg2abyJpIZUV/nV8acOq8dh/XNNVRuLxxHs5v5FcByrnuxE4G1IbyC/FtB1KFRQlGF+rwwSEzBKdkNCdH5zbJ//gEgRfjZJb/Ijtma9+14jeRub/oLHQx0Mkh27aVMBPbqDI8LeuOLWo4Gbd4RXFknth02gSZpk1/Ko4uE90R44RcO2YUS58qvKQkickIoDEQId9w55FIEyP7LIAZa2bXl9qYZAA+CHCwixsBKi3a+yADg/wWaN4roVQ4LobTjp1adPOOVWbTHSemHRgEsqpboMxRXcrRWan8pNiQrnvTbJwIu9i3Q6zgHtHXe6RviFMzwiMJQTdvLhhHuANr9Lt04cCZjPS2dWfjGCZKVfo7hM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.5
Release Details
UpdatedMarch 26, 2026, 6:57 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturedkvj+LT0qxzHO59iXnzyYCXDEgfS9OMri9yD8QWcQqS/VPzNKFBHIHDqX/2JmnEuQFM6sKf+jyx0QORDIAC4h2XiZoUlJe+MHgZQGGqa/mA/SGFQtwzlxWw2A4Drm1ioGkOIwhGo5Ny0zIogawfyhPtDQX7Mjj2K9x5+OSHQKtQs8LGRiyy7EsVJUC4fWworktCvuqRYpvR+rY2GfSu0CcWWZVItcEYqAfDFl3UvmWag299QrF1g7SOVY1EcoDH2B+O2mOwXwj6JjWNhz4iUkdcbkthaHPwZ12cUTOYLOtopIILuRTdlXiYWqYvLn24yZUObqmS0LbNcyzAF8gF8LDOmp08FxRCo6NY4L9HJcvgaR4qDkOpiC1aj/9FK8LmRnmdOvH9FHIqr2P6eBP4uoetMWoMbW3QAqvizVMDYPe96Qj1m/Cwp2ogV5+D0JOt1Ms02LGHZ3pcBp0vojoUu52pdP+dXL1d0ZN4rzSPEVQboJllQz4dyahtQ55l2EuDdk6VVf35oOPFLt5HqIF84tFYbY4moxafMunMI2lSWeRj0jCxApnTcrjuWDRuG8Q/fv3Za2gtkSsx9XNLPAb6YNOrgKFEeZRtSIp7L2V6shwxn9H4PG2uETboUm44RWkoZO+JZFtNTTlZpij4B5mRvo/OamgruxwI6YgplBQXObSw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.4
Release Details
UpdatedMarch 26, 2026, 6:40 p.m.
Changelog

Behoben

  • Routing/Kompatibilität: indexApi()-Kompatibilitätsaliases für Legacy-Endpunkte ergänzt, um 500-Fehler in den Nextcloud-Logs zu verhindern.
  • PHP-Fatals: Konstruktor-Signaturprobleme in AbsenceService und ComplianceService behoben (konnte die App beim Laden von Services oder beim Speichern von Einstellungen zum Absturz bringen).
  • Reports-Sicherheit: Vorschau-Endpunkte gehärtet (start <= end Validierung + maximale Zeitraumbegrenzung) um DoS-Risiken durch untrusted Parameter zu reduzieren.
  • Admin-“Gesamte Organisation”: Admin-Organisation-Scope korrekt verarbeitet (userId="" = alle aktivierten Nutzer) inklusive passender Zugriffsprüfung, damit Preview/Download konsistent bleiben.
  • Reports-Rendering: Preview-Darstellung für Abwesenheiten und Compliance verbessert, sodass sie zur tatsächlichen Ergebnisstruktur passt.

Geändert

  • Reports-UI-Semantik: Team-Scope auf Team-Overview-/Export-Semantik eingeschränkt (verhindert irreführende Preview/Downloads).
  • Organisation-Download Hinweis: UI-Hinweis ergänzt, dass Organisation-Download erst vollständig unterstützt ist, sobald dedizierte Organization-Export-Endpunkte verfügbar sind.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureB+kiXQiNbiYsWVOlB3wiTffKZj021JMzAUzhQRYuwQmpszoGICQ7cCChEeggNXAMuOsRrPkznqB190jArt5Sfp7zKL5I3Z7IjyH6ur4aAqf6Tddq93/6Vb4W4ud9G30AJhkh3X0PBZ98bcOPcrxiaMrOqHryaIkcQ0os1pJnCAZ5v/zmUZGz/rVHxc0VNUGGvJZnx8Odwgd0r9z3McM4r9LL7n9+CrwtDMOVS/fUwAapkdaqM381pkLCa5BHM8VJd+ARz7Tt8rPVuVBwXDR9pkq38eoD9tQ61QVbCqrfsf4/8LgcbNlrHjWVRrAtUirX38JlJgFBKvmzaORvsgylNFggcrZ7sIx4o29kPPkFWZaUee0TKI/uc3WlThNIj/i4+sVTZ2Um23cfon/wr/sHByJIMOsFrw60s6RPm/XjAxeTnJbrm61ms9a0kKTodDR7puH0guqBQJX/CTJUQxcoPmKcfVqqblI2Ll/efOzi/BHYEEuiMGRVfYmuwtlALuFODD8ALFhf8EYmnB2EyCTLJwR+1bSUQF6/a/p4PP9cVSRKDbfYY3rpSU/QXbM3XTn3fET1dqE98FWEqPK6iNKdoMrcsZ4gkKNMNYKpAjMB9kbemHOVPNCIDVTIkYsVQO/edieH4N3EPouwzLWCvQVqWpb8h7SPbTslAhg45WtVByU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.3
Release Details
UpdatedMarch 19, 2026, 2:41 p.m.
Changelog

Behoben

  • ArbZG-Compliance: Pausenprüfung korrigiert (9h/45min-Zweig erreichbar; Prüfung ≥9h vor ≥6h)
  • Manager-Logik: employeeHasManager() nutzt nun getManagerIdsForEmployee() statt getColleagueIds()
  • Berichte: getTeamHoursSummary() berücksichtigt Periodenparameter (Woche/Monat)
  • Admin-Benutzer: hasTimeEntriesToday pro Benutzer statt systemweit
  • UserSettingsMapper: Falsy-Null/Leerstring-Behandlung in getIntegerSetting, getFloatSetting, getStringSetting
  • Routing: exportUsers-Route vor getUser verschoben (Shadowing behoben)
  • Version1009-Migration: MySQL-Backticks durch portablen QueryBuilder ersetzt; OCP\DB\Types
  • Doppelte Notifier-Registrierung: Aus Application.php boot() entfernt
  • API-Sicherheit: Generische Fehlermeldungen statt roher Exceptions (SubstituteController, GdprController)
  • PDF-Export: HTTP 422 mit klarer Meldung statt stillem CSV-Fallback
  • LIKE-Injection: WorkingTimeModelMapper::searchByName() verwendet escapeLikeParameter()
  • XSS: Modal-Titel in components.js escaped; compliance-violations.js innerHTML escaped
  • Admin-Einstellungen: CSRF-requesttoken ergänzt
  • AbsenceService DI: Konstruktorargument-Reihenfolge (IDBConnection) korrigiert
  • Admin-Feiertage und -Einstellungen: englische Quellstrings für l10n
  • UserDeletedListener: TeamMemberMapper und TeamManagerMapper per Injection
  • XSS: Team-Namen in admin-teams.js bereinigt

Geändert

  • CSS: Shadow-Light-Variable, scopierte Resets, Dark-Mode color-mix, semantische Farben, Navigationshöhe/z-index
  • Uhr-Buttons: Doppel-Submit-Guard (deaktiviert während API-Aufrufen)
  • initTimeline(): Max-Retry (20) gegen Endlosschleife
  • Barrierefreiheit: aria-label auf Header-Buttons, Label für Admin-Suche, aria-modal im Willkommens-Dialog, englische l10n-Keys in Navigation
  • Dokumentation: Interne Docs entfernt; docs/README ergänzt; Repo-URLs korrigiert
  • Manager-Dashboard: l10n von PHP an JS übergeben für Übersetzungen
  • Constants.php; benutzerfreundliche Fehlermeldungen
  • Zeiteintrags-Export: Optional (per Admin-Einstellung) können Einträge, die über Mitternacht laufen, im CSV/JSON-Export rein darstellungsbezogen in zwei Kalendertage segmentiert werden (vor/nach 00:00). Die zugrundeliegende Arbeitszeit- und ArbZG-Compliance-Berechnung bleibt unverändert auf Basis des originalen, unsplitteten Zeiteintrags.

Hinzugefügt

  • Version1010-Migration: Zusammengesetzte Indizes auf at_entries, at_violations, at_holidays, at_absences
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturePf3DfgKP/j8T95ElL4ORpuPFeD3UHt901udriCVI1yQdyRJDTp5Z8tHcaFpLRjjmjW8c1nFIEjrFVTjl5UNnPTTWzwf1+Woci/TtIHa7lDkMftxjIIVMf7khRJ6NGriUQD1WVS6Hqdi+FWafgnIqn7dO728K+lB3rFSlgoCoQgQpjjJ/D+N5yynIi44wiD7F8PngozN58wUdWoW02zBX3W+ndpEZXmrY2srqPndhBrlg4cOrE8cWSUFe9wtwSaopkDZPSl85Wsg7nwDOJGV1JaFzDdBxyHATs3kxJnsntXePI1j/O8bcWR69o45JkDY458TsiA0qweFMx5A3Ioh5K0Rrp4UQREthUP83sEzQCIo9ztzB3oeFr1sAs+/dfauAPLsHWNG3NO70fZ82RnsRKuhklTbL8RQ6gc2a3rqrOLSPypyLsv6+UxyoKwm41cggNl4UnhyUhoa33IjBiEoZDXTfB2d+fNZoTXkOYZdDTKcC9bNMc+mo8guNkTxqAYw8Ian0V7vmLs0uBJ9JYyyy5k8AUd+8ijMokWm/2VKPCbDga4mmZevp3KqSpVOqXYBJXmMzJH2Vf+LXZYjRHTScFQ92bXVz7VRRNoz+LEtZy4QYIT9u+YCIvu7ddT5RZmA08HIWU52W/jWQQiKraZE/Nw8Ks4VQBfB6TX+wDCGadBs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.2
Release Details
UpdatedMarch 11, 2026, 11:36 a.m.
Changelog

Geändert

  • Langfristiges Refactoring: Ersetzung aller \OC::$server-Verwendungen durch OCP-APIs und Konstruktor-Injection
  • CSPService: ContentSecurityPolicyNonceManager per Konstruktor injiziert
  • Controller: manuelles cspNonce entfernt (configureCSP übernimmt dies); IURLGenerator und IConfig injiziert, wo nötig
  • PageController: IURLGenerator und IConfig injiziert; übergibt urlGenerator an Templates
  • HealthController: IDBConnection für Datenbank-Check injiziert
  • ProjectCheckIntegrationService: LoggerInterface statt OC::$server->getLogger() injiziert
  • Templates: \OC::$server durch \OCP\Server::get() (öffentliche OCP-API) ersetzt
  • GitHub-Actions-Release-Workflow hinzugefügt (.github/workflows/release.yml)
  • PageControllerTest mit vollständigen Konstruktor-Mocks aktualisiert
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVdOLtKkuJFOvqioRam3iZGmEiSQrA4Xc99thIdm97dMKFlfHskcRIG34rWiqftbbIh+6CgWWxu+YdQOLSV63qOtZ7rH/rl1x5hnhaR4GBDbTtnE/frmfTJYlpHlKVw9KSyniEEAE30lLl5tuYA/4myl+9N6abL+9oJpQo8nAY2oApVgdJQFHPvUPeaJ6q0Qb6GUkOTwZo/UgmT0cIqTL7Ymkvkp3OGE1nRr2hD+T5aFyXu0E3IfS5m+eete4Xdn5TcSYzWVB3oBdMxmRTUtracW4ar/ZstAIwsVxmrLcW4/2AgvUQrrAZ87EBNNoiekUF+nJogWpFeh1n6lN7ZbuUSQJaQtlquovukPbnOgO1AAFe3EMG2DmBtlbyn/jt8/DY5ql8VTDp62eKDJxYTodidjAQYkqMEve7XuTtPgrNwG9c4hFNYS5fIGz07ER4otxErRKC25d89ql/bkSDre0IZPw/gTgdEjx71iD/UZBf9b2tzhMKpNfdtlkT0BV1mNOa376kZzYOk9DcpAaOgobPK00gb3ZeeODGn29N8LEvEAI5SCoa1m7eT4B0KbMQNtgDEUNZrrvRf3Tzpb0mL2QUmf5i3sn10IjQ6KdTDor1xWFEYIF03M240Dw5ml/UUrDgvXI9WZ1BzgyNDe2HAVeNPb9akpPHUWYkoe+uOoaf7A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.1
Release Details
UpdatedMarch 10, 2026, 10:18 p.m.
Changelog

Fixed

  • Resolved duplicate route names in absence API (absence#store, absence#show, absence#update, absence#delete)
  • Corrected settings class names in info.xml to use full OCA namespace
  • Added declare(strict_types=1) to routes.php

Changed

  • Removed non-existent screenshot references from info.xml until real screenshots are captured
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturec6nuFK9N2O61bf1GpNWz2G2FDt1GzTRzd2pXna6x5E/HI/m1e1dt8TheGnhfgYm/TY/o/W539hak3svOJbJmoJr/kmd7xVWRGnZH/PDBjROe5kwRIwWdZlR3z7DiOyTsZo44DBLvVFEaRMAjF4PpVpJxTIA0xV59d3YJHyFZXbMPxSvAbZu43bAjWU6kVGmfaKUOrW5d592aApbxQ+mwJS7LwFMXlxGSzyCTwYL3bMkwormPPS64RTJtrPhvImU09ACMsjwgERAuFGlvbGj8CiuXzAWoO7ISyxcsqiaw1jnA5OIlJ+hnQhUdYHtkIzdwNHxw4ItSBL3pSJjhwIyrs4zZRMkOVjTqDluDfmvbx3Ir9cglVHlMGGTOOJtuyU0PmL0Fo9HZ2R0Noz9w8T3cpetxRG+B+mSWapUblbM+BT6aIvfHMjSzvI0qjwzcczwVzkYJISHReObwYFpeVs5W7cW1gXY2mx42Q/fPqDkrM5wEiuYJ98QG7Y67uhYZce9wmAp0Pygx0UJILj4fNPLuA27hVOp3++x0rOxhEl1A4v0tgiX5pVRYK3qwf1vHFl3zSGgldQs2WUmJ6CoPWbIE6hzmtRUGMzSOnKEK+2eLHej/Edzdo75nVZd6maKXVAY1L+z74IK61HvJ6kQ0QXFO7urWBZJg+IfxzR6W4mrvZnY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32

Nextcloud 33

ArbeitszeitCheck 1.6.6
Release Details
UpdatedAug. 8, 2026, 11:25 a.m.
Changelog

Fixed

  • Manager employee absence create (NC 34): ManagerController::createEmployeeAbsence no longer calls protected Request::getContent() (fatal Error on every manager sick/vacation record). Reads the JSON body via public IRequest::getParams(), matching createEmployeeTimeEntry and the employee absence path.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureRorK2I8JwFLha7AQa/M+VQXBDGpr4PrPkbl4tAE3v7ZoNxgsZEEfFeLCgfXIgXmdxVH9pB6j9VjNTkITjUczkV1OCDlrHDnbkwQiJljpLbdxMi85TY3J0IazHyBVlMJK5pEHGNfBbowdk4hP9ePSqirCttayNIKNTEkWD8fh3yhv9GPaf/yvVY8sdwNC6MrJCKW5Ww5GeoEc8SdDqKXe8tNi66sKBmxZ9HF6y06Xwjtxr68Jir69HZGpdIq58aB0tTbYF6ABFof7dxni4YULDSXKpiK865quxaG1Rl93SyGR7UTgKydzSoQQC7TuGCapyyM/Jifv4/2mFQeOoW30dWwxqTTPzdck2QXLt8Ix0KFK4WDQtGcoTAhGhuo1IBwvR/I9wH34D8bBxmTbA4kfZ0F/DdA9lzVt8S56xuJZ7KgDj5yr8YLdbOBiODLg4Z2PMCnZociuz3eqSd8bfjJBqd9LmOGbHg+d8OkzCLF8sW3Gwnihhmbg5HPQdps9Wl5umTL9sjFadQtDr+tWiIIqIqbo1++9L6jBFCpUb9+cmD+08t+HzLa1F+2tqAIBeAvIld+tPs8CnhapsjUhNRu1K12CP1yYoNMx2bb4s7hfM3xNZlNk4OPIlGFpg8OVH0/BbJFgg6VGzi4mwA5zUFTR9PKCN7wRoVIaNZND9vEYOEg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.5
Release Details
UpdatedAug. 5, 2026, 11:21 a.m.
Changelog

Fixed

  • Admin notifications layout (HTTP 500): unescaped % in premium help copy (50% = 0.50) crashed L10N vsprintf → guest/error shell (body-login + guest.css) centered the sidebar and checkbox labels. Literal percents use %%; JS placeholder strings go through TemplateL10n.
  • Admin notifications interaction jump: initVacationUnitMigration referenced l10n outside init() (ReferenceError) and soft-keyboard reveal scrolled checkboxes/radios into a visualViewport feedback loop — clicking controls no longer throws or yanks the page.
  • Focus/select page jumps (global): soft-keyboard helper never scrolls for selects, date/time, or desktop focus; only reveals typed fields when the keyboard has shrunk the visual viewport; jump nav stays in document flow (no sticky chrome) on all admin settings pages.
  • Notifications page clarity: six card-level jump pills with matching card titles (Absences & vacation, Calendar & email, Overtime alerts/bank, Hour premiums, HR office) and a one-line lead — same words in nav and headings.
  • Premium categories table UX: fixed column widths, left-aligned category labels, proper checkbox touch targets, and % beside the percent field (no more stacked/centered mess).
  • BANSS vacation-unit migrate crash window: pending flag + committed audit detection finishes the IConfig unit flip if the process dies after DB commit (never leaves hour magnitudes labeled as days). Heal also runs on every getUnit() read path (not only Apply).
  • DATEV premiums vs closed months: sealed months always export frozen month-closure premium buckets (NN-06), including mid-month ranges; half-open exclusive end from ExportController no longer bleeds +1 day into the next month.
  • Anniversary mode switch: calendar→anniversary requires explicit missing-hire acknowledgement when employment starts are missing (VAC_YEAR_MISSING_HIRE_ACK_REQUIRED).
  • Vacation mutations during unit migrate: create/update/shorten/approve/cancel vacation refuse with VAC_UNIT_MIGRATE_IN_PROGRESS while the migration lock or pending crash-window flag is set.
  • Month-close premium seal: policy load + classification share one exclusive azc/pp/policy lock with admin policy save so sealed snapshots cannot mix versions.
  • BANSS migration UX: visible 7.7 callout + “Use 7.7” control; confirm dialogs show the conversion factor.
  • Employee app hours preview: debit preview is hours-only (no holiday-blind weekday estimate).
  • Anniversary approval lock: FOR UPDATE scope follows hire-anniversary windows (not blind calendar Jan–Dec).
  • Vacation year mode flip: refreshes open allocations for access-allowed users (AC-101.4); audit records hire-ack count + refresh count.
  • Hours-mode rollover: VacationRolloverService receives VacationUnitService so carryover writes keep carryover_hours (no silent clear-to-days).
  • Migrate-idle on balance CLI/rollover: import + automatic rollover refuse while unit migration is in progress.
  • Migrate-idle TOCTOU: writers hold LOCK_SHARED on azc/vu/migrate for the whole critical section (withIdleShared / absence shared hold); migrate still takes exclusive.
  • Year-mode flip race: exclusive azc/vy/mode + migrate-idle shared around config write + AC-101.4 refresh; reports allocationsFailedCount; refuses during unit migrate.
  • Bachus admin UX: vacation year/unit as giant choice cards; long help + FIFO/overlap/DATEV collapsed under “More options”; short first-paint copy.
  • Premium policy busy: concurrent admin save returns HTTP 409 PREMIUM_POLICY_BUSY (injectable ILockingProvider for deterministic tests).
  • Premium tagged_multi: no longer sums money into total_valued_hours; unique wall-clock total_classified_hours; DST night-window coverage.
  • Mobile clock-in (Kommen): mutating API calls now always send a JSON body with Content-Type: application/json, so reverse proxies/WAFs no longer return opaque HTTP 400 without a message. Error envelopes include stable error_code values; mobile surfaces server messages (or localized fallbacks) instead of English “Request failed (400)”.
  • Web / desklet clock actions: clock-out, break start/end, daily-max enforcement, and dashboard desklet POSTs now always send a JSON body (same proxy-safe contract as mobile). Desklet and widget errors forward business-rule messages and error_code instead of a generic “Action failed”.
  • Desklet project selection: when ProjectCheck linking is enabled, the dashboard desklet shows an accessible project picker before Kommen and posts projectCheckProjectId with clock-in; daily-maximum callout hides clock-in until the next day. When ProjectCheck is installed but linking is off, the desklet shows a clear neutral callout (same guidance as the full dashboard / mobile home).
  • Desklet template vars: workspace partial reads $_['deskletConfig'] / $_['l'] (OCP\Template assign), so project options and JSON config actually reach the rendered HTML.
  • Utils.ajax empty POST: bare mutating calls via ArbeitszeitCheckUtils.ajax now send JSON.stringify({}) with Content-Type: application/json (no Content-Type-without-body).
  • Admin kiosk/license/tariff/holidays DELETE/POST: shared normalizeMutatingFetchInit forces a JSON body whenever Content-Type claims JSON (or when the body is missing on mutating verbs), closing the same proxy-400 class on revoke/clear-license/holiday-delete paths.
  • Mobile project selection: home dashboard and manual time-entry expose ProjectCheck assignable projects when admin linking is enabled; accessible project picker before Kommen/Weiterarbeiten and on create-entry.
  • Today’s hours: getTodayHours() no longer clamps to the daily maximum, so UI and error copy report real worked hours.
  • Lock conflicts: HTTP 423 responses include error_code=locked and a duplicated message field for clients.

Added

  • Companion contract coverage: T-MOB-02 additive-key assertions; Kiosk 1.0.6 version alignment (Employee 1.0.4 unit-aware remains publish-ready off-host).
  • Mobile home payload fields atDailyMaximum and projectCheck for companion clients; callouts when daily max is reached or ProjectCheck linking is installed but disabled.
  • Dashboard widget clockIn accepts optional projectCheckProjectId.
  • Desklet config exposes projectCheck projects and l10n for the project picker / daily-maximum notice.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureBSyYbL7wN3/nmA1S//VEI5bgCaMf6YYxvSgfSulJAqE4TLWuk5nw2EUqAPA175tUddw2/8StCGbQMgJxduw4ktCwHbUVeLS7Qf6EQneT/YJQgWQoLlgskRE6awPaa0qyvzsLAY/iHIPadw4CBMlMwWoLnXhH2w9Iix753bkzog6VaKqMxW62E/HDw2WtUXkXoC4RuWkOJ5YJOZ4d8ctaccIXze/dUwW9tQrA8wtYruAv/8X3xM8F1tGx7wQVeR/Xz8/B24TyN6YWvuDKloVayIPU92Lae40mdv2ICfTeqCnV4zuYtjaTG3IoiYliXV9F4o8uUAK0n5YaJKvHM7TcdOmflARfXWIs21cP9saJGiyaTCQFJVumETaHsX3QWUXDxoI2X4aAcoAYBuSADMhIhFS5SVXBYZjOVMUIIrPt6/zq7XuWZJpk9ZydIY9GM3oGmPzeC14HXOtXXLP/E8cpVYUrWcDMfQPVlAYjj/pqvUmp0hi/2fuDPsY9q9ce5njRG7dXQQoQiK3FGd71xICgFi2HOCYcf4Mo/M0HYCaPqe+GmXHCUMRt/aVV2ElSW/LMu+ArCPpGLHoi/DkT22KbflVNd+CgdfBq7+F6dwxcBvVMcY9TNPCHmsdE5DKx3ZCcun/tSXRKOOidUqRiSd94oiL/jjECVMN8xxX0xf3UHZo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.4
Release Details
UpdatedAug. 2, 2026, 12:13 p.m.
Changelog

Added

  • Portfolio access door: Administration can switch between Open (everyone with app access) and Restricted mode with explicit user and group allowlists; deleted users are removed from the allowlist automatically.

Changed

  • l10n: Expanded EN/DE catalogs (DACH holiday regions, clearer admin and report copy) and refreshed secondary locales.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureSOiaMXZNekxFez7VU+BALHSm6OTEH16YKXxXUX8I3HFV+ZVH1OTmMXgKgG9dVyKmlSyWkDMpWLhd0zILoPj9CW2/kt06+Vc+ACA3FdvS9qutfWNRvaAwehJv1Udvvd5IS/Kf03kX1kgQgRgfroPI/ts91L5nnHVsA4dwIDU4pEXCEFdNykVEJfXoux0uvXQGhLSp8KQhMR9tN0JIY4CgXiHcAQ0Ra5ptfwTU7YUrYwObu72EAaUvSUZuoUdhq+vY8cYTuw76k9HY1LXIe5rwg4tm5DxPmPxHRHdoVNCmCNu2j++rs+2GqNW25esEk+6e8pdEV2fZFClNDFaUsNBda5Fy8Y0RFVl6T2K79vcILVvnU6osegWQ/3Q/B7nDLfNpCJ4ggp6AkfgsurCYVraSz5fXkJiPO8mn0Ns5WELtZhn8Wvp49g950ai7Q98YbIkzjlvDm6KpLesjy+dJ+rtDNqvhYObV+YTuwOOZLytHoGy9OhZy8pRuavwLoWYfZ0BFKFDdcBJGB7yj9+du1fZTlHEJ01b6mii0s3if8a21RcuEKsCbmiR5LjVB3ACofuYUhfJ07B1XSikkYqsaO02Lccya1DpJOodYwXmmjdWQL/Hr6qjiMad4Hn9yuzgxYluZen0vMpIRMGTZC90SI4/KYA4q+VLWB3K2XI6qmk2UdYA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.3
Release Details
UpdatedJuly 31, 2026, 12:19 p.m.
Changelog

Added

  • Companion API floor: OCS capabilities now expose arbeitszeitcheck.companion.min (1) so DutyCheck / AudioCheck mobile clients can fail closed with app_outdated when the server companion contract is missing or newer than the installed app.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVn8EWsz1515elQgMot1LvIlsZA6IsVOUHRSGG0JsXbOZNHwXVupMo/n4TaNxcQGd9NWAFZRCfLqvqZrhuz68M0UAS2f4HhNV6oHId/FgVoEp0BqOh6JBNboReVsBWUM785PZiPHgybmAZPkHAkTfnp26j3X39tQHq7fIVLvfzFP2UayidATIgF6V8zDJ/3HnnujVyhhWtHWlYETkovnD4rrD4yMrNpf1D6LeyO7a+WedmSMggKSrxC/Ik7i01siE9HJuz9NqbEPXMtUrjRTn9MPaTDQ22ENrdTmkN7ShGN9iBevEfYyeBvAZnw0beh/eSdAYQT6/kKNsY8RCHiXTt6rQl+KIuylm8KvttahtQ5RvXzI7la75eAhDZW0L6IwQW6S797pe/74yhTS3UTss7DdXmIwsM3pq874zXaiVH7eEfbY/vK3g1NOQLwgMi/n8+Q4+eTSWs5xKvB4HKm65bUwCksowxYDmXHtJjInv20pM5kCbtSbF3bbjoTxnU4fNgeTjt5bDO6gFrsyQPmtPZrzOMtA4xPbHgR+evNz0Q4Uv1XnP83AsEZAiWVeIzDap7C1rAiuBfXdSm39snmThW7fAf0uNbtpMwLVLQIfhQ3hM/cS7Rsw5BzSGWRhTRnU91BFCQ1MtTPiM2WidwtXAc/4/rgd+EBsbn+wAevOst9Q=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.2
Release Details
UpdatedJuly 29, 2026, 6:34 p.m.
Changelog

Fixed

  • Austrian break-split UX (web): the time-entry form and correction dialog no longer show “Compliant” for illegal AZG §11 splits that still sum to 30 minutes (e.g. 20+10). Client validation mirrors BreakSplitValidator; the server remains authoritative. Bootstrap complianceParams now includes allowedBreakSplitPatterns like the mobile capabilities block.
  • Admin settings region consistency: country→region repair uses values written in the same request and skips no-op POSTs (empty body still returns 400), so unit mocks and concurrent saves cannot wipe a just-saved region.
  • Compliance PDF export honesty: format=pdf for compliance reports returns HTTP 422 with a clear error (same as time-entry/absence exports) instead of silently downloading CSV.
  • Capabilities accessibility claim: advertise WCAG AA (matches product/E2E target), not AAA.
  • License trust anchor: AZC_VENDOR_PUBLIC_KEY_B64 env override is gated to PHPUnit / explicit AZC_ALLOW_VENDOR_KEY_OVERRIDE=1 so a compromised environment cannot swap the vendor public key on a live instance.
  • Cross-product license rejection: AZC2 payloads that carry a foreign product marker (e.g. deskcheck) are rejected even if the wire prefix and signature verify.

Added

  • Vitest coverage for client break-split evaluation; PHPUnit contract that AT web bootstrap exposes split patterns; suite legacy-isolation unit + integration guards.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature1TSX5RmOZ9/ZxeuN3pqf+J5X53S2citY3TCgMQuU6wd8Vz+fOszY1q7TJ7gYTthLJzBb32jfrRWanwVuUvjCu4ZbCE0mymuHsUJHtTJuEvFrEkcXyFE+9eEow1jIUqKljhPhnrUXEGigKGk0r3WxEYJoQpctvVdQ3sNdxQnDQOVpc3l0qitegM/+Y62bVRoNuvBisoKojpaZKaAjrBXzN9dghMbtIqmJmaQrJncjLlEBcT6AiwgxmeWOOp31PuIo367Cub46ogY0WGRj7qZjLsOmzVjvL+XzzSI/PAzyMn1qwvlJf/vl+go0jXAmcpY2/G2MO6msn8TH3CB4VDew5fl4ieBCxgFy4Xn6PklT1w+Lgo5fBeR9qkyNJIE3YvF21gw+fd6RVLrvWbBQkN1kMAsLnlCeXlaWGSo8P1tJfp5zEkylMCrJxwcUEX83j+yBKKDP+AVP/AnG64mh6MXmMAd2FRMthdBihOgx1k/hYkv8qOsezPk4lUEBZcv1LduKA6bopa7iY/NdbEj9K2F+KGBI4XlrO4JlJMKNn6h+sfwr+1eysMGwWTTlBX58lTuZhUXyDqdk653suYaLUWWWVt4qp+GaM7zwOIsUTx+HRShduuyiE1J4M6NE0lyy7HYNEFLggCAqFAPhy/QwzDmNZJQBXfwyBwjce2iJZ1BHAs0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.23
Release Details
UpdatedJuly 21, 2026, 1:03 p.m.
Changelog

Changed

  • Kiosk pairing code TTL (temporary): pending terminal pairing codes now remain valid for 14 days instead of 10 minutes (KIOSK_PAIRING_TTL_SECONDS), so Google Play reviewers can pair the Terminal app from review notes without the code expiring before audit. Admin UI copy and all 10 locale catalogs updated accordingly. Revert to 600 seconds (10 minutes) after the Terminal app is published.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureK8NCV7JxMWpvTxVMotquZ/rRoRW4+5gPIIoHxoI2/O2WRrPc9QyF2idfMvbNyPDLyl1+yC9vrMeBcPcalJtRJN9j77BQlHtZ6puXYzvaxw3ZsJcbhVB4/wltySYueOyYXl+U6wrgsbD/vLODvzYHOEhquXCl3KsffNto6rpK3k32L1I4T6jc9rIFOIhFA4NHFK+D+Z+J8tID63miPI5F0OjBRTBXEKM7w3FMgf2JgrSAFop6jdYStfHARm3PR/W20KhJdwPTgUYo1NvRW2YiagUAj9GUc6DO0LkAUAXOkJN0EzquWEb+YvjaQH31VagKTkDN6Y+nwNz49kLsgoq8dWPjc/pBGDTtLaVsz0BaRJ0BVGeJmxwiFm35RNfbkcdxwIxjK3P37gl/tmrX9nZedShGyc6o22wy7gU0sXf7JjYT8Eaq2hsIXesxX+4cQwktbz9CZWYvZIZdLiJNyIPT4onuwQ8AcQf8KwLk0E6CJ+yXLCoSAHQOqe/GNqAOFLeWXjsUKsUujJlWt5SCKIjMiKccm4FMP1Fxpv4DP1V/xt6Qh8/8+wdjRU3qnsopZD4pC9YbPRtHOCzAa00z+etMvtF9KT9qfij65zAOKYOBeDLwwx5Un/Wys9sMnWdfYyA3JXeQF0r4XJ299M003AXlu4cqg7AObMZyRY0FXffJShk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.22
Release Details
UpdatedJuly 21, 2026, 8:01 a.m.
Changelog

Changed

  • Kiosk stamp errors are specific instead of generic: business-rule rejections during clock in/out and break start/end now return stable machine codes (KIOSK_ALREADY_CLOCKED_IN, KIOSK_NOT_CLOCKED_IN, KIOSK_ON_BREAK_END_FIRST, KIOSK_BREAK_ALREADY_STARTED, KIOSK_NOT_ON_BREAK, KIOSK_DAILY_HOURS_LIMIT, KIOSK_REST_PERIOD_REQUIRED, KIOSK_ACTION_REJECTED) instead of one opaque KIOSK_ACTION_INVALID, so terminals can show actionable messages.
  • Detailed compliance messages pass through: rest-period and daily-hours rejections keep the detailed, translated server message (which shift ended when, when clock-in is possible again) instead of a generic phrase.
  • HTTP semantics: kiosk state conflicts (already clocked in, break already started, end break first) answer 409 Conflict; compliance limits stay 400.

Fixed

  • Kiosk error copy translated: the new kiosk error messages ship in all 10 supported languages (en/de/fr/es/da/nl/it/pl/sv/nb) with full catalog parity.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureRlVyIvkEA56x2gahFj22+RQKrvgzWWPNmOR2MfQPp6zdnc5BzGS6MyfsPMqp/ctvm2RBSJUAAsODPdKCLf1Sh0PoRDTBe/hWJDO3jXeV5aEz1PSBnmDf7Sldoac+88v6VxjtW9kYRuICZK9g1wqg0dG+B87+WKUs8I2cuGf0sAcvWWlrXWFfC/bDUzsrFrRUT0mjYWvb6Y22/mFPycriZN6OmBoJe3xSgpbfgO0ZCsnQnUzwUqRyg0K/LSApJvFL7l+pUmFJOztYI8us/tbyeY9Fik8vHfXH0xM1K0Zi6j2AOhNDIdjNSxSXvbTxZRFSLIAY/iIlvj4DNXvQ3zhZTe80jCZ6P3hQSJKaiubbty41exokyBzsS/NEwByJ8QiOP57fN+gGSt30WoSMZ736+dyQ80iStyjZHOeL8jtX8SR7leiArQ7mUWqMbiAMkc5HRFXmIXXQi4yGjGzUtq5G/laHkn0t8Y7FyLVZ8xwWvdEpva1jEu1xPiRi8mSYpt3md3Iq6U2I1DdHzj5C74+bAloXlApLOkspaVsxAATj1V28zzGAdAdVEtnyYhLw1Qd5AGsj0XdwI66h208gD+O66A/WY6Ic0QfNu8jrCMP4C0ncCY9wFgmSKN0EJWxu9gvoa4Im2S6qwVUJPnYXNLCjbUEawXHgSoKITTWFcmc3Vlc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.21
Release Details
UpdatedJuly 20, 2026, 9:08 p.m.
Changelog

Fixed

  • Stuck badge scan cannot be cancelled: Admin “Cancel scan” no longer depends on acquiring exclusive DB locks. If locks are orphaned (crash or pre-1.5.20 truncated keys), cancel force-aborts: clears the enrollment, purges known lock rows for that employee/tablet, and returns success so a new card can be enrolled immediately.
  • Start / PIN / RFID blocked by orphan locks: starting a scan and assigning PIN/badge first retry briefly (live changes win by waiting), then purge the stuck keys once and retry — instead of looping on “already running” until the ~1h lock TTL. Live locks are never purged on first contact, so concurrent admin actions stay serialized.
  • Double-click on “Generate PIN” could return HTTP 500: a unique-constraint race between two concurrent PIN generates is now mapped to the retryable “busy” error instead of an unmapped server error.
  • Cancel hidden after reload: Cancel stays available whenever a tablet is selected in Kiosk admin, not only during an in-page poll, so stuck server-side scans can always be cleared.
  • German translations broken: l10n/de.js contained a syntax error (strings appended outside the catalog), which disabled the entire German catalog in the browser. All locale catalogs regenerated with full key parity across the 10 supported languages.

Changed

  • Kiosk maintenance: expired incomplete enrollments are garbage-collected every 15 minutes so tablets leave enrollment mode even if nobody cancelled.
  • Busy copy: no longer tells admins to “cancel first” in a way that implies cancel itself might be impossible.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureXiGxy0+z/IJbzrL+1Yzg5ixEp20L6DG6uicf5NP8MNCA7dfDJrGUdjbv3Bd3NHATtTIbmNJWiL4N0u/AFQj6Qb8HRRMNIBKBQpamATbxq5FfIVXCpSOpfMHT/sKjVq3SxCCdgV1XB3NqCbEtHuZmSH5mvNBfI0Nu/ZO584j2DM4qdvaDXcqyf0N69NUQuP8jiCEPjJ40DHNXfGTqnx4ExnnaBrfK6t+mQE/aFiezxGl4dH/JNWE4xikVbMWAdSxzN12YgI7AO2QyYk1TAeY4pohJwp+tclEyIkeFcLbFO3Tu1tQfHcKKCYEsNEilUF+k4eFg6xlnxDeU67EeWkpg4nxTuADqgx3myJauVioj1Ewe9HaMjXz5YmtpNPwYTqBK+sfU5GVoUTY0Nmmx6LlNOQYa31agiakLWwBV5SL17dNfOOjC5KooNHzK/CaiLmQupDmEA7cgA4oiwOC2cauVuxT4RaOKnKxWvp0rRErOkV71+oqyrwx1TcGIWx1YH0Atz5OujGrzm/b1ZlCXmL6AJm+qeOuA9lEa4ABbyZRBnO2G3Kec+oo8KmwJYeLjYZKj7MoJN5tho97ZK0yDIziW1YrGT6DcgL9jwW87W+r/jY2nfQ3w6aysWj8nSb21yF3e6hCKyMBgjLW/UFQTF4lxYXd3wfBPlgaWuk+GWxKYSaE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.20
Release Details
UpdatedJuly 20, 2026, 8:14 p.m.
Changelog

Fixed

  • DB lock keys truncated at 64 chars: exclusive locks for time tracking, absences, month closure, entitlement snapshots, and kiosk PIN/RFID/enrollment now use short stable keys (oc_file_locks.key is VARCHAR(64)). Over-long keys were truncated on insert so releaseLock never matched and mutations stayed stuck with LockedException / KIOSK_BUSY until TTL.
  • Stuck lock cleanup on upgrade: post-migration repair ClearStuckKioskEnrollmentLocks clears legacy over-long lock rows left behind by older builds.
  • Kiosk enrollment cancel races: cancel uses ordered user→terminal locks with short retries, returns stable idle/completed/cancelled outcomes, and no longer deadlocks or leaves Admin on a hard busy failure while a scan finishes.

Changed

  • Kiosk admin enrollment UX: numbered wizard steps, clearer assign/cancel controls, and improved enrollment panel feedback during badge scan.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureElgAE38RXS4k48RHQq3yjxfRczhfTySf1c5Q/t9Q/XFUzyDixdpFnqLPWxkRj0XaQ0xXIBaSsQza7zImW3cBAsoadS+o1O8eF5XlOJJJtwgBI8ucBJ+3y418M7XteL0O/6dsKL6kSIaUfaosb8r+ckSAhWK33dApIf+7x7eyqx8ueqNURmtTlGssUyDyPFJ6pMZaIpp9/AM1glFMTp3n7I6eDnsEFepyHew3NiNo4uaSuxSvKm4L7F7f+R4SEPWqmCI9bti6UR87n8Vo+OLYyC37Y0amL7K+m0Beh+RBSkEZE+7esQ6uVVFg6YMVJfoHO2UutCq2Z7KSr/z7a8cFFoMauK32S6bvzCWMf1aB4ogTOLzpB0Kngpd/Q0oSZrtFQjYomioRKk0kb/VCapR2jtRnTMXxdmwfPjWXkreWxpFskpiyRKWWTLKBaNAMWaOLQewtLdPhxaaGSmH9CTicrkQG8ssHsdU+7/y6aDkcSirhVEyqdEc9jEcdjX5vjPVXzZXA3Y0S53c3r+xnoA3bqx/aSdag2HFSmFILZsxJaKtXQGMbYwMF/SmUmK9lxA3r3EwtYW2Zf1qUDiWONOO5amOcCdNvUsN/RRfrI3o4RNDOTdMYbmAGnUGOKCkU/LOH0yLKnX4KIGnkQdTsmTFBS0P6G8B15m9j6PlPgQfXMw4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.19
Release Details
UpdatedJuly 20, 2026, 3:48 p.m.
Changelog

Fixed

  • Kiosk API JSON errors: unexpected and rate-limit failures now return stable JSON machine codes so Terminal clients can show actionable messages instead of opaque failures.
  • Stamp session recovery: one-shot kiosk session claims are released when a stamp mutation fails, so terminals can recover instead of staying stuck on a claimed session.
  • PHPUnit full suite: fixed a fatal from a redeclared template helper so the complete test run no longer aborts mid-suite.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureG2fJROM8ehTinPOpxRjAiqnMIVmQlVdPCsqXsV3UymF2qWHJ3bqZ1K5MroNW4h2VZuxvgpLJqjc3h0TS7pI6cuwO5/+cvlk2U3Wd0k6jQw/WjJmbgCnLoNoexz56BxJLzeRywusMxQWTa7Dq5AS6B8oOujZ8jngQIGq6iS3XMkjxYCClE5VI010tvhN1Y4sO2J6T74dTo+HoYe8vo37ijiJAwL8L9i0aSHlitoKi9PyL8xvpYYYZ+vf0twmqnDE5XsaUPIFPTJNC+UkyDzGQYQTrzZjts8QOEll2z7Gq7/uhWOAJ9TiCnHn+KRuuEs5ffP23x+bwd0THZBIyl4m6L7Dwnv5DnZrysYd5Zf65Cco9/429VHCD7qciLbOoT+rOC4dwIiC9U5fTTkLnLuTqM2CfB2WJuwwqYIN87afGELrlY9+Zn8/B5pfraX3C2jOD6+9/iwLn2zZ1qrep4XKUzJiKPM9UU7oE6OOXflJ1T3MR4rqT/lQNc9A8Rw6N18qk0418hCVyuDcYBP5SzPj/AAxJEF/IfHFzHqguD0PC17MBSXMnQk1G4o4BgoLsGOmphhtpTxQqpXeDsDrxd2lcjyRGi+PWR1GyIKhVxE1LZQebDYXmZJf4ykSiok9eFdcxgt4aVTE5Nfuw/0w9B3Tth/rmo6SsgKb+HKNgZmt5hTo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.18
Release Details
UpdatedJuly 20, 2026, 11:28 a.m.
Changelog

Changed

  • Full-width admin shells: My Settings and manager month-closures use the wide page shell instead of narrow constrained layouts.
  • Audit log filters: redesigned filter row layout (dates/actions, then user/action/entity) so fields no longer collapse into empty grid holes from shared page-pattern subgrid rules.
  • Reports export chooser: replaced nested badge cards with a theme-safe radiogroup of full-width options (solid icon wells, Selected state, keyboard arrow navigation).
  • Admin / manager surface polish: shared stat tiles and layout tweaks across dashboards, license, kiosk, users, and working-time models for clearer hierarchy and WCAG-friendlier contrast.

Fixed

  • Audit log / reports fetch races: ignore stale responses when a newer filter or export-option request is already in flight.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureBzLEZ4ZoxBh/uruDMsv6YAhJMZMfAzxeeyJgfUQ+8AOmDLxKmVuo7e4eKhVBygC3Sanoy+UgKgobHS2XzHPJGHQGMZ3nE1n/R+qCXtyL/bIuJkcHn9YHebUm3ptl6OVVbr4h8bDPtjJzDz6te10Q07c4mehR8/GR6+rz4rXHS/oQXb2XKAAs7IS15tDgn63y1uoCE1Wm6wSGGC7qUv71JjSsEgbAinr7K5NEgt5rQApVuaLp0kxvzSnZTcBfM8135izvptnnPaHB/QOTEzWzgr+A286fZM2DrDl1dS9/TmPRoHiaV+jsySN6tKqc/vkHWKgjGeDxcxF0lt4k21v9FVNYzA9UNK12qz/WI+KC5QynvYvGjk/RNCKaosTMLtWPCJsMwEj9DnW5zQ4Y7twfzr0KHbK3z+yL4K/cCATqqeBXESgI2icj/tYx8ghO7bmsR22MBUcs6FfU7ReG1lqEsd9lKfbKZA0qmS90ypLXwy8jODxnvvcFOOo19+DpPA4GPvtr7wgvYdlvpXBzWLguwV1ksmtcYB+mHV/W1v4h9lR0i2/ptjDn3xfDkp/TB6ZVP/AvHqf7+gZZYS4OMB6aJBC8b24MvN1pHihJHqC+dzx+0WTj2i4W57yG+abnaE/LM7TokkB2xdOCSDVq/wWaJIEwlOzXuvPkc4Y0+wlVCZo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.9
Release Details
UpdatedJuly 18, 2026, 4:47 p.m.
Changelog

Added

  • Dedicated admin user detail page: user editing moved off the users list onto its own detail view (route, template, and admin JS), with clearer navigation from the users overview.

Changed

  • Kiosk admin enrollment UX: improved enrollment polling, status feedback, and kiosk-facing copy during badge/PIN assignment.
  • Kiosk error messaging: clearer, actionable messages for common enrollment and credential failures.

Fixed

  • Kiosk identify/assign races: identify and assign flows now take enrollment locks so concurrent admin/kiosk actions cannot corrupt in-flight enrollment state.
  • Credential assignment under load: kiosk credential updates are serialized with enrollment so badge/PIN changes stay consistent with the active session.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureBp1Hm0lGcDtG8b3bi4qlMBJpvwwMEf/5grKKp5x6YsyBvy6nQ01+DNKhVb4jicPFWfsk3eJ7SlG0TReohIuCELyydXtc0EqNfx1DN0lAeNoKvuNkgS+StdDJ4KR4EGgCq68y02oX9r9lMK/V9UUfsTazyRkpHjl8AlOgt2B7Fvg+/CWof158M487DblxTaGuDu2ddgmGHv00Noc5KLezuIDWo60fwfP9m+ypf317gFcZTebwyHiY5Z5AH2XzobPQ3P6d3/d43RsyOqPa1VuTNh8lHXLTQiKnVMLxGYDzjxss+5cPafsoXOECbEUeeMCVfixXTedPuDvywyyb4LZhKaMJSiuMhupUzh20K3EbuEz9FeZkZAqhaGZPEvinaprUJ+7Az+0Or+2NM3DPPQItZJdtx8ZFPVc0oG53M+CQHpYIpDQq5i5obFU0gCCaVTWBgs5biS5i+vK77Y4tFaoUD+yxQ2XiIn2BPyuoW/s2RFIwe9Tq9O87887J5bbHUlx3WpJ5Ket8pLHXDHlftoN3GX+M+6CYMtF8UPVOU8rXiucruEcTk4XxonRPimtw8osFE78acp9NXMfFJxt4crdQ6WYv4IF3SC9IkBmZzUtmKA8M8o/ykz1HZsdwVaQ09ueYGJeX8cfqw96C7IDA6f9KjNAMYMFzq0LMiFU9GYoLwCc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.8
Release Details
UpdatedJuly 18, 2026, 11:18 a.m.
Changelog

Changed

  • Mobile / widget home payload: impliedDailyHours (contract daily target) is included alongside weekly hours so clients can show “Daily target” like the employee dashboard.

  • Session CSRF restored for browser cookie sessions on NoCSRFRequired APIs: mutating clock/absence/export endpoints that stay NoCSRFRequired for mobile Basic auth now re-require a valid request token whenever a Nextcloud session cookie is present. Mobile clients without session cookies are unchanged. Forged Authorization: Basic … headers can no longer bypass CSRF while the victim’s session cookie is sent.

Fixed

  • Absence cancel/delete/shorten race with approve: those mutations now take the same per-user absence lock and re-read status under the lock.
  • Status-path stale-pause repair / daily-max auto-complete: side effects run under the time-tracking user lock without nesting an outer DB transaction around a second lock acquisition.
  • Manual time entry create/update overlap races: overlap check + insert/update share the time-tracking user lock with clock mutations.
  • Month finalize/reopen TOCTOU: exclusive per-user/month lock around seal and reopen; calendar “today” / month-ended checks use organisation storage timezone.
  • Compliance cron / weekly average windows: use storage timezone instead of PHP default/new DateTime().
  • Absence business-day gates: “today” for cancel/shorten/substitute rules and vacation allocation reads use storage timezone.
  • Dashboard load-error callout: keeps aria-live="assertive" for screen readers; clock/break buttons guard double-submit client-side.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature1YxfevMESrUM//nCGciUukkJUENnGK1Zx28RQDbamoI4ObbLwsvsf3iXtY8HSWvdXU/CcaaIkhoTz1AgoDrrc9hEuKgB5n+wLwSasEnCOFuEB97+cRXwPFInFhWY8l6At1iKRcfa6CI/dQoGL39p5afqFF9LNwASQj3t72wAGMFUn582kRolB1QoKJH5YisXq3hOUfkRRxmCE1QYV+UPeTvxhLvFZgN62CZC53ZQl7q7xVvPUIszduNjkdzfa3h3phb52+cU0XS5jd1KBXzJPdP+JKAo07X5ctW9w1N1A854M0NViBcm7OsWz91eQTI0Rbbn8AeClAMMX+hD/x5SBLmP1hw5sveGM6aX9W68rAqy7A1215xvAwqRMHHe6Nccd6zLFUvh9Ll2SEA6E3UNbch3IgtlhgnBxhOjZMrVVUjci82Ue0zrIN6MFLI5yCWYQ9c9m9hSfDeqj0X3mjD17uTsba3l0YgnBV6WkoYcwphvDETTEd4QRPw4Yy3nm5cZ9JvWN+XG2wL7xuCw7O9/rQAIjXDlI4FuG577wSjEdTcgiHMeHsB1aA5HKdxMyRth60FhJqEveOxOJ3N9RUQUTpSgzVbJxablgHSt3r4QABIWQahY79VYUDLYXmd05v+PZWAOWUHS6waOIdM8NHRIfvVLq3qR3WVoSftNVN3I1VA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.7
Release Details
UpdatedJuly 18, 2026, 2:08 a.m.
Changelog

Added

  • Auto break setting exposed to clients: the dashboard widget data (and the mobile home dashboard payload built on it) now includes autoBreakCalculation, the personal "automatic ArbZG §4 break insertion" setting, so client apps can explain whether the server may insert breaks automatically.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature3lsfEckilfrV40shkUALmCLcnU3GVW0m3VI/iRg1JxxcpMSBtmCK+OFGPo1fKN3Zz2gTicFaavr/4pfdl8oD2HUCMsRJtzt2URItVhM2cEybhBr3G1p52hQWVoFGBb/1QOKflxFcbSAf7QLvA92Cje+qb8TUjyM5uNKLqEq/jr9y9nEH4afvS2LO8s47+akQn10KnlROcuIb3S6wx7yhNQUFsHnKYdUetzZJgTCxBFFrQ0llfDmFAJhnh1GFypqZ9MPhjbXqQBJ/lB9Unk/pekQqxaMREBY/K0gG7JEhmw6SPWcX5aGU3hmKvFLZB3lfWgt2EH4viQ5c6F/wqkM/fRZqZ4y/0kLHgr0KxMS/iJBTOISyGFxv31yEHQGbrUo6Rfr/8TXFYGuV2f63CyZIEe1s8WDdsGkakm+OnJTLUo1Rxu8s2LbECQJWYpIA/Xn546opsRPFtGFPWAPKJesHjmut1tKUrctx2zJxU30GFOkQ+U+nRrx2HRYGhJze+7OKxXCaW9imtsheFdb2AoPBmj12pN3ZHMWKjR4Um+v7LWKbOKjo7wzNTL85PsVPG8pF3TZa72jqqOZEZH34ayeUiv3n0lmt4aStaB3HYwb1yZOjH1oVZOhKmunDs4+naRLLweixcYyICLpCB6IPHSeByvzFUqxfmCAtaev1arL6FvQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.6
Release Details
UpdatedJuly 18, 2026, 1:33 a.m.
Changelog

Added

  • Mobile home dashboard endpoint: new GET /api/mobile/dashboard returns the full employee home payload (status, vacation entitlement/remaining, week hours, balance) for the proprietary employee mobile app, instead of the lean desklet summary.

Changed

  • Time-tracking status endpoint usable from the mobile app: GET status no longer requires a CSRF token, matching the other read-only mobile endpoints (still requires an authenticated session or app password).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturejIqTDpn3RCL8GdRV6/c46TD79xYOm5/UalYDOBjwkEukzMomLSYYlii5dfXyu+2FaGRqR782SaUf4Wl7TM+i54puPCDo0b97kZe68crptjpNCuNqhGcVg0DF/mYOjDIANClix84oRtzf41Utm38ctMxHCMQ53t2U314oTMRlruIJjpRXa2FJbKKuqa79jxOy6iz/26LBnIiIVF0RXB34qBMaFxy/YzzR4uHVs2uY5wDZUe/hlViFk+YQlwFWWulU+7HHQ2fBhky85qDvx6PyEKH0F6pk0k/6EuWFY++nC2zoYXtVl3biDN9st3lYPPgNWF63fUv+H/fmI6+TqbDTOCEolBMoKJIn3nK0Rs+kHqKoulkgkhYFxr2OzPNRW1Nf3YhRfUmp2QRdWw17pAeYdiivxAMtO1wtv0UXONTfdK0HjXPXkMRlQiTYTXuzyL/ZwsYhqk++4gLCdgsAjeYI+jQOid99iSkxcNkj/4xZPkaWqnoy2ScJZdakCAcsfnkzASOdcCoKIrsKvvam84nrg1wcKVNYpJL5H4W8t/LJmmiZw3GMdV07E7htCfY+6Ky8Gb71FNrlIQmD72HXtGeC11rbxR7D6lzTTRdo40n2YqglNEEmknElFubpYlUoOhqdwy0cCdHhuZbw98B8eFmF+RLfIsfjGWNVnSFrSg8lSuQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.5
Release Details
UpdatedJuly 17, 2026, 11:08 p.m.
Changelog

Changed

  • Vendor public key baked into the app: AZC2 license verification now uses the production Ed25519 vendor public key by default. Customer servers no longer need AZC_VENDOR_PUBLIC_KEY_B64 for real licenses from SbdLicenseOps to verify. The env var remains an optional override (tests / experiments only).
  • Clearer signature-mismatch warning: the admin license page no longer tells admins to configure AZC_VENDOR_PUBLIC_KEY_B64 as the primary fix.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturewFtcvk8BSgYUH7erpstedDBkV2MaKJZrLLW9Co8vzmPtwMccIiEaPN7rasvZJsq53IjE+mDSK+BzwrueIrN0XnCCvONC0R6ywYLYMBhMxZsZDiZrFYlFVMvcBq0I1h5aGBPsiYO8WYqTBN4DnX/xtsFORpTKJ+IVSDTw/tsTE40N+MIA+aCe0HJb3QZHXziYbxvPSAZIe6dI/v0+Lquii1anvf9k4oF+MfIo8a/7DB7jhY02BQ/8by8JG29AG86oL6wg7IShtR9sZlYD6aI+TBAJ7RZebFuqtta68WyRw8FL5rVy0O8DylWOCNFWundttwkUrL3WE8Mv07Rm+TpJbQ4uc0YdoSOfK2KNhx5VK4zO164z6twBJgusMDQzCoBSfsxtal6Zan8ORNvdh0hA/MI9lYnWX7gpJPdf5FGFoUgc7Oi9ASYC6j0TQE7vUr5kC8A2AoMnjahPykVc5x70NEIW8kboeeC0HjKxg7MNXSaCOJ49+7X7GnXate3cOTBem79vC59a2VvHjefomThLIF9ucnWS9zNXwgfxELPyIsCyKdTjM7Wbg8uD9fMhYZVgDlMLaa6Trj5jPayHMoKMHVY+4Rcd+iTWyGuTqsdyPPZbU/qBJCEhZej9uG1A7U0Pyrd9M+X+uoTxqQlBPFj1Y0blKosk7lPl0Buw2LyKK7s=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.4
Release Details
UpdatedJuly 17, 2026, 10:03 p.m.
Changelog

Changed

  • Kiosk admin UX overhaul: clearer three-step flow (find employee → allow access → assign badge/PIN), richer status labels, confirmations, and actionable error messages (including license/slot limits with a link to License administration).

Fixed

  • Kiosk admin APIs required CSRF again: removed NoCSRFRequired from admin JSON endpoints so state-changing kiosk actions are protected like other admin APIs.
  • Race conditions in kiosk pairing, enrollment, and PIN lockout: exclusive locks around terminal pairing, badge enrollment start/scan, and failed-PIN accounting so concurrent requests cannot double-consume license slots or skip lockout.
  • Badge enrollment only on active terminals: enrollment now requires a paired (active) terminal instead of accepting pending/revoked ones.
  • CSV credential import size limit: imports larger than 1 MB are rejected with a clear error instead of loading unbounded input.
  • Sensitive kiosk responses are not cached: pairing codes and one-time PINs are returned with Cache-Control: no-store.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureRYjKQgR7fhhltR+3iZrWtAevXZtgWOm72Sm9yskWQtXfDgcNiy4umdoCjPrr28t9NW+DASahC11vAFpT65cBVz3/uvuHLPlKtmUTDVb0MYX3FBdOnyYCERerVayRuVBosDJyRSylAsdOoHdvdwVZGzj3P7QTtRXgG3ZvKpg5vTUAvg4H20JknLPzrIRFUslZasnpEcgRpG2WCKLVESXcwdLFG0HTJzrZTwsxAYXd+jT5ciaJD1D3WiMZAjcNEzrPwIxk+KsRJLi1Ni1GVVmFvENUflrdXtUWCLTiixzEs6fsS2U1MrtnJ5ZZxGK9iVH48scHpKiJ4lGiXp48d6wnBuINz7JZ2HIrYQrrFCARNCMKW7j+5Gh4B8w+1UD1t1OtVkrrhgGGPOYToj/+dDHBDNedT+pbAQZx3h2GbjSIVY3cdCD4GRwcwxAjSu5sj0pqmXCPr5l1F8v6ClqmRvOAfFvnP+NC9uO+rZELc0MKPwZBy1ezIgCTiXgVgQk83jyI7Tf4UWSgP4biSpVFSVp/fZwNIetxiauxchKsGMHxuRtQbzCklKylhwf2h1pVuR/XfkxwsxEj3JHeUNXGfH9V85FGjW5P6oKeQaA1lvL9rn8/UhZqNC+LynlwFpUxPwbh5HZkkUsFLFGdPBz/uAmCFnFbErvejTYZZcy7xs0sEag=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.3
Release Details
UpdatedJuly 15, 2026, 10:38 a.m.
Changelog

Added

  • Instance-bound AZC2 licenses: license keys can now carry the Nextcloud instance ID and are rejected when applied on a different instance. The stored license state records the bound instance ID and a fingerprint of the applied key (migration 1033). The admin license page shows the instance ID to include when ordering a license.
  • Daily license maintenance job: a new background job re-applies license limits once a day, so expired licenses or reduced seat/terminal quotas take effect overnight instead of only on the next admin interaction.
  • Signature-verification warning in admin UI: if a stored license cannot be verified with the configured vendor public key, the admin page now shows a clear warning callout explaining the mismatch and how to fix it.

Changed

  • Mobile license gate covers the whole mobile API: previously only clock/break POST endpoints returned HTTP 402 without a valid mobile license; now all /api/* mobile requests are gated (bootstrap, kiosk, and admin endpoints excluded), with an explicit LICENSE_REQUIRED error code for clients.
  • Admin license page overhaul: redesigned layout with seat/terminal usage bars, assignment timestamps, and direct purchase/renewal contact actions.

Fixed

  • Kiosk terminal pairing could leak device slots: creating or activating a terminal now reserves the licensed device slot transactionally — if pairing fails midway, the reserved slot is revoked instead of staying occupied.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureXXtpAkga7MSWT0URLIx8lfJZkYdAp/OPaGbSyuv7lb7HoysNfKpK3Da+GcKbi0J1AdJUsSZJl5Q0Repec5Hc/V3cnykiuQn97n4JtNFKljd2oyjbs7YYvBuqGO6qA+wgATsrWijAI7uvVQwytYa5vwA6+lYkeuLgKZ0jbnnwL9YNvrHzzcu/8JWxMnZXHTQS06IvyIvVlPqYAunMgjnMLj6s9sxg7NOHWE8m2WKh2kHsHVHcVK7G2/zEGkXAt4vg9MOe9p3laDtnjue/eVtpc4ynogL/UX4O+X+ulnF7cJfJCR4FCu0meYwMuujgvJ42uS1DeBlICnV4+dIn4rYhxc8V54BMjlhTyeKCLFMAgs0myKVmfHvOElDCkB1Pu8RJcv8cAzG0FAGzOzwXIzapVAzrokquA4zOwQY7fgMYyFSZAuAxHEfQfkuLeZNPP/jhOPgm09N0NdFwGxOhwVEE1MVg0lFPOj+imT2M8kHKVuEyLV3wRFGbVG0Jjivo0NFEVFDI9x4ibnR3ixHTQhX/+XnRmkujPVF9JAHhRZlr+iuS/mWT4s0IkgdPjFprOi9YQH2zC42lqRpJCLx94EMqcTTFdM3y/rxFfDG/YNJgBr5MJSp6K0Krl/wjoBuNne5gzmjGV1PcaR0IpFgI74dXHU20pXtMvALHtD84HibTgMg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.2
Release Details
UpdatedJuly 11, 2026, 7:40 p.m.
Changelog

Added

  • Pre-migration backup before app updates: new BackupBeforeUpdate repair step runs automatically before schema migrations, plus occ arbeitszeitcheck:upgrade-backup for manual exports. Upgrade backups are catalogued with integrity checks and covered by unit/integration tests.

Fixed

  • Manager "Record time for an employee" failed with "Status is required" (#27): shipped in this build (documented for 1.5.1 but missing from the published tarball). Manager-recorded inserts now set status and audit justification before validation runs.
  • Data loss after disable during Nextcloud upgrade: UninstallRepairFlow now distinguishes disable from explicit removal — tables and settings are preserved on disable (including auto-disable during server upgrades); full cleanup runs only on app removal.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureJPP2H7l2IIixMFE7YJqvF+iaZB8L7+/0QAVjcbHaR+qQmRK/KO8lGTe6Jeiw+L4IMCATnqctysA7LzW/vHlSgVGgfmE4/kpi+zM7tGMvqKv+cmA0cTVJQhBRlw0G7g7keeDLScbID1eAIXXsjRJ1xhpyfUGSFYX53x+3dnHZ0GBdDKCfd1z+yp++QiTz1SQuAqjubLUvDTd/6ZugplY96nr8z6IkpsuzEjgcdkvySyFcoJNCJXWZGFkLlD2P0PEANvVR3dwW9Q2FLaqfgGTiJJ2vyL+BkFsCO8jqH/WOfWhw82HZJ4qprYQP2H5lGt1nCGDhojHhhFBOj5DOhlo435QYSWEdfoldqCj1Nsg2uqunul3xSg4cVX0E+K/IUmXCtIxjlIPthkJaVw0G/EPHBLsQzNeByeSuGGBeUQSbZRiXWEZRn3wglPAzGH0XCzMw3vfcNQrzAKns50WdqzDR2Y4mpPgb+6+IeEWWRz2gPQn4/0FGCVKBX2M41ElLgXGzAMiehCRISCJwQboMBhHf7oq4Jb/tHqEf7OYFz1gGaKBrUArZ4bvHF0cUNPq200s1vN7Cm8jJZaMCQtk5VlEDzuwuwrq3RNqlUaPoBLmISp6lW9UYpkpGjg2257meE+D9H6vd3+0uj/0jP/S1+V59E1+Q635m1D03KZqKYt/Z42w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.1
Release Details
UpdatedJune 18, 2026, 1:10 p.m.
Changelog

Behoben

  • Update auf 1.5.0 versetzte die gesamte Instanz in den Wartungsmodus (#24): Die anteilige Urlaubsberechnung aus 1.5.0 fügte VacationAllocationService eine 9. Konstruktor-Abhängigkeit (VacationProrationService) hinzu, doch die Container-Factory in Application.php der veröffentlichten Version übergab weiterhin nur 8 Argumente. Beim occ upgrade löst Nextcloud die Reparaturschritte über den Container auf, der dabei transitiv VacationAllocationService erzeugt — das fehlende Argument verursachte einen ArgumentCountError, brach das Upgrade ab und ließ den Server im Wartungsmodus, bis die App deaktiviert wurde. Die Factory übergibt jetzt alle 9 Abhängigkeiten.

Geändert

  • Das Sicherheitsnetz für die Dependency Injection wurde gehärtet, damit diese Art von Upgrade-Absturz nicht erneut ausgeliefert werden kann. Dies war der zweite ArgumentCountError beim Upgrade (nach 1.4.2); die bisherige Prüfung validierte nur die in info.xml aufgeführten Reparaturschritt-Klassen, sodass eine transitive Abhängigkeit wie VacationAllocationService durchrutschte. Das Release-Gate (scripts/check-repair-step-di.php) hatte zudem einen schlummernden Fehler: Eine falsche Namespace-Pfadauflösung führte dazu, dass die Argument-Anzahl-Prüfung faktisch nie lief. Das Gate wurde neu geschrieben:
  • es löst jetzt jede App-Klasse korrekt zu ihrer Quelldatei auf und
  • prüft die Konstruktor-Argumentanzahl jedes in Application.php registrierten Dienstes (nicht nur der Reparaturschritte) mithilfe des PHP-Tokenizers, sodass mehrzeilige Factories und Constructor Property Promotion exakt berücksichtigt werden.
  • Zwei neue automatisierte Wächter sichern dies ab: ServiceContainerDiRegistrationTest (statisch, reflexionsbasiert, alle registrierten Dienste) und ContainerServiceResolutionIntegrationTest, der alle registrierten Dienste über den echten Nextcloud-Container auflöst — genau jenen Weg, der beim Upgrade fehlschlägt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureu5YINc+PuS8hHrWz7yL/oEqD+JdCNSs2Gbuid0nMbFunQitWqgtsSNMPExv2ORm7Ll14LcjREkHyIRc0lv7px2fEXeIAI2rpvSf8NFAoamhuf4v4z/jY+LxxVyjkhhzWlX//Aar6TjUBLD0xk4MjOophqPY+f8ObHyW4SzSWMuElED0glM385ywWWwfVHbY5UWmzGwZ4qAAmshcE0tt2JZrlSAWXFUuTe/FdUKnUXoDVB9ahcBPitdxmF0UFHdX1+4OjSP8fu5m8KoMlM+qcZp9Nr9xxIiBZ9Ew4wnmhDq4cQqMzaBVMgW7gVv6KtehmP4W/3Hhyrtl5tUOB4cxTpnP1vNW0HMNgrNS2h8xsufOz0czSktu7YRstvcW95RWe9wZjH+pDwysBo05YfZPopBIu1eky+tF1jsvyBk9Z+aB6LnRTZ1qbtPZxK7Ce4QHsKzwTjtx7R/So/VUdSH64vkYI27ODmqn7rSjcmwCVbt4NDU7fog+47zmf6yiuML6GwUUQBdnMc5LpDUaKD+p2QdOzvQvU5ShCG0b63sTwHFBcG1KsTrIrQpG4BSF8wth7Uo58YmQHFX3G3Nk5XE02piwmkiySCTyLfTWd7bEu8AUrg71xJtVwrkXkgUmG+a632wfGZMvHHzv4A4r7pnXpIvKRhzmgGaB8Ap7GYxGXyf0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.0
Release Details
UpdatedJune 16, 2026, 11:37 a.m.
Changelog

Hinzugefügt

  • Anteiliger Urlaub bei unterjährigem Ein-/Austritt (#23): Beschäftigte, die unterjährig ein- oder austreten, erhalten ihren Jahresurlaubsanspruch jetzt anteilig zum tatsächlich beschäftigten Teil des Jahres gekürzt, statt immer die vollen Jahres­tage zu bekommen.
  • Neues optionales Eintrittsdatum und Austrittsdatum je Mitarbeitende unter Mitarbeitende → Bearbeiten. Sind beide leer, erfolgt keine Kürzung (voller Anspruch, unverändertes bisheriges Verhalten).
  • Neue globale Admin-Einstellung Anteiliger Urlaub → Berechnungsmethode: Volle Monate (Zwölftelung, deutscher Standard) — 1/12 je angefangenem Beschäftigungsmonat, ein Bruchteil von mindestens einem halben Tag wird aufgerundet (§ 5 BUrlG); oder Exakte Tage — Jahresanspruch × beschäftigte Tage ÷ Tage des Jahres.
  • Die Anspruchsvorschau im Admin-Bereich und der Erklär-Dialog „Wie wird mein Urlaubsanspruch berechnet?“ für Beschäftigte zeigen den gekürzten Wert mit deutlichem Hinweis, sodass die angezeigte Zahl stets dem nutzbaren Saldo entspricht.
  • Die Kürzung wird zur Nachvollziehbarkeit im Berechnungs-Trace und in historischen Snapshots festgehalten.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature04r3eUzf162DBb4dMPJS7sQivJmQuO0es5mnUkPeRArAB+uCEbjQ3bx9btbltRYiJEug5fBGCVSr6kgEdSF+kmTmsk4hsAnISA4gUix6cFj0aIynbPRlYoq4e2W6IORRT6/U6DtM+YWGZxWKc6pe5/3oZEwk6RzRin3ZPcggwNY19vUaT1gHCxewODk73kf0x6FWLjFrHi0r0GZ+ukGlOt3xcPaGqjdxtcSN0QaeskEd8pFJS6QLVeXL2+IYrc46PrqvvV1Sk07ivqJJWeesmj428W2cdcnyKAgBOB6pjkJBCevoV4PoLfmorojPJl2Qpms0/0TiJGyqV+EaExfWRLPxLFwmdPd6hBdT4s36giR75jOdklf/G1alKrcttNnRLzpjYUxyrUElB9DHKZhdKWiJOAHaHvTe2j3OPPF0gFwxCaDhrlDL8Yc6lBmIxwX6Y+Rer9/e1uhnykn5Ww2jIYqeC+ASqsDiOUhYBLKab42v8xlhK60hMMiZNpo3fIwpQ0/LQ/986VlTSPdjsPhjam+W8ONtqMFnAqRqxonAhMxvkOX0p3Rw4CdL21eQJyzeX+XACQEVENRqk3vQD3xev5y1sEFlcXxk75ogpieOfefiiysRWTHR044qYBpmHmjAn1qwwHf5oqo3fpIMZgTbsMzF7ZCluS09QQPXpE3eZsE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.4.2
Release Details
UpdatedJune 12, 2026, 3:45 p.m.
Changelog

Behoben

  • Fehlgeschlagenes App-Upgrade (1.3.x → 1.4.x): EnsureArbeitszeitCheckSchema war in Application.php nur mit IDBConnection registriert, der Reparaturschritt benötigt aber auch IConfig — das führte zu ArgumentCountError bei occ upgrade / Web-Updater und ließ die App im Zustand „Upgrade erforderlich“ mit fehlender Navigation hängen. Alle Reparaturschritte aus info.xml sind jetzt explizit im Container registriert; RepairStepDiRegistrationTest und erweiterter UpgradeRepairIntegrationTest verhindern ein Wiederauftreten.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureICs/E2o/tBf8TpCMYgReOuPLGeKrhCplYvNCM5kbNkP2HiqQRJpD2qPTc+fu2RgHBDtAdaahVDQfB6VdgqrhRMvFQVzqPTmRdNxjP/TJT6YYGllKwikajxlZVAL/05Duo9AyxWzdsjtM6R4WfUK3WvfMY2Mc7fd1JTmiVpAuX92FujyNmyZSh2NF82R4wU+IZiwK4elYnfxn4At/ebMmLW3wOLh/tfPPSlPGBBjEfmG8XMLf2y3fK+wFG5P2Hfr+NXWSj5xpRmXOF7lVfOFpD3r6/CN+RLy1uN9JWzcnL9SPNCgCTLblCyLDKv475PsGOJl9wXGnP9eFLxpfAAKIY1aspOaaX14XXVWMN4xqyCpKuJbdmalS24vKr85Ln0i1hkad00jLvPcCTOlLRfdogfn0ISYBNd+t8ifSWKEIw0geROiHVpUbGjHlPfizDkqLUw+k5ha0UJfoy826uoE7ewgO11uWR5pQ7y9+nClCrclHi9y6ULf+NYYJlCykzqCMQru4UtbDmmHG8nlBYWQnOo8GqyYhroPkauDbPrdoP36wOrX/xjbnewtttQpYgAHRU8q7I9OJ4Mu8WH0YgUym/AjuKpDkR+74A5HEvwW53X1Bah5660eGr1ZKPjpDdL0sG7UMoNHLzU/Yd/7LSTqqj4Nk4xDa0cEEukq+mVXLvMI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.4.1
Release Details
UpdatedJune 12, 2026, 2:57 p.m.
Changelog

Behoben

  • Datenverlust nach Nextcloud-Upgrade: UninstallDropTables erhält Tabellen und Einstellungen beim Deaktivieren (Durchlauf 1); die vollständige Bereinigung läuft nur beim Entfernen der App (Durchlauf 2). Behebt, dass das automatische Deaktivieren bei Server-Upgrades die Daten löschte, wenn die App wieder aktiviert wurde.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureiQlJrDXH7/uhJKsNav1Z0nd0WyEEeiwHOpwkEyFOxMEmxO+H7/ivVzHztsP8NJ1REWySBC7mN+WM8LcQxbVYgCY6hBWff6Bbv3BJgQLAkuqUc6onwZ2tAzaiuR/S0HMEPnCQjAcDWc6Jt7zdt6FjWgXQa35VP9/Mpui149Am3qwy5uhqLJeTo5qlKwMELHiG5Xyz+/9kUVgrk2QhfmK56LonLcDRhXIwyoi55nmwizFKFSvJ9zjWVhc3MIl+dXAxg5ZbSLrLmvnoJsDIEJDlh752mlm4Fx8+gX294Kc6WBg/nUIMWggoKJCHZI3pJ45GRxewYJsZs3viwR3k5rxtLwyZu+McnO2wz8RTC5KZdw6svEUpAORNxbnbAuqlJOqbSppJjlGW8jIKopLWwg55vo2hsf3ZaAuhsWy5/afb/b9+TFvlzSJmptWScz4R5sIvdLWnisas7ayRWO4xXi89VrTukwGLzbjXJIhHGp+U61/5uLu4A3PradgnP+qtg2zps927MDjgdEjBYjWw7MXrVds42/rXBRtN2VPnj7ou9cuFJNkFf/GfBaWRU47AxaXlEWz8nUTEfBnQZb0ugRuSRkqtWYMpYVv8A56EyjJABdpLyUjRu7MwSQN1PRBCIiMZMK+9BLeK4sgTzS2FOLtue76A9jbqUafuiNnGAsdd+nI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.3.24
Release Details
UpdatedJune 4, 2026, 12:41 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureHbMR9UYH9j0V1gE6aOqBkwUMuN6o6kdufKydH4mwQE3Kkl4OsIunVe3qBvy0qHcQgKMU2VI87UawAcuL5FjsiHj8cqZfuFNSmlMVIb/ipKM1xxLZ5I9jBcadE/Xf4FJa4c8oQgfgQGAT9liys3fevhk/Vh04pyRC/A+rWv79OlT0TWyCZVSP05rbYDgve92qBlJIGWk9BRKlaTJ2C6mWD1zyuJjEi7DVrO03VN9MVVxHw7nhFJrFNitX6xrY9hWTtanmxDYNO7xtqtDPsElNxLWFZgUdRGhim3W0FdVQMii6mhOsKbj4hFwB7pk1IDjq9FRYHrgAllU24eAb7yVhMj9zRvBhuLIgYDReXWnHBZ9bjz+TT5np/Ru294OsSl7dp6Xoci7uN2HajMxJ9GzMRBxMqEfKfiXFLLD/yEk0Qx+1PLr985Y764Fssoa6I1bGrmTo04/+Qt1AC8LG5KkmeZfK4MA6awsOT45OKqkFQ6rihpobJvIReD4alazxjk/ova4+xBSJnu/+jO4yWyVlL56AleYdr1a7E4WGEAP9nzLWFX/BzFaQXY07vFjFgvHljXp0ByVsy8ceIjzZ76JyvkbrPC35P9qv3D8O4PrkyhP8lRik0KnJ5kajw5e/p9QqC9t0musDmpKLqpyh9UbPVhZJWE4bfp1RMenzh8mlktA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.23
Release Details
UpdatedJune 4, 2026, 9:10 a.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureqTDcyBckDVqDxwWcqy6hLGMqmhVWsDm5t5ByJta0x1UHMYhEgratJP60v/Qfpb7eExVk7ZbMArGlodQIgRQrWFFVbHPPwnaPscmBHMmoM5VqlXwtkKIbbgmfqxqV5lLkPA1nrEiBJOYUUgxG2tuMp9BHWdA3f2XsoQ2x/UKlSwu1+82ax6sHc8EvQWr+eUnmtKR7IjkTuaYJEHnaHgN3uN6XioPtJMiX1OL/bfkeiAT9sD5bK7bTaL83nCuzTejGFWYg2SSz4tElLPDe848g9xhlsgg1jwIFzz5HKrtVNq+EkhQru62HCjzejRGLN6l7+Z6hGhkHlXhGAckAnI7v1i85l9DJ092+2SLTMQ1vg5o1iW8x4JRn0/6RmePqQCV8WElog/FkTl4BlNA8CKjgzUo301AEjKqKtOt8b/uKlvQmx65vla3G9SEZ88MUbwH9jaNcTVKeubVokBAs278qDncfNR6Jkz1L4dK6v9haFNx37dSy4g6Hnavwr6znnDEK0P38j9fzuxjfqefzeeHPwe7jHQP/I0pwJvpsMML265HLTUPHlnxh5hHXXp86zv9fjY4TBk26AzyQ/uPvYD1GZ9XLruw31Ua8276G+qbmNsNY/2ntydR3Gi9PSWDBNAOGddHRrGUc8UPpbnlMdqWCtGDEAg/vlEpQ1dOvDqr/MJw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.21
Release Details
UpdatedJune 3, 2026, 10:12 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturexwZuRuE7q6Pvz49TbD4EbtW+5pAzncGRYelTeZOhoBETF8Gytm0lR3DWP2Bl9edR5m6fpo8FNav8LM0lL1eg+2DlvSQ1RCKxuFANOAjTdgc/sAJVnSEHPKz7Mh5jl5T7wxz243YjN9CdzsekXTxKs8wSMqHkbQX3/SUzT5vvlwzGXJCh0Ir6zzgq5RGY1rSOL8tfvKFSvAWnKEFi53mE0xqjpyStT6399Q4e4pVmJbmvWDG7uzjb99JtVWrEhT8BWK8O9y6Ynho7sXNiim+rEi3D9ZrqoKSC/CSv+kyYr97j9V8/W0EhMAp6RYyD5zbuEykyPmKSKvEq0dfgu6tpTTbLFatHfKSqExkulaJd1p0CPmpzwB5gbU9o8/a+yuJkNxfGp1KJTbmmALLHuyiiv1kxwrDiCpHYf1FDOrAVofXIX2ADeuVtS8oQOCZ3rh02IuuEIa4IMEGRyWA3gQBdfhzhG0aBSNIo/RFd87wL3jvcE+NiuLVRAYBMlX2OwryoF831KKMnu1ja+l+tSx5yx5srhAO8LI/0zJo3c0AtdzlbDIpOwSEDa8CqepZuK7bk7S0O5fW+G4KilO4ZXZubGD5TKK3ZUkMD1kvtWEotPyxHp8aJd805RxyxYGl2YGGmKjnGOitob1O+V8bl/phnThtasczeE+saiOoqXVeeVd8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.20
Release Details
UpdatedJune 3, 2026, 9:31 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturegeMFAGBU3RbCnVfsYVqpdfDm4WygcEkjnK5Jg1u6auf+NCYR/TDRWQVnuh+wVsyVpJHmw58G2oUPy/D+eTh+pEwzUVeut23+vPhW00jAoHHxXVkTSGXuAZlG9f1cRR0KDc4ClcsgiECSSvpauVs2Nuq2dlkrg39wf1WIRpuEXagIRoErKmz/AOJEJNWN3j2j4Vp69EMtlDZSgMovnGJ28H6wKDmjQFrmWO0e4g1UoAGSmxAcQE+agRKQjoefMiqws2AZh9uPrJSZQK4hW+L8X0sGp/yOtlmebo7PAzMC9KphJnKlsmf74d88G5tZfjwmGlb0Ptu0XicNNPizPQNBZo2ohQYIsSx4ZWWFRf4O9o4JDrHP6sOpOZWbmr/DJp9wQ5brkcYdiP2dzYaSvj623iYO2Vndyqn6OgMmCNjeFS0Ksz0aFwo93XukZtqtjGAH8yeuV+xee09dQy57lG+9rK4lR+gjkxE9G1u8z0mSWr16ysMdJVq1brmE896xqL+kaQ+jZ3eW5OiqfUDp97nzwAmq7DbTaSMO13hrTuPbI9aNwvCMsmIyz4U1L3bifavS0+VgJoRu1glxBdH+lL9K59q+t6aFF8a9UDbYDgvfnm4Kj6RnGSKKeHSycUw7slHb9U9cM8sgKcR3HE8EIuJMdm6KTri+edRup7EOJDU/M94=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.10
Release Details
UpdatedMay 30, 2026, 6:12 a.m.
Changelog

Behoben

  • Kalender-Tagesdetails-Panel (#11): Seitenleiste beginnt unter der Nextcloud-Kopfzeile (Schließen-Button nicht mehr unter dem Profilmenü); Kalender und App-Navigation bleiben sichtbar; Tagwechsel ohne Schließen; schließen per X, Escape oder Klick außerhalb; live gemessener Header-Offset; Vitest in js/calendar-day-panel.test.js.

Geändert

  • Overlay-Tokens (--azc-overlay-top / --azc-overlay-height) für feste Panels und mobile Navigation; theme-sichere Dashboard-Callouts (WCAG-2.1-AA-Kontrast).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturepKOZDEKgte4hRCu2ujFlEugriqikEtGVDOTn//KioVz1qzKO4EWSK4sAzG4fpacAYckdh+cAV7mPbCu/4e/NSD6SqSJ6R3q4N1iiW1952XV4pJsKIF7UrYysYrUtYj+qt9MjQL99ehcqNa4/Gd0qf9wLjO9n6/U5n5ySx+trjwJwxdsfKIuHxTlhzKYkXx6jqZPHG5i3uHH4RYBfCZ9iT35aPKrYJlrSmVVxlFlh6yelwOkDHk0aWJIPtQku/FUW5zLW67k72BAswov1DpOvfkM5QOJQPdKjwhZB+lElosw+SWqCyNffGJYuWUzQVxGAFTEqQgQ9wQx5QFf4PQsr5ExKYeMm4RbpJph2UTqcpGiVInjCFi2vFZs1En2XpHKC/DaSwNNohsJI2pDcwoeohO0GeJSQ8WAOAgsdwLzXGd4PriQZL2u8t+TqMxeQfDZIVymN6jwdIaJPGc1Jvvi8SOFsEagVG/YpvJ0FNR+tBr7cwt4GSaqD05jcldAb9CSkfR9ZlEzGY6wcT3b6Mez/wnzvjs4bytzhW25xtlzBVc6vkkQUQsrCeBPOKe+g29SXIxIXmrmBCWiuxnhydg6XddXQMTZbCVYmMOcgSn7VtR1gs/FAifzsSKh09E6TypRMM3a9XFXMln2N7Sm/QRsh+6SJwF/zq2f+JX6cyv3L7w0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.9
Release Details
UpdatedMay 25, 2026, 8 p.m.
Changelog

Neu

  • Einheitliches Layout-System: css/common/page-patterns.css mit .azc-page-stack, .azc-shell--wide / --minimal, gemeinsame Filter-Grid- und Empty-/Loading-Muster; shellWidth auf der Seiten-Shell (auto-breit für Dashboards, Admin-Tabellen, Manager-Listen).
  • Gemeinsames Filter-Panel (templates/common/azc-filter-panel.php) sowie Admin App-Teams-Callouts, wenn use_app_teams deaktiviert ist.
  • Dialog-API: ArbeitszeitCheckComponents.openDialog(); Modale setzen inert auf Navigation/Hauptinhalt statt aria-hidden auf #app-content (Live-Regionen bleiben verfügbar).
  • AzcApi.isApiSuccess() für konsistente JSON-Erfolgsprüfungen.
  • E2E: layout-smoke.spec.js, a11y-smoke.spec.js (@axe-core/playwright, WCAG 2.1 AA).
  • Vitest: js/common/components.test.js (Focus-Trap / aria-hidden / Typed-Confirm-Label) und Abdeckung für isConfirmAccepted in utils.test.js.

Geändert

  • Alle Routen-Seiten sind in .azc-page-stack gewrapped; Legacy-.section-Chrome wird in der App-Shell zurückgesetzt; .btn ist Alias auf .azc-btn-Styling unter #app-content.azc-app.
  • Admin-Teams-Seite nutzt die volle Seiten-Shell (buildAdminShellParams); die Navigation bietet einen einzigen Skip-Link in die App-Nav.
  • Persönliche Einstellungen und SettingsController laden Assets nur noch über FrontEndAssetService::registerCore().
  • tests/WORKFLOW_ROLE_MATRIX.md: Manager-Rolle erfordert App-Teams; /reports ist Manager/Admin only.

Behoben

  • ArbZG §3 Höchstarbeitszeit & Auto-Clock-Out (Nacht-/Schichtarbeit): Live-Sessions, Clock-In, Compliance-Prüfungen, manuelle Einträge, automatische Pausen und Pausen-Erinnerungen nutzen einheitlich DailyWorkingHoursCalculator (Kalendertag-Clipping bei Mitternacht). Behebt falsche automatische Ausstempelung kurz nach Mitternacht. Frontend stempelt nur noch automatisch aus, wenn at_daily_maximum=true (keine reine Client-Extrapolation). Nutzer-Stats sowie Manager-Wochen/Monatssummen verwenden getWorkingHoursForPeriod() (gleicher Rechner). Compliance „Überschreitung der Tageshöchstarbeitszeit“ verwendet findAllCalendarDaysExceedingMaximum() (keine Fehl-Verstöße für legale 22:00–08:00-Zeilen). E2E: overnight-daily-maximum.spec.js.
  • API-Compliance-Gate: blockingIssuesForCompletedEntry() + Vor-Speichern-Prüfung in apiStore / update / store — ArbZG-§4-Pausenregeln blocken ungültige manuelle Einträge serverseitig (Strict-Modus mit zusätzlichen Prüfungen ohne vorzeitige Verstoßschreibung).
  • Clock-Status-API (ArbZG Kalendertag): at_daily_maximum und session_hours_on_calendar_today werden immer zurückgegeben (auch nach Ausstempeln), damit Clients Clock-In ohne aktive Session blocken können; Overnight-E2E prüft den Vertrag.
  • Admin-Mitarbeitende-Seite: Pagination-Label nutzt {shown} / {total}-Platzhalter und TemplateL10n für den JS-Export — behebt Internal Server Error.
  • Mitarbeiter-Abwesenheitsantragsformular: azc-card-Layout, sichtbarer Seitentitel, Workflow-Callouts (Auto-Approve vs. Manager-/Vertretungspfad), Fieldsets für Antragsdaten und Vertretung, parallele Datumsfelder, klarere optional/pflicht-Labels, azc-btn-Aktionen.
  • Zeiteintrag erstellen/bearbeiten: Page-Shell + Assets via TimeEntryController; Zeitzonen- und Genehmigungs-Callouts; azc-card mit Fieldsets (Datum/Uhrzeit, Pausen, Notiz); ausgerichtete Pausen-Matrix-Labels; dynamische Pausen synchron zur PHP-Barrierefreiheit; responsives Fieldset-Layout (WCAG 2.1 AA).
  • Abwesenheits-Routen (erstellen/bearbeiten/anzeigen): AbsenceController nutzt PageShellTrait + Form-Assets; Fehler werden in der Listen-Seite mit sichtbarem Callout gerendert.
  • Navigation-Flags: zentralisiert in NavigationFlagsService + NavigationFlagsTrait (alle Page-Controller inkl. Manager, Vertretung, Compliance); Compliance-Seiten nutzen forComplianceUser() (Vertretungs-Nav verborgen).
  • Kalender Abwesenheitsanzeigen: Monats/Wochen-Zellen zeigen lesbare Chips (Typ + Status + getöntes Icon), Wochenansicht zeigt Abwesenheiten, Tagespanel listet Status, Legende, forced-colors und Themen-sicherer Kontrast.
  • Manager Monatsabschluss-PDF: refaktoriert zu azc-card-Schritt-Wizard mit nummerierten Schritten und Standardbreite.
  • Manager-Abwesenheiten & Zeiteinträge / Manager-Dashboard / Admin-Feiertage / Admin-Urlaubslayer / Mitarbeiter-Zeiteinträge-Liste: durchgängig auf azc-page-stack + azc-card + gemeinsames Filter-Grid + zentriertes Standardbreite-Shell migriert.
  • Dashboard Überstundensaldo: negative und positive Salden auf getönten Pills mit Haupttext (statt direkter --color-error / --color-success), damit Werte in allen Nextcloud-Themes lesbar bleiben (WCAG-Kontrast).
  • Einheitliche Datentabellen: page-patterns.css definiert ein einziges Tabellen-System unter #app-content.azc-app (.table-container + .table.table--hover, Aktions-Spalten, Empty-/Loading-Zellen); TableConventionTest sichert die Konvention.
  • Audit-Pass (Workflows / a11y / Sicherheit): l10n für App-Teams-Callouts (en/de); Admin-Teams volle Shell; Arbeitszeitmodell löschen fail-closed mit getipptem DELETE; Kalender-Tagespanel mit inert + Focus-Trap + Escape; Admin-Einstellungen mit azc-callout-Fehlern; Manager-Dashboard-Fehlerpfad inkl. Team-Modus-URLs.
  • Breadcrumb-Trail: vereinfachtes Shell-Markup und scoped Styles — Pfad liest sich als eine Zeile (Primärlink, gedämpfte Sektion, fette aktuelle Seite) mit CSS-/-Trennern.
  • Compliance-Dashboard-Karten: Status- und Verstoßblöcke auf azc-card Header/Body migriert (Titel + Hilfe links, Aktionen rechts).
  • Admin-Dashboard-Layout: Styles greifen jetzt korrekt auf azc-app--admin-dashboard; zusätzliches .section-Padding entfernt; azc-callout-Warnbanner, Stat-Karten-Grid, Issue-Block in azc-card.
  • Confirm-Dialog Typed Phrase (Client): enthält das übersetzte Label nach t() noch %s (Test-Stubs / fehlende Substitution), wird die angeforderte Phrase (DELETE, REMOVE, …) angewandt — destruktive Prompts ohne rohen Platzhalter.
  • GDPR-Löschen-UX: ohne confirmDialog gibt es eine assertive Fehlermeldung statt stillem Scheitern; gemeinsame isConfirmAccepted / confirmDialogReason-Helfer.
  • Fail-closed destruktive Bestätigungen: Utils.confirmDestructiveAction() blockt Monatsabschluss/Wieder­öffnen, Korrekturen-Rückzug und Überstundenauszahlung (Einzel/Bulk), wenn die Dialog-API fehlt oder der Nutzer abbricht — kein stilles Durchwinken (audit-kritisch). Alle Admin-Löschpfade (Feiertage, Teams, Urlaubslayer, Tarif retire) nutzen den gleichen Helfer.
  • Monatsabschluss-Lock-Hinweis (W7): gemeinsames templates/common/month-closure-lock.php mit Schloss-Icon auf Zeiteinträgen, wenn der gewählte Monat finalisiert ist.
  • Einstellungen-UX: Sektionen mit azc-card-Abständen und azc-btn-Controls.
  • Vertretungsanträge-Seite: doppelter <h1> und Waisenkind-</div> entfernt; Styles auf .azc-app--substitution-requests umgestellt; Empty-State mit azc-empty-state.
  • Dashboard Clock Double-Submit (W11): setLoadingState() setzt aria-busy="true" auf Clock-/Pause-Buttons während API-Calls (mit Disabled-Zustand und Loading-Label).
  • Reports DATEV-Auffindbarkeit (W23): Admins sehen unter dem Dateiformat einen Hinweis auf Globale Einstellungen → Exporte und Berichtswesen (CSV/JSON bleiben auf dieser Seite).
  • Admin-Benachrichtigungen (W13): sticky Save-Footer, beforeunload bei ungespeicherten Änderungen und aria-busy während des Speicherns.
  • GDPR-Datenlöschung speichert nun den vom Nutzer angegebenen Grund: GdprController::delete() liest den reason-Parameter aus dem destruktiven Confirm-Dialog (js/settings.js schickt ihn bereits), trimmt/clampt auf 500 Zeichen und schreibt ihn in den gdpr_data_deletion_request-Audit-Log-Eintrag neben IP/User-Agent. Aufbewahrungsfristen unverändert.
  • Tarif-Regelsätze schreiben jetzt eine vollständige Audit-Spur: AdminController::createTariffRuleSet/updateTariffRuleSet/activateTariffRuleSet/retireTariffRuleSet/deleteTariffRuleSet schreiben strukturierte tariff_rule_set_*-Einträge mit alten/neuen Snapshots (Code, Version, Jurisdiktion, Status, Aktivierungsmodus, Gültigkeitsfenster, Modulliste).
  • Admin-Autorisierung antwortet API/AJAX-Aufrufern jetzt mit JSON: AppAdminMiddleware liefert keine HTML-403 mehr für fetch/XHR oder /api/...-Pfade. AJAX-Consumer erhalten { ok: false, error: { code: 'admin_required' } } mit HTTP 403; Browser-Page-Loads weiterhin das Standard-core/403-Template.
  • Einzige Quelle für Frontend-Assets: doppelte CSS/JS-Liste aus Application::boot() entfernt — jeder Seiten-Entry läuft über FrontEndAssetService::register{Core,Page}() (inkl. app-vanilla.css, das nun von css/app.css importiert wird). Beendet Ladereihenfolge-Überraschungen.
  • E2E-Urlaubs-Seed (ensure-e2e-vacation): UserVacationPolicyAssignment initialisiert vacation_mode nicht mehr vor, damit INSERT die Spalte immer persistiert (behebt SQL 1364 auf strikter MariaDB).
  • E2E-Clock-Seed (ensure-e2e-clock): Dev/CI-only OCC-Command für e2e_*-Nutzer leert aktive Sessions und backdatet den letzten abgeschlossenen Eintrag, wenn ArbZG-§5-Ruhezeit Playwright-Clock-In blockieren würde; in run-e2e-docker.sh verdrahtet.
  • Audit-Härtungs-Folgepass: Manager-Dashboard (unbalancierte Klammer bei „Payout eligible: %s h“ behoben), Admin-Mitarbeitende (auMsg() statt undefinierter t()), Icon-Katalog (doppelter calendar-off-Eintrag entfernt), Stylesheets (clip-path: inset(50%) statt clip: rect(...), korrekte border-color-Reihenfolge auf .inline-notice--warning/--info, leere Block-Kommentare entfernt).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature2C4hs5Nkh/isdBTEdvZY3ot9kpByYyhztPuFF1szdNDnGW2VL4wnIo2CTjNogi5kdF8hsOuunKu+l2j9gqbb3Rg0dIUKN0pg+LGN/0k0PmHqPko7R6Qbau/bfqFPBZXBx9g/nVQ1IG+3Nm71r/V8LBBFA2cHD3SpRz4A+98ah+3Y3K62zKc+oa0SnqWQUB/97WR4rGNf8oatUerQl4iPg68AdIavnH5tZerU3up1gVNbwjyMSomopWbJvyBsSemhauUGAEx6tw4dbM8KZ1QkVHWzm/RD0s4gM8B+OE2ZOuThKkVc36TNbFNwwPJc/hzbS7P3RHfjaecHUODJiPAFhGFquhb/pvMmzReC6HoTrQLYg82VDOZmcvCjsMWvKPPu345ouqeif8MtJe0lJlTLXxvPxOFMbqLIthiZ1bbxUdiceLQ08JabJ0fxxCObBPilimywPUetparMm2am6+3Rrkbyme+Z5XhuDiscczNIAoO23aoFMY2UsJBH1GpuNgTKB5MG/r9ygKHn2Hsec0m/ziwqEuYvFcGzoZsUYH5uZeeVh5RzulicF36k88Tb/i8zIlrYyjU+w6xixr4Vg12lFQW6jIyPrdmnF1wNFTjaZOU9SBjR5EjrgNoow6ld5ncVdopMLH5Jrrmm9ts3oSV4IEbcEztxrjcMV9aTCbbwGrk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.8
Release Details
UpdatedMay 20, 2026, 2:54 p.m.
Changelog

Behoben (Audit-Härtung)

  • Neues Konto + Stichtag: Stichtag wird beim Klick auf „Erstellen“ zuverlässig erfasst; OCS-Hook nur noch für POST …/cloud/users ohne Unterpfad.
  • Manager-Korrektur: data-entry-summary mit JSON-Hex-Encoding; Anzeige-Zeiten; leere Uhrzeit = --.
  • Überstunden: Zukünftiger Stichtag erzeugt keinen fiktiven Minus-Saldo im aktuellen Zeitraum.
  • Eröffnungssaldo-Jahr: Server prüft exakt vier Ziffern (2000–2100); Client validiert vor dem Speichern.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureZ0q4sUnNdtEyv8lxCK1Rm/0xEeKazqwJeSURzbpe1ZgbL09P25KESZpPKZH0ynjwPzFPIkQO8wLTSZSXRs/9/M5I2jnuSZkzBBEZI/Lzfy1O9MK75v0aK+v8kItGR+o+pkb6zXEyxTeVhOsvXqDBeBG4oY32ODpRiOONCrJ3AXU0a+ZSnSCGWF1aU6oBwXl84Go+sq+t+ftXxzCjpmpBLfHqP/3in8oVTM/OkTJv+noOYUKeNDz33sQes1Iw+aufs+vOUdEQqLV2jI8Kxcl5E7uwCMO3ChguaIdqeiDN692nF7lF9Kr5BVS9HmueOXwVQPGxOINSTcYNtSPrCcXbHfuWgUBZxSXejwsQOix0FsIIWgu/6j7ajNeZ7bQpt6hOtpC/Bdkk6SOELcG/0wumofrGUYUSRGFYzxV986X+npvdukna/1rIp5+wuN6mft+g37N31iEdfH6lf1B0VLkVSoX3nhkNq/O5suuRRMnN4GgRmduGU44FtrRSVv7wlOJevgwEOuWbkEryrbnkHL821YhIsop/8+WX5H9ZBDu3IcSLc2FFv9fAfpIa3UnKTXvjAvC2Qiuo1kb8t1q5q69tYTYX9HsS4Zd9/JvKn6ICtwvfFuFpDLCyTWC0pczjkV2NWQaxkp2RC9X5Qsl5U6CZUQqnB59cGOxOyV6d2Q79hOg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.7
Release Details
UpdatedMay 20, 2026, 7:44 a.m.
Changelog

Behoben

  • Aktivierung / Migration auf Oracle-kompatiblen Nextcloud-Datenbanken (30-Zeichen-Grenze für physische Tabellennamen): Die Tabelle für den Überstunden-Eröffnungssaldo heißt nun at_user_ot_year_bal (Migration 1025); Migration 1026 benennt die frühere at_user_overtime_year_balance auf bestehenden Instanzen per RENAME um (inkl. PostgreSQL-Sequenz-Anpassung). Es werden keine Nutzerdaten kopiert oder gelöscht; eine leere Zieltabelle von fehlgeschlagenen Vorversuchen wird wie bei ProjectCheck nur bei Bedarf entfernt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureB7PdTU3mqJ/98cpYZ0TnDGDCx+oZCtqWFxHCQic9SB4UoVrwJa59UptjIY/ZxA5T9SiPtcSl2E6sAnoGQWzdbM3wLfnmUu3TA36AjK5xtrBOV3z8VNJeNdVHhay0EYnFXFZpTx2JzYMQH8zW0JgZey7olRodmWcqj9jcjgaqyWeERYkBYiAtgPaMrfR0++JHqTCCT+xHJZc+H8FPL8SeKUEwsNq+hnpCD8UH30XTdvDhLQ+ZV1GXdsfpd5/RsLtR3tTk9TTCIsT7SlU97g8js2DwWHOO9w7bCDWlh+gMm33IcNqrEZQtAn+nT3uWK8haxVCPlaB5kyJJm+kMP9OfvoN1H0dEiioN4muHr5pHgTGR+KaGjPKeJ47epzRD6cvRSsjwrcQVlKlQcCTXWdBf2N4ERAqnr23/jAxuto6xYTToRq1evOLLgMhkq/4zFP/uB8h5dnqKXiOg3HwNQBW2EmnLWxiTG9uSkfCbKsupQ+YPGOwK8Xj/mtU/HmsWecl8izqjcTHSkTm0tO7ehN+8ME2LSzTUrnIYyLcpkaJqkOouFFAEBG/ZNXonDjiu33oVWjOrsJdWq5Wr7vYlI1B8TxKI+ovgfdgLqn72Hb50xYgnVfSjX93zW3cwXEX82yeu+KL90OcGtJCSMsLlQd6hq48Q2KXHMdHml78r7bgWmO0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.6
Release Details
UpdatedMay 19, 2026, 4:17 p.m.
Changelog

Neu

  • Manager: Mitarbeiter-Zeiteinträge & Abwesenheiten — barrierefreie Filterleiste (templates/manager-time-entries.php, manager-absences.php, css/manager-time-entries.css, js/manager-time-entries.js, js/manager-absences.js): zweizeiliges CSS-Grid mit ausgerichteten Beschriftungen/Steuerelementen, WCAG-2.1-AA-Muster, clientseitige Datumsvalidierung und maximal 365 Tage Zeitraum (Browser + Listen-APIs in ManagerController).
  • Manager-Korrekturdialog auf Mitarbeiter-Zeiteinträgen (js/manager-correction-dialog.js, js/common/time-entry-clock-form.js, lib/Support/TimeEntryClockPayloadBuilder.php): europäisches Datum + Uhrzeit-Matrix, optionale Pausen, serverseitiger Payload-Builder mit Unit-Tests.
  • TemplateL10n + templates/common/manager-employee-list-l10n.php: sichere serverseitige JS-Übersetzungen (ein json_encode aus Plain-Strings) — behebt Internal Server Error durch json_encode($l->t('…%d…')) ohne vsprintf-Argumente.

Behoben

  • Absturz der Seite „Mitarbeiter-Zeiteinträge“ (ValueError in L10NString / vsprintf) beim Laden der Manager-Listen-L10n.
  • Kleinere Anpassungen an Compliance-Verstößen, Admin-Dashboard und Benutzerhandbuch in diesem Release-Zug.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature0Ac+p2TednXZOZygWTS03vqEgTpCHvYmjHTVXsUhKOnCwFQQS6qZS5ss2QJ1tfJHH/17mGB+b54zhzIC69ZSn1ka8V97iYTAyoY0I9iQCla2zAlV5JlieuIJ2vjDbzJxetzUvrFsdPibiR6Ug5lq5roWpWMLASNeJ5PKFkKGXQmmRRt2xVYg3XbTB6ScDFGtAjLgIi9/zLGICX/CQl3wi0GEXewNpHnZaN5yVNL6R3h3Ez1wYUhXosUUQRtPKfEGD/ot+lwQGluoFT9B/cKPPjexl0h6vNrNEdXt6JkSi0fjFwyr/VO+emMtdT9ofsnP3EronfWHeciqk5bRXjOoZ1mNEXcwnO5FzYayJ9IPAyl+NWJ39I22R31aYYE+z67QK3TkunuLKFZ+/wzPFeNFQxTO2PlID+UEYl73hm6Xoc5qyGBAAMqKKTlF6sv7bKJA7DZnxnMtkXx065wpNJhb7IjgfXkaYFHfzaPT+fTAUEWnAobERx+2e+gzH0EIONKtacZkSX/+V2fgyKCzsw8iW6VwXVpK/0q0jY0WrM4koSenTCqb3Ppt/u4/YIeKyZQKE2di03fEMukpGER4kJAbaVINSkmhiFvSSaBkHOjn3Kdnaxq+4Wjw9Aiyw7CA0Yo1owrM/URzpfkH+928j1eDIgM1ZHMyd8PF7+R3MQoCjis=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.3
Release Details
UpdatedMay 18, 2026, 8:04 p.m.
Changelog

Behoben

  • completePausedEntry() erhält eine vorhandene end_time bei Legacy-Zeilen im Status paused, die bereits einen eingefrorenen Endzeitstempel tragen (Status/end_time-Inkonsistenz). Ohne diese Absicherung hätte der Service lohnrelevante Stunden mit updated_at überschreiben können.
  • RepairOrphanedPausedEntries setzt bei reiner Status-Korrektur (pausedcompleted bei vorhandener end_time) jetzt auch ended_reason und policy_applied, damit Upgrade-Reparaturen audit-konsistent zu den übrigen Schritten bleiben.

Tests

  • Neu: testCompletePausedEntryPreservesExistingEndTime.
  • 568 Unit-Tests grün.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature0pwv2HKTd56i96aLU9V8qR6lOzimwWXhqhWSc7Qg66mq6YUrCmPIbXYISOwPTJfjpw5M4FhZycmTA2lgG3EAA98ZSBJFnAF1jP7448eX2A5fcEuTpTjFHq0tbvnMjTGAsnV7WNRBnstL/z7SRJSxatvVA/LDs2WLaCxNzVGw/DT25ls7JR17YiNBhzNDVksC6u1AHmZeqx6Jlpo4H4Oi3JQ1cQ4kigPSVi9Hae5kUmZ0jDG77OACeg9ZbtwWpxQllxALQE+WjKUmniFpLFrVea3ngGelh3ef/MP5SexBsuijZF8rIbeTxgg4qdYI+6nwQ9t2rHM5kMAtPgIiWjdsD39cNlPM/y+dQJDHzxddyVpXuWw+pSlLBxMadjPS17X83FksWfvtNATwe64641Ba5F4vTJEQdBclnTXCgwA02ioR59YVQ3c/N8HymdZD3Zy6CGOzGyYvEtlF15YsXCh2PB8Xxa0VeBQSnKASq/LIPhguuuea2S7b3vNkGbOjRvrGhkdlZFT/bVkmh7AYkZ5tZbSACA1lw6WteOtNK5+LP64KLw6B+lZB2Xhn3ZRl3QnYrG6B5FerUryhEnKDK6Or1Z/rlcNhS5uvTCxDeK58PasFbCeiUa4SVg5tZgrUTDy6FjiQ53T4DVGImGcI7vy528e5DHpGSaafPJksvP6LicQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.2
Release Details
UpdatedMay 18, 2026, 5:57 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturerFfQ5Jz3WAqqDDfkSEHAKs0JHmFWSpAAH9qaRFyTjE7CLFTbm5X2pvNh71mEop6b3wvS6upZ3N3RqOPn9R2SB+yGXR5JRkVRX0GGJkIt7cdmQcRDmdLuf+NIWYLguBJsMG9PRLxq7ydIvg07mRMLbbGMeG8baD6rILAN56wApr+QfU6qD2H0p6axB6N7O14ndLARJcUOA2E8QZf+vpFXohC3aXDkIENOjWJDK+MmG48NkGuo6/iTLekWHk+0KRyQrCYmQ5JwVG7MVsFhEh2bhUd+hchqcBJQSUWJufl36z2Mtk4N5/dsIOpjkVzKWLm3yZlaSyefTaZA+is4Qj8d6izsACq6zCt0IrU32EH41Yz9LqPKH2l2QTYgiy70RrFuVA5UO8SmuuGlP1vyzduQ7So28hksbT8N4wsTLEEk09BSCYkqhz4HFAfyvBVE4bTEl/cQe76gnQDnB3eOAyKQX2xDW1Xl9tv4MYQGPijJVL8dVt4FheTPfBb3RVe+Hjr5JZNd8Tx+6Nc2Ku1MYOElgQoF/2dWiXGQW12/WjJnMDH08GTmzUmjkAkOUQyFngwOiSuE04scny5ND3eAtxGwX7Tg582mcpjaEXTgdQMaGtulFv1UZVtR7Iq7B8b5FjUw75kx6dTIcthN+ssihaSaB5iYQw800bPsrojyNKwH9zc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.8
Release Details
UpdatedMay 4, 2026, 2:38 p.m.
Changelog

Sicherheit

  • CSRF-Schutz auf allen mutierenden Endpunkten: #[NoCSRFRequired] wurde auf POST/PUT/DELETE-Methoden in AbsenceController, TimeEntryController, TimeTrackingController, ComplianceController, SubstituteController, SettingsController, MonthClosureController, GdprController und AdminController entfernt. Das Frontend sendet requesttoken bereits konsistent über ArbeitszeitCheckUtils.ajax; mutierende Routen lehnen Cross-Site-Anfragen damit per Default ab. Reine GET-Endpunkte bleiben bewusst #[NoCSRFRequired] (CSRF ist für Read-Only-GETs im Nextcloud-Framework nicht relevant).
  • Keine ungefilterten Exception-Texte mehr in JSON-Antworten: AbsenceController::getSafeErrorMessage wurde gehärtet – Exception-Nachrichten werden nur dann weitergereicht, wenn sie aus expliziten Business-Rule-\Exception-Klassen stammen; Texte mit technischen Indikatoren (SQL-Fragmente, Pfade, Stacktraces, übergroße Payloads) werden durch eine generische lokalisierte Fehlermeldung ersetzt. Der gehärtete Helper wird in AbsenceController::store/update verwendet. Direkte getMessage()-Leaks in AdminController::getTeams, SettingsController::index_api und in den Page-Render-Fehlerpfaden des PageController wurden durch sanitisierte, übersetzte Texte ersetzt.
  • Korrekter HTTP-Status bei Auth-Fehlern: SettingsController::update liefert bei unauthentifizierten Aufrufen jetzt HTTP 401 Unauthorized (vorher HTTP 400 Bad Request), damit API-Clients und Loadbalancer das richtige Verhalten erkennen.

Geändert

  • Organisations-weiter Monats-Report-Download: reports.js reicht die im Preview ermittelten User-IDs an den report.team-Endpunkt weiter und zeigt bei leerem Organisations-Preview die klare Meldung „Im gewählten Zeitraum hat keine Person der Organisation Arbeitszeit erfasst – es gibt nichts herunterzuladen." statt des irreführenden Hinweises auf einen erforderlichen Preview.
  • Sanitisierte Dashboard-Fehleranzeige: dashboard.js/dashboard.css zeigen statt roher Widget-Exceptions eine lokalisierte Live-Region-Meldung „Einige Dashboard-Daten konnten nicht geladen werden.".
  • „Resume after break" vereinheitlicht: Clock-In-Texte und l10n verwenden konsistent „Resume after break" anstelle des Platzhalters clock_in_resume.

Barrierefreiheit (WCAG 2.1 AA)

  • Landmark <main> auf allen Seiten: 17 Page-Templates exponieren jetzt jeweils genau ein <main id="app-content" role="main" aria-label="...">-Landmark für Hilfstechnologien (dashboard, index, timeline, calendar, settings, personal-settings, reports, compliance-dashboard, compliance-reports, compliance-violations, working-time-models, admin-dashboard, admin-teams, admin-users, admin-holidays, manager-dashboard, manager-time-entries, manager-absences, manager-month-closures).
  • Skip-Link / <main>-Konsistenz: time-entries, absences, admin-settings, admin-notifications, substitution-requests und audit-log hatten id="app-content" auf einem reinen <div>, während role="main" auf dem Kind-Wrapper saß – der Skip-Link „Zum Hauptinhalt springen" landete dadurch auf einem Nicht-Landmark. Alle sechs Templates verwenden jetzt direkt <main id="app-content" role="main">. Das überflüssige role="banner" auf dem <header> innerhalb der Main-Region von audit-log wurde entfernt.
  • Zugängliche Namen auf allen Datentabellen: Die Feiertagsliste und die beiden Benachrichtigungs-Matrix-Tabellen erhalten aria-label/aria-labelledby plus eine Screenreader-<caption>; sie hatten zuvor keinen zugänglichen Namen.
  • Live-Fehlermeldung im Dashboard: Der Dashboard-Fehlerbereich liegt in einer aria-live-Region; teilweise Widget-Fehler werden angekündigt, ohne den Fokus zu stören.
  • Manager-Dashboard-Kennzahlen jetzt vorlesbar: Die Statistik-Werte (Teammitglieder / Heute aktiv / Stunden heute / Offene Anträge) hatten aria-hidden="true" auf den Wert-Spans – Screenreader-Nutzer:innen verloren damit jede einzelne Zahl. Jede Karte exponiert jetzt einen vollständig vorlesbaren Namen (z. B. „5 Teammitglieder heute aktiv") über einen role="group"-Wrapper; das visuelle Layout bleibt identisch.
  • Konflikt zwischen role="alert" und aria-live="polite" aufgelöst: Das überschreibende aria-live="polite" wurde in absences.php (Formularfehler), admin-settings.php (globaler Fehlerbanner) und drei Inline-Fehlern im Time-Entry-Formular entfernt. role="alert" impliziert bereits assertive Ankündigungen; polite hatte kritisches Validierungsfeedback für Hilfstechnologien verzögert.
  • Heading-Hierarchie normalisiert: Jedes Hauptseiten-Template hat jetzt genau ein <h1> (dashboard, time-entries, absences, calendar, timeline, reports, settings, personal-settings, compliance-dashboard, compliance-reports, compliance-violations, working-time-models, admin-dashboard, admin-users, admin-holidays, admin-settings, admin-notifications, manager-dashboard). Die meisten Seiten begannen vorher bei <h2>. Untergeordnete Section-Überschriften in time-entries und absences wurden auf h2/h3 angehoben, sodass keine Ebene mehr übersprungen wird. Eine Stilregel für .section-header h1 wurde ergänzt, damit die bestehende h2-Optik erhalten bleibt.
  • Breadcrumb im Manager-Dashboard: Standard-Breadcrumb „Dashboard › Manager Dashboard" ergänzt – konsistent mit allen anderen Hauptseiten und besser orientiert für Tastatur- und Screenreader-Nutzer:innen.
  • Kalender-Ladezustand wird angekündigt: Der „Kalender wird geladen…"-Platzhalter nutzt jetzt role="status" mit aria-live="polite"; Lade- und Fertig-Übergänge werden angekündigt, der dekorative Spinner ist aria-hidden.
  • Fokus-Indikatoren wiederhergestellt: outline: none auf den Timeline-Filter-Checkboxen und den Admin-Userpicker-Items hatte die Tastatur-Fokussichtbarkeit unterdrückt. Beide haben jetzt :focus-visible-Outlines in der Primärfarbe; Hover-Stile bleiben erhalten.
  • Touch-Ziele auf Mobile: .btn--sm war auf Mobilgeräten 36 × 36 px – unterhalb der WCAG-2.5.5-Empfehlung von 44 × 44 px. Die Mobile-Media-Query erzwingt jetzt 44 × 44 px für kleine Buttons; Desktop-Größen bleiben unverändert.
  • Empty-State-Zeile im Legacy-index.php-Time-Entries-View: Fehlende Empty-State-Zeile bei leerer Liste wiederhergestellt (Parität mit den anderen Tabellen-Views im selben Template).
  • Reports-Zugang: Fallback-Navigation: Inline-onclick-Redirect in der „Kein Zugriff"-Empty-State von reports.php durch einen echten <a>-Link ersetzt – funktioniert auch ohne JavaScript und folgt Standard-Link-Semantik.

Entfernt

  • Veraltetes Personal-Settings-Panel im Nextcloud-Settings-Bereich: Das alte personal-settings.php-Panel im Nextcloud-User-Settings-Bereich enthielt hartcodierte Felder für Urlaubstage / tägliche Arbeitszeit und Erinnerungs-Checkboxen, die nie an ein Backend angebunden waren. Ersetzt durch ein klares Info-Panel, das die Nutzer:innen zur In-App-Personal-Settings-Seite (dort werden Einstellungen real über SettingsController::update persistiert) leitet, plus einem kurzen DSGVO-Hinweis. Im Legacy-index.php-Settings-Branch (toter Code, aber noch im Code) wurde der hartcodierte Versionsstring 1.0.1 durch IAppManager::getAppVersion('arbeitszeitcheck') ersetzt.

Tests

  • AccessibilityTest gehärtet: Die Assertion „muss <button> enthalten" (die Seiten ohne tastaturerreichbare Steuerelemente erlaubte und reine Link-Panels fälschlich beanstandete) wurde durch zwei strengere Prüfungen ersetzt: (1) <div onclick=…>-Anti-Pattern explizit verbieten und (2) mindestens ein <button> oder <a href> pro auditiertem Template erzwingen. Gesamte Suite: 455 Tests, 1 652 Assertions, alle grün.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature0fmMgh2k+umrcI0ItziUajGlS8QKeJdFr3fCSTgg7vQVWg4BCFHonpEcUwfa4kVlfDspQKFKDaq8uOHKCgIK+UZwXyjxXq7+FQGRKfcyfOs9rNBzg+B3VAx4nYo5grNneYtAO7t7Zxz66W0ZFlpBqhNrJMY6TA4bc4tNMRGaIAFi4gXqLstp0Ah+cGqywh55lNrOeuOgFrySRtbChjo6fRhkdAMWjY4XvKxF+5QqtH44AmfQ2HGqOHe8NOjn8eUo0fMbKIbwvAZwafZ0NJQxxVDT9BG/9DpCmvFDug4URG8yKIQdbbmYotaJBw+l4PEiEjpzRJGX0I2yzRaVvGCu6j5ZF/8YYl/K75EFv3oGc6VgypIcoK93/1WTXzykjwVMPxAdGv50f1muSJrVa+6Qcw/j4pz2aE2gWEZ8x1nANuxlxlORcVZkpvPCuDFD+VcqejaZon8vzhW46eENcjGI8oJR1YXRYR22gN6BNM5KD/NPbDmQ9DSsZDgp42lZ34L5+VWj1Gqtf4iqMM7RnZKvxw3bMTFL8usH9lhfjPrqtbzQLWmpiH7Tpwr9Law4ZkluQep/qWR386FPRCOtCOtsIs97GMEM6jqka/uZ/M90AP9v74f8nK/+c6oYXGW+Fq0SKkGvzXFczs2EokKRmyeIyNN013xyazPE/WCUcdGbXtc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.7
Release Details
UpdatedApril 27, 2026, 8:55 a.m.
Changelog

Hinzugefügt

  • Audit-Checkliste für kritische Workflows: tests/WORKFLOW_AUDIT_CHECKLIST.md ergänzt als kompakte Release-Checkliste für Zeiterfassung, Korrekturen manueller Einträge, Abwesenheiten/Genehmigungen, Monatsfinalisierung, Reporting/Compliance/Export und öffentliche Fehleroberflächen.

Geändert

  • Mutationssicherheit in der Zeiterfassung: Clock-/Pausen-Mutationen nutzen nun nutzerspezifische Locks und Transaktionen; Statusabfragen bleiben read-only, während automatische Pausen-Fallbacks und Tagesmaximum-Finalisierung über explizite Mutationspfade/Hintergrundjobs laufen.
  • API-Eingaben und Fehlerbehandlung gehärtet: Report-, Export-, Compliance-, Manager- und Time-Tracking-Endpunkte verwenden strengere Datums-/Zeitvalidierung, sichere Validierungsantworten und generische öffentliche Fehlermeldungen bei unerwarteten Fehlern.
  • Monatsabschluss konsequenter durchgesetzt: Abwesenheits-Update/Delete/Cancel/Shorten/Freigabe-/Vertretungsflows prüfen die Änderbarkeit des Monats erneut, bevor Workflow-Mutationen geschrieben werden.

Behoben

  • Fingerprinting am Health-Endpunkt: Die öffentliche Health-Antwort enthält keine App- oder Nextcloud-Versionsfelder mehr.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureT26RnSxGZtpmkWUMOT/kRj1pbj9j9dZCmH4GEaIONGYsjG9eFIorh133vbuxQbf+Ow0asxbdP0zK3CUa6iW6FhQkyo2Uyj0+BBVyFPliahtPKh68I8/YcQLJLnzI6i9lZhSCpy7gdMwr5xH14QVEq1gW9nlFA2ppepB0TJVCjpE9Ykc6egd1Fb28mr1KQcgYD39fXKG1R1rfY604eJtjuAnKomAkWecOPaUlElmIR5/QTBYeIthZV0fI79PfrcQdi1AjPIxQWx5mtvNy8vdSyah119zrA/Q7vJbh1i1vshxl65q5EKBh/Qam2JWadnVcfC6FH6CZwLkZwrkVlhfgAHhjRH4N01Mc3fRIbMTg+nKzW+oXANXnWyk8wtLf39wN4Qum+H4Yx4/ECG4aNULfPQki7EUdcLANlafsHKBarmYzITMnCPIzmKbQ/a07tKEsI+36C//sdfV2r15CMxkDfqey4NjtIbb8jv0ye5iv4gZnvl/FdyRaxLiptRiRxIRoFJgVMG1ZKxy6jw4MmIigONvQJ9Npn6//8vAdb80ftJvDCkyHa4DPmKHPoIphqFLLnSWbaUKn+KjfpDYom5nV99ccQlcdWqs5aXHLQR2UDv5gG+NCkLNxLNZcHLl6blsnsqnLGsnjgYLzYKxKJanBSvPkvO5nrpNoRM/3ybV4nWE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.6
Release Details
UpdatedApril 24, 2026, 10:32 a.m.
Changelog

Hinzugefügt

  • Forensik bei Abwesenheitsfreigaben: approved_by_user_id wird nun direkt am Abwesenheitsdatensatz gespeichert (Freigabe/Ablehnung/Auto-Freigabe), inkl. Migration und API-Ausgabe.

Geändert

  • Integrität der Urlaubsanspruch-Snapshots: Deterministisches Key-Upsert auf (user_id, period_key, as_of_date) ergänzt und per Migrations-Unique-Index auf Datenbankebene abgesichert.
  • Nebenläufigkeitskontrolle in kritischen Workflows: Create/Update/Approve/Reject/Substitute-Flows sind nun mit nutzerspezifischen Mutations-Locks plus transaktionalen Rechecks/Row-Locks abgesichert, um Race-Conditions bei Überschneidungen und Überfreigaben zu verhindern.
  • Release-Absicherung: Workflow-bezogene Unit- und Integrationstests wurden auf die gehärteten Mutationspfade angepasst und erfolgreich ausgeführt.

Behoben

  • Legacy-Snapshot-Reparaturpfad: Upsert behandelt historische fehlerhafte Zeilen sowie parallele Unique-Key-Konflikte robust via deterministischem Retry-Update.
  • Race-Condition bei Resturlaub-Updates: VacationYearBalanceMapper::upsert löst gleichzeitige Unique-Key-Konflikte jetzt per Re-Read/Update-Fallback.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureFCaNQEccscnzM6rLSgigNgiMK//Ogy4aLpQQ02I290SKuEd1galIkTleu42bUC3jUHSHpnmIDlaOC359unS4KGTEy3nmCdndzTjnZo6r+Pbk9+/vFkufLmhW6rckhWRuZ5FaTDQEtSuZXf/xGdfbdoy0emnIb+n76unzaXXDRbRwiofg80WVWY3ejgfixFajIBo0pYBiWHsjvjA66KtZXYxALqBikSLtr7Qo2BNssYqyDpxnPXjrpabkjwefBgBEro9vtBMgdxO1BiXf2R7YQK7tdea1b1+Z0SPhktPHoetniDAHnLzFucaQdwMVT4jiqwldo5wArfOLOWnFHa3jBDLUVc3RCov3/euMcr2GKxwYR6Zxjuwb++CAMTv4wKuKhju4tfWm6KQfUXCVMciK56XxAvwhf0FzlGBpT0+YORUBc7r0OSm1SbO5R8E6wOF6sUM9QhQCz+VFFyo5QEXxME0pV+yDzFFCBCulYH5VFq+cTXXZ9Cg7LaafpLP0dm3xJ+bnjLf/sNziApiMCQsOvK5DQ/tH6NS1qf87PZdb2FeciFFCO9eZw5JP842ePPPdbfq6hhz36BOv2gHqY3b4ze2H8Jp08II7/a3FWKbkz0nXN0G0HLQYDkBAa22Sn/c6Io6hGcQI/0fuW8pHJjhI6VgoCZpdY+dVD00/7Pu/HXw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.5
Release Details
UpdatedApril 22, 2026, 7:23 p.m.
Changelog

Geändert

  • Release-Paket aktualisiert: App-Metadaten auf 1.2.5 angehoben und den signierten Release-Artefaktsatz für App-Store- und GitHub-Veröffentlichung neu erzeugt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureZpb9Oh1bIRpGiO5z2K6o3xhzr43wa8RdfzfLXHg7sEGwS8tzN8GaAdyCnk4IoZbFQbrcrwdyFCK2ifzBqN9OrxHGAqGpFLeQOaHUDcH/imXCIFxYAch8kwW545iujuTkvSBdlIFa+DAG6lFFRngQPO2aO9gC1B0Vp6wLTAjI5NDNeM6nVNyCIhbvaC4jUfIrTjrCfvgQ4hgpJ29pYU0GdY6bEgwKCQQgUuJVEB6Hoay1M40Xq8eLzdT/UfobFlC1nV4Anda02g1AeoM04FrJQUfD6lCo0s5pFYAJ82EM5OyzWwi/xgEv4y54tao/UBX6yoUvIdHa7yh6bfoKy0dQmzb+iHl8eQTAzCVQAgWWu58F5J+k884kYMwBNBdcuymPnszTlypmrQoRRjvI+UI2f8taEikdX2EUAbwHkBU8U8CG98NogPFy/w9drgLqq6gvBCtuuz3BLC7fsEfA2/Lx4XYEwCdbvoFMc2GNZJMIujhs1jsbk0Hzscz3NCmaILzbZpfKr59xfZy/bxNl2Yi8nl6L9tJRyaLdxJ7urZthACHIdATnAqGretxEcTox69OnoR+Pir+0N/8ujZ3Z2K2C/5zu/QGwGgaz+WeoKCwGjmTb3JCG3jh340kFLnp8TnzUiZpduSj4Bz4o7yojTzFAPoQrTUYZrv0llb8PGSoPI8w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.4
Release Details
UpdatedApril 22, 2026, 7:18 p.m.
Changelog

Geändert

  • Release-Stand veröffentlichbar gemacht: App-Metadaten auf 1.2.4 angehoben und ein neuer signierter Release-Artefaktsatz (Archiv, Checksummen, App-Store-Signatur) für App-Store-/GitHub-Veröffentlichung erstellt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturefOspm7RunA6JBPSZZ3vwdD+rRVZ5qOeMbZFcndytc+ZU00QoTdCYDFaEsDlUZtuCnpLGgwQ1x8o0jBhi409JtsZrNyD99XhzBZCKNl/nysKo/jDLa3h1msZ/AWKtjJUlyLxEPvPLzM2e/bg7DVOJKi0lsvq6nmUxJEhlLmhdgaONOlbAsBdtrtTKOO7DSxslFRRW0fmofVEdH8lL+5y0l/RtV5Gd6bMtpQ5bzHSoai9OMuOBFJ98QX9k/vX4qAuJUGVRvivJmMXDmiD/kPvezmia5no32RbXtYgYBUVY3Y9kfOza3mdFIwlHSD0bnjCI22QWUCBa5v59k+OuMPzPxCy+bzBl/M6Fu09TrNCDJvejpF/y9vKl7Wxgdz4ynaA2EZZ+RN15cGiTdOWVzjcWtnXBMSh9RCnBZqSCz8dFq1qVLUy16lBciLRNa6HofkEvemUN1oLbokZKLQlyXMFNxT8Ny3udUaOa5qKFDLbwgTttFuHDfn4NWOeI7JQgJ5kntg2KMpB4VYXvDwODCEcolniDL08kWuPbxOxd0tTR55+seYBfrSQrrGt46a4Vcp683MvMn8fx/el7vSPx9ifD1cUd6KMf/fi5IJF+pohxoCZlNepNdQGmaKNfWh87EGsdUl7089uKLWdwGWeGoHdxrBuRBhcfIU1HvCH+KVcvT9A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.3
Release Details
UpdatedApril 21, 2026, 8:11 p.m.
Changelog

Geändert

  • Release-Paket aktualisiert: Neues signiertes App-Store-/GitHub-Release-Archiv für den aktuellen Code-Stand mit Docker-basiertem Signatur-Workflow erstellt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturexYrrvEAHPwtfVHCBhNEEi7sX2LvqPOYNCC1AOYXNIeoRkUCxYLFTc29MwrgaUMoSLGtoZDChDD2eKsUH6MY+y5Jk79dKZg/ngf2/YBQpmMevl8Lp5eSGo2QES6rBtWYa1GFOEd6sVU6RLcy9tNL3toOxw5Te3QTskzeamEGChd0JYprcLZSWJG1kRu8Y8c32p5Rwbwu1tuq3AAW+i/6Bq4bxztKR6PGkZ6uyTbVaW3p0PwMFoJxceVu0/MsbMpftQaGQHr/1h6nBvbuj1WBkfi9W0PHrl+0zRn+5FwoUU9dECfeHuQAAcXOcJsKT979ewplb5+vPgNSeN2SSTWoGs9eYYIvUzznpyhuqSa1aplwXO/U0xyTXeUE5fiAQFlbnxtZ7gjmeLBkbAR/gF4aCX3NEPGLtw24gY8jomJ67+foeoM1+AJM73aFgTH0NjYKUetACRTFgB6gJPXl97JrJxd7sTeg6xiqlNKrWSvxiAO8XkjHCUV1BaPmoRtyfcNnLxmf0MGCVUuO4btz7JH5qy3q4H8XecbNYpnEeer8qxzTkw3toonE4+LVgbHV0nW6uu/gfEvDtYZI0wKx/A4vQYSQ7WEprMn9SbjnXbaMFOcG81GT2HifhcWZH0/YfFzz+sRng/TvZOkuf2iUq/9EjnKwkyygMSlHE7Si3kYXldKc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.2
Release Details
UpdatedApril 21, 2026, 8:07 p.m.
Changelog

Behoben

  • Lokalisierte Dezimaleingaben in den Admin-Einstellungen: Tagesstunden-Felder akzeptieren jetzt zuverlässig Kommawerte wie 7,74 und behalten zwei Nachkommastellen korrekt bei.
  • Parsing bei Legacy-Hours-Payloads: Time-Entry-Endpunkte verarbeiten optionale Stundenwerte nun konsistent mit Komma und Punkt, sodass in rückwärtskompatiblen Requests keine stillen Abschneidungen mehr auftreten.

Geändert

  • Präzisionshinweise in Eingabefeldern: step-Werte und Hilfetexte wurden auf Zwei-Nachkommastellen-Szenarien (z. B. 38,7-Stunden-Woche) abgestimmt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureeG9EHR4R6Kg1X8OQ9g5Q0yPR7Y7yp+snb/sVhhLXEOtBIFd4xLZd/xi0GuLYF4KBZlPCH1GbRCy+q/kbjx7MyqlO2rHn3Cef0MnwJoLp9czZFJOjVJJpkoZNf/o9hh2OpeK+sNS7ghXfC5Pax2oicQFmeQeKQKLaTwn0AcJgvQrF1laVjQiXQopE98v16iClBjZ+KuybKcRmglxbd1N8dx69nBB0uyLQdkQIhnwHccyrlPCBzsXq55AtIEXGsitgXtquHKOk1bzBwM3uwQZoNRi4RIB/zWmOv0c7+71QTw0i1DMUsz+FUrTw+bBY0FnZe/Q9ageaUvwOb4bHUJYt1cuWPGEufAUC1w7ONCfHGASNkDv34msX4MQEaMf28k8ohtWlX/fzNIxL63Erijyanuo1tf9hZFeYEXmCKwXAeWOL0O/lXWcTGTvEOAD96sSv6RIcIOwHBLqxGUHiCQzJkKZJ3hjv3rrpOeneCLOz/jMNJrEgYCihLn1J8cUEPPeP6VH3rNthDuQOVCi63v+0X1uubbM6DQheViBYTA/z4wEAP/2YsA6rsXATB0JR4pOIxlsiT0MgjxIyrfctOJP/4zMU4645rSmZE+NS0TF46gpf8DF6ai0zilMmaHf9xY72qGZTICjvtIUcmwbMhRMqG9fmYomv5U2/jd3rubayPDg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.1
Release Details
UpdatedApril 21, 2026, 10:50 a.m.
Changelog

Behoben

  • Wiederzugriff auf pausierte Einträge: Pausierte Einträge sind im Bearbeiten-/Löschen-Workflow wieder erreichbar und werden beim Speichern mit Endzeit konsistent als completed finalisiert.
  • Fortsetzen statt Duplikat bei gleichem Tag: Clock In setzt einen pausierten Tages-Eintrag fort, statt einen neuen automatischen Eintrag zu erzeugen; die Pausenlücke wird korrekt als Break-Historie archiviert.
  • Historische Restfälle bei paused: Neue Migration Version1020Date20260421000000 repariert verbleibende verwaiste paused-Datensätze (auch Fälle außerhalb der früheren Einmal-Migration).

Hinzugefügt

  • Auto-Fallback mit Nachvollziehbarkeit: Zeiteinträge speichern jetzt ended_reason und policy_applied (z. B. manual_clock_out oder auto_break_fallback) für klare Audit-/Export-Nachweise.
  • Einmalige Nutzerinfo nach Auto-Ausstempeln: Beim nächsten Statusabruf wird eine neutrale, konkrete Meldung mit Uhrzeit und Regel eingeblendet.
  • Urlaubsanspruch-Policy-Engine: Neue berechnungslogikbasierte Anspruchsermittlung mit Modi manual_fixed, model_based_simple, tariff_rule_based und manual_exception inkl. Simulations-Endpunkt für Admins.
  • Tarifregel-Datenmodell und APIs: Versionierte Tarif-Regelwerke/Module sowie Admin-Endpunkte zum Erstellen, Aktualisieren, Aktivieren, Stilllegen und Zuweisen von Urlaubs-Policies.
  • Snapshots der Anspruchsberechnung: Persistente Snapshots (at_entitlement_snapshots) mit Berechnungstrace/Policy-Fingerprint für Nachvollziehbarkeit und Diagnose.
  • Neue Admin-Seite „Benachrichtigungen“: Eigene Oberfläche für HR-Empfänger und Ereignis-Matrix inkl. dedizierter Notifications-API.

Geändert

  • Fallback-Logik differenziert nach Einsatzart: Für Schichtarbeit gilt standardmäßig eine strikte Fallback-Regel; für Nicht-Schichtmodelle eine flexible Regel mit tagsüber konfigurierbarem Ruhefenster (z. B. Familien-/Mittagsunterbrechung ohne Auto-Ausstempeln).
  • Export-Transparenz: CSV/JSON-Zeilen enthalten jetzt ended_reason und policy_applied, damit automatische Beendigungen in Reports eindeutig erkennbar sind.
  • Urlaubsallokation integriert: Jahresallokation nutzt nun die neue VacationEntitlementEngine und liefert Quelle/Regelwerk/Trace in der Ergebnisstruktur zurück.
  • Migrations-Kompatibilität: Bestehende Urlaubswerte aus Nutzer-Modellzuweisungen werden in Policy-Zuordnungen überführt (Version1018Date20260420123000), damit Bestandsinstallationen konsistent weiterlaufen.
  • Admin-Einstellungsfluss für Abwesenheiten: Carryover-/Rollover-, Vertretungs- und E-Mail-Schalter sind zentral über die neue Notifications-Seite/API steuerbar.
  • Schema Arbeitszeitmodelle: at_models enthält jetzt work_days_per_week (Version1019Date20260420150000) als Grundlage für Formeln.

Behoben

  • Aufräumen bei Nutzerlöschung: Beim Entfernen eines Nutzers werden jetzt auch Urlaubs-Policy-Zuordnungen und Entitlement-Snapshots gelöscht (keine verwaisten Policy-/Berechnungsdaten).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturewHjRsCMFlhEA9EgrgvzuDGiwQsEIOmqNFH9oA9Fs+lJZOluUc6XSmPeZow7uso0PwR/b5YYt+f8KmOoIwuJepnD1TTa5ClzBP5zx5gZq+KIloaEGzVPTnHvHJuc4V8q4A5BYEXvYrVvEuPgufr8BOBNy4SLwMKYQlJR0LhDLn3ShHowJ+VDaUSUjOtUih0uUCsNI54HhaAAa3EfKpgDqc2+jhM7WvnIzDGRVYF4HbPBYPpn+1eWOyOlOgq0YIy5M8+4shNLiGeIRo7Uepk9+HnDm6vjLdYB2iE9AMl+vSCGSdQTrP0Z5ceXZBZT/bM0t4Af3EfAP5seJ/sSQIYs1a5T8RIneJ7DwyFbZdGelFSSBZoMGDevr4IUUfAB3NIKNlPZsxAOv9elrF4AjLJZhDVB6i7OSVeER7yLqrIgMhBFXiFpr095gYQ7Wn6VCcBWwWVS7cWXa0xN9Yl00mn0z9GcVagRvncJ28Y0wSgk+GP/BDalUHmD7wHSL3pyXIWxpqQ2OJHi/xT5Myx4T+HVsywgRwAFaOLjV+hm8hkJLxd70WG0e1oo21m/DtTZZ1R44+BDdRGMJIcabWxJ/zFhYSZvVmoL2dpUlJhPgBBp1Y9Xp5pF0zOeLiGSMR4ON/Iys2jpsbAd0/TxW55NaEFOpZRRNYt3VoZJ8oqM1n1sHZX4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.0
Release Details
UpdatedApril 21, 2026, 10:08 a.m.
Changelog

Behoben

  • Zeitzonen-Konsistenz (Europe/Berlin): Server-/PHP-Zeitzone für ArbeitszeitCheck auf Deutschland ausgerichtet; neue Migration Version1015Date20260415120000 konvertiert bestehende UTC-DATETIME-Werte in App-Tabellen nach Europe/Berlin und setzt app_timezone explizit.
  • Ausstempeln-Semantik korrigiert: clockOut() finalisiert Einträge nun zuverlässig mit end_time und status=completed (statt paused ohne Endzeit). Dadurch sind Exporte/Reports wieder vollständig und konsistent.
  • Historische Pausiert-Einträge repariert: Migration schließt verwaiste Einträge mit status=paused und end_time IS NULL automatisch über end_time = updated_at und Statuswechsel auf completed.
  • Mehrfach-Pausen ohne Datenverlust: Beim Start einer weiteren Pause wird die zuvor abgeschlossene Pause zuerst in breaks (JSON) archiviert; Break-Dauern bleiben vollständig für ArbZG-Prüfungen erhalten.
  • Break-Status-Berechnung korrigiert: getBreakStatus() zählt aktive Sitzungszeit nicht mehr doppelt; Warnstufen und Restpausen-Hinweise sind wieder korrekt.
  • Export-Spalten korrigiert: duration_hours liefert jetzt Brutto-Dauer (Wall-Clock), working_hours Netto-Arbeitszeit (abzgl. Pausen). Vorher waren beide Spalten identisch.

Geändert

  • Export-Transparenz: CSV/JSON-Exporte enthalten jetzt explizite Zeitzonen-Metadaten (timezone, exported_at), damit nachgelagerte Systeme die Uhrzeiten eindeutig interpretieren.
  • UI-Klarheit: Dashboard zeigt sichtbaren Zeitzonen-Hinweis (Europe/Berlin (MEZ/MESZ)), Export-Hinweis auf der Zeiteintragsseite nennt die verwendete Zeitzone.
  • Bediensicherheit: Vor Clock Out erscheint eine Bestätigungsabfrage mit klarer Abgrenzung zwischen „Pause starten“ und „Ausstempeln“.
  • Admin-Transparenz: In den Admin-Einstellungen wird die konfigurierte Zeitzone sichtbar angezeigt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureu3gPfbToOow1ecZSrYUbhzoOp6/Fb3syYzSdx9CNYBvsUDqkoBODyN714AKc/4PF8hYrf+nk+A7ICF0GC94uBW8MsNWCHRQ1GEmhhaNSePTNjV+JCCOR9SINE1JCYVSh4avkBX7evJrRZFTOoxRGZxKBSY8ubYG71+F/N22A3qH8wzu6yYMBi0hrt1oVOfFkhrkBKeEwip7Bm0vrEzfrhnNJ3qsqf5q52F9sxUFZNT+/JLDBPu/ZAokssMJGTgbmKwdc3qQzdI/d0zNPuZJwUNjjgvU+TLeFJRkOKNghRfdkVotVcm63NmAf9afJJx3QkCTOTbMchC9sKyvlnIbG68WUZvsiAUPRW5o2XxXK71zZo8y+GC65ZazjioV/4ANt6sEItnJ0MSylRmWFEXMTMJHgCiqqp9hwZwxs0IicHLsRRsnUDdT7yMgOdB7082cnUFJtWM9Me2uSvYx4QUfPosWZhkMqpwagxJ80EnYSfc12/cEXbr58MbdqyQeCj2dUG1iBPw0eVooOWxf9UwOnNaUKV6ynEGok/mYM3qS8XnNElFpliKoRAfBtgLsCpV7O/ChhjE0gPNILNasGMiofSaAd4cHZjSZI/7Cm6FkOSrGju6XCPubM6XeYLbyZ8pv1htd1H1NzUIsWYXG23nPhICNAdOvEcbIXWEw8H5b2Xtw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.14
Release Details
UpdatedApril 14, 2026, 9:48 a.m.
Changelog

Behoben

  • Genehmigungs-Deadlock (App-Teams): Abwesenheiten und Zeiteintrags-Korrekturen behandeln „hat Kolleg:innen“ nicht mehr wie „hat eine:n Vorgesetzte:n“. Auto-Genehmigung, wenn kein zuweisbarer Genehmiger existiert, folgt TeamResolverService::hasAssignableManagerForEmployee() (explizite Team-Manager bei App-Teams; Legacy-Gruppenmodus weiterhin Kollegen-Proxy). Verhindert Anträge, die dauerhaft auf Managerfreigabe warten, obwohl niemand freigeben darf.
  • Zeiteintrags-Korrekturen: Gleiche Zuweisbarkeitsregel wie bei Abwesenheiten (zuvor nur Kollegen-IDs).
  • Admin-Users API auf /index.php-Instanzen: Refresh/Edit/History/Update nutzen nun zuverlässig aufgelöste App-URLs; fehlerhafte Requests wie search=[object PointerEvent] treten nicht mehr auf.
  • Admin-Teams und Settings auf Rewrite-losen Setups: Zentrale URL-Auflösung enthält jetzt einen robusten /index.php-Fallback, wenn OC.generateUrl() im Seitenkontext fehlt oder unvollständig ist.

Hinzugefügt

  • Repair-Schritt ReleaseStuckPendingAbsences: setzt nach Migration verbliebene pending-Abwesenheiten unter derselben Bedingung automatisch auf genehmigt (idempotent).
  • Frontend-URL-Sicherheitsleitplanken: Die gemeinsame AJAX-Schicht blockiert externe Cross-Origin-Calls standardmäßig (explizit allowExternal: true nötig); Unit-Tests decken URL-Normalisierung und External-Handling ab.
  • Lint-Leitplanken: ESLint-Regeln verhindern neue rohe fetch('/apps/arbeitszeitcheck/...')-Aufrufe und implizite externe fetch(...)-Nutzung außerhalb der vorgesehenen Abstraktionen.

Geändert

  • UX: Abwesenheiten zeigen einen Hinweis, wenn App-Teams aktiv sind und kein Genehmiger zugeordnet ist; in der Detailansicht erscheint bei veralteten hängenden Anträgen ein Warnhinweis (bis Repair/Admin die Teamkonfiguration korrigiert).
  • Frontend-Architektur: ArbeitszeitCheckUtils stellt nun zentral getRequestToken(), resolveUrl() und isExternalUrl() bereit; genutzt u. a. in admin-users, reports, settings und validation.
  • Mobile UX Konsistenz (WCAG 2.1 AA): iPhone-Safe-Area-konforme Abstände, bessere Touch-Targets, klarere Abschnittsstruktur und visuelle Hierarchie für Nutzerseiten (dashboard, time-entries, absences) sowie Managerseiten (manager-dashboard, manager-time-entries, Mitarbeiter-Abwesenheiten).

Dokumentation

  • Nutzerhandbücher (EN/DE), tests/WORKFLOW_ROLE_MATRIX.md und Entwicklerdokumentation zur Semantik „zuweisbarer Manager“ und zum Repair-Schritt ergänzt.
  • README und Entwicklerdokumentation um zentrale Frontend-URL-Policy, striktes External-Call-Verhalten und Mobile/iOS-Layout-Hinweise ergänzt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVBSDJh3veK9J7eUDKGFw/xB1ypmBQrjMDzamatQfncYem1qg9kNVWAnHDH+fGRlFJtrBH+fOu+MRTFZuK78DU/W18IQglCtTbsH4MdaHLHTwVz2JOxeGJWmx2p1yK0ulK0vbDgCLXQu5B8gR/L/JYRGFo0+FpwuRvxrpp1BWrX5m9mQLgoxn3hOj2r+F2m0wYdEDWhksF6VzLbHyr3pIT9hu6p1owuAZzr3Nqtva4tZK0WGgn8xa5bDwZqJdWSyQJ04JiCZisftYCOJz8HNfq6o4MFTLF0aQpYxUH8wf6gz5pkfUOKIemq4Ui8GqRr3Fxo/DW2APAk0GcwWyY8ypEiY2RNi6IkGv3K9p8mFamDxirDeurOX/hwNia1Lt4HCqzJATjWpmaCEAoBQWfOCgozI9o+h8cI9LhHp3LvK3VxFD/s9xjJPFLZ9y8b98hufe13Uq5/NYzqo2vQ1DgQXyCbRjsiMbqDvz+yyDmXM+JPV8U8gTKxTD8y19VoiVIlWhAsI/zBmxHC84G2htaCHBws47cGhmJVvQDXGz/1aae9J0of1bGoOIERyEFSOAzmUN9fcvdVbN+77wn70QQ1k7GQcw6jAEScIQq8Pt8n7pBTECeECk6K4baNfaTT2+kZKLCdD1mdaJII84B8+XXxmxIk+VI1sarNlMIvPAk3FQjww=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.13
Release Details
UpdatedApril 13, 2026, 10:46 a.m.
Changelog

Hinzugefügt

  • Monatsabschluss: Karenz und Auto-Finalisierung: Admin-Einstellung month_closure_grace_days_after_eom (0–90, Standard 0). Nach Monatsende haben Mitarbeitende so viele Kalendertage zur manuellen Finalisierung; ist der Monat danach noch offen, finalisiert ein täglicher Hintergrundauftrag automatisch (gleicher Snapshot wie manuell). Ausstehende Zeiteintragsfreigaben und offene Abwesenheits-Workflows blockieren die Auto-Finalisierung. Wiederöffnen bleibt Administrator:innen vorbehalten.
  • App-Admin-Whitelist: Neue Admin-Einstellung app_admin_user_ids, um die Administration von ArbeitszeitCheck auf eine ausgewählte Teilmenge der Nextcloud-Admins zu begrenzen. Leere Auswahl bleibt rückwärtskompatibel (alle Nextcloud-Admins dürfen die App verwalten).
  • Docker-Testziel für Security-Role-Gating: Verdrahtung von scripts/test-security-role-gating-docker.sh über make test-security-role-gating-docker und composer test:security-role-gating:docker für schnelle Autorisierungs-Regressionstests im Container-Setup.

Geändert

  • Monatsabschluss UX/API: Klarere Karten-UI, sichtbares Erfolgs-/Fehlerfeedback (WCAG), serverseitiges canFinalize mit lokalisierten Sperrgründen; manuelle Finalisierung lehnt zukünftige Kalendermonate ab; Abwesenheits-Workflow (pending, substitute_pending, substitute_declined) zusätzlich zu ausstehenden Zeiteintragskorrekturen; API 401 bei fehlender Anmeldung wo passend; Admin: eigener Abschnitt „Monatsabschluss“; Karenzfeld bleibt editierbar mit Hinweis, dass der Wert gespeichert wird und bei aktivierter Funktion gilt; Wiederöffnen mit durchsuchbarer Mitarbeitenden-Auswahl und klarerer Rollenbeschreibung; Validierungsfehler mit höherem Kontrast über Themes hinweg. Auto-Finalize protokolliert Einzelfehler.
  • Release-/Signatur-Workflow für Integritätsprüfung gehärtet: make release-signed signiert jetzt den entpackten Release-Archivinhalt (nicht den lokalen Entwicklungs-Checkout), prüft verbotene Entwicklungs-Pfade und packt das signierte Archiv für Deployment/App-Store neu.
  • Admin-Autorisierung zentral erzwungen: Zugriffe auf AdminController-Routen werden jetzt per Middleware auf App-Admin-Rechte geprüft; nicht berechtigte angemeldete Nutzer erhalten eine konsistente 403-Seite.

Dokumentation

  • Deployment-Hinweise ergänzt: Die Release-Dokumentation fordert nun explizit das Deployment aus dem signierten Tarball und beschreibt das typische Fehlerbild (.git/* / node_modules/*) bei versehentlicher Signierung eines Dev-Trees.
  • Deployment-Helferskript: release/deploy-from-release.sh hinzugefügt für Deployment aus signierten Release-Archiven mit Sicherheitsprüfungen (verbotene Pfade, erforderliche signature.json, optionales Disable/Enable und occ integrity:check-app).
  • Admin-Betrieb: Nutzer-/Entwicklerdokumentation ergänzt um Einrichtung der App-Admin-Whitelist, Rückfallverhalten bei leerer Auswahl und Verifikation des Role-Gatings im Docker-Testlauf.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureol/yHOgiMCOj+yYqb8HC0g5laqPih/kTTbBB12bDawwgGQGVdx+GCBNaSmM8Sgu2jRB6PJWwnF1qFQQ6MIHWCjFzuOQeyL+sDEGH0VhI/qgbCmyRKZnBKAyUq9BBrxux3zaI6cN6QD76nP27UCU4C/OxW87nybYxy4WqqdOSOR0Af9QMkUg/VZLhRatpageqRGkYSFl+3ZwEg8qhlpDyLH3lh3xSG6+tQsyy9yU4La+XDiZ63lG2yF1RWHQ1/irb+dRrPEs/I1wuLvdZL+6olqx7MTogIylUqrJyux7ycTUrC/sxTBsZYJUQ2vGFyGzO30qARQ+KSOJtai5Upcx7WZxHv98eS0X3FGI0QUhC2NwIE2ahn0mfH/YjuRW5wBn9nsDG03KPpDaMATyvxTD8BbzGTM9ziuMKfOzd2HfYxMWDX/GF4LWM/eXpqsO7E2veMjtIClAcMI6vZhJKVV4mxXHxMkFIdvTbaFmPrWEAhFRoI+0NHQ4y3ec+goBucU+E4gHCyicVOT0T4n3NH6U+nOs+95d5cSA85Dz+LF7ZLLYU/rxi1ybC36fVg8igg+P8YvH555KQNizrYNJ2xdglmirJcs0XcEwZ8/hVrWfzuLUgKbMNXlqa2dgRzMnfOy9b5bNUPez9FKsqEqAc66dUr9JnDiR+poFgQBlCAnZ7vbw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.12
Release Details
UpdatedApril 12, 2026, 4:25 p.m.
Changelog

Hinzugefügt

  • Revisionssichere Monatsfinalisierung (optional): Admin-Schalter month_closure_enabled (Standard aus). Mitarbeitende können einen vollen Kalendermonat finalisieren; die App speichert kanonischen JSON-Snapshot, SHA-256-Hashkette, Anhänge-Revisionen, Audit-Ereignisse und ein schlankes PDF. Finalisierte Monate sind über normale App-APIs nicht mehr änderbar; Administrator:innen können einen Monat mit Pflichtbegründung wieder öffnen (Audit). Monatsberichte für finalisierte Monate lesen den gespeicherten Snapshot. Datenbank: at_month_closure, at_month_closure_revision (Migration Version1014Date20260409120000).

Dokumentation

  • Nutzerhandbücher (DE/EN), Entwicklerdokumentation und Compliance-Hinweise zu Monatsabschluss, Aufbewahrung und Grenzen (Nachweis in der App, keine QES) ergänzt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature0mCLz3x6v/VzKxsK9I8J3HAMtz+lr9Z43v3UN+tH4hZeZLXvuXWayTxLB6EYKXXnNSfkvF5KMiYJqh3LJHUCTcPUgGfPqNDwCkkTK51T0cmghwWPQylVIe9L6My8a2Pu0sVCrG5P0Ev5t7wdLQNMSxKcHYKXYT7B2QvQG+ljdNKr1/ywfXDEpIg4yzCMnxVdfGIBiUNl4vUIYOXCNt30fUXiRCXHfl381LcA2Bv9ZP+Ddxk+qEpa1iuujWcRg6o32YRCESwDAO2IoXKEvLy16btLtNQd7wL+E6lhCfgST/jp+rWPxh4RSJ8kBlyaBYo8LqvhvMRpGqhYfNOJZTrq0BnKQZfjc1qnAcIHMDFjBfUwi8tp0/bmxOnXmMMFZZtGf6rGLUYinb470whWKydzhIib2K2kSTN9GrRvjmp+osUh9/qAlBzN5wRutIBewKqM8SkwJ52dYiYWU5jAyf3fVxXqRJs970WUccI7udQ8A7J9XqkmCRUBvl46mPugz0K481/X6cKHiZBK9681njxRWorGVGHpCiz92T+Ug2W+bRIBYLBM0oqPd9Dp2rXQ5+UFLDTC9eDG8WP3VVxsK7d5xtK/xWC1fSHy4c7Mgp8WAVITY1eU9ftn1tS8BHZxcgz7EvgtPmamoKwb55KKFTxQu4c6khCWaZ2pPQvXQjxtrNw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.11
Release Details
UpdatedApril 9, 2026, 2:45 p.m.
Changelog

Hinzugefügt

  • Manager-Ansicht „Mitarbeiter-Abwesenheiten“: Neue In-App-Seite und API für Manager/Admins zur Einsicht von Abwesenheiten mit sicherer Bereichsfilterung, Pagination und lokalisierten Statusbezeichnungen.
  • Kopierfunktion für Arbeitszeitmodelle: Neue Kopieraktion mit Modal-UX, eindeutiger Namensvorschlag-Logik und Schutz gegen Doppelklicks.

Geändert

  • Manager-Navigation / Sidebar: Struktur in klarere Manager-/Admin-Untermenüs überführt; Berichte in den Manager-Kontext verschoben; Compliance-Link zur besseren Übersicht umgruppiert.
  • UX Mitarbeiter-Zeiteinträge (Manager): Standard-Datumswerte sowie Datums-/Übersetzungsdarstellung im Filterfluss verbessert.
  • Kalender-Verhalten (Rollback-Bereinigung): Angefangene Funktionalität für direkte Kalendereinträge sowie zugehörige Admin-Optionen/Status/Test-Endpunkte wurde entfernt. Das unterstützte Verhalten bleibt unverändert: keine Synchronisation mit der Nextcloud-Kalender-App; optionale .ics-Anhänge werden weiterhin per E-Mail in den konfigurierten Abwesenheits-Workflows versendet.

Behoben

  • Arbeitszeitmodell-Modaldialoge: Interaktionsprobleme im Kopier-Modal, Darstellung des Quellmodells sowie Lokalisierung/Formatierung im Lösch-Dialog korrigiert.
  • Abwesenheits-iCal-Härtung: Strengere Status-/Datumsprüfungen, Empfänger-Deduplizierung und datenschutzärmere Beschreibungen für Vertretung/Manager ergänzt.

Dokumentation

  • Nutzerhandbücher und Changelogs an das finale Kalenderverhalten (optionale .ics-Mail, keine direkte Kalender-App-Synchronisation) sowie die aktuelle Manager/Admin-UX-Struktur angepasst.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureHwGRZcCLjb/plcL+LoYgcSBNEXoLoZU2DlOb7pcOx6X41OU6v9SkdO5YXOynEBr7kmViQeQzJfLyTUTRSfcqLlz4jC8KL7Xmaa7rImQ0EGSVpaBmmUuHC0MWlrhWWMEkG52smtFFalq0GZy0wLhcHRc6BtqCzilQLju2jS5SR6GTPWutj0i9LsbKsB6LFzkbc9cAbtcRCUjzx9A2oU/EAA1BhRBlyQTvR/OLyDa2FU/CBNWrm3I9293E+D9UP9gMBhKvSH5f1DXF/TpwiCEzYB/NRR0KBXvQb30whbv6O/WJfCEs9z1+wryRvNfGjT0+9X4C3tPtLTpyh7noU7NK7VzS0Cl0/TbACvlEY8yk9I+UPbNYA9jUiNny2JpAh6syrFE3k2RrhIpiJ9iLwqKgUYN2rlx6LFtqWP1NlIExC97DdmCTt1YRTyeDzi/NrZuGKHl5JBtCJWZalX6KwxjJd4oBrxoy1+i/2BLSpjoUlvPQ2FHPlqdtHWcIqryrVzmV+8ZJyxmo5EVJR6bmGESQjUovJ70j5KIltEg1OM/5MAyJ9hkIBJxjXiLTvocREbYOdoicChFs9aQFbDX0VN3BD4q6FNSiV5UXRsbzo57lxa4n51hB3tjoQAJ+rBlmMyVez7u1zNj+5X6lrvn7b5/5UQg2oHpaR8Hz1iPPou7E/GA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.10
Release Details
UpdatedApril 7, 2026, 7:49 p.m.
Changelog

Hinzugefügt

  • Urlaubsübertrag / Rollover: VacationRolloverService, Hintergrundauftrag, occ arbeitszeitcheck:vacation-rollover, Migration Version1013Date20260407120000 mit at_vacation_rollover_log; Unit-Tests.

Geändert

  • Frontend-L10n: Gemeinsame Partials templates/common/main-ui-l10n.php und teams-l10n.php, damit Übersetzungen früh verfügbar sind; zugehörige Template- und JS-Anpassungen.

Behoben

  • Manager-Dashboard — ausstehende Abwesenheiten: Die API liefert summary.typeLabel (serverseitig übersetzter Abwesenheitstyp); die Oberfläche nutzt das bevorzugt, damit Karten lokalisierte Bezeichnungen zeigen (z. B. Urlaub) statt Rohcodes wie vacation.

Dokumentation

  • docs/Developer-Documentation.en.md: API-Hinweis zu typeLabel bei Pending Approvals; Nutzerhandbücher EN/DE: Hinweis zu lokalisierten Abwesenheitstypen bei ausstehenden Genehmigungen.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturekmFxrMFQus0US44BSrw/0eOzjGU8zutOf6Q4Dqcc/39RNDiCiQOKB55We29dsKBZ77Qkk8fbitvBMURDmfLM21hqyrDTfltj77MNdonON7hcINJKQZG2fGLz3Rrc+10mDQDAiDqVQGOLrpJBQVuA+TxdUEA1C9+z0zwvmHLdlBEgXCw7k/4FoU8aKCA/Jcp02Fjr98PG+1MW5SbOtTs8oQG2iMpRe7Ogo+YzqZtU11KZ4tOr8zEblZeh7oSG+AaIlj16YscKKCWAL3MLmyRvYTXWpPgsu4xLp+AUvTGbSEKUlDeEznDDkGpUvVrd2pTm4Y7xyc8X8c/0WQRqWuioiqRLUHHldJg8MjgL4s7mQkqy95dfZ/xQRC9BAc/cbTceynA8PD5XILnQAVgVRe9hXsji6TgN2EURulrVsBbCN1wCAp/Be9FqH7NYiQYxhmVfYM3kmyMdVe/+owslEAaMcmjT/QcZQlCeJj5SNOXCqVwCsks0ijINP2utN0XO4mlHkCt712QwFAMw86rSjnuX7eA1W6w2OpFjFFobOekDaUgBs8ID4LMgpOWJSGTI2P9AHtBJTMNSrRmsMzQmafZYdBm2F9gO4tz9ktxbhcmBFWpTvNHZimE6Re354pnTOQIQ4yCKU+8VsqYEJxdxe1JYXE2yTeNCKOCcIywL8/hvVS0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.6
Release Details
UpdatedMarch 27, 2026, 6:08 p.m.
Changelog

Hinzugefügt

  • Entwicklung: CLI occ arbeitszeitcheck:generate-test-data für deterministische Demo-Daten (Zeiteinträge, Abwesenheiten, optional Verstöße, Demo-App-Team) zum Testen von UI, Berichten und Workflows.

Behoben

  • Berichte-UI: Berichtstyp-Karten werden bei teambezogenem Scope nicht mehr fälschlich deaktiviert.
  • Berichte (Tests): CSV-Download-Test nutzt DataDownloadResponse::render() für den Dateiinhalt.
  • Team-Berichte: Nutzer-IDs werden vor Berechtigungsprüfung und Aggregation dedupliziert (keine Doppelzählung bei Mehrfach-Teams).
  • Abwesenheits-Badges: Besser lesbare, theme-sichere Kontraste für Urlaub / Krank / Homeoffice / Sonstiges.

Geändert

  • Kompatibilität (Dev): Lokale Entwicklungsumgebungen an Nextcloud 33.x ausgerichtet (z. B. offizielles nextcloud-Docker-Image).
  • Berichte-Layout: Zu aggressive Vollbreiten-Regel für das Parameterformular zurückgenommen (verbessert Scroll/Layout).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturehE0UvSaJEnunYMHOd5u3aR+5MyAg2Pl78l3t75Fx494nh6CzImBfoaswZXb9agJ6Iz1orktgFsKlTqfZoSGNxuZHRiRjcbtC+LsLLQsjONX5i5UOXK6crz87+6TEDAPkgdr318s+w9qHvTic2kdcdx+rpqbBSMIAgU/GuVZjyp4wtCV2Ti9VFR1pFzAlmH95b6WVCQCdTYmWs7LsLY//midoEYCd8JXSicLvr2nobqTL/soYZdR/39931AgpiUO5B9Rd0Wo7NVhk8C59bmlNqkLa8UDZHTZ/Eseks/njP9CdRsgdaUiqIm3libscOPzoFg2abyJpIZUV/nV8acOq8dh/XNNVRuLxxHs5v5FcByrnuxE4G1IbyC/FtB1KFRQlGF+rwwSEzBKdkNCdH5zbJ//gEgRfjZJb/Ijtma9+14jeRub/oLHQx0Mkh27aVMBPbqDI8LeuOLWo4Gbd4RXFknth02gSZpk1/Ko4uE90R44RcO2YUS58qvKQkickIoDEQId9w55FIEyP7LIAZa2bXl9qYZAA+CHCwixsBKi3a+yADg/wWaN4roVQ4LobTjp1adPOOVWbTHSemHRgEsqpboMxRXcrRWan8pNiQrnvTbJwIu9i3Q6zgHtHXe6RviFMzwiMJQTdvLhhHuANr9Lt04cCZjPS2dWfjGCZKVfo7hM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.5
Release Details
UpdatedMarch 26, 2026, 6:57 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturedkvj+LT0qxzHO59iXnzyYCXDEgfS9OMri9yD8QWcQqS/VPzNKFBHIHDqX/2JmnEuQFM6sKf+jyx0QORDIAC4h2XiZoUlJe+MHgZQGGqa/mA/SGFQtwzlxWw2A4Drm1ioGkOIwhGo5Ny0zIogawfyhPtDQX7Mjj2K9x5+OSHQKtQs8LGRiyy7EsVJUC4fWworktCvuqRYpvR+rY2GfSu0CcWWZVItcEYqAfDFl3UvmWag299QrF1g7SOVY1EcoDH2B+O2mOwXwj6JjWNhz4iUkdcbkthaHPwZ12cUTOYLOtopIILuRTdlXiYWqYvLn24yZUObqmS0LbNcyzAF8gF8LDOmp08FxRCo6NY4L9HJcvgaR4qDkOpiC1aj/9FK8LmRnmdOvH9FHIqr2P6eBP4uoetMWoMbW3QAqvizVMDYPe96Qj1m/Cwp2ogV5+D0JOt1Ms02LGHZ3pcBp0vojoUu52pdP+dXL1d0ZN4rzSPEVQboJllQz4dyahtQ55l2EuDdk6VVf35oOPFLt5HqIF84tFYbY4moxafMunMI2lSWeRj0jCxApnTcrjuWDRuG8Q/fv3Za2gtkSsx9XNLPAb6YNOrgKFEeZRtSIp7L2V6shwxn9H4PG2uETboUm44RWkoZO+JZFtNTTlZpij4B5mRvo/OamgruxwI6YgplBQXObSw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.4
Release Details
UpdatedMarch 26, 2026, 6:40 p.m.
Changelog

Behoben

  • Routing/Kompatibilität: indexApi()-Kompatibilitätsaliases für Legacy-Endpunkte ergänzt, um 500-Fehler in den Nextcloud-Logs zu verhindern.
  • PHP-Fatals: Konstruktor-Signaturprobleme in AbsenceService und ComplianceService behoben (konnte die App beim Laden von Services oder beim Speichern von Einstellungen zum Absturz bringen).
  • Reports-Sicherheit: Vorschau-Endpunkte gehärtet (start <= end Validierung + maximale Zeitraumbegrenzung) um DoS-Risiken durch untrusted Parameter zu reduzieren.
  • Admin-“Gesamte Organisation”: Admin-Organisation-Scope korrekt verarbeitet (userId="" = alle aktivierten Nutzer) inklusive passender Zugriffsprüfung, damit Preview/Download konsistent bleiben.
  • Reports-Rendering: Preview-Darstellung für Abwesenheiten und Compliance verbessert, sodass sie zur tatsächlichen Ergebnisstruktur passt.

Geändert

  • Reports-UI-Semantik: Team-Scope auf Team-Overview-/Export-Semantik eingeschränkt (verhindert irreführende Preview/Downloads).
  • Organisation-Download Hinweis: UI-Hinweis ergänzt, dass Organisation-Download erst vollständig unterstützt ist, sobald dedizierte Organization-Export-Endpunkte verfügbar sind.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureB+kiXQiNbiYsWVOlB3wiTffKZj021JMzAUzhQRYuwQmpszoGICQ7cCChEeggNXAMuOsRrPkznqB190jArt5Sfp7zKL5I3Z7IjyH6ur4aAqf6Tddq93/6Vb4W4ud9G30AJhkh3X0PBZ98bcOPcrxiaMrOqHryaIkcQ0os1pJnCAZ5v/zmUZGz/rVHxc0VNUGGvJZnx8Odwgd0r9z3McM4r9LL7n9+CrwtDMOVS/fUwAapkdaqM381pkLCa5BHM8VJd+ARz7Tt8rPVuVBwXDR9pkq38eoD9tQ61QVbCqrfsf4/8LgcbNlrHjWVRrAtUirX38JlJgFBKvmzaORvsgylNFggcrZ7sIx4o29kPPkFWZaUee0TKI/uc3WlThNIj/i4+sVTZ2Um23cfon/wr/sHByJIMOsFrw60s6RPm/XjAxeTnJbrm61ms9a0kKTodDR7puH0guqBQJX/CTJUQxcoPmKcfVqqblI2Ll/efOzi/BHYEEuiMGRVfYmuwtlALuFODD8ALFhf8EYmnB2EyCTLJwR+1bSUQF6/a/p4PP9cVSRKDbfYY3rpSU/QXbM3XTn3fET1dqE98FWEqPK6iNKdoMrcsZ4gkKNMNYKpAjMB9kbemHOVPNCIDVTIkYsVQO/edieH4N3EPouwzLWCvQVqWpb8h7SPbTslAhg45WtVByU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.3
Release Details
UpdatedMarch 19, 2026, 2:41 p.m.
Changelog

Behoben

  • ArbZG-Compliance: Pausenprüfung korrigiert (9h/45min-Zweig erreichbar; Prüfung ≥9h vor ≥6h)
  • Manager-Logik: employeeHasManager() nutzt nun getManagerIdsForEmployee() statt getColleagueIds()
  • Berichte: getTeamHoursSummary() berücksichtigt Periodenparameter (Woche/Monat)
  • Admin-Benutzer: hasTimeEntriesToday pro Benutzer statt systemweit
  • UserSettingsMapper: Falsy-Null/Leerstring-Behandlung in getIntegerSetting, getFloatSetting, getStringSetting
  • Routing: exportUsers-Route vor getUser verschoben (Shadowing behoben)
  • Version1009-Migration: MySQL-Backticks durch portablen QueryBuilder ersetzt; OCP\DB\Types
  • Doppelte Notifier-Registrierung: Aus Application.php boot() entfernt
  • API-Sicherheit: Generische Fehlermeldungen statt roher Exceptions (SubstituteController, GdprController)
  • PDF-Export: HTTP 422 mit klarer Meldung statt stillem CSV-Fallback
  • LIKE-Injection: WorkingTimeModelMapper::searchByName() verwendet escapeLikeParameter()
  • XSS: Modal-Titel in components.js escaped; compliance-violations.js innerHTML escaped
  • Admin-Einstellungen: CSRF-requesttoken ergänzt
  • AbsenceService DI: Konstruktorargument-Reihenfolge (IDBConnection) korrigiert
  • Admin-Feiertage und -Einstellungen: englische Quellstrings für l10n
  • UserDeletedListener: TeamMemberMapper und TeamManagerMapper per Injection
  • XSS: Team-Namen in admin-teams.js bereinigt

Geändert

  • CSS: Shadow-Light-Variable, scopierte Resets, Dark-Mode color-mix, semantische Farben, Navigationshöhe/z-index
  • Uhr-Buttons: Doppel-Submit-Guard (deaktiviert während API-Aufrufen)
  • initTimeline(): Max-Retry (20) gegen Endlosschleife
  • Barrierefreiheit: aria-label auf Header-Buttons, Label für Admin-Suche, aria-modal im Willkommens-Dialog, englische l10n-Keys in Navigation
  • Dokumentation: Interne Docs entfernt; docs/README ergänzt; Repo-URLs korrigiert
  • Manager-Dashboard: l10n von PHP an JS übergeben für Übersetzungen
  • Constants.php; benutzerfreundliche Fehlermeldungen
  • Zeiteintrags-Export: Optional (per Admin-Einstellung) können Einträge, die über Mitternacht laufen, im CSV/JSON-Export rein darstellungsbezogen in zwei Kalendertage segmentiert werden (vor/nach 00:00). Die zugrundeliegende Arbeitszeit- und ArbZG-Compliance-Berechnung bleibt unverändert auf Basis des originalen, unsplitteten Zeiteintrags.

Hinzugefügt

  • Version1010-Migration: Zusammengesetzte Indizes auf at_entries, at_violations, at_holidays, at_absences
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturePf3DfgKP/j8T95ElL4ORpuPFeD3UHt901udriCVI1yQdyRJDTp5Z8tHcaFpLRjjmjW8c1nFIEjrFVTjl5UNnPTTWzwf1+Woci/TtIHa7lDkMftxjIIVMf7khRJ6NGriUQD1WVS6Hqdi+FWafgnIqn7dO728K+lB3rFSlgoCoQgQpjjJ/D+N5yynIi44wiD7F8PngozN58wUdWoW02zBX3W+ndpEZXmrY2srqPndhBrlg4cOrE8cWSUFe9wtwSaopkDZPSl85Wsg7nwDOJGV1JaFzDdBxyHATs3kxJnsntXePI1j/O8bcWR69o45JkDY458TsiA0qweFMx5A3Ioh5K0Rrp4UQREthUP83sEzQCIo9ztzB3oeFr1sAs+/dfauAPLsHWNG3NO70fZ82RnsRKuhklTbL8RQ6gc2a3rqrOLSPypyLsv6+UxyoKwm41cggNl4UnhyUhoa33IjBiEoZDXTfB2d+fNZoTXkOYZdDTKcC9bNMc+mo8guNkTxqAYw8Ian0V7vmLs0uBJ9JYyyy5k8AUd+8ijMokWm/2VKPCbDga4mmZevp3KqSpVOqXYBJXmMzJH2Vf+LXZYjRHTScFQ92bXVz7VRRNoz+LEtZy4QYIT9u+YCIvu7ddT5RZmA08HIWU52W/jWQQiKraZE/Nw8Ks4VQBfB6TX+wDCGadBs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.2
Release Details
UpdatedMarch 11, 2026, 11:36 a.m.
Changelog

Geändert

  • Langfristiges Refactoring: Ersetzung aller \OC::$server-Verwendungen durch OCP-APIs und Konstruktor-Injection
  • CSPService: ContentSecurityPolicyNonceManager per Konstruktor injiziert
  • Controller: manuelles cspNonce entfernt (configureCSP übernimmt dies); IURLGenerator und IConfig injiziert, wo nötig
  • PageController: IURLGenerator und IConfig injiziert; übergibt urlGenerator an Templates
  • HealthController: IDBConnection für Datenbank-Check injiziert
  • ProjectCheckIntegrationService: LoggerInterface statt OC::$server->getLogger() injiziert
  • Templates: \OC::$server durch \OCP\Server::get() (öffentliche OCP-API) ersetzt
  • GitHub-Actions-Release-Workflow hinzugefügt (.github/workflows/release.yml)
  • PageControllerTest mit vollständigen Konstruktor-Mocks aktualisiert
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVdOLtKkuJFOvqioRam3iZGmEiSQrA4Xc99thIdm97dMKFlfHskcRIG34rWiqftbbIh+6CgWWxu+YdQOLSV63qOtZ7rH/rl1x5hnhaR4GBDbTtnE/frmfTJYlpHlKVw9KSyniEEAE30lLl5tuYA/4myl+9N6abL+9oJpQo8nAY2oApVgdJQFHPvUPeaJ6q0Qb6GUkOTwZo/UgmT0cIqTL7Ymkvkp3OGE1nRr2hD+T5aFyXu0E3IfS5m+eete4Xdn5TcSYzWVB3oBdMxmRTUtracW4ar/ZstAIwsVxmrLcW4/2AgvUQrrAZ87EBNNoiekUF+nJogWpFeh1n6lN7ZbuUSQJaQtlquovukPbnOgO1AAFe3EMG2DmBtlbyn/jt8/DY5ql8VTDp62eKDJxYTodidjAQYkqMEve7XuTtPgrNwG9c4hFNYS5fIGz07ER4otxErRKC25d89ql/bkSDre0IZPw/gTgdEjx71iD/UZBf9b2tzhMKpNfdtlkT0BV1mNOa376kZzYOk9DcpAaOgobPK00gb3ZeeODGn29N8LEvEAI5SCoa1m7eT4B0KbMQNtgDEUNZrrvRf3Tzpb0mL2QUmf5i3sn10IjQ6KdTDor1xWFEYIF03M240Dw5ml/UUrDgvXI9WZ1BzgyNDe2HAVeNPb9akpPHUWYkoe+uOoaf7A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.1
Release Details
UpdatedMarch 10, 2026, 10:18 p.m.
Changelog

Fixed

  • Resolved duplicate route names in absence API (absence#store, absence#show, absence#update, absence#delete)
  • Corrected settings class names in info.xml to use full OCA namespace
  • Added declare(strict_types=1) to routes.php

Changed

  • Removed non-existent screenshot references from info.xml until real screenshots are captured
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturec6nuFK9N2O61bf1GpNWz2G2FDt1GzTRzd2pXna6x5E/HI/m1e1dt8TheGnhfgYm/TY/o/W539hak3svOJbJmoJr/kmd7xVWRGnZH/PDBjROe5kwRIwWdZlR3z7DiOyTsZo44DBLvVFEaRMAjF4PpVpJxTIA0xV59d3YJHyFZXbMPxSvAbZu43bAjWU6kVGmfaKUOrW5d592aApbxQ+mwJS7LwFMXlxGSzyCTwYL3bMkwormPPS64RTJtrPhvImU09ACMsjwgERAuFGlvbGj8CiuXzAWoO7ISyxcsqiaw1jnA5OIlJ+hnQhUdYHtkIzdwNHxw4ItSBL3pSJjhwIyrs4zZRMkOVjTqDluDfmvbx3Ir9cglVHlMGGTOOJtuyU0PmL0Fo9HZ2R0Noz9w8T3cpetxRG+B+mSWapUblbM+BT6aIvfHMjSzvI0qjwzcczwVzkYJISHReObwYFpeVs5W7cW1gXY2mx42Q/fPqDkrM5wEiuYJ98QG7Y67uhYZce9wmAp0Pygx0UJILj4fNPLuA27hVOp3++x0rOxhEl1A4v0tgiX5pVRYK3qwf1vHFl3zSGgldQs2WUmJ6CoPWbIE6hzmtRUGMzSOnKEK+2eLHej/Edzdo75nVZd6maKXVAY1L+z74IK61HvJ6kQ0QXFO7urWBZJg+IfxzR6W4mrvZnY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32

Nextcloud 32

ArbeitszeitCheck 1.6.6
Release Details
UpdatedAug. 8, 2026, 11:25 a.m.
Changelog

Fixed

  • Manager employee absence create (NC 34): ManagerController::createEmployeeAbsence no longer calls protected Request::getContent() (fatal Error on every manager sick/vacation record). Reads the JSON body via public IRequest::getParams(), matching createEmployeeTimeEntry and the employee absence path.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureRorK2I8JwFLha7AQa/M+VQXBDGpr4PrPkbl4tAE3v7ZoNxgsZEEfFeLCgfXIgXmdxVH9pB6j9VjNTkITjUczkV1OCDlrHDnbkwQiJljpLbdxMi85TY3J0IazHyBVlMJK5pEHGNfBbowdk4hP9ePSqirCttayNIKNTEkWD8fh3yhv9GPaf/yvVY8sdwNC6MrJCKW5Ww5GeoEc8SdDqKXe8tNi66sKBmxZ9HF6y06Xwjtxr68Jir69HZGpdIq58aB0tTbYF6ABFof7dxni4YULDSXKpiK865quxaG1Rl93SyGR7UTgKydzSoQQC7TuGCapyyM/Jifv4/2mFQeOoW30dWwxqTTPzdck2QXLt8Ix0KFK4WDQtGcoTAhGhuo1IBwvR/I9wH34D8bBxmTbA4kfZ0F/DdA9lzVt8S56xuJZ7KgDj5yr8YLdbOBiODLg4Z2PMCnZociuz3eqSd8bfjJBqd9LmOGbHg+d8OkzCLF8sW3Gwnihhmbg5HPQdps9Wl5umTL9sjFadQtDr+tWiIIqIqbo1++9L6jBFCpUb9+cmD+08t+HzLa1F+2tqAIBeAvIld+tPs8CnhapsjUhNRu1K12CP1yYoNMx2bb4s7hfM3xNZlNk4OPIlGFpg8OVH0/BbJFgg6VGzi4mwA5zUFTR9PKCN7wRoVIaNZND9vEYOEg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.5
Release Details
UpdatedAug. 5, 2026, 11:21 a.m.
Changelog

Fixed

  • Admin notifications layout (HTTP 500): unescaped % in premium help copy (50% = 0.50) crashed L10N vsprintf → guest/error shell (body-login + guest.css) centered the sidebar and checkbox labels. Literal percents use %%; JS placeholder strings go through TemplateL10n.
  • Admin notifications interaction jump: initVacationUnitMigration referenced l10n outside init() (ReferenceError) and soft-keyboard reveal scrolled checkboxes/radios into a visualViewport feedback loop — clicking controls no longer throws or yanks the page.
  • Focus/select page jumps (global): soft-keyboard helper never scrolls for selects, date/time, or desktop focus; only reveals typed fields when the keyboard has shrunk the visual viewport; jump nav stays in document flow (no sticky chrome) on all admin settings pages.
  • Notifications page clarity: six card-level jump pills with matching card titles (Absences & vacation, Calendar & email, Overtime alerts/bank, Hour premiums, HR office) and a one-line lead — same words in nav and headings.
  • Premium categories table UX: fixed column widths, left-aligned category labels, proper checkbox touch targets, and % beside the percent field (no more stacked/centered mess).
  • BANSS vacation-unit migrate crash window: pending flag + committed audit detection finishes the IConfig unit flip if the process dies after DB commit (never leaves hour magnitudes labeled as days). Heal also runs on every getUnit() read path (not only Apply).
  • DATEV premiums vs closed months: sealed months always export frozen month-closure premium buckets (NN-06), including mid-month ranges; half-open exclusive end from ExportController no longer bleeds +1 day into the next month.
  • Anniversary mode switch: calendar→anniversary requires explicit missing-hire acknowledgement when employment starts are missing (VAC_YEAR_MISSING_HIRE_ACK_REQUIRED).
  • Vacation mutations during unit migrate: create/update/shorten/approve/cancel vacation refuse with VAC_UNIT_MIGRATE_IN_PROGRESS while the migration lock or pending crash-window flag is set.
  • Month-close premium seal: policy load + classification share one exclusive azc/pp/policy lock with admin policy save so sealed snapshots cannot mix versions.
  • BANSS migration UX: visible 7.7 callout + “Use 7.7” control; confirm dialogs show the conversion factor.
  • Employee app hours preview: debit preview is hours-only (no holiday-blind weekday estimate).
  • Anniversary approval lock: FOR UPDATE scope follows hire-anniversary windows (not blind calendar Jan–Dec).
  • Vacation year mode flip: refreshes open allocations for access-allowed users (AC-101.4); audit records hire-ack count + refresh count.
  • Hours-mode rollover: VacationRolloverService receives VacationUnitService so carryover writes keep carryover_hours (no silent clear-to-days).
  • Migrate-idle on balance CLI/rollover: import + automatic rollover refuse while unit migration is in progress.
  • Migrate-idle TOCTOU: writers hold LOCK_SHARED on azc/vu/migrate for the whole critical section (withIdleShared / absence shared hold); migrate still takes exclusive.
  • Year-mode flip race: exclusive azc/vy/mode + migrate-idle shared around config write + AC-101.4 refresh; reports allocationsFailedCount; refuses during unit migrate.
  • Bachus admin UX: vacation year/unit as giant choice cards; long help + FIFO/overlap/DATEV collapsed under “More options”; short first-paint copy.
  • Premium policy busy: concurrent admin save returns HTTP 409 PREMIUM_POLICY_BUSY (injectable ILockingProvider for deterministic tests).
  • Premium tagged_multi: no longer sums money into total_valued_hours; unique wall-clock total_classified_hours; DST night-window coverage.
  • Mobile clock-in (Kommen): mutating API calls now always send a JSON body with Content-Type: application/json, so reverse proxies/WAFs no longer return opaque HTTP 400 without a message. Error envelopes include stable error_code values; mobile surfaces server messages (or localized fallbacks) instead of English “Request failed (400)”.
  • Web / desklet clock actions: clock-out, break start/end, daily-max enforcement, and dashboard desklet POSTs now always send a JSON body (same proxy-safe contract as mobile). Desklet and widget errors forward business-rule messages and error_code instead of a generic “Action failed”.
  • Desklet project selection: when ProjectCheck linking is enabled, the dashboard desklet shows an accessible project picker before Kommen and posts projectCheckProjectId with clock-in; daily-maximum callout hides clock-in until the next day. When ProjectCheck is installed but linking is off, the desklet shows a clear neutral callout (same guidance as the full dashboard / mobile home).
  • Desklet template vars: workspace partial reads $_['deskletConfig'] / $_['l'] (OCP\Template assign), so project options and JSON config actually reach the rendered HTML.
  • Utils.ajax empty POST: bare mutating calls via ArbeitszeitCheckUtils.ajax now send JSON.stringify({}) with Content-Type: application/json (no Content-Type-without-body).
  • Admin kiosk/license/tariff/holidays DELETE/POST: shared normalizeMutatingFetchInit forces a JSON body whenever Content-Type claims JSON (or when the body is missing on mutating verbs), closing the same proxy-400 class on revoke/clear-license/holiday-delete paths.
  • Mobile project selection: home dashboard and manual time-entry expose ProjectCheck assignable projects when admin linking is enabled; accessible project picker before Kommen/Weiterarbeiten and on create-entry.
  • Today’s hours: getTodayHours() no longer clamps to the daily maximum, so UI and error copy report real worked hours.
  • Lock conflicts: HTTP 423 responses include error_code=locked and a duplicated message field for clients.

Added

  • Companion contract coverage: T-MOB-02 additive-key assertions; Kiosk 1.0.6 version alignment (Employee 1.0.4 unit-aware remains publish-ready off-host).
  • Mobile home payload fields atDailyMaximum and projectCheck for companion clients; callouts when daily max is reached or ProjectCheck linking is installed but disabled.
  • Dashboard widget clockIn accepts optional projectCheckProjectId.
  • Desklet config exposes projectCheck projects and l10n for the project picker / daily-maximum notice.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureBSyYbL7wN3/nmA1S//VEI5bgCaMf6YYxvSgfSulJAqE4TLWuk5nw2EUqAPA175tUddw2/8StCGbQMgJxduw4ktCwHbUVeLS7Qf6EQneT/YJQgWQoLlgskRE6awPaa0qyvzsLAY/iHIPadw4CBMlMwWoLnXhH2w9Iix753bkzog6VaKqMxW62E/HDw2WtUXkXoC4RuWkOJ5YJOZ4d8ctaccIXze/dUwW9tQrA8wtYruAv/8X3xM8F1tGx7wQVeR/Xz8/B24TyN6YWvuDKloVayIPU92Lae40mdv2ICfTeqCnV4zuYtjaTG3IoiYliXV9F4o8uUAK0n5YaJKvHM7TcdOmflARfXWIs21cP9saJGiyaTCQFJVumETaHsX3QWUXDxoI2X4aAcoAYBuSADMhIhFS5SVXBYZjOVMUIIrPt6/zq7XuWZJpk9ZydIY9GM3oGmPzeC14HXOtXXLP/E8cpVYUrWcDMfQPVlAYjj/pqvUmp0hi/2fuDPsY9q9ce5njRG7dXQQoQiK3FGd71xICgFi2HOCYcf4Mo/M0HYCaPqe+GmXHCUMRt/aVV2ElSW/LMu+ArCPpGLHoi/DkT22KbflVNd+CgdfBq7+F6dwxcBvVMcY9TNPCHmsdE5DKx3ZCcun/tSXRKOOidUqRiSd94oiL/jjECVMN8xxX0xf3UHZo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.4
Release Details
UpdatedAug. 2, 2026, 12:13 p.m.
Changelog

Added

  • Portfolio access door: Administration can switch between Open (everyone with app access) and Restricted mode with explicit user and group allowlists; deleted users are removed from the allowlist automatically.

Changed

  • l10n: Expanded EN/DE catalogs (DACH holiday regions, clearer admin and report copy) and refreshed secondary locales.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureSOiaMXZNekxFez7VU+BALHSm6OTEH16YKXxXUX8I3HFV+ZVH1OTmMXgKgG9dVyKmlSyWkDMpWLhd0zILoPj9CW2/kt06+Vc+ACA3FdvS9qutfWNRvaAwehJv1Udvvd5IS/Kf03kX1kgQgRgfroPI/ts91L5nnHVsA4dwIDU4pEXCEFdNykVEJfXoux0uvXQGhLSp8KQhMR9tN0JIY4CgXiHcAQ0Ra5ptfwTU7YUrYwObu72EAaUvSUZuoUdhq+vY8cYTuw76k9HY1LXIe5rwg4tm5DxPmPxHRHdoVNCmCNu2j++rs+2GqNW25esEk+6e8pdEV2fZFClNDFaUsNBda5Fy8Y0RFVl6T2K79vcILVvnU6osegWQ/3Q/B7nDLfNpCJ4ggp6AkfgsurCYVraSz5fXkJiPO8mn0Ns5WELtZhn8Wvp49g950ai7Q98YbIkzjlvDm6KpLesjy+dJ+rtDNqvhYObV+YTuwOOZLytHoGy9OhZy8pRuavwLoWYfZ0BFKFDdcBJGB7yj9+du1fZTlHEJ01b6mii0s3if8a21RcuEKsCbmiR5LjVB3ACofuYUhfJ07B1XSikkYqsaO02Lccya1DpJOodYwXmmjdWQL/Hr6qjiMad4Hn9yuzgxYluZen0vMpIRMGTZC90SI4/KYA4q+VLWB3K2XI6qmk2UdYA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.3
Release Details
UpdatedJuly 31, 2026, 12:19 p.m.
Changelog

Added

  • Companion API floor: OCS capabilities now expose arbeitszeitcheck.companion.min (1) so DutyCheck / AudioCheck mobile clients can fail closed with app_outdated when the server companion contract is missing or newer than the installed app.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVn8EWsz1515elQgMot1LvIlsZA6IsVOUHRSGG0JsXbOZNHwXVupMo/n4TaNxcQGd9NWAFZRCfLqvqZrhuz68M0UAS2f4HhNV6oHId/FgVoEp0BqOh6JBNboReVsBWUM785PZiPHgybmAZPkHAkTfnp26j3X39tQHq7fIVLvfzFP2UayidATIgF6V8zDJ/3HnnujVyhhWtHWlYETkovnD4rrD4yMrNpf1D6LeyO7a+WedmSMggKSrxC/Ik7i01siE9HJuz9NqbEPXMtUrjRTn9MPaTDQ22ENrdTmkN7ShGN9iBevEfYyeBvAZnw0beh/eSdAYQT6/kKNsY8RCHiXTt6rQl+KIuylm8KvttahtQ5RvXzI7la75eAhDZW0L6IwQW6S797pe/74yhTS3UTss7DdXmIwsM3pq874zXaiVH7eEfbY/vK3g1NOQLwgMi/n8+Q4+eTSWs5xKvB4HKm65bUwCksowxYDmXHtJjInv20pM5kCbtSbF3bbjoTxnU4fNgeTjt5bDO6gFrsyQPmtPZrzOMtA4xPbHgR+evNz0Q4Uv1XnP83AsEZAiWVeIzDap7C1rAiuBfXdSm39snmThW7fAf0uNbtpMwLVLQIfhQ3hM/cS7Rsw5BzSGWRhTRnU91BFCQ1MtTPiM2WidwtXAc/4/rgd+EBsbn+wAevOst9Q=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.6.2
Release Details
UpdatedJuly 29, 2026, 6:34 p.m.
Changelog

Fixed

  • Austrian break-split UX (web): the time-entry form and correction dialog no longer show “Compliant” for illegal AZG §11 splits that still sum to 30 minutes (e.g. 20+10). Client validation mirrors BreakSplitValidator; the server remains authoritative. Bootstrap complianceParams now includes allowedBreakSplitPatterns like the mobile capabilities block.
  • Admin settings region consistency: country→region repair uses values written in the same request and skips no-op POSTs (empty body still returns 400), so unit mocks and concurrent saves cannot wipe a just-saved region.
  • Compliance PDF export honesty: format=pdf for compliance reports returns HTTP 422 with a clear error (same as time-entry/absence exports) instead of silently downloading CSV.
  • Capabilities accessibility claim: advertise WCAG AA (matches product/E2E target), not AAA.
  • License trust anchor: AZC_VENDOR_PUBLIC_KEY_B64 env override is gated to PHPUnit / explicit AZC_ALLOW_VENDOR_KEY_OVERRIDE=1 so a compromised environment cannot swap the vendor public key on a live instance.
  • Cross-product license rejection: AZC2 payloads that carry a foreign product marker (e.g. deskcheck) are rejected even if the wire prefix and signature verify.

Added

  • Vitest coverage for client break-split evaluation; PHPUnit contract that AT web bootstrap exposes split patterns; suite legacy-isolation unit + integration guards.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature1TSX5RmOZ9/ZxeuN3pqf+J5X53S2citY3TCgMQuU6wd8Vz+fOszY1q7TJ7gYTthLJzBb32jfrRWanwVuUvjCu4ZbCE0mymuHsUJHtTJuEvFrEkcXyFE+9eEow1jIUqKljhPhnrUXEGigKGk0r3WxEYJoQpctvVdQ3sNdxQnDQOVpc3l0qitegM/+Y62bVRoNuvBisoKojpaZKaAjrBXzN9dghMbtIqmJmaQrJncjLlEBcT6AiwgxmeWOOp31PuIo367Cub46ogY0WGRj7qZjLsOmzVjvL+XzzSI/PAzyMn1qwvlJf/vl+go0jXAmcpY2/G2MO6msn8TH3CB4VDew5fl4ieBCxgFy4Xn6PklT1w+Lgo5fBeR9qkyNJIE3YvF21gw+fd6RVLrvWbBQkN1kMAsLnlCeXlaWGSo8P1tJfp5zEkylMCrJxwcUEX83j+yBKKDP+AVP/AnG64mh6MXmMAd2FRMthdBihOgx1k/hYkv8qOsezPk4lUEBZcv1LduKA6bopa7iY/NdbEj9K2F+KGBI4XlrO4JlJMKNn6h+sfwr+1eysMGwWTTlBX58lTuZhUXyDqdk653suYaLUWWWVt4qp+GaM7zwOIsUTx+HRShduuyiE1J4M6NE0lyy7HYNEFLggCAqFAPhy/QwzDmNZJQBXfwyBwjce2iJZ1BHAs0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.23
Release Details
UpdatedJuly 21, 2026, 1:03 p.m.
Changelog

Changed

  • Kiosk pairing code TTL (temporary): pending terminal pairing codes now remain valid for 14 days instead of 10 minutes (KIOSK_PAIRING_TTL_SECONDS), so Google Play reviewers can pair the Terminal app from review notes without the code expiring before audit. Admin UI copy and all 10 locale catalogs updated accordingly. Revert to 600 seconds (10 minutes) after the Terminal app is published.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureK8NCV7JxMWpvTxVMotquZ/rRoRW4+5gPIIoHxoI2/O2WRrPc9QyF2idfMvbNyPDLyl1+yC9vrMeBcPcalJtRJN9j77BQlHtZ6puXYzvaxw3ZsJcbhVB4/wltySYueOyYXl+U6wrgsbD/vLODvzYHOEhquXCl3KsffNto6rpK3k32L1I4T6jc9rIFOIhFA4NHFK+D+Z+J8tID63miPI5F0OjBRTBXEKM7w3FMgf2JgrSAFop6jdYStfHARm3PR/W20KhJdwPTgUYo1NvRW2YiagUAj9GUc6DO0LkAUAXOkJN0EzquWEb+YvjaQH31VagKTkDN6Y+nwNz49kLsgoq8dWPjc/pBGDTtLaVsz0BaRJ0BVGeJmxwiFm35RNfbkcdxwIxjK3P37gl/tmrX9nZedShGyc6o22wy7gU0sXf7JjYT8Eaq2hsIXesxX+4cQwktbz9CZWYvZIZdLiJNyIPT4onuwQ8AcQf8KwLk0E6CJ+yXLCoSAHQOqe/GNqAOFLeWXjsUKsUujJlWt5SCKIjMiKccm4FMP1Fxpv4DP1V/xt6Qh8/8+wdjRU3qnsopZD4pC9YbPRtHOCzAa00z+etMvtF9KT9qfij65zAOKYOBeDLwwx5Un/Wys9sMnWdfYyA3JXeQF0r4XJ299M003AXlu4cqg7AObMZyRY0FXffJShk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.22
Release Details
UpdatedJuly 21, 2026, 8:01 a.m.
Changelog

Changed

  • Kiosk stamp errors are specific instead of generic: business-rule rejections during clock in/out and break start/end now return stable machine codes (KIOSK_ALREADY_CLOCKED_IN, KIOSK_NOT_CLOCKED_IN, KIOSK_ON_BREAK_END_FIRST, KIOSK_BREAK_ALREADY_STARTED, KIOSK_NOT_ON_BREAK, KIOSK_DAILY_HOURS_LIMIT, KIOSK_REST_PERIOD_REQUIRED, KIOSK_ACTION_REJECTED) instead of one opaque KIOSK_ACTION_INVALID, so terminals can show actionable messages.
  • Detailed compliance messages pass through: rest-period and daily-hours rejections keep the detailed, translated server message (which shift ended when, when clock-in is possible again) instead of a generic phrase.
  • HTTP semantics: kiosk state conflicts (already clocked in, break already started, end break first) answer 409 Conflict; compliance limits stay 400.

Fixed

  • Kiosk error copy translated: the new kiosk error messages ship in all 10 supported languages (en/de/fr/es/da/nl/it/pl/sv/nb) with full catalog parity.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureRlVyIvkEA56x2gahFj22+RQKrvgzWWPNmOR2MfQPp6zdnc5BzGS6MyfsPMqp/ctvm2RBSJUAAsODPdKCLf1Sh0PoRDTBe/hWJDO3jXeV5aEz1PSBnmDf7Sldoac+88v6VxjtW9kYRuICZK9g1wqg0dG+B87+WKUs8I2cuGf0sAcvWWlrXWFfC/bDUzsrFrRUT0mjYWvb6Y22/mFPycriZN6OmBoJe3xSgpbfgO0ZCsnQnUzwUqRyg0K/LSApJvFL7l+pUmFJOztYI8us/tbyeY9Fik8vHfXH0xM1K0Zi6j2AOhNDIdjNSxSXvbTxZRFSLIAY/iIlvj4DNXvQ3zhZTe80jCZ6P3hQSJKaiubbty41exokyBzsS/NEwByJ8QiOP57fN+gGSt30WoSMZ736+dyQ80iStyjZHOeL8jtX8SR7leiArQ7mUWqMbiAMkc5HRFXmIXXQi4yGjGzUtq5G/laHkn0t8Y7FyLVZ8xwWvdEpva1jEu1xPiRi8mSYpt3md3Iq6U2I1DdHzj5C74+bAloXlApLOkspaVsxAATj1V28zzGAdAdVEtnyYhLw1Qd5AGsj0XdwI66h208gD+O66A/WY6Ic0QfNu8jrCMP4C0ncCY9wFgmSKN0EJWxu9gvoa4Im2S6qwVUJPnYXNLCjbUEawXHgSoKITTWFcmc3Vlc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.21
Release Details
UpdatedJuly 20, 2026, 9:08 p.m.
Changelog

Fixed

  • Stuck badge scan cannot be cancelled: Admin “Cancel scan” no longer depends on acquiring exclusive DB locks. If locks are orphaned (crash or pre-1.5.20 truncated keys), cancel force-aborts: clears the enrollment, purges known lock rows for that employee/tablet, and returns success so a new card can be enrolled immediately.
  • Start / PIN / RFID blocked by orphan locks: starting a scan and assigning PIN/badge first retry briefly (live changes win by waiting), then purge the stuck keys once and retry — instead of looping on “already running” until the ~1h lock TTL. Live locks are never purged on first contact, so concurrent admin actions stay serialized.
  • Double-click on “Generate PIN” could return HTTP 500: a unique-constraint race between two concurrent PIN generates is now mapped to the retryable “busy” error instead of an unmapped server error.
  • Cancel hidden after reload: Cancel stays available whenever a tablet is selected in Kiosk admin, not only during an in-page poll, so stuck server-side scans can always be cleared.
  • German translations broken: l10n/de.js contained a syntax error (strings appended outside the catalog), which disabled the entire German catalog in the browser. All locale catalogs regenerated with full key parity across the 10 supported languages.

Changed

  • Kiosk maintenance: expired incomplete enrollments are garbage-collected every 15 minutes so tablets leave enrollment mode even if nobody cancelled.
  • Busy copy: no longer tells admins to “cancel first” in a way that implies cancel itself might be impossible.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureXiGxy0+z/IJbzrL+1Yzg5ixEp20L6DG6uicf5NP8MNCA7dfDJrGUdjbv3Bd3NHATtTIbmNJWiL4N0u/AFQj6Qb8HRRMNIBKBQpamATbxq5FfIVXCpSOpfMHT/sKjVq3SxCCdgV1XB3NqCbEtHuZmSH5mvNBfI0Nu/ZO584j2DM4qdvaDXcqyf0N69NUQuP8jiCEPjJ40DHNXfGTqnx4ExnnaBrfK6t+mQE/aFiezxGl4dH/JNWE4xikVbMWAdSxzN12YgI7AO2QyYk1TAeY4pohJwp+tclEyIkeFcLbFO3Tu1tQfHcKKCYEsNEilUF+k4eFg6xlnxDeU67EeWkpg4nxTuADqgx3myJauVioj1Ewe9HaMjXz5YmtpNPwYTqBK+sfU5GVoUTY0Nmmx6LlNOQYa31agiakLWwBV5SL17dNfOOjC5KooNHzK/CaiLmQupDmEA7cgA4oiwOC2cauVuxT4RaOKnKxWvp0rRErOkV71+oqyrwx1TcGIWx1YH0Atz5OujGrzm/b1ZlCXmL6AJm+qeOuA9lEa4ABbyZRBnO2G3Kec+oo8KmwJYeLjYZKj7MoJN5tho97ZK0yDIziW1YrGT6DcgL9jwW87W+r/jY2nfQ3w6aysWj8nSb21yF3e6hCKyMBgjLW/UFQTF4lxYXd3wfBPlgaWuk+GWxKYSaE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.20
Release Details
UpdatedJuly 20, 2026, 8:14 p.m.
Changelog

Fixed

  • DB lock keys truncated at 64 chars: exclusive locks for time tracking, absences, month closure, entitlement snapshots, and kiosk PIN/RFID/enrollment now use short stable keys (oc_file_locks.key is VARCHAR(64)). Over-long keys were truncated on insert so releaseLock never matched and mutations stayed stuck with LockedException / KIOSK_BUSY until TTL.
  • Stuck lock cleanup on upgrade: post-migration repair ClearStuckKioskEnrollmentLocks clears legacy over-long lock rows left behind by older builds.
  • Kiosk enrollment cancel races: cancel uses ordered user→terminal locks with short retries, returns stable idle/completed/cancelled outcomes, and no longer deadlocks or leaves Admin on a hard busy failure while a scan finishes.

Changed

  • Kiosk admin enrollment UX: numbered wizard steps, clearer assign/cancel controls, and improved enrollment panel feedback during badge scan.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureElgAE38RXS4k48RHQq3yjxfRczhfTySf1c5Q/t9Q/XFUzyDixdpFnqLPWxkRj0XaQ0xXIBaSsQza7zImW3cBAsoadS+o1O8eF5XlOJJJtwgBI8ucBJ+3y418M7XteL0O/6dsKL6kSIaUfaosb8r+ckSAhWK33dApIf+7x7eyqx8ueqNURmtTlGssUyDyPFJ6pMZaIpp9/AM1glFMTp3n7I6eDnsEFepyHew3NiNo4uaSuxSvKm4L7F7f+R4SEPWqmCI9bti6UR87n8Vo+OLYyC37Y0amL7K+m0Beh+RBSkEZE+7esQ6uVVFg6YMVJfoHO2UutCq2Z7KSr/z7a8cFFoMauK32S6bvzCWMf1aB4ogTOLzpB0Kngpd/Q0oSZrtFQjYomioRKk0kb/VCapR2jtRnTMXxdmwfPjWXkreWxpFskpiyRKWWTLKBaNAMWaOLQewtLdPhxaaGSmH9CTicrkQG8ssHsdU+7/y6aDkcSirhVEyqdEc9jEcdjX5vjPVXzZXA3Y0S53c3r+xnoA3bqx/aSdag2HFSmFILZsxJaKtXQGMbYwMF/SmUmK9lxA3r3EwtYW2Zf1qUDiWONOO5amOcCdNvUsN/RRfrI3o4RNDOTdMYbmAGnUGOKCkU/LOH0yLKnX4KIGnkQdTsmTFBS0P6G8B15m9j6PlPgQfXMw4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.19
Release Details
UpdatedJuly 20, 2026, 3:48 p.m.
Changelog

Fixed

  • Kiosk API JSON errors: unexpected and rate-limit failures now return stable JSON machine codes so Terminal clients can show actionable messages instead of opaque failures.
  • Stamp session recovery: one-shot kiosk session claims are released when a stamp mutation fails, so terminals can recover instead of staying stuck on a claimed session.
  • PHPUnit full suite: fixed a fatal from a redeclared template helper so the complete test run no longer aborts mid-suite.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureG2fJROM8ehTinPOpxRjAiqnMIVmQlVdPCsqXsV3UymF2qWHJ3bqZ1K5MroNW4h2VZuxvgpLJqjc3h0TS7pI6cuwO5/+cvlk2U3Wd0k6jQw/WjJmbgCnLoNoexz56BxJLzeRywusMxQWTa7Dq5AS6B8oOujZ8jngQIGq6iS3XMkjxYCClE5VI010tvhN1Y4sO2J6T74dTo+HoYe8vo37ijiJAwL8L9i0aSHlitoKi9PyL8xvpYYYZ+vf0twmqnDE5XsaUPIFPTJNC+UkyDzGQYQTrzZjts8QOEll2z7Gq7/uhWOAJ9TiCnHn+KRuuEs5ffP23x+bwd0THZBIyl4m6L7Dwnv5DnZrysYd5Zf65Cco9/429VHCD7qciLbOoT+rOC4dwIiC9U5fTTkLnLuTqM2CfB2WJuwwqYIN87afGELrlY9+Zn8/B5pfraX3C2jOD6+9/iwLn2zZ1qrep4XKUzJiKPM9UU7oE6OOXflJ1T3MR4rqT/lQNc9A8Rw6N18qk0418hCVyuDcYBP5SzPj/AAxJEF/IfHFzHqguD0PC17MBSXMnQk1G4o4BgoLsGOmphhtpTxQqpXeDsDrxd2lcjyRGi+PWR1GyIKhVxE1LZQebDYXmZJf4ykSiok9eFdcxgt4aVTE5Nfuw/0w9B3Tth/rmo6SsgKb+HKNgZmt5hTo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.18
Release Details
UpdatedJuly 20, 2026, 11:28 a.m.
Changelog

Changed

  • Full-width admin shells: My Settings and manager month-closures use the wide page shell instead of narrow constrained layouts.
  • Audit log filters: redesigned filter row layout (dates/actions, then user/action/entity) so fields no longer collapse into empty grid holes from shared page-pattern subgrid rules.
  • Reports export chooser: replaced nested badge cards with a theme-safe radiogroup of full-width options (solid icon wells, Selected state, keyboard arrow navigation).
  • Admin / manager surface polish: shared stat tiles and layout tweaks across dashboards, license, kiosk, users, and working-time models for clearer hierarchy and WCAG-friendlier contrast.

Fixed

  • Audit log / reports fetch races: ignore stale responses when a newer filter or export-option request is already in flight.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureBzLEZ4ZoxBh/uruDMsv6YAhJMZMfAzxeeyJgfUQ+8AOmDLxKmVuo7e4eKhVBygC3Sanoy+UgKgobHS2XzHPJGHQGMZ3nE1n/R+qCXtyL/bIuJkcHn9YHebUm3ptl6OVVbr4h8bDPtjJzDz6te10Q07c4mehR8/GR6+rz4rXHS/oQXb2XKAAs7IS15tDgn63y1uoCE1Wm6wSGGC7qUv71JjSsEgbAinr7K5NEgt5rQApVuaLp0kxvzSnZTcBfM8135izvptnnPaHB/QOTEzWzgr+A286fZM2DrDl1dS9/TmPRoHiaV+jsySN6tKqc/vkHWKgjGeDxcxF0lt4k21v9FVNYzA9UNK12qz/WI+KC5QynvYvGjk/RNCKaosTMLtWPCJsMwEj9DnW5zQ4Y7twfzr0KHbK3z+yL4K/cCATqqeBXESgI2icj/tYx8ghO7bmsR22MBUcs6FfU7ReG1lqEsd9lKfbKZA0qmS90ypLXwy8jODxnvvcFOOo19+DpPA4GPvtr7wgvYdlvpXBzWLguwV1ksmtcYB+mHV/W1v4h9lR0i2/ptjDn3xfDkp/TB6ZVP/AvHqf7+gZZYS4OMB6aJBC8b24MvN1pHihJHqC+dzx+0WTj2i4W57yG+abnaE/LM7TokkB2xdOCSDVq/wWaJIEwlOzXuvPkc4Y0+wlVCZo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.9
Release Details
UpdatedJuly 18, 2026, 4:47 p.m.
Changelog

Added

  • Dedicated admin user detail page: user editing moved off the users list onto its own detail view (route, template, and admin JS), with clearer navigation from the users overview.

Changed

  • Kiosk admin enrollment UX: improved enrollment polling, status feedback, and kiosk-facing copy during badge/PIN assignment.
  • Kiosk error messaging: clearer, actionable messages for common enrollment and credential failures.

Fixed

  • Kiosk identify/assign races: identify and assign flows now take enrollment locks so concurrent admin/kiosk actions cannot corrupt in-flight enrollment state.
  • Credential assignment under load: kiosk credential updates are serialized with enrollment so badge/PIN changes stay consistent with the active session.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureBp1Hm0lGcDtG8b3bi4qlMBJpvwwMEf/5grKKp5x6YsyBvy6nQ01+DNKhVb4jicPFWfsk3eJ7SlG0TReohIuCELyydXtc0EqNfx1DN0lAeNoKvuNkgS+StdDJ4KR4EGgCq68y02oX9r9lMK/V9UUfsTazyRkpHjl8AlOgt2B7Fvg+/CWof158M487DblxTaGuDu2ddgmGHv00Noc5KLezuIDWo60fwfP9m+ypf317gFcZTebwyHiY5Z5AH2XzobPQ3P6d3/d43RsyOqPa1VuTNh8lHXLTQiKnVMLxGYDzjxss+5cPafsoXOECbEUeeMCVfixXTedPuDvywyyb4LZhKaMJSiuMhupUzh20K3EbuEz9FeZkZAqhaGZPEvinaprUJ+7Az+0Or+2NM3DPPQItZJdtx8ZFPVc0oG53M+CQHpYIpDQq5i5obFU0gCCaVTWBgs5biS5i+vK77Y4tFaoUD+yxQ2XiIn2BPyuoW/s2RFIwe9Tq9O87887J5bbHUlx3WpJ5Ket8pLHXDHlftoN3GX+M+6CYMtF8UPVOU8rXiucruEcTk4XxonRPimtw8osFE78acp9NXMfFJxt4crdQ6WYv4IF3SC9IkBmZzUtmKA8M8o/ykz1HZsdwVaQ09ueYGJeX8cfqw96C7IDA6f9KjNAMYMFzq0LMiFU9GYoLwCc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.8
Release Details
UpdatedJuly 18, 2026, 11:18 a.m.
Changelog

Changed

  • Mobile / widget home payload: impliedDailyHours (contract daily target) is included alongside weekly hours so clients can show “Daily target” like the employee dashboard.

  • Session CSRF restored for browser cookie sessions on NoCSRFRequired APIs: mutating clock/absence/export endpoints that stay NoCSRFRequired for mobile Basic auth now re-require a valid request token whenever a Nextcloud session cookie is present. Mobile clients without session cookies are unchanged. Forged Authorization: Basic … headers can no longer bypass CSRF while the victim’s session cookie is sent.

Fixed

  • Absence cancel/delete/shorten race with approve: those mutations now take the same per-user absence lock and re-read status under the lock.
  • Status-path stale-pause repair / daily-max auto-complete: side effects run under the time-tracking user lock without nesting an outer DB transaction around a second lock acquisition.
  • Manual time entry create/update overlap races: overlap check + insert/update share the time-tracking user lock with clock mutations.
  • Month finalize/reopen TOCTOU: exclusive per-user/month lock around seal and reopen; calendar “today” / month-ended checks use organisation storage timezone.
  • Compliance cron / weekly average windows: use storage timezone instead of PHP default/new DateTime().
  • Absence business-day gates: “today” for cancel/shorten/substitute rules and vacation allocation reads use storage timezone.
  • Dashboard load-error callout: keeps aria-live="assertive" for screen readers; clock/break buttons guard double-submit client-side.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature1YxfevMESrUM//nCGciUukkJUENnGK1Zx28RQDbamoI4ObbLwsvsf3iXtY8HSWvdXU/CcaaIkhoTz1AgoDrrc9hEuKgB5n+wLwSasEnCOFuEB97+cRXwPFInFhWY8l6At1iKRcfa6CI/dQoGL39p5afqFF9LNwASQj3t72wAGMFUn582kRolB1QoKJH5YisXq3hOUfkRRxmCE1QYV+UPeTvxhLvFZgN62CZC53ZQl7q7xVvPUIszduNjkdzfa3h3phb52+cU0XS5jd1KBXzJPdP+JKAo07X5ctW9w1N1A854M0NViBcm7OsWz91eQTI0Rbbn8AeClAMMX+hD/x5SBLmP1hw5sveGM6aX9W68rAqy7A1215xvAwqRMHHe6Nccd6zLFUvh9Ll2SEA6E3UNbch3IgtlhgnBxhOjZMrVVUjci82Ue0zrIN6MFLI5yCWYQ9c9m9hSfDeqj0X3mjD17uTsba3l0YgnBV6WkoYcwphvDETTEd4QRPw4Yy3nm5cZ9JvWN+XG2wL7xuCw7O9/rQAIjXDlI4FuG577wSjEdTcgiHMeHsB1aA5HKdxMyRth60FhJqEveOxOJ3N9RUQUTpSgzVbJxablgHSt3r4QABIWQahY79VYUDLYXmd05v+PZWAOWUHS6waOIdM8NHRIfvVLq3qR3WVoSftNVN3I1VA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.7
Release Details
UpdatedJuly 18, 2026, 2:08 a.m.
Changelog

Added

  • Auto break setting exposed to clients: the dashboard widget data (and the mobile home dashboard payload built on it) now includes autoBreakCalculation, the personal "automatic ArbZG §4 break insertion" setting, so client apps can explain whether the server may insert breaks automatically.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature3lsfEckilfrV40shkUALmCLcnU3GVW0m3VI/iRg1JxxcpMSBtmCK+OFGPo1fKN3Zz2gTicFaavr/4pfdl8oD2HUCMsRJtzt2URItVhM2cEybhBr3G1p52hQWVoFGBb/1QOKflxFcbSAf7QLvA92Cje+qb8TUjyM5uNKLqEq/jr9y9nEH4afvS2LO8s47+akQn10KnlROcuIb3S6wx7yhNQUFsHnKYdUetzZJgTCxBFFrQ0llfDmFAJhnh1GFypqZ9MPhjbXqQBJ/lB9Unk/pekQqxaMREBY/K0gG7JEhmw6SPWcX5aGU3hmKvFLZB3lfWgt2EH4viQ5c6F/wqkM/fRZqZ4y/0kLHgr0KxMS/iJBTOISyGFxv31yEHQGbrUo6Rfr/8TXFYGuV2f63CyZIEe1s8WDdsGkakm+OnJTLUo1Rxu8s2LbECQJWYpIA/Xn546opsRPFtGFPWAPKJesHjmut1tKUrctx2zJxU30GFOkQ+U+nRrx2HRYGhJze+7OKxXCaW9imtsheFdb2AoPBmj12pN3ZHMWKjR4Um+v7LWKbOKjo7wzNTL85PsVPG8pF3TZa72jqqOZEZH34ayeUiv3n0lmt4aStaB3HYwb1yZOjH1oVZOhKmunDs4+naRLLweixcYyICLpCB6IPHSeByvzFUqxfmCAtaev1arL6FvQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.6
Release Details
UpdatedJuly 18, 2026, 1:33 a.m.
Changelog

Added

  • Mobile home dashboard endpoint: new GET /api/mobile/dashboard returns the full employee home payload (status, vacation entitlement/remaining, week hours, balance) for the proprietary employee mobile app, instead of the lean desklet summary.

Changed

  • Time-tracking status endpoint usable from the mobile app: GET status no longer requires a CSRF token, matching the other read-only mobile endpoints (still requires an authenticated session or app password).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturejIqTDpn3RCL8GdRV6/c46TD79xYOm5/UalYDOBjwkEukzMomLSYYlii5dfXyu+2FaGRqR782SaUf4Wl7TM+i54puPCDo0b97kZe68crptjpNCuNqhGcVg0DF/mYOjDIANClix84oRtzf41Utm38ctMxHCMQ53t2U314oTMRlruIJjpRXa2FJbKKuqa79jxOy6iz/26LBnIiIVF0RXB34qBMaFxy/YzzR4uHVs2uY5wDZUe/hlViFk+YQlwFWWulU+7HHQ2fBhky85qDvx6PyEKH0F6pk0k/6EuWFY++nC2zoYXtVl3biDN9st3lYPPgNWF63fUv+H/fmI6+TqbDTOCEolBMoKJIn3nK0Rs+kHqKoulkgkhYFxr2OzPNRW1Nf3YhRfUmp2QRdWw17pAeYdiivxAMtO1wtv0UXONTfdK0HjXPXkMRlQiTYTXuzyL/ZwsYhqk++4gLCdgsAjeYI+jQOid99iSkxcNkj/4xZPkaWqnoy2ScJZdakCAcsfnkzASOdcCoKIrsKvvam84nrg1wcKVNYpJL5H4W8t/LJmmiZw3GMdV07E7htCfY+6Ky8Gb71FNrlIQmD72HXtGeC11rbxR7D6lzTTRdo40n2YqglNEEmknElFubpYlUoOhqdwy0cCdHhuZbw98B8eFmF+RLfIsfjGWNVnSFrSg8lSuQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.5
Release Details
UpdatedJuly 17, 2026, 11:08 p.m.
Changelog

Changed

  • Vendor public key baked into the app: AZC2 license verification now uses the production Ed25519 vendor public key by default. Customer servers no longer need AZC_VENDOR_PUBLIC_KEY_B64 for real licenses from SbdLicenseOps to verify. The env var remains an optional override (tests / experiments only).
  • Clearer signature-mismatch warning: the admin license page no longer tells admins to configure AZC_VENDOR_PUBLIC_KEY_B64 as the primary fix.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturewFtcvk8BSgYUH7erpstedDBkV2MaKJZrLLW9Co8vzmPtwMccIiEaPN7rasvZJsq53IjE+mDSK+BzwrueIrN0XnCCvONC0R6ywYLYMBhMxZsZDiZrFYlFVMvcBq0I1h5aGBPsiYO8WYqTBN4DnX/xtsFORpTKJ+IVSDTw/tsTE40N+MIA+aCe0HJb3QZHXziYbxvPSAZIe6dI/v0+Lquii1anvf9k4oF+MfIo8a/7DB7jhY02BQ/8by8JG29AG86oL6wg7IShtR9sZlYD6aI+TBAJ7RZebFuqtta68WyRw8FL5rVy0O8DylWOCNFWundttwkUrL3WE8Mv07Rm+TpJbQ4uc0YdoSOfK2KNhx5VK4zO164z6twBJgusMDQzCoBSfsxtal6Zan8ORNvdh0hA/MI9lYnWX7gpJPdf5FGFoUgc7Oi9ASYC6j0TQE7vUr5kC8A2AoMnjahPykVc5x70NEIW8kboeeC0HjKxg7MNXSaCOJ49+7X7GnXate3cOTBem79vC59a2VvHjefomThLIF9ucnWS9zNXwgfxELPyIsCyKdTjM7Wbg8uD9fMhYZVgDlMLaa6Trj5jPayHMoKMHVY+4Rcd+iTWyGuTqsdyPPZbU/qBJCEhZej9uG1A7U0Pyrd9M+X+uoTxqQlBPFj1Y0blKosk7lPl0Buw2LyKK7s=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.4
Release Details
UpdatedJuly 17, 2026, 10:03 p.m.
Changelog

Changed

  • Kiosk admin UX overhaul: clearer three-step flow (find employee → allow access → assign badge/PIN), richer status labels, confirmations, and actionable error messages (including license/slot limits with a link to License administration).

Fixed

  • Kiosk admin APIs required CSRF again: removed NoCSRFRequired from admin JSON endpoints so state-changing kiosk actions are protected like other admin APIs.
  • Race conditions in kiosk pairing, enrollment, and PIN lockout: exclusive locks around terminal pairing, badge enrollment start/scan, and failed-PIN accounting so concurrent requests cannot double-consume license slots or skip lockout.
  • Badge enrollment only on active terminals: enrollment now requires a paired (active) terminal instead of accepting pending/revoked ones.
  • CSV credential import size limit: imports larger than 1 MB are rejected with a clear error instead of loading unbounded input.
  • Sensitive kiosk responses are not cached: pairing codes and one-time PINs are returned with Cache-Control: no-store.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureRYjKQgR7fhhltR+3iZrWtAevXZtgWOm72Sm9yskWQtXfDgcNiy4umdoCjPrr28t9NW+DASahC11vAFpT65cBVz3/uvuHLPlKtmUTDVb0MYX3FBdOnyYCERerVayRuVBosDJyRSylAsdOoHdvdwVZGzj3P7QTtRXgG3ZvKpg5vTUAvg4H20JknLPzrIRFUslZasnpEcgRpG2WCKLVESXcwdLFG0HTJzrZTwsxAYXd+jT5ciaJD1D3WiMZAjcNEzrPwIxk+KsRJLi1Ni1GVVmFvENUflrdXtUWCLTiixzEs6fsS2U1MrtnJ5ZZxGK9iVH48scHpKiJ4lGiXp48d6wnBuINz7JZ2HIrYQrrFCARNCMKW7j+5Gh4B8w+1UD1t1OtVkrrhgGGPOYToj/+dDHBDNedT+pbAQZx3h2GbjSIVY3cdCD4GRwcwxAjSu5sj0pqmXCPr5l1F8v6ClqmRvOAfFvnP+NC9uO+rZELc0MKPwZBy1ezIgCTiXgVgQk83jyI7Tf4UWSgP4biSpVFSVp/fZwNIetxiauxchKsGMHxuRtQbzCklKylhwf2h1pVuR/XfkxwsxEj3JHeUNXGfH9V85FGjW5P6oKeQaA1lvL9rn8/UhZqNC+LynlwFpUxPwbh5HZkkUsFLFGdPBz/uAmCFnFbErvejTYZZcy7xs0sEag=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.3
Release Details
UpdatedJuly 15, 2026, 10:38 a.m.
Changelog

Added

  • Instance-bound AZC2 licenses: license keys can now carry the Nextcloud instance ID and are rejected when applied on a different instance. The stored license state records the bound instance ID and a fingerprint of the applied key (migration 1033). The admin license page shows the instance ID to include when ordering a license.
  • Daily license maintenance job: a new background job re-applies license limits once a day, so expired licenses or reduced seat/terminal quotas take effect overnight instead of only on the next admin interaction.
  • Signature-verification warning in admin UI: if a stored license cannot be verified with the configured vendor public key, the admin page now shows a clear warning callout explaining the mismatch and how to fix it.

Changed

  • Mobile license gate covers the whole mobile API: previously only clock/break POST endpoints returned HTTP 402 without a valid mobile license; now all /api/* mobile requests are gated (bootstrap, kiosk, and admin endpoints excluded), with an explicit LICENSE_REQUIRED error code for clients.
  • Admin license page overhaul: redesigned layout with seat/terminal usage bars, assignment timestamps, and direct purchase/renewal contact actions.

Fixed

  • Kiosk terminal pairing could leak device slots: creating or activating a terminal now reserves the licensed device slot transactionally — if pairing fails midway, the reserved slot is revoked instead of staying occupied.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureXXtpAkga7MSWT0URLIx8lfJZkYdAp/OPaGbSyuv7lb7HoysNfKpK3Da+GcKbi0J1AdJUsSZJl5Q0Repec5Hc/V3cnykiuQn97n4JtNFKljd2oyjbs7YYvBuqGO6qA+wgATsrWijAI7uvVQwytYa5vwA6+lYkeuLgKZ0jbnnwL9YNvrHzzcu/8JWxMnZXHTQS06IvyIvVlPqYAunMgjnMLj6s9sxg7NOHWE8m2WKh2kHsHVHcVK7G2/zEGkXAt4vg9MOe9p3laDtnjue/eVtpc4ynogL/UX4O+X+ulnF7cJfJCR4FCu0meYwMuujgvJ42uS1DeBlICnV4+dIn4rYhxc8V54BMjlhTyeKCLFMAgs0myKVmfHvOElDCkB1Pu8RJcv8cAzG0FAGzOzwXIzapVAzrokquA4zOwQY7fgMYyFSZAuAxHEfQfkuLeZNPP/jhOPgm09N0NdFwGxOhwVEE1MVg0lFPOj+imT2M8kHKVuEyLV3wRFGbVG0Jjivo0NFEVFDI9x4ibnR3ixHTQhX/+XnRmkujPVF9JAHhRZlr+iuS/mWT4s0IkgdPjFprOi9YQH2zC42lqRpJCLx94EMqcTTFdM3y/rxFfDG/YNJgBr5MJSp6K0Krl/wjoBuNne5gzmjGV1PcaR0IpFgI74dXHU20pXtMvALHtD84HibTgMg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.2
Release Details
UpdatedJuly 11, 2026, 7:40 p.m.
Changelog

Added

  • Pre-migration backup before app updates: new BackupBeforeUpdate repair step runs automatically before schema migrations, plus occ arbeitszeitcheck:upgrade-backup for manual exports. Upgrade backups are catalogued with integrity checks and covered by unit/integration tests.

Fixed

  • Manager "Record time for an employee" failed with "Status is required" (#27): shipped in this build (documented for 1.5.1 but missing from the published tarball). Manager-recorded inserts now set status and audit justification before validation runs.
  • Data loss after disable during Nextcloud upgrade: UninstallRepairFlow now distinguishes disable from explicit removal — tables and settings are preserved on disable (including auto-disable during server upgrades); full cleanup runs only on app removal.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureJPP2H7l2IIixMFE7YJqvF+iaZB8L7+/0QAVjcbHaR+qQmRK/KO8lGTe6Jeiw+L4IMCATnqctysA7LzW/vHlSgVGgfmE4/kpi+zM7tGMvqKv+cmA0cTVJQhBRlw0G7g7keeDLScbID1eAIXXsjRJ1xhpyfUGSFYX53x+3dnHZ0GBdDKCfd1z+yp++QiTz1SQuAqjubLUvDTd/6ZugplY96nr8z6IkpsuzEjgcdkvySyFcoJNCJXWZGFkLlD2P0PEANvVR3dwW9Q2FLaqfgGTiJJ2vyL+BkFsCO8jqH/WOfWhw82HZJ4qprYQP2H5lGt1nCGDhojHhhFBOj5DOhlo435QYSWEdfoldqCj1Nsg2uqunul3xSg4cVX0E+K/IUmXCtIxjlIPthkJaVw0G/EPHBLsQzNeByeSuGGBeUQSbZRiXWEZRn3wglPAzGH0XCzMw3vfcNQrzAKns50WdqzDR2Y4mpPgb+6+IeEWWRz2gPQn4/0FGCVKBX2M41ElLgXGzAMiehCRISCJwQboMBhHf7oq4Jb/tHqEf7OYFz1gGaKBrUArZ4bvHF0cUNPq200s1vN7Cm8jJZaMCQtk5VlEDzuwuwrq3RNqlUaPoBLmISp6lW9UYpkpGjg2257meE+D9H6vd3+0uj/0jP/S1+V59E1+Q635m1D03KZqKYt/Z42w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.1
Release Details
UpdatedJune 18, 2026, 1:10 p.m.
Changelog

Behoben

  • Update auf 1.5.0 versetzte die gesamte Instanz in den Wartungsmodus (#24): Die anteilige Urlaubsberechnung aus 1.5.0 fügte VacationAllocationService eine 9. Konstruktor-Abhängigkeit (VacationProrationService) hinzu, doch die Container-Factory in Application.php der veröffentlichten Version übergab weiterhin nur 8 Argumente. Beim occ upgrade löst Nextcloud die Reparaturschritte über den Container auf, der dabei transitiv VacationAllocationService erzeugt — das fehlende Argument verursachte einen ArgumentCountError, brach das Upgrade ab und ließ den Server im Wartungsmodus, bis die App deaktiviert wurde. Die Factory übergibt jetzt alle 9 Abhängigkeiten.

Geändert

  • Das Sicherheitsnetz für die Dependency Injection wurde gehärtet, damit diese Art von Upgrade-Absturz nicht erneut ausgeliefert werden kann. Dies war der zweite ArgumentCountError beim Upgrade (nach 1.4.2); die bisherige Prüfung validierte nur die in info.xml aufgeführten Reparaturschritt-Klassen, sodass eine transitive Abhängigkeit wie VacationAllocationService durchrutschte. Das Release-Gate (scripts/check-repair-step-di.php) hatte zudem einen schlummernden Fehler: Eine falsche Namespace-Pfadauflösung führte dazu, dass die Argument-Anzahl-Prüfung faktisch nie lief. Das Gate wurde neu geschrieben:
  • es löst jetzt jede App-Klasse korrekt zu ihrer Quelldatei auf und
  • prüft die Konstruktor-Argumentanzahl jedes in Application.php registrierten Dienstes (nicht nur der Reparaturschritte) mithilfe des PHP-Tokenizers, sodass mehrzeilige Factories und Constructor Property Promotion exakt berücksichtigt werden.
  • Zwei neue automatisierte Wächter sichern dies ab: ServiceContainerDiRegistrationTest (statisch, reflexionsbasiert, alle registrierten Dienste) und ContainerServiceResolutionIntegrationTest, der alle registrierten Dienste über den echten Nextcloud-Container auflöst — genau jenen Weg, der beim Upgrade fehlschlägt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureu5YINc+PuS8hHrWz7yL/oEqD+JdCNSs2Gbuid0nMbFunQitWqgtsSNMPExv2ORm7Ll14LcjREkHyIRc0lv7px2fEXeIAI2rpvSf8NFAoamhuf4v4z/jY+LxxVyjkhhzWlX//Aar6TjUBLD0xk4MjOophqPY+f8ObHyW4SzSWMuElED0glM385ywWWwfVHbY5UWmzGwZ4qAAmshcE0tt2JZrlSAWXFUuTe/FdUKnUXoDVB9ahcBPitdxmF0UFHdX1+4OjSP8fu5m8KoMlM+qcZp9Nr9xxIiBZ9Ew4wnmhDq4cQqMzaBVMgW7gVv6KtehmP4W/3Hhyrtl5tUOB4cxTpnP1vNW0HMNgrNS2h8xsufOz0czSktu7YRstvcW95RWe9wZjH+pDwysBo05YfZPopBIu1eky+tF1jsvyBk9Z+aB6LnRTZ1qbtPZxK7Ce4QHsKzwTjtx7R/So/VUdSH64vkYI27ODmqn7rSjcmwCVbt4NDU7fog+47zmf6yiuML6GwUUQBdnMc5LpDUaKD+p2QdOzvQvU5ShCG0b63sTwHFBcG1KsTrIrQpG4BSF8wth7Uo58YmQHFX3G3Nk5XE02piwmkiySCTyLfTWd7bEu8AUrg71xJtVwrkXkgUmG+a632wfGZMvHHzv4A4r7pnXpIvKRhzmgGaB8Ap7GYxGXyf0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.5.0
Release Details
UpdatedJune 16, 2026, 11:37 a.m.
Changelog

Hinzugefügt

  • Anteiliger Urlaub bei unterjährigem Ein-/Austritt (#23): Beschäftigte, die unterjährig ein- oder austreten, erhalten ihren Jahresurlaubsanspruch jetzt anteilig zum tatsächlich beschäftigten Teil des Jahres gekürzt, statt immer die vollen Jahres­tage zu bekommen.
  • Neues optionales Eintrittsdatum und Austrittsdatum je Mitarbeitende unter Mitarbeitende → Bearbeiten. Sind beide leer, erfolgt keine Kürzung (voller Anspruch, unverändertes bisheriges Verhalten).
  • Neue globale Admin-Einstellung Anteiliger Urlaub → Berechnungsmethode: Volle Monate (Zwölftelung, deutscher Standard) — 1/12 je angefangenem Beschäftigungsmonat, ein Bruchteil von mindestens einem halben Tag wird aufgerundet (§ 5 BUrlG); oder Exakte Tage — Jahresanspruch × beschäftigte Tage ÷ Tage des Jahres.
  • Die Anspruchsvorschau im Admin-Bereich und der Erklär-Dialog „Wie wird mein Urlaubsanspruch berechnet?“ für Beschäftigte zeigen den gekürzten Wert mit deutlichem Hinweis, sodass die angezeigte Zahl stets dem nutzbaren Saldo entspricht.
  • Die Kürzung wird zur Nachvollziehbarkeit im Berechnungs-Trace und in historischen Snapshots festgehalten.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature04r3eUzf162DBb4dMPJS7sQivJmQuO0es5mnUkPeRArAB+uCEbjQ3bx9btbltRYiJEug5fBGCVSr6kgEdSF+kmTmsk4hsAnISA4gUix6cFj0aIynbPRlYoq4e2W6IORRT6/U6DtM+YWGZxWKc6pe5/3oZEwk6RzRin3ZPcggwNY19vUaT1gHCxewODk73kf0x6FWLjFrHi0r0GZ+ukGlOt3xcPaGqjdxtcSN0QaeskEd8pFJS6QLVeXL2+IYrc46PrqvvV1Sk07ivqJJWeesmj428W2cdcnyKAgBOB6pjkJBCevoV4PoLfmorojPJl2Qpms0/0TiJGyqV+EaExfWRLPxLFwmdPd6hBdT4s36giR75jOdklf/G1alKrcttNnRLzpjYUxyrUElB9DHKZhdKWiJOAHaHvTe2j3OPPF0gFwxCaDhrlDL8Yc6lBmIxwX6Y+Rer9/e1uhnykn5Ww2jIYqeC+ASqsDiOUhYBLKab42v8xlhK60hMMiZNpo3fIwpQ0/LQ/986VlTSPdjsPhjam+W8ONtqMFnAqRqxonAhMxvkOX0p3Rw4CdL21eQJyzeX+XACQEVENRqk3vQD3xev5y1sEFlcXxk75ogpieOfefiiysRWTHR044qYBpmHmjAn1qwwHf5oqo3fpIMZgTbsMzF7ZCluS09QQPXpE3eZsE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.4.2
Release Details
UpdatedJune 12, 2026, 3:45 p.m.
Changelog

Behoben

  • Fehlgeschlagenes App-Upgrade (1.3.x → 1.4.x): EnsureArbeitszeitCheckSchema war in Application.php nur mit IDBConnection registriert, der Reparaturschritt benötigt aber auch IConfig — das führte zu ArgumentCountError bei occ upgrade / Web-Updater und ließ die App im Zustand „Upgrade erforderlich“ mit fehlender Navigation hängen. Alle Reparaturschritte aus info.xml sind jetzt explizit im Container registriert; RepairStepDiRegistrationTest und erweiterter UpgradeRepairIntegrationTest verhindern ein Wiederauftreten.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureICs/E2o/tBf8TpCMYgReOuPLGeKrhCplYvNCM5kbNkP2HiqQRJpD2qPTc+fu2RgHBDtAdaahVDQfB6VdgqrhRMvFQVzqPTmRdNxjP/TJT6YYGllKwikajxlZVAL/05Duo9AyxWzdsjtM6R4WfUK3WvfMY2Mc7fd1JTmiVpAuX92FujyNmyZSh2NF82R4wU+IZiwK4elYnfxn4At/ebMmLW3wOLh/tfPPSlPGBBjEfmG8XMLf2y3fK+wFG5P2Hfr+NXWSj5xpRmXOF7lVfOFpD3r6/CN+RLy1uN9JWzcnL9SPNCgCTLblCyLDKv475PsGOJl9wXGnP9eFLxpfAAKIY1aspOaaX14XXVWMN4xqyCpKuJbdmalS24vKr85Ln0i1hkad00jLvPcCTOlLRfdogfn0ISYBNd+t8ifSWKEIw0geROiHVpUbGjHlPfizDkqLUw+k5ha0UJfoy826uoE7ewgO11uWR5pQ7y9+nClCrclHi9y6ULf+NYYJlCykzqCMQru4UtbDmmHG8nlBYWQnOo8GqyYhroPkauDbPrdoP36wOrX/xjbnewtttQpYgAHRU8q7I9OJ4Mu8WH0YgUym/AjuKpDkR+74A5HEvwW53X1Bah5660eGr1ZKPjpDdL0sG7UMoNHLzU/Yd/7LSTqqj4Nk4xDa0cEEukq+mVXLvMI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.4.1
Release Details
UpdatedJune 12, 2026, 2:57 p.m.
Changelog

Behoben

  • Datenverlust nach Nextcloud-Upgrade: UninstallDropTables erhält Tabellen und Einstellungen beim Deaktivieren (Durchlauf 1); die vollständige Bereinigung läuft nur beim Entfernen der App (Durchlauf 2). Behebt, dass das automatische Deaktivieren bei Server-Upgrades die Daten löschte, wenn die App wieder aktiviert wurde.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureiQlJrDXH7/uhJKsNav1Z0nd0WyEEeiwHOpwkEyFOxMEmxO+H7/ivVzHztsP8NJ1REWySBC7mN+WM8LcQxbVYgCY6hBWff6Bbv3BJgQLAkuqUc6onwZ2tAzaiuR/S0HMEPnCQjAcDWc6Jt7zdt6FjWgXQa35VP9/Mpui149Am3qwy5uhqLJeTo5qlKwMELHiG5Xyz+/9kUVgrk2QhfmK56LonLcDRhXIwyoi55nmwizFKFSvJ9zjWVhc3MIl+dXAxg5ZbSLrLmvnoJsDIEJDlh752mlm4Fx8+gX294Kc6WBg/nUIMWggoKJCHZI3pJ45GRxewYJsZs3viwR3k5rxtLwyZu+McnO2wz8RTC5KZdw6svEUpAORNxbnbAuqlJOqbSppJjlGW8jIKopLWwg55vo2hsf3ZaAuhsWy5/afb/b9+TFvlzSJmptWScz4R5sIvdLWnisas7ayRWO4xXi89VrTukwGLzbjXJIhHGp+U61/5uLu4A3PradgnP+qtg2zps927MDjgdEjBYjWw7MXrVds42/rXBRtN2VPnj7ou9cuFJNkFf/GfBaWRU47AxaXlEWz8nUTEfBnQZb0ugRuSRkqtWYMpYVv8A56EyjJABdpLyUjRu7MwSQN1PRBCIiMZMK+9BLeK4sgTzS2FOLtue76A9jbqUafuiNnGAsdd+nI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.6.0
ArbeitszeitCheck 1.3.24
Release Details
UpdatedJune 4, 2026, 12:41 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureHbMR9UYH9j0V1gE6aOqBkwUMuN6o6kdufKydH4mwQE3Kkl4OsIunVe3qBvy0qHcQgKMU2VI87UawAcuL5FjsiHj8cqZfuFNSmlMVIb/ipKM1xxLZ5I9jBcadE/Xf4FJa4c8oQgfgQGAT9liys3fevhk/Vh04pyRC/A+rWv79OlT0TWyCZVSP05rbYDgve92qBlJIGWk9BRKlaTJ2C6mWD1zyuJjEi7DVrO03VN9MVVxHw7nhFJrFNitX6xrY9hWTtanmxDYNO7xtqtDPsElNxLWFZgUdRGhim3W0FdVQMii6mhOsKbj4hFwB7pk1IDjq9FRYHrgAllU24eAb7yVhMj9zRvBhuLIgYDReXWnHBZ9bjz+TT5np/Ru294OsSl7dp6Xoci7uN2HajMxJ9GzMRBxMqEfKfiXFLLD/yEk0Qx+1PLr985Y764Fssoa6I1bGrmTo04/+Qt1AC8LG5KkmeZfK4MA6awsOT45OKqkFQ6rihpobJvIReD4alazxjk/ova4+xBSJnu/+jO4yWyVlL56AleYdr1a7E4WGEAP9nzLWFX/BzFaQXY07vFjFgvHljXp0ByVsy8ceIjzZ76JyvkbrPC35P9qv3D8O4PrkyhP8lRik0KnJ5kajw5e/p9QqC9t0musDmpKLqpyh9UbPVhZJWE4bfp1RMenzh8mlktA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.23
Release Details
UpdatedJune 4, 2026, 9:10 a.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureqTDcyBckDVqDxwWcqy6hLGMqmhVWsDm5t5ByJta0x1UHMYhEgratJP60v/Qfpb7eExVk7ZbMArGlodQIgRQrWFFVbHPPwnaPscmBHMmoM5VqlXwtkKIbbgmfqxqV5lLkPA1nrEiBJOYUUgxG2tuMp9BHWdA3f2XsoQ2x/UKlSwu1+82ax6sHc8EvQWr+eUnmtKR7IjkTuaYJEHnaHgN3uN6XioPtJMiX1OL/bfkeiAT9sD5bK7bTaL83nCuzTejGFWYg2SSz4tElLPDe848g9xhlsgg1jwIFzz5HKrtVNq+EkhQru62HCjzejRGLN6l7+Z6hGhkHlXhGAckAnI7v1i85l9DJ092+2SLTMQ1vg5o1iW8x4JRn0/6RmePqQCV8WElog/FkTl4BlNA8CKjgzUo301AEjKqKtOt8b/uKlvQmx65vla3G9SEZ88MUbwH9jaNcTVKeubVokBAs278qDncfNR6Jkz1L4dK6v9haFNx37dSy4g6Hnavwr6znnDEK0P38j9fzuxjfqefzeeHPwe7jHQP/I0pwJvpsMML265HLTUPHlnxh5hHXXp86zv9fjY4TBk26AzyQ/uPvYD1GZ9XLruw31Ua8276G+qbmNsNY/2ntydR3Gi9PSWDBNAOGddHRrGUc8UPpbnlMdqWCtGDEAg/vlEpQ1dOvDqr/MJw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Databases MySQL
PostgreSQL
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.21
Release Details
UpdatedJune 3, 2026, 10:12 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturexwZuRuE7q6Pvz49TbD4EbtW+5pAzncGRYelTeZOhoBETF8Gytm0lR3DWP2Bl9edR5m6fpo8FNav8LM0lL1eg+2DlvSQ1RCKxuFANOAjTdgc/sAJVnSEHPKz7Mh5jl5T7wxz243YjN9CdzsekXTxKs8wSMqHkbQX3/SUzT5vvlwzGXJCh0Ir6zzgq5RGY1rSOL8tfvKFSvAWnKEFi53mE0xqjpyStT6399Q4e4pVmJbmvWDG7uzjb99JtVWrEhT8BWK8O9y6Ynho7sXNiim+rEi3D9ZrqoKSC/CSv+kyYr97j9V8/W0EhMAp6RYyD5zbuEykyPmKSKvEq0dfgu6tpTTbLFatHfKSqExkulaJd1p0CPmpzwB5gbU9o8/a+yuJkNxfGp1KJTbmmALLHuyiiv1kxwrDiCpHYf1FDOrAVofXIX2ADeuVtS8oQOCZ3rh02IuuEIa4IMEGRyWA3gQBdfhzhG0aBSNIo/RFd87wL3jvcE+NiuLVRAYBMlX2OwryoF831KKMnu1ja+l+tSx5yx5srhAO8LI/0zJo3c0AtdzlbDIpOwSEDa8CqepZuK7bk7S0O5fW+G4KilO4ZXZubGD5TKK3ZUkMD1kvtWEotPyxHp8aJd805RxyxYGl2YGGmKjnGOitob1O+V8bl/phnThtasczeE+saiOoqXVeeVd8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.20
Release Details
UpdatedJune 3, 2026, 9:31 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturegeMFAGBU3RbCnVfsYVqpdfDm4WygcEkjnK5Jg1u6auf+NCYR/TDRWQVnuh+wVsyVpJHmw58G2oUPy/D+eTh+pEwzUVeut23+vPhW00jAoHHxXVkTSGXuAZlG9f1cRR0KDc4ClcsgiECSSvpauVs2Nuq2dlkrg39wf1WIRpuEXagIRoErKmz/AOJEJNWN3j2j4Vp69EMtlDZSgMovnGJ28H6wKDmjQFrmWO0e4g1UoAGSmxAcQE+agRKQjoefMiqws2AZh9uPrJSZQK4hW+L8X0sGp/yOtlmebo7PAzMC9KphJnKlsmf74d88G5tZfjwmGlb0Ptu0XicNNPizPQNBZo2ohQYIsSx4ZWWFRf4O9o4JDrHP6sOpOZWbmr/DJp9wQ5brkcYdiP2dzYaSvj623iYO2Vndyqn6OgMmCNjeFS0Ksz0aFwo93XukZtqtjGAH8yeuV+xee09dQy57lG+9rK4lR+gjkxE9G1u8z0mSWr16ysMdJVq1brmE896xqL+kaQ+jZ3eW5OiqfUDp97nzwAmq7DbTaSMO13hrTuPbI9aNwvCMsmIyz4U1L3bifavS0+VgJoRu1glxBdH+lL9K59q+t6aFF8a9UDbYDgvfnm4Kj6RnGSKKeHSycUw7slHb9U9cM8sgKcR3HE8EIuJMdm6KTri+edRup7EOJDU/M94=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.10
Release Details
UpdatedMay 30, 2026, 6:12 a.m.
Changelog

Behoben

  • Kalender-Tagesdetails-Panel (#11): Seitenleiste beginnt unter der Nextcloud-Kopfzeile (Schließen-Button nicht mehr unter dem Profilmenü); Kalender und App-Navigation bleiben sichtbar; Tagwechsel ohne Schließen; schließen per X, Escape oder Klick außerhalb; live gemessener Header-Offset; Vitest in js/calendar-day-panel.test.js.

Geändert

  • Overlay-Tokens (--azc-overlay-top / --azc-overlay-height) für feste Panels und mobile Navigation; theme-sichere Dashboard-Callouts (WCAG-2.1-AA-Kontrast).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturepKOZDEKgte4hRCu2ujFlEugriqikEtGVDOTn//KioVz1qzKO4EWSK4sAzG4fpacAYckdh+cAV7mPbCu/4e/NSD6SqSJ6R3q4N1iiW1952XV4pJsKIF7UrYysYrUtYj+qt9MjQL99ehcqNa4/Gd0qf9wLjO9n6/U5n5ySx+trjwJwxdsfKIuHxTlhzKYkXx6jqZPHG5i3uHH4RYBfCZ9iT35aPKrYJlrSmVVxlFlh6yelwOkDHk0aWJIPtQku/FUW5zLW67k72BAswov1DpOvfkM5QOJQPdKjwhZB+lElosw+SWqCyNffGJYuWUzQVxGAFTEqQgQ9wQx5QFf4PQsr5ExKYeMm4RbpJph2UTqcpGiVInjCFi2vFZs1En2XpHKC/DaSwNNohsJI2pDcwoeohO0GeJSQ8WAOAgsdwLzXGd4PriQZL2u8t+TqMxeQfDZIVymN6jwdIaJPGc1Jvvi8SOFsEagVG/YpvJ0FNR+tBr7cwt4GSaqD05jcldAb9CSkfR9ZlEzGY6wcT3b6Mez/wnzvjs4bytzhW25xtlzBVc6vkkQUQsrCeBPOKe+g29SXIxIXmrmBCWiuxnhydg6XddXQMTZbCVYmMOcgSn7VtR1gs/FAifzsSKh09E6TypRMM3a9XFXMln2N7Sm/QRsh+6SJwF/zq2f+JX6cyv3L7w0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.9
Release Details
UpdatedMay 25, 2026, 8 p.m.
Changelog

Neu

  • Einheitliches Layout-System: css/common/page-patterns.css mit .azc-page-stack, .azc-shell--wide / --minimal, gemeinsame Filter-Grid- und Empty-/Loading-Muster; shellWidth auf der Seiten-Shell (auto-breit für Dashboards, Admin-Tabellen, Manager-Listen).
  • Gemeinsames Filter-Panel (templates/common/azc-filter-panel.php) sowie Admin App-Teams-Callouts, wenn use_app_teams deaktiviert ist.
  • Dialog-API: ArbeitszeitCheckComponents.openDialog(); Modale setzen inert auf Navigation/Hauptinhalt statt aria-hidden auf #app-content (Live-Regionen bleiben verfügbar).
  • AzcApi.isApiSuccess() für konsistente JSON-Erfolgsprüfungen.
  • E2E: layout-smoke.spec.js, a11y-smoke.spec.js (@axe-core/playwright, WCAG 2.1 AA).
  • Vitest: js/common/components.test.js (Focus-Trap / aria-hidden / Typed-Confirm-Label) und Abdeckung für isConfirmAccepted in utils.test.js.

Geändert

  • Alle Routen-Seiten sind in .azc-page-stack gewrapped; Legacy-.section-Chrome wird in der App-Shell zurückgesetzt; .btn ist Alias auf .azc-btn-Styling unter #app-content.azc-app.
  • Admin-Teams-Seite nutzt die volle Seiten-Shell (buildAdminShellParams); die Navigation bietet einen einzigen Skip-Link in die App-Nav.
  • Persönliche Einstellungen und SettingsController laden Assets nur noch über FrontEndAssetService::registerCore().
  • tests/WORKFLOW_ROLE_MATRIX.md: Manager-Rolle erfordert App-Teams; /reports ist Manager/Admin only.

Behoben

  • ArbZG §3 Höchstarbeitszeit & Auto-Clock-Out (Nacht-/Schichtarbeit): Live-Sessions, Clock-In, Compliance-Prüfungen, manuelle Einträge, automatische Pausen und Pausen-Erinnerungen nutzen einheitlich DailyWorkingHoursCalculator (Kalendertag-Clipping bei Mitternacht). Behebt falsche automatische Ausstempelung kurz nach Mitternacht. Frontend stempelt nur noch automatisch aus, wenn at_daily_maximum=true (keine reine Client-Extrapolation). Nutzer-Stats sowie Manager-Wochen/Monatssummen verwenden getWorkingHoursForPeriod() (gleicher Rechner). Compliance „Überschreitung der Tageshöchstarbeitszeit“ verwendet findAllCalendarDaysExceedingMaximum() (keine Fehl-Verstöße für legale 22:00–08:00-Zeilen). E2E: overnight-daily-maximum.spec.js.
  • API-Compliance-Gate: blockingIssuesForCompletedEntry() + Vor-Speichern-Prüfung in apiStore / update / store — ArbZG-§4-Pausenregeln blocken ungültige manuelle Einträge serverseitig (Strict-Modus mit zusätzlichen Prüfungen ohne vorzeitige Verstoßschreibung).
  • Clock-Status-API (ArbZG Kalendertag): at_daily_maximum und session_hours_on_calendar_today werden immer zurückgegeben (auch nach Ausstempeln), damit Clients Clock-In ohne aktive Session blocken können; Overnight-E2E prüft den Vertrag.
  • Admin-Mitarbeitende-Seite: Pagination-Label nutzt {shown} / {total}-Platzhalter und TemplateL10n für den JS-Export — behebt Internal Server Error.
  • Mitarbeiter-Abwesenheitsantragsformular: azc-card-Layout, sichtbarer Seitentitel, Workflow-Callouts (Auto-Approve vs. Manager-/Vertretungspfad), Fieldsets für Antragsdaten und Vertretung, parallele Datumsfelder, klarere optional/pflicht-Labels, azc-btn-Aktionen.
  • Zeiteintrag erstellen/bearbeiten: Page-Shell + Assets via TimeEntryController; Zeitzonen- und Genehmigungs-Callouts; azc-card mit Fieldsets (Datum/Uhrzeit, Pausen, Notiz); ausgerichtete Pausen-Matrix-Labels; dynamische Pausen synchron zur PHP-Barrierefreiheit; responsives Fieldset-Layout (WCAG 2.1 AA).
  • Abwesenheits-Routen (erstellen/bearbeiten/anzeigen): AbsenceController nutzt PageShellTrait + Form-Assets; Fehler werden in der Listen-Seite mit sichtbarem Callout gerendert.
  • Navigation-Flags: zentralisiert in NavigationFlagsService + NavigationFlagsTrait (alle Page-Controller inkl. Manager, Vertretung, Compliance); Compliance-Seiten nutzen forComplianceUser() (Vertretungs-Nav verborgen).
  • Kalender Abwesenheitsanzeigen: Monats/Wochen-Zellen zeigen lesbare Chips (Typ + Status + getöntes Icon), Wochenansicht zeigt Abwesenheiten, Tagespanel listet Status, Legende, forced-colors und Themen-sicherer Kontrast.
  • Manager Monatsabschluss-PDF: refaktoriert zu azc-card-Schritt-Wizard mit nummerierten Schritten und Standardbreite.
  • Manager-Abwesenheiten & Zeiteinträge / Manager-Dashboard / Admin-Feiertage / Admin-Urlaubslayer / Mitarbeiter-Zeiteinträge-Liste: durchgängig auf azc-page-stack + azc-card + gemeinsames Filter-Grid + zentriertes Standardbreite-Shell migriert.
  • Dashboard Überstundensaldo: negative und positive Salden auf getönten Pills mit Haupttext (statt direkter --color-error / --color-success), damit Werte in allen Nextcloud-Themes lesbar bleiben (WCAG-Kontrast).
  • Einheitliche Datentabellen: page-patterns.css definiert ein einziges Tabellen-System unter #app-content.azc-app (.table-container + .table.table--hover, Aktions-Spalten, Empty-/Loading-Zellen); TableConventionTest sichert die Konvention.
  • Audit-Pass (Workflows / a11y / Sicherheit): l10n für App-Teams-Callouts (en/de); Admin-Teams volle Shell; Arbeitszeitmodell löschen fail-closed mit getipptem DELETE; Kalender-Tagespanel mit inert + Focus-Trap + Escape; Admin-Einstellungen mit azc-callout-Fehlern; Manager-Dashboard-Fehlerpfad inkl. Team-Modus-URLs.
  • Breadcrumb-Trail: vereinfachtes Shell-Markup und scoped Styles — Pfad liest sich als eine Zeile (Primärlink, gedämpfte Sektion, fette aktuelle Seite) mit CSS-/-Trennern.
  • Compliance-Dashboard-Karten: Status- und Verstoßblöcke auf azc-card Header/Body migriert (Titel + Hilfe links, Aktionen rechts).
  • Admin-Dashboard-Layout: Styles greifen jetzt korrekt auf azc-app--admin-dashboard; zusätzliches .section-Padding entfernt; azc-callout-Warnbanner, Stat-Karten-Grid, Issue-Block in azc-card.
  • Confirm-Dialog Typed Phrase (Client): enthält das übersetzte Label nach t() noch %s (Test-Stubs / fehlende Substitution), wird die angeforderte Phrase (DELETE, REMOVE, …) angewandt — destruktive Prompts ohne rohen Platzhalter.
  • GDPR-Löschen-UX: ohne confirmDialog gibt es eine assertive Fehlermeldung statt stillem Scheitern; gemeinsame isConfirmAccepted / confirmDialogReason-Helfer.
  • Fail-closed destruktive Bestätigungen: Utils.confirmDestructiveAction() blockt Monatsabschluss/Wieder­öffnen, Korrekturen-Rückzug und Überstundenauszahlung (Einzel/Bulk), wenn die Dialog-API fehlt oder der Nutzer abbricht — kein stilles Durchwinken (audit-kritisch). Alle Admin-Löschpfade (Feiertage, Teams, Urlaubslayer, Tarif retire) nutzen den gleichen Helfer.
  • Monatsabschluss-Lock-Hinweis (W7): gemeinsames templates/common/month-closure-lock.php mit Schloss-Icon auf Zeiteinträgen, wenn der gewählte Monat finalisiert ist.
  • Einstellungen-UX: Sektionen mit azc-card-Abständen und azc-btn-Controls.
  • Vertretungsanträge-Seite: doppelter <h1> und Waisenkind-</div> entfernt; Styles auf .azc-app--substitution-requests umgestellt; Empty-State mit azc-empty-state.
  • Dashboard Clock Double-Submit (W11): setLoadingState() setzt aria-busy="true" auf Clock-/Pause-Buttons während API-Calls (mit Disabled-Zustand und Loading-Label).
  • Reports DATEV-Auffindbarkeit (W23): Admins sehen unter dem Dateiformat einen Hinweis auf Globale Einstellungen → Exporte und Berichtswesen (CSV/JSON bleiben auf dieser Seite).
  • Admin-Benachrichtigungen (W13): sticky Save-Footer, beforeunload bei ungespeicherten Änderungen und aria-busy während des Speicherns.
  • GDPR-Datenlöschung speichert nun den vom Nutzer angegebenen Grund: GdprController::delete() liest den reason-Parameter aus dem destruktiven Confirm-Dialog (js/settings.js schickt ihn bereits), trimmt/clampt auf 500 Zeichen und schreibt ihn in den gdpr_data_deletion_request-Audit-Log-Eintrag neben IP/User-Agent. Aufbewahrungsfristen unverändert.
  • Tarif-Regelsätze schreiben jetzt eine vollständige Audit-Spur: AdminController::createTariffRuleSet/updateTariffRuleSet/activateTariffRuleSet/retireTariffRuleSet/deleteTariffRuleSet schreiben strukturierte tariff_rule_set_*-Einträge mit alten/neuen Snapshots (Code, Version, Jurisdiktion, Status, Aktivierungsmodus, Gültigkeitsfenster, Modulliste).
  • Admin-Autorisierung antwortet API/AJAX-Aufrufern jetzt mit JSON: AppAdminMiddleware liefert keine HTML-403 mehr für fetch/XHR oder /api/...-Pfade. AJAX-Consumer erhalten { ok: false, error: { code: 'admin_required' } } mit HTTP 403; Browser-Page-Loads weiterhin das Standard-core/403-Template.
  • Einzige Quelle für Frontend-Assets: doppelte CSS/JS-Liste aus Application::boot() entfernt — jeder Seiten-Entry läuft über FrontEndAssetService::register{Core,Page}() (inkl. app-vanilla.css, das nun von css/app.css importiert wird). Beendet Ladereihenfolge-Überraschungen.
  • E2E-Urlaubs-Seed (ensure-e2e-vacation): UserVacationPolicyAssignment initialisiert vacation_mode nicht mehr vor, damit INSERT die Spalte immer persistiert (behebt SQL 1364 auf strikter MariaDB).
  • E2E-Clock-Seed (ensure-e2e-clock): Dev/CI-only OCC-Command für e2e_*-Nutzer leert aktive Sessions und backdatet den letzten abgeschlossenen Eintrag, wenn ArbZG-§5-Ruhezeit Playwright-Clock-In blockieren würde; in run-e2e-docker.sh verdrahtet.
  • Audit-Härtungs-Folgepass: Manager-Dashboard (unbalancierte Klammer bei „Payout eligible: %s h“ behoben), Admin-Mitarbeitende (auMsg() statt undefinierter t()), Icon-Katalog (doppelter calendar-off-Eintrag entfernt), Stylesheets (clip-path: inset(50%) statt clip: rect(...), korrekte border-color-Reihenfolge auf .inline-notice--warning/--info, leere Block-Kommentare entfernt).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature2C4hs5Nkh/isdBTEdvZY3ot9kpByYyhztPuFF1szdNDnGW2VL4wnIo2CTjNogi5kdF8hsOuunKu+l2j9gqbb3Rg0dIUKN0pg+LGN/0k0PmHqPko7R6Qbau/bfqFPBZXBx9g/nVQ1IG+3Nm71r/V8LBBFA2cHD3SpRz4A+98ah+3Y3K62zKc+oa0SnqWQUB/97WR4rGNf8oatUerQl4iPg68AdIavnH5tZerU3up1gVNbwjyMSomopWbJvyBsSemhauUGAEx6tw4dbM8KZ1QkVHWzm/RD0s4gM8B+OE2ZOuThKkVc36TNbFNwwPJc/hzbS7P3RHfjaecHUODJiPAFhGFquhb/pvMmzReC6HoTrQLYg82VDOZmcvCjsMWvKPPu345ouqeif8MtJe0lJlTLXxvPxOFMbqLIthiZ1bbxUdiceLQ08JabJ0fxxCObBPilimywPUetparMm2am6+3Rrkbyme+Z5XhuDiscczNIAoO23aoFMY2UsJBH1GpuNgTKB5MG/r9ygKHn2Hsec0m/ziwqEuYvFcGzoZsUYH5uZeeVh5RzulicF36k88Tb/i8zIlrYyjU+w6xixr4Vg12lFQW6jIyPrdmnF1wNFTjaZOU9SBjR5EjrgNoow6ld5ncVdopMLH5Jrrmm9ts3oSV4IEbcEztxrjcMV9aTCbbwGrk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.8
Release Details
UpdatedMay 20, 2026, 2:54 p.m.
Changelog

Behoben (Audit-Härtung)

  • Neues Konto + Stichtag: Stichtag wird beim Klick auf „Erstellen“ zuverlässig erfasst; OCS-Hook nur noch für POST …/cloud/users ohne Unterpfad.
  • Manager-Korrektur: data-entry-summary mit JSON-Hex-Encoding; Anzeige-Zeiten; leere Uhrzeit = --.
  • Überstunden: Zukünftiger Stichtag erzeugt keinen fiktiven Minus-Saldo im aktuellen Zeitraum.
  • Eröffnungssaldo-Jahr: Server prüft exakt vier Ziffern (2000–2100); Client validiert vor dem Speichern.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureZ0q4sUnNdtEyv8lxCK1Rm/0xEeKazqwJeSURzbpe1ZgbL09P25KESZpPKZH0ynjwPzFPIkQO8wLTSZSXRs/9/M5I2jnuSZkzBBEZI/Lzfy1O9MK75v0aK+v8kItGR+o+pkb6zXEyxTeVhOsvXqDBeBG4oY32ODpRiOONCrJ3AXU0a+ZSnSCGWF1aU6oBwXl84Go+sq+t+ftXxzCjpmpBLfHqP/3in8oVTM/OkTJv+noOYUKeNDz33sQes1Iw+aufs+vOUdEQqLV2jI8Kxcl5E7uwCMO3ChguaIdqeiDN692nF7lF9Kr5BVS9HmueOXwVQPGxOINSTcYNtSPrCcXbHfuWgUBZxSXejwsQOix0FsIIWgu/6j7ajNeZ7bQpt6hOtpC/Bdkk6SOELcG/0wumofrGUYUSRGFYzxV986X+npvdukna/1rIp5+wuN6mft+g37N31iEdfH6lf1B0VLkVSoX3nhkNq/O5suuRRMnN4GgRmduGU44FtrRSVv7wlOJevgwEOuWbkEryrbnkHL821YhIsop/8+WX5H9ZBDu3IcSLc2FFv9fAfpIa3UnKTXvjAvC2Qiuo1kb8t1q5q69tYTYX9HsS4Zd9/JvKn6ICtwvfFuFpDLCyTWC0pczjkV2NWQaxkp2RC9X5Qsl5U6CZUQqnB59cGOxOyV6d2Q79hOg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.7
Release Details
UpdatedMay 20, 2026, 7:44 a.m.
Changelog

Behoben

  • Aktivierung / Migration auf Oracle-kompatiblen Nextcloud-Datenbanken (30-Zeichen-Grenze für physische Tabellennamen): Die Tabelle für den Überstunden-Eröffnungssaldo heißt nun at_user_ot_year_bal (Migration 1025); Migration 1026 benennt die frühere at_user_overtime_year_balance auf bestehenden Instanzen per RENAME um (inkl. PostgreSQL-Sequenz-Anpassung). Es werden keine Nutzerdaten kopiert oder gelöscht; eine leere Zieltabelle von fehlgeschlagenen Vorversuchen wird wie bei ProjectCheck nur bei Bedarf entfernt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureB7PdTU3mqJ/98cpYZ0TnDGDCx+oZCtqWFxHCQic9SB4UoVrwJa59UptjIY/ZxA5T9SiPtcSl2E6sAnoGQWzdbM3wLfnmUu3TA36AjK5xtrBOV3z8VNJeNdVHhay0EYnFXFZpTx2JzYMQH8zW0JgZey7olRodmWcqj9jcjgaqyWeERYkBYiAtgPaMrfR0++JHqTCCT+xHJZc+H8FPL8SeKUEwsNq+hnpCD8UH30XTdvDhLQ+ZV1GXdsfpd5/RsLtR3tTk9TTCIsT7SlU97g8js2DwWHOO9w7bCDWlh+gMm33IcNqrEZQtAn+nT3uWK8haxVCPlaB5kyJJm+kMP9OfvoN1H0dEiioN4muHr5pHgTGR+KaGjPKeJ47epzRD6cvRSsjwrcQVlKlQcCTXWdBf2N4ERAqnr23/jAxuto6xYTToRq1evOLLgMhkq/4zFP/uB8h5dnqKXiOg3HwNQBW2EmnLWxiTG9uSkfCbKsupQ+YPGOwK8Xj/mtU/HmsWecl8izqjcTHSkTm0tO7ehN+8ME2LSzTUrnIYyLcpkaJqkOouFFAEBG/ZNXonDjiu33oVWjOrsJdWq5Wr7vYlI1B8TxKI+ovgfdgLqn72Hb50xYgnVfSjX93zW3cwXEX82yeu+KL90OcGtJCSMsLlQd6hq48Q2KXHMdHml78r7bgWmO0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.6
Release Details
UpdatedMay 19, 2026, 4:17 p.m.
Changelog

Neu

  • Manager: Mitarbeiter-Zeiteinträge & Abwesenheiten — barrierefreie Filterleiste (templates/manager-time-entries.php, manager-absences.php, css/manager-time-entries.css, js/manager-time-entries.js, js/manager-absences.js): zweizeiliges CSS-Grid mit ausgerichteten Beschriftungen/Steuerelementen, WCAG-2.1-AA-Muster, clientseitige Datumsvalidierung und maximal 365 Tage Zeitraum (Browser + Listen-APIs in ManagerController).
  • Manager-Korrekturdialog auf Mitarbeiter-Zeiteinträgen (js/manager-correction-dialog.js, js/common/time-entry-clock-form.js, lib/Support/TimeEntryClockPayloadBuilder.php): europäisches Datum + Uhrzeit-Matrix, optionale Pausen, serverseitiger Payload-Builder mit Unit-Tests.
  • TemplateL10n + templates/common/manager-employee-list-l10n.php: sichere serverseitige JS-Übersetzungen (ein json_encode aus Plain-Strings) — behebt Internal Server Error durch json_encode($l->t('…%d…')) ohne vsprintf-Argumente.

Behoben

  • Absturz der Seite „Mitarbeiter-Zeiteinträge“ (ValueError in L10NString / vsprintf) beim Laden der Manager-Listen-L10n.
  • Kleinere Anpassungen an Compliance-Verstößen, Admin-Dashboard und Benutzerhandbuch in diesem Release-Zug.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature0Ac+p2TednXZOZygWTS03vqEgTpCHvYmjHTVXsUhKOnCwFQQS6qZS5ss2QJ1tfJHH/17mGB+b54zhzIC69ZSn1ka8V97iYTAyoY0I9iQCla2zAlV5JlieuIJ2vjDbzJxetzUvrFsdPibiR6Ug5lq5roWpWMLASNeJ5PKFkKGXQmmRRt2xVYg3XbTB6ScDFGtAjLgIi9/zLGICX/CQl3wi0GEXewNpHnZaN5yVNL6R3h3Ez1wYUhXosUUQRtPKfEGD/ot+lwQGluoFT9B/cKPPjexl0h6vNrNEdXt6JkSi0fjFwyr/VO+emMtdT9ofsnP3EronfWHeciqk5bRXjOoZ1mNEXcwnO5FzYayJ9IPAyl+NWJ39I22R31aYYE+z67QK3TkunuLKFZ+/wzPFeNFQxTO2PlID+UEYl73hm6Xoc5qyGBAAMqKKTlF6sv7bKJA7DZnxnMtkXx065wpNJhb7IjgfXkaYFHfzaPT+fTAUEWnAobERx+2e+gzH0EIONKtacZkSX/+V2fgyKCzsw8iW6VwXVpK/0q0jY0WrM4koSenTCqb3Ppt/u4/YIeKyZQKE2di03fEMukpGER4kJAbaVINSkmhiFvSSaBkHOjn3Kdnaxq+4Wjw9Aiyw7CA0Yo1owrM/URzpfkH+928j1eDIgM1ZHMyd8PF7+R3MQoCjis=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.3
Release Details
UpdatedMay 18, 2026, 8:04 p.m.
Changelog

Behoben

  • completePausedEntry() erhält eine vorhandene end_time bei Legacy-Zeilen im Status paused, die bereits einen eingefrorenen Endzeitstempel tragen (Status/end_time-Inkonsistenz). Ohne diese Absicherung hätte der Service lohnrelevante Stunden mit updated_at überschreiben können.
  • RepairOrphanedPausedEntries setzt bei reiner Status-Korrektur (pausedcompleted bei vorhandener end_time) jetzt auch ended_reason und policy_applied, damit Upgrade-Reparaturen audit-konsistent zu den übrigen Schritten bleiben.

Tests

  • Neu: testCompletePausedEntryPreservesExistingEndTime.
  • 568 Unit-Tests grün.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature0pwv2HKTd56i96aLU9V8qR6lOzimwWXhqhWSc7Qg66mq6YUrCmPIbXYISOwPTJfjpw5M4FhZycmTA2lgG3EAA98ZSBJFnAF1jP7448eX2A5fcEuTpTjFHq0tbvnMjTGAsnV7WNRBnstL/z7SRJSxatvVA/LDs2WLaCxNzVGw/DT25ls7JR17YiNBhzNDVksC6u1AHmZeqx6Jlpo4H4Oi3JQ1cQ4kigPSVi9Hae5kUmZ0jDG77OACeg9ZbtwWpxQllxALQE+WjKUmniFpLFrVea3ngGelh3ef/MP5SexBsuijZF8rIbeTxgg4qdYI+6nwQ9t2rHM5kMAtPgIiWjdsD39cNlPM/y+dQJDHzxddyVpXuWw+pSlLBxMadjPS17X83FksWfvtNATwe64641Ba5F4vTJEQdBclnTXCgwA02ioR59YVQ3c/N8HymdZD3Zy6CGOzGyYvEtlF15YsXCh2PB8Xxa0VeBQSnKASq/LIPhguuuea2S7b3vNkGbOjRvrGhkdlZFT/bVkmh7AYkZ5tZbSACA1lw6WteOtNK5+LP64KLw6B+lZB2Xhn3ZRl3QnYrG6B5FerUryhEnKDK6Or1Z/rlcNhS5uvTCxDeK58PasFbCeiUa4SVg5tZgrUTDy6FjiQ53T4DVGImGcI7vy528e5DHpGSaafPJksvP6LicQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.3.2
Release Details
UpdatedMay 18, 2026, 5:57 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturerFfQ5Jz3WAqqDDfkSEHAKs0JHmFWSpAAH9qaRFyTjE7CLFTbm5X2pvNh71mEop6b3wvS6upZ3N3RqOPn9R2SB+yGXR5JRkVRX0GGJkIt7cdmQcRDmdLuf+NIWYLguBJsMG9PRLxq7ydIvg07mRMLbbGMeG8baD6rILAN56wApr+QfU6qD2H0p6axB6N7O14ndLARJcUOA2E8QZf+vpFXohC3aXDkIENOjWJDK+MmG48NkGuo6/iTLekWHk+0KRyQrCYmQ5JwVG7MVsFhEh2bhUd+hchqcBJQSUWJufl36z2Mtk4N5/dsIOpjkVzKWLm3yZlaSyefTaZA+is4Qj8d6izsACq6zCt0IrU32EH41Yz9LqPKH2l2QTYgiy70RrFuVA5UO8SmuuGlP1vyzduQ7So28hksbT8N4wsTLEEk09BSCYkqhz4HFAfyvBVE4bTEl/cQe76gnQDnB3eOAyKQX2xDW1Xl9tv4MYQGPijJVL8dVt4FheTPfBb3RVe+Hjr5JZNd8Tx+6Nc2Ku1MYOElgQoF/2dWiXGQW12/WjJnMDH08GTmzUmjkAkOUQyFngwOiSuE04scny5ND3eAtxGwX7Tg582mcpjaEXTgdQMaGtulFv1UZVtR7Iq7B8b5FjUw75kx6dTIcthN+ssihaSaB5iYQw800bPsrojyNKwH9zc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.8
Release Details
UpdatedMay 4, 2026, 2:38 p.m.
Changelog

Sicherheit

  • CSRF-Schutz auf allen mutierenden Endpunkten: #[NoCSRFRequired] wurde auf POST/PUT/DELETE-Methoden in AbsenceController, TimeEntryController, TimeTrackingController, ComplianceController, SubstituteController, SettingsController, MonthClosureController, GdprController und AdminController entfernt. Das Frontend sendet requesttoken bereits konsistent über ArbeitszeitCheckUtils.ajax; mutierende Routen lehnen Cross-Site-Anfragen damit per Default ab. Reine GET-Endpunkte bleiben bewusst #[NoCSRFRequired] (CSRF ist für Read-Only-GETs im Nextcloud-Framework nicht relevant).
  • Keine ungefilterten Exception-Texte mehr in JSON-Antworten: AbsenceController::getSafeErrorMessage wurde gehärtet – Exception-Nachrichten werden nur dann weitergereicht, wenn sie aus expliziten Business-Rule-\Exception-Klassen stammen; Texte mit technischen Indikatoren (SQL-Fragmente, Pfade, Stacktraces, übergroße Payloads) werden durch eine generische lokalisierte Fehlermeldung ersetzt. Der gehärtete Helper wird in AbsenceController::store/update verwendet. Direkte getMessage()-Leaks in AdminController::getTeams, SettingsController::index_api und in den Page-Render-Fehlerpfaden des PageController wurden durch sanitisierte, übersetzte Texte ersetzt.
  • Korrekter HTTP-Status bei Auth-Fehlern: SettingsController::update liefert bei unauthentifizierten Aufrufen jetzt HTTP 401 Unauthorized (vorher HTTP 400 Bad Request), damit API-Clients und Loadbalancer das richtige Verhalten erkennen.

Geändert

  • Organisations-weiter Monats-Report-Download: reports.js reicht die im Preview ermittelten User-IDs an den report.team-Endpunkt weiter und zeigt bei leerem Organisations-Preview die klare Meldung „Im gewählten Zeitraum hat keine Person der Organisation Arbeitszeit erfasst – es gibt nichts herunterzuladen." statt des irreführenden Hinweises auf einen erforderlichen Preview.
  • Sanitisierte Dashboard-Fehleranzeige: dashboard.js/dashboard.css zeigen statt roher Widget-Exceptions eine lokalisierte Live-Region-Meldung „Einige Dashboard-Daten konnten nicht geladen werden.".
  • „Resume after break" vereinheitlicht: Clock-In-Texte und l10n verwenden konsistent „Resume after break" anstelle des Platzhalters clock_in_resume.

Barrierefreiheit (WCAG 2.1 AA)

  • Landmark <main> auf allen Seiten: 17 Page-Templates exponieren jetzt jeweils genau ein <main id="app-content" role="main" aria-label="...">-Landmark für Hilfstechnologien (dashboard, index, timeline, calendar, settings, personal-settings, reports, compliance-dashboard, compliance-reports, compliance-violations, working-time-models, admin-dashboard, admin-teams, admin-users, admin-holidays, manager-dashboard, manager-time-entries, manager-absences, manager-month-closures).
  • Skip-Link / <main>-Konsistenz: time-entries, absences, admin-settings, admin-notifications, substitution-requests und audit-log hatten id="app-content" auf einem reinen <div>, während role="main" auf dem Kind-Wrapper saß – der Skip-Link „Zum Hauptinhalt springen" landete dadurch auf einem Nicht-Landmark. Alle sechs Templates verwenden jetzt direkt <main id="app-content" role="main">. Das überflüssige role="banner" auf dem <header> innerhalb der Main-Region von audit-log wurde entfernt.
  • Zugängliche Namen auf allen Datentabellen: Die Feiertagsliste und die beiden Benachrichtigungs-Matrix-Tabellen erhalten aria-label/aria-labelledby plus eine Screenreader-<caption>; sie hatten zuvor keinen zugänglichen Namen.
  • Live-Fehlermeldung im Dashboard: Der Dashboard-Fehlerbereich liegt in einer aria-live-Region; teilweise Widget-Fehler werden angekündigt, ohne den Fokus zu stören.
  • Manager-Dashboard-Kennzahlen jetzt vorlesbar: Die Statistik-Werte (Teammitglieder / Heute aktiv / Stunden heute / Offene Anträge) hatten aria-hidden="true" auf den Wert-Spans – Screenreader-Nutzer:innen verloren damit jede einzelne Zahl. Jede Karte exponiert jetzt einen vollständig vorlesbaren Namen (z. B. „5 Teammitglieder heute aktiv") über einen role="group"-Wrapper; das visuelle Layout bleibt identisch.
  • Konflikt zwischen role="alert" und aria-live="polite" aufgelöst: Das überschreibende aria-live="polite" wurde in absences.php (Formularfehler), admin-settings.php (globaler Fehlerbanner) und drei Inline-Fehlern im Time-Entry-Formular entfernt. role="alert" impliziert bereits assertive Ankündigungen; polite hatte kritisches Validierungsfeedback für Hilfstechnologien verzögert.
  • Heading-Hierarchie normalisiert: Jedes Hauptseiten-Template hat jetzt genau ein <h1> (dashboard, time-entries, absences, calendar, timeline, reports, settings, personal-settings, compliance-dashboard, compliance-reports, compliance-violations, working-time-models, admin-dashboard, admin-users, admin-holidays, admin-settings, admin-notifications, manager-dashboard). Die meisten Seiten begannen vorher bei <h2>. Untergeordnete Section-Überschriften in time-entries und absences wurden auf h2/h3 angehoben, sodass keine Ebene mehr übersprungen wird. Eine Stilregel für .section-header h1 wurde ergänzt, damit die bestehende h2-Optik erhalten bleibt.
  • Breadcrumb im Manager-Dashboard: Standard-Breadcrumb „Dashboard › Manager Dashboard" ergänzt – konsistent mit allen anderen Hauptseiten und besser orientiert für Tastatur- und Screenreader-Nutzer:innen.
  • Kalender-Ladezustand wird angekündigt: Der „Kalender wird geladen…"-Platzhalter nutzt jetzt role="status" mit aria-live="polite"; Lade- und Fertig-Übergänge werden angekündigt, der dekorative Spinner ist aria-hidden.
  • Fokus-Indikatoren wiederhergestellt: outline: none auf den Timeline-Filter-Checkboxen und den Admin-Userpicker-Items hatte die Tastatur-Fokussichtbarkeit unterdrückt. Beide haben jetzt :focus-visible-Outlines in der Primärfarbe; Hover-Stile bleiben erhalten.
  • Touch-Ziele auf Mobile: .btn--sm war auf Mobilgeräten 36 × 36 px – unterhalb der WCAG-2.5.5-Empfehlung von 44 × 44 px. Die Mobile-Media-Query erzwingt jetzt 44 × 44 px für kleine Buttons; Desktop-Größen bleiben unverändert.
  • Empty-State-Zeile im Legacy-index.php-Time-Entries-View: Fehlende Empty-State-Zeile bei leerer Liste wiederhergestellt (Parität mit den anderen Tabellen-Views im selben Template).
  • Reports-Zugang: Fallback-Navigation: Inline-onclick-Redirect in der „Kein Zugriff"-Empty-State von reports.php durch einen echten <a>-Link ersetzt – funktioniert auch ohne JavaScript und folgt Standard-Link-Semantik.

Entfernt

  • Veraltetes Personal-Settings-Panel im Nextcloud-Settings-Bereich: Das alte personal-settings.php-Panel im Nextcloud-User-Settings-Bereich enthielt hartcodierte Felder für Urlaubstage / tägliche Arbeitszeit und Erinnerungs-Checkboxen, die nie an ein Backend angebunden waren. Ersetzt durch ein klares Info-Panel, das die Nutzer:innen zur In-App-Personal-Settings-Seite (dort werden Einstellungen real über SettingsController::update persistiert) leitet, plus einem kurzen DSGVO-Hinweis. Im Legacy-index.php-Settings-Branch (toter Code, aber noch im Code) wurde der hartcodierte Versionsstring 1.0.1 durch IAppManager::getAppVersion('arbeitszeitcheck') ersetzt.

Tests

  • AccessibilityTest gehärtet: Die Assertion „muss <button> enthalten" (die Seiten ohne tastaturerreichbare Steuerelemente erlaubte und reine Link-Panels fälschlich beanstandete) wurde durch zwei strengere Prüfungen ersetzt: (1) <div onclick=…>-Anti-Pattern explizit verbieten und (2) mindestens ein <button> oder <a href> pro auditiertem Template erzwingen. Gesamte Suite: 455 Tests, 1 652 Assertions, alle grün.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature0fmMgh2k+umrcI0ItziUajGlS8QKeJdFr3fCSTgg7vQVWg4BCFHonpEcUwfa4kVlfDspQKFKDaq8uOHKCgIK+UZwXyjxXq7+FQGRKfcyfOs9rNBzg+B3VAx4nYo5grNneYtAO7t7Zxz66W0ZFlpBqhNrJMY6TA4bc4tNMRGaIAFi4gXqLstp0Ah+cGqywh55lNrOeuOgFrySRtbChjo6fRhkdAMWjY4XvKxF+5QqtH44AmfQ2HGqOHe8NOjn8eUo0fMbKIbwvAZwafZ0NJQxxVDT9BG/9DpCmvFDug4URG8yKIQdbbmYotaJBw+l4PEiEjpzRJGX0I2yzRaVvGCu6j5ZF/8YYl/K75EFv3oGc6VgypIcoK93/1WTXzykjwVMPxAdGv50f1muSJrVa+6Qcw/j4pz2aE2gWEZ8x1nANuxlxlORcVZkpvPCuDFD+VcqejaZon8vzhW46eENcjGI8oJR1YXRYR22gN6BNM5KD/NPbDmQ9DSsZDgp42lZ34L5+VWj1Gqtf4iqMM7RnZKvxw3bMTFL8usH9lhfjPrqtbzQLWmpiH7Tpwr9Law4ZkluQep/qWR386FPRCOtCOtsIs97GMEM6jqka/uZ/M90AP9v74f8nK/+c6oYXGW+Fq0SKkGvzXFczs2EokKRmyeIyNN013xyazPE/WCUcdGbXtc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.7
Release Details
UpdatedApril 27, 2026, 8:55 a.m.
Changelog

Hinzugefügt

  • Audit-Checkliste für kritische Workflows: tests/WORKFLOW_AUDIT_CHECKLIST.md ergänzt als kompakte Release-Checkliste für Zeiterfassung, Korrekturen manueller Einträge, Abwesenheiten/Genehmigungen, Monatsfinalisierung, Reporting/Compliance/Export und öffentliche Fehleroberflächen.

Geändert

  • Mutationssicherheit in der Zeiterfassung: Clock-/Pausen-Mutationen nutzen nun nutzerspezifische Locks und Transaktionen; Statusabfragen bleiben read-only, während automatische Pausen-Fallbacks und Tagesmaximum-Finalisierung über explizite Mutationspfade/Hintergrundjobs laufen.
  • API-Eingaben und Fehlerbehandlung gehärtet: Report-, Export-, Compliance-, Manager- und Time-Tracking-Endpunkte verwenden strengere Datums-/Zeitvalidierung, sichere Validierungsantworten und generische öffentliche Fehlermeldungen bei unerwarteten Fehlern.
  • Monatsabschluss konsequenter durchgesetzt: Abwesenheits-Update/Delete/Cancel/Shorten/Freigabe-/Vertretungsflows prüfen die Änderbarkeit des Monats erneut, bevor Workflow-Mutationen geschrieben werden.

Behoben

  • Fingerprinting am Health-Endpunkt: Die öffentliche Health-Antwort enthält keine App- oder Nextcloud-Versionsfelder mehr.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureT26RnSxGZtpmkWUMOT/kRj1pbj9j9dZCmH4GEaIONGYsjG9eFIorh133vbuxQbf+Ow0asxbdP0zK3CUa6iW6FhQkyo2Uyj0+BBVyFPliahtPKh68I8/YcQLJLnzI6i9lZhSCpy7gdMwr5xH14QVEq1gW9nlFA2ppepB0TJVCjpE9Ykc6egd1Fb28mr1KQcgYD39fXKG1R1rfY604eJtjuAnKomAkWecOPaUlElmIR5/QTBYeIthZV0fI79PfrcQdi1AjPIxQWx5mtvNy8vdSyah119zrA/Q7vJbh1i1vshxl65q5EKBh/Qam2JWadnVcfC6FH6CZwLkZwrkVlhfgAHhjRH4N01Mc3fRIbMTg+nKzW+oXANXnWyk8wtLf39wN4Qum+H4Yx4/ECG4aNULfPQki7EUdcLANlafsHKBarmYzITMnCPIzmKbQ/a07tKEsI+36C//sdfV2r15CMxkDfqey4NjtIbb8jv0ye5iv4gZnvl/FdyRaxLiptRiRxIRoFJgVMG1ZKxy6jw4MmIigONvQJ9Npn6//8vAdb80ftJvDCkyHa4DPmKHPoIphqFLLnSWbaUKn+KjfpDYom5nV99ccQlcdWqs5aXHLQR2UDv5gG+NCkLNxLNZcHLl6blsnsqnLGsnjgYLzYKxKJanBSvPkvO5nrpNoRM/3ybV4nWE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.6
Release Details
UpdatedApril 24, 2026, 10:32 a.m.
Changelog

Hinzugefügt

  • Forensik bei Abwesenheitsfreigaben: approved_by_user_id wird nun direkt am Abwesenheitsdatensatz gespeichert (Freigabe/Ablehnung/Auto-Freigabe), inkl. Migration und API-Ausgabe.

Geändert

  • Integrität der Urlaubsanspruch-Snapshots: Deterministisches Key-Upsert auf (user_id, period_key, as_of_date) ergänzt und per Migrations-Unique-Index auf Datenbankebene abgesichert.
  • Nebenläufigkeitskontrolle in kritischen Workflows: Create/Update/Approve/Reject/Substitute-Flows sind nun mit nutzerspezifischen Mutations-Locks plus transaktionalen Rechecks/Row-Locks abgesichert, um Race-Conditions bei Überschneidungen und Überfreigaben zu verhindern.
  • Release-Absicherung: Workflow-bezogene Unit- und Integrationstests wurden auf die gehärteten Mutationspfade angepasst und erfolgreich ausgeführt.

Behoben

  • Legacy-Snapshot-Reparaturpfad: Upsert behandelt historische fehlerhafte Zeilen sowie parallele Unique-Key-Konflikte robust via deterministischem Retry-Update.
  • Race-Condition bei Resturlaub-Updates: VacationYearBalanceMapper::upsert löst gleichzeitige Unique-Key-Konflikte jetzt per Re-Read/Update-Fallback.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureFCaNQEccscnzM6rLSgigNgiMK//Ogy4aLpQQ02I290SKuEd1galIkTleu42bUC3jUHSHpnmIDlaOC359unS4KGTEy3nmCdndzTjnZo6r+Pbk9+/vFkufLmhW6rckhWRuZ5FaTDQEtSuZXf/xGdfbdoy0emnIb+n76unzaXXDRbRwiofg80WVWY3ejgfixFajIBo0pYBiWHsjvjA66KtZXYxALqBikSLtr7Qo2BNssYqyDpxnPXjrpabkjwefBgBEro9vtBMgdxO1BiXf2R7YQK7tdea1b1+Z0SPhktPHoetniDAHnLzFucaQdwMVT4jiqwldo5wArfOLOWnFHa3jBDLUVc3RCov3/euMcr2GKxwYR6Zxjuwb++CAMTv4wKuKhju4tfWm6KQfUXCVMciK56XxAvwhf0FzlGBpT0+YORUBc7r0OSm1SbO5R8E6wOF6sUM9QhQCz+VFFyo5QEXxME0pV+yDzFFCBCulYH5VFq+cTXXZ9Cg7LaafpLP0dm3xJ+bnjLf/sNziApiMCQsOvK5DQ/tH6NS1qf87PZdb2FeciFFCO9eZw5JP842ePPPdbfq6hhz36BOv2gHqY3b4ze2H8Jp08II7/a3FWKbkz0nXN0G0HLQYDkBAa22Sn/c6Io6hGcQI/0fuW8pHJjhI6VgoCZpdY+dVD00/7Pu/HXw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.5
Release Details
UpdatedApril 22, 2026, 7:23 p.m.
Changelog

Geändert

  • Release-Paket aktualisiert: App-Metadaten auf 1.2.5 angehoben und den signierten Release-Artefaktsatz für App-Store- und GitHub-Veröffentlichung neu erzeugt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureZpb9Oh1bIRpGiO5z2K6o3xhzr43wa8RdfzfLXHg7sEGwS8tzN8GaAdyCnk4IoZbFQbrcrwdyFCK2ifzBqN9OrxHGAqGpFLeQOaHUDcH/imXCIFxYAch8kwW545iujuTkvSBdlIFa+DAG6lFFRngQPO2aO9gC1B0Vp6wLTAjI5NDNeM6nVNyCIhbvaC4jUfIrTjrCfvgQ4hgpJ29pYU0GdY6bEgwKCQQgUuJVEB6Hoay1M40Xq8eLzdT/UfobFlC1nV4Anda02g1AeoM04FrJQUfD6lCo0s5pFYAJ82EM5OyzWwi/xgEv4y54tao/UBX6yoUvIdHa7yh6bfoKy0dQmzb+iHl8eQTAzCVQAgWWu58F5J+k884kYMwBNBdcuymPnszTlypmrQoRRjvI+UI2f8taEikdX2EUAbwHkBU8U8CG98NogPFy/w9drgLqq6gvBCtuuz3BLC7fsEfA2/Lx4XYEwCdbvoFMc2GNZJMIujhs1jsbk0Hzscz3NCmaILzbZpfKr59xfZy/bxNl2Yi8nl6L9tJRyaLdxJ7urZthACHIdATnAqGretxEcTox69OnoR+Pir+0N/8ujZ3Z2K2C/5zu/QGwGgaz+WeoKCwGjmTb3JCG3jh340kFLnp8TnzUiZpduSj4Bz4o7yojTzFAPoQrTUYZrv0llb8PGSoPI8w=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.4
Release Details
UpdatedApril 22, 2026, 7:18 p.m.
Changelog

Geändert

  • Release-Stand veröffentlichbar gemacht: App-Metadaten auf 1.2.4 angehoben und ein neuer signierter Release-Artefaktsatz (Archiv, Checksummen, App-Store-Signatur) für App-Store-/GitHub-Veröffentlichung erstellt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturefOspm7RunA6JBPSZZ3vwdD+rRVZ5qOeMbZFcndytc+ZU00QoTdCYDFaEsDlUZtuCnpLGgwQ1x8o0jBhi409JtsZrNyD99XhzBZCKNl/nysKo/jDLa3h1msZ/AWKtjJUlyLxEPvPLzM2e/bg7DVOJKi0lsvq6nmUxJEhlLmhdgaONOlbAsBdtrtTKOO7DSxslFRRW0fmofVEdH8lL+5y0l/RtV5Gd6bMtpQ5bzHSoai9OMuOBFJ98QX9k/vX4qAuJUGVRvivJmMXDmiD/kPvezmia5no32RbXtYgYBUVY3Y9kfOza3mdFIwlHSD0bnjCI22QWUCBa5v59k+OuMPzPxCy+bzBl/M6Fu09TrNCDJvejpF/y9vKl7Wxgdz4ynaA2EZZ+RN15cGiTdOWVzjcWtnXBMSh9RCnBZqSCz8dFq1qVLUy16lBciLRNa6HofkEvemUN1oLbokZKLQlyXMFNxT8Ny3udUaOa5qKFDLbwgTttFuHDfn4NWOeI7JQgJ5kntg2KMpB4VYXvDwODCEcolniDL08kWuPbxOxd0tTR55+seYBfrSQrrGt46a4Vcp683MvMn8fx/el7vSPx9ifD1cUd6KMf/fi5IJF+pohxoCZlNepNdQGmaKNfWh87EGsdUl7089uKLWdwGWeGoHdxrBuRBhcfIU1HvCH+KVcvT9A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.3
Release Details
UpdatedApril 21, 2026, 8:11 p.m.
Changelog

Geändert

  • Release-Paket aktualisiert: Neues signiertes App-Store-/GitHub-Release-Archiv für den aktuellen Code-Stand mit Docker-basiertem Signatur-Workflow erstellt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturexYrrvEAHPwtfVHCBhNEEi7sX2LvqPOYNCC1AOYXNIeoRkUCxYLFTc29MwrgaUMoSLGtoZDChDD2eKsUH6MY+y5Jk79dKZg/ngf2/YBQpmMevl8Lp5eSGo2QES6rBtWYa1GFOEd6sVU6RLcy9tNL3toOxw5Te3QTskzeamEGChd0JYprcLZSWJG1kRu8Y8c32p5Rwbwu1tuq3AAW+i/6Bq4bxztKR6PGkZ6uyTbVaW3p0PwMFoJxceVu0/MsbMpftQaGQHr/1h6nBvbuj1WBkfi9W0PHrl+0zRn+5FwoUU9dECfeHuQAAcXOcJsKT979ewplb5+vPgNSeN2SSTWoGs9eYYIvUzznpyhuqSa1aplwXO/U0xyTXeUE5fiAQFlbnxtZ7gjmeLBkbAR/gF4aCX3NEPGLtw24gY8jomJ67+foeoM1+AJM73aFgTH0NjYKUetACRTFgB6gJPXl97JrJxd7sTeg6xiqlNKrWSvxiAO8XkjHCUV1BaPmoRtyfcNnLxmf0MGCVUuO4btz7JH5qy3q4H8XecbNYpnEeer8qxzTkw3toonE4+LVgbHV0nW6uu/gfEvDtYZI0wKx/A4vQYSQ7WEprMn9SbjnXbaMFOcG81GT2HifhcWZH0/YfFzz+sRng/TvZOkuf2iUq/9EjnKwkyygMSlHE7Si3kYXldKc=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.2
Release Details
UpdatedApril 21, 2026, 8:07 p.m.
Changelog

Behoben

  • Lokalisierte Dezimaleingaben in den Admin-Einstellungen: Tagesstunden-Felder akzeptieren jetzt zuverlässig Kommawerte wie 7,74 und behalten zwei Nachkommastellen korrekt bei.
  • Parsing bei Legacy-Hours-Payloads: Time-Entry-Endpunkte verarbeiten optionale Stundenwerte nun konsistent mit Komma und Punkt, sodass in rückwärtskompatiblen Requests keine stillen Abschneidungen mehr auftreten.

Geändert

  • Präzisionshinweise in Eingabefeldern: step-Werte und Hilfetexte wurden auf Zwei-Nachkommastellen-Szenarien (z. B. 38,7-Stunden-Woche) abgestimmt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureeG9EHR4R6Kg1X8OQ9g5Q0yPR7Y7yp+snb/sVhhLXEOtBIFd4xLZd/xi0GuLYF4KBZlPCH1GbRCy+q/kbjx7MyqlO2rHn3Cef0MnwJoLp9czZFJOjVJJpkoZNf/o9hh2OpeK+sNS7ghXfC5Pax2oicQFmeQeKQKLaTwn0AcJgvQrF1laVjQiXQopE98v16iClBjZ+KuybKcRmglxbd1N8dx69nBB0uyLQdkQIhnwHccyrlPCBzsXq55AtIEXGsitgXtquHKOk1bzBwM3uwQZoNRi4RIB/zWmOv0c7+71QTw0i1DMUsz+FUrTw+bBY0FnZe/Q9ageaUvwOb4bHUJYt1cuWPGEufAUC1w7ONCfHGASNkDv34msX4MQEaMf28k8ohtWlX/fzNIxL63Erijyanuo1tf9hZFeYEXmCKwXAeWOL0O/lXWcTGTvEOAD96sSv6RIcIOwHBLqxGUHiCQzJkKZJ3hjv3rrpOeneCLOz/jMNJrEgYCihLn1J8cUEPPeP6VH3rNthDuQOVCi63v+0X1uubbM6DQheViBYTA/z4wEAP/2YsA6rsXATB0JR4pOIxlsiT0MgjxIyrfctOJP/4zMU4645rSmZE+NS0TF46gpf8DF6ai0zilMmaHf9xY72qGZTICjvtIUcmwbMhRMqG9fmYomv5U2/jd3rubayPDg=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.1
Release Details
UpdatedApril 21, 2026, 10:50 a.m.
Changelog

Behoben

  • Wiederzugriff auf pausierte Einträge: Pausierte Einträge sind im Bearbeiten-/Löschen-Workflow wieder erreichbar und werden beim Speichern mit Endzeit konsistent als completed finalisiert.
  • Fortsetzen statt Duplikat bei gleichem Tag: Clock In setzt einen pausierten Tages-Eintrag fort, statt einen neuen automatischen Eintrag zu erzeugen; die Pausenlücke wird korrekt als Break-Historie archiviert.
  • Historische Restfälle bei paused: Neue Migration Version1020Date20260421000000 repariert verbleibende verwaiste paused-Datensätze (auch Fälle außerhalb der früheren Einmal-Migration).

Hinzugefügt

  • Auto-Fallback mit Nachvollziehbarkeit: Zeiteinträge speichern jetzt ended_reason und policy_applied (z. B. manual_clock_out oder auto_break_fallback) für klare Audit-/Export-Nachweise.
  • Einmalige Nutzerinfo nach Auto-Ausstempeln: Beim nächsten Statusabruf wird eine neutrale, konkrete Meldung mit Uhrzeit und Regel eingeblendet.
  • Urlaubsanspruch-Policy-Engine: Neue berechnungslogikbasierte Anspruchsermittlung mit Modi manual_fixed, model_based_simple, tariff_rule_based und manual_exception inkl. Simulations-Endpunkt für Admins.
  • Tarifregel-Datenmodell und APIs: Versionierte Tarif-Regelwerke/Module sowie Admin-Endpunkte zum Erstellen, Aktualisieren, Aktivieren, Stilllegen und Zuweisen von Urlaubs-Policies.
  • Snapshots der Anspruchsberechnung: Persistente Snapshots (at_entitlement_snapshots) mit Berechnungstrace/Policy-Fingerprint für Nachvollziehbarkeit und Diagnose.
  • Neue Admin-Seite „Benachrichtigungen“: Eigene Oberfläche für HR-Empfänger und Ereignis-Matrix inkl. dedizierter Notifications-API.

Geändert

  • Fallback-Logik differenziert nach Einsatzart: Für Schichtarbeit gilt standardmäßig eine strikte Fallback-Regel; für Nicht-Schichtmodelle eine flexible Regel mit tagsüber konfigurierbarem Ruhefenster (z. B. Familien-/Mittagsunterbrechung ohne Auto-Ausstempeln).
  • Export-Transparenz: CSV/JSON-Zeilen enthalten jetzt ended_reason und policy_applied, damit automatische Beendigungen in Reports eindeutig erkennbar sind.
  • Urlaubsallokation integriert: Jahresallokation nutzt nun die neue VacationEntitlementEngine und liefert Quelle/Regelwerk/Trace in der Ergebnisstruktur zurück.
  • Migrations-Kompatibilität: Bestehende Urlaubswerte aus Nutzer-Modellzuweisungen werden in Policy-Zuordnungen überführt (Version1018Date20260420123000), damit Bestandsinstallationen konsistent weiterlaufen.
  • Admin-Einstellungsfluss für Abwesenheiten: Carryover-/Rollover-, Vertretungs- und E-Mail-Schalter sind zentral über die neue Notifications-Seite/API steuerbar.
  • Schema Arbeitszeitmodelle: at_models enthält jetzt work_days_per_week (Version1019Date20260420150000) als Grundlage für Formeln.

Behoben

  • Aufräumen bei Nutzerlöschung: Beim Entfernen eines Nutzers werden jetzt auch Urlaubs-Policy-Zuordnungen und Entitlement-Snapshots gelöscht (keine verwaisten Policy-/Berechnungsdaten).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturewHjRsCMFlhEA9EgrgvzuDGiwQsEIOmqNFH9oA9Fs+lJZOluUc6XSmPeZow7uso0PwR/b5YYt+f8KmOoIwuJepnD1TTa5ClzBP5zx5gZq+KIloaEGzVPTnHvHJuc4V8q4A5BYEXvYrVvEuPgufr8BOBNy4SLwMKYQlJR0LhDLn3ShHowJ+VDaUSUjOtUih0uUCsNI54HhaAAa3EfKpgDqc2+jhM7WvnIzDGRVYF4HbPBYPpn+1eWOyOlOgq0YIy5M8+4shNLiGeIRo7Uepk9+HnDm6vjLdYB2iE9AMl+vSCGSdQTrP0Z5ceXZBZT/bM0t4Af3EfAP5seJ/sSQIYs1a5T8RIneJ7DwyFbZdGelFSSBZoMGDevr4IUUfAB3NIKNlPZsxAOv9elrF4AjLJZhDVB6i7OSVeER7yLqrIgMhBFXiFpr095gYQ7Wn6VCcBWwWVS7cWXa0xN9Yl00mn0z9GcVagRvncJ28Y0wSgk+GP/BDalUHmD7wHSL3pyXIWxpqQ2OJHi/xT5Myx4T+HVsywgRwAFaOLjV+hm8hkJLxd70WG0e1oo21m/DtTZZ1R44+BDdRGMJIcabWxJ/zFhYSZvVmoL2dpUlJhPgBBp1Y9Xp5pF0zOeLiGSMR4ON/Iys2jpsbAd0/TxW55NaEFOpZRRNYt3VoZJ8oqM1n1sHZX4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.2.0
Release Details
UpdatedApril 21, 2026, 10:08 a.m.
Changelog

Behoben

  • Zeitzonen-Konsistenz (Europe/Berlin): Server-/PHP-Zeitzone für ArbeitszeitCheck auf Deutschland ausgerichtet; neue Migration Version1015Date20260415120000 konvertiert bestehende UTC-DATETIME-Werte in App-Tabellen nach Europe/Berlin und setzt app_timezone explizit.
  • Ausstempeln-Semantik korrigiert: clockOut() finalisiert Einträge nun zuverlässig mit end_time und status=completed (statt paused ohne Endzeit). Dadurch sind Exporte/Reports wieder vollständig und konsistent.
  • Historische Pausiert-Einträge repariert: Migration schließt verwaiste Einträge mit status=paused und end_time IS NULL automatisch über end_time = updated_at und Statuswechsel auf completed.
  • Mehrfach-Pausen ohne Datenverlust: Beim Start einer weiteren Pause wird die zuvor abgeschlossene Pause zuerst in breaks (JSON) archiviert; Break-Dauern bleiben vollständig für ArbZG-Prüfungen erhalten.
  • Break-Status-Berechnung korrigiert: getBreakStatus() zählt aktive Sitzungszeit nicht mehr doppelt; Warnstufen und Restpausen-Hinweise sind wieder korrekt.
  • Export-Spalten korrigiert: duration_hours liefert jetzt Brutto-Dauer (Wall-Clock), working_hours Netto-Arbeitszeit (abzgl. Pausen). Vorher waren beide Spalten identisch.

Geändert

  • Export-Transparenz: CSV/JSON-Exporte enthalten jetzt explizite Zeitzonen-Metadaten (timezone, exported_at), damit nachgelagerte Systeme die Uhrzeiten eindeutig interpretieren.
  • UI-Klarheit: Dashboard zeigt sichtbaren Zeitzonen-Hinweis (Europe/Berlin (MEZ/MESZ)), Export-Hinweis auf der Zeiteintragsseite nennt die verwendete Zeitzone.
  • Bediensicherheit: Vor Clock Out erscheint eine Bestätigungsabfrage mit klarer Abgrenzung zwischen „Pause starten“ und „Ausstempeln“.
  • Admin-Transparenz: In den Admin-Einstellungen wird die konfigurierte Zeitzone sichtbar angezeigt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureu3gPfbToOow1ecZSrYUbhzoOp6/Fb3syYzSdx9CNYBvsUDqkoBODyN714AKc/4PF8hYrf+nk+A7ICF0GC94uBW8MsNWCHRQ1GEmhhaNSePTNjV+JCCOR9SINE1JCYVSh4avkBX7evJrRZFTOoxRGZxKBSY8ubYG71+F/N22A3qH8wzu6yYMBi0hrt1oVOfFkhrkBKeEwip7Bm0vrEzfrhnNJ3qsqf5q52F9sxUFZNT+/JLDBPu/ZAokssMJGTgbmKwdc3qQzdI/d0zNPuZJwUNjjgvU+TLeFJRkOKNghRfdkVotVcm63NmAf9afJJx3QkCTOTbMchC9sKyvlnIbG68WUZvsiAUPRW5o2XxXK71zZo8y+GC65ZazjioV/4ANt6sEItnJ0MSylRmWFEXMTMJHgCiqqp9hwZwxs0IicHLsRRsnUDdT7yMgOdB7082cnUFJtWM9Me2uSvYx4QUfPosWZhkMqpwagxJ80EnYSfc12/cEXbr58MbdqyQeCj2dUG1iBPw0eVooOWxf9UwOnNaUKV6ynEGok/mYM3qS8XnNElFpliKoRAfBtgLsCpV7O/ChhjE0gPNILNasGMiofSaAd4cHZjSZI/7Cm6FkOSrGju6XCPubM6XeYLbyZ8pv1htd1H1NzUIsWYXG23nPhICNAdOvEcbIXWEw8H5b2Xtw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.14
Release Details
UpdatedApril 14, 2026, 9:48 a.m.
Changelog

Behoben

  • Genehmigungs-Deadlock (App-Teams): Abwesenheiten und Zeiteintrags-Korrekturen behandeln „hat Kolleg:innen“ nicht mehr wie „hat eine:n Vorgesetzte:n“. Auto-Genehmigung, wenn kein zuweisbarer Genehmiger existiert, folgt TeamResolverService::hasAssignableManagerForEmployee() (explizite Team-Manager bei App-Teams; Legacy-Gruppenmodus weiterhin Kollegen-Proxy). Verhindert Anträge, die dauerhaft auf Managerfreigabe warten, obwohl niemand freigeben darf.
  • Zeiteintrags-Korrekturen: Gleiche Zuweisbarkeitsregel wie bei Abwesenheiten (zuvor nur Kollegen-IDs).
  • Admin-Users API auf /index.php-Instanzen: Refresh/Edit/History/Update nutzen nun zuverlässig aufgelöste App-URLs; fehlerhafte Requests wie search=[object PointerEvent] treten nicht mehr auf.
  • Admin-Teams und Settings auf Rewrite-losen Setups: Zentrale URL-Auflösung enthält jetzt einen robusten /index.php-Fallback, wenn OC.generateUrl() im Seitenkontext fehlt oder unvollständig ist.

Hinzugefügt

  • Repair-Schritt ReleaseStuckPendingAbsences: setzt nach Migration verbliebene pending-Abwesenheiten unter derselben Bedingung automatisch auf genehmigt (idempotent).
  • Frontend-URL-Sicherheitsleitplanken: Die gemeinsame AJAX-Schicht blockiert externe Cross-Origin-Calls standardmäßig (explizit allowExternal: true nötig); Unit-Tests decken URL-Normalisierung und External-Handling ab.
  • Lint-Leitplanken: ESLint-Regeln verhindern neue rohe fetch('/apps/arbeitszeitcheck/...')-Aufrufe und implizite externe fetch(...)-Nutzung außerhalb der vorgesehenen Abstraktionen.

Geändert

  • UX: Abwesenheiten zeigen einen Hinweis, wenn App-Teams aktiv sind und kein Genehmiger zugeordnet ist; in der Detailansicht erscheint bei veralteten hängenden Anträgen ein Warnhinweis (bis Repair/Admin die Teamkonfiguration korrigiert).
  • Frontend-Architektur: ArbeitszeitCheckUtils stellt nun zentral getRequestToken(), resolveUrl() und isExternalUrl() bereit; genutzt u. a. in admin-users, reports, settings und validation.
  • Mobile UX Konsistenz (WCAG 2.1 AA): iPhone-Safe-Area-konforme Abstände, bessere Touch-Targets, klarere Abschnittsstruktur und visuelle Hierarchie für Nutzerseiten (dashboard, time-entries, absences) sowie Managerseiten (manager-dashboard, manager-time-entries, Mitarbeiter-Abwesenheiten).

Dokumentation

  • Nutzerhandbücher (EN/DE), tests/WORKFLOW_ROLE_MATRIX.md und Entwicklerdokumentation zur Semantik „zuweisbarer Manager“ und zum Repair-Schritt ergänzt.
  • README und Entwicklerdokumentation um zentrale Frontend-URL-Policy, striktes External-Call-Verhalten und Mobile/iOS-Layout-Hinweise ergänzt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVBSDJh3veK9J7eUDKGFw/xB1ypmBQrjMDzamatQfncYem1qg9kNVWAnHDH+fGRlFJtrBH+fOu+MRTFZuK78DU/W18IQglCtTbsH4MdaHLHTwVz2JOxeGJWmx2p1yK0ulK0vbDgCLXQu5B8gR/L/JYRGFo0+FpwuRvxrpp1BWrX5m9mQLgoxn3hOj2r+F2m0wYdEDWhksF6VzLbHyr3pIT9hu6p1owuAZzr3Nqtva4tZK0WGgn8xa5bDwZqJdWSyQJ04JiCZisftYCOJz8HNfq6o4MFTLF0aQpYxUH8wf6gz5pkfUOKIemq4Ui8GqRr3Fxo/DW2APAk0GcwWyY8ypEiY2RNi6IkGv3K9p8mFamDxirDeurOX/hwNia1Lt4HCqzJATjWpmaCEAoBQWfOCgozI9o+h8cI9LhHp3LvK3VxFD/s9xjJPFLZ9y8b98hufe13Uq5/NYzqo2vQ1DgQXyCbRjsiMbqDvz+yyDmXM+JPV8U8gTKxTD8y19VoiVIlWhAsI/zBmxHC84G2htaCHBws47cGhmJVvQDXGz/1aae9J0of1bGoOIERyEFSOAzmUN9fcvdVbN+77wn70QQ1k7GQcw6jAEScIQq8Pt8n7pBTECeECk6K4baNfaTT2+kZKLCdD1mdaJII84B8+XXxmxIk+VI1sarNlMIvPAk3FQjww=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.13
Release Details
UpdatedApril 13, 2026, 10:46 a.m.
Changelog

Hinzugefügt

  • Monatsabschluss: Karenz und Auto-Finalisierung: Admin-Einstellung month_closure_grace_days_after_eom (0–90, Standard 0). Nach Monatsende haben Mitarbeitende so viele Kalendertage zur manuellen Finalisierung; ist der Monat danach noch offen, finalisiert ein täglicher Hintergrundauftrag automatisch (gleicher Snapshot wie manuell). Ausstehende Zeiteintragsfreigaben und offene Abwesenheits-Workflows blockieren die Auto-Finalisierung. Wiederöffnen bleibt Administrator:innen vorbehalten.
  • App-Admin-Whitelist: Neue Admin-Einstellung app_admin_user_ids, um die Administration von ArbeitszeitCheck auf eine ausgewählte Teilmenge der Nextcloud-Admins zu begrenzen. Leere Auswahl bleibt rückwärtskompatibel (alle Nextcloud-Admins dürfen die App verwalten).
  • Docker-Testziel für Security-Role-Gating: Verdrahtung von scripts/test-security-role-gating-docker.sh über make test-security-role-gating-docker und composer test:security-role-gating:docker für schnelle Autorisierungs-Regressionstests im Container-Setup.

Geändert

  • Monatsabschluss UX/API: Klarere Karten-UI, sichtbares Erfolgs-/Fehlerfeedback (WCAG), serverseitiges canFinalize mit lokalisierten Sperrgründen; manuelle Finalisierung lehnt zukünftige Kalendermonate ab; Abwesenheits-Workflow (pending, substitute_pending, substitute_declined) zusätzlich zu ausstehenden Zeiteintragskorrekturen; API 401 bei fehlender Anmeldung wo passend; Admin: eigener Abschnitt „Monatsabschluss“; Karenzfeld bleibt editierbar mit Hinweis, dass der Wert gespeichert wird und bei aktivierter Funktion gilt; Wiederöffnen mit durchsuchbarer Mitarbeitenden-Auswahl und klarerer Rollenbeschreibung; Validierungsfehler mit höherem Kontrast über Themes hinweg. Auto-Finalize protokolliert Einzelfehler.
  • Release-/Signatur-Workflow für Integritätsprüfung gehärtet: make release-signed signiert jetzt den entpackten Release-Archivinhalt (nicht den lokalen Entwicklungs-Checkout), prüft verbotene Entwicklungs-Pfade und packt das signierte Archiv für Deployment/App-Store neu.
  • Admin-Autorisierung zentral erzwungen: Zugriffe auf AdminController-Routen werden jetzt per Middleware auf App-Admin-Rechte geprüft; nicht berechtigte angemeldete Nutzer erhalten eine konsistente 403-Seite.

Dokumentation

  • Deployment-Hinweise ergänzt: Die Release-Dokumentation fordert nun explizit das Deployment aus dem signierten Tarball und beschreibt das typische Fehlerbild (.git/* / node_modules/*) bei versehentlicher Signierung eines Dev-Trees.
  • Deployment-Helferskript: release/deploy-from-release.sh hinzugefügt für Deployment aus signierten Release-Archiven mit Sicherheitsprüfungen (verbotene Pfade, erforderliche signature.json, optionales Disable/Enable und occ integrity:check-app).
  • Admin-Betrieb: Nutzer-/Entwicklerdokumentation ergänzt um Einrichtung der App-Admin-Whitelist, Rückfallverhalten bei leerer Auswahl und Verifikation des Role-Gatings im Docker-Testlauf.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signatureol/yHOgiMCOj+yYqb8HC0g5laqPih/kTTbBB12bDawwgGQGVdx+GCBNaSmM8Sgu2jRB6PJWwnF1qFQQ6MIHWCjFzuOQeyL+sDEGH0VhI/qgbCmyRKZnBKAyUq9BBrxux3zaI6cN6QD76nP27UCU4C/OxW87nybYxy4WqqdOSOR0Af9QMkUg/VZLhRatpageqRGkYSFl+3ZwEg8qhlpDyLH3lh3xSG6+tQsyy9yU4La+XDiZ63lG2yF1RWHQ1/irb+dRrPEs/I1wuLvdZL+6olqx7MTogIylUqrJyux7ycTUrC/sxTBsZYJUQ2vGFyGzO30qARQ+KSOJtai5Upcx7WZxHv98eS0X3FGI0QUhC2NwIE2ahn0mfH/YjuRW5wBn9nsDG03KPpDaMATyvxTD8BbzGTM9ziuMKfOzd2HfYxMWDX/GF4LWM/eXpqsO7E2veMjtIClAcMI6vZhJKVV4mxXHxMkFIdvTbaFmPrWEAhFRoI+0NHQ4y3ec+goBucU+E4gHCyicVOT0T4n3NH6U+nOs+95d5cSA85Dz+LF7ZLLYU/rxi1ybC36fVg8igg+P8YvH555KQNizrYNJ2xdglmirJcs0XcEwZ8/hVrWfzuLUgKbMNXlqa2dgRzMnfOy9b5bNUPez9FKsqEqAc66dUr9JnDiR+poFgQBlCAnZ7vbw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.12
Release Details
UpdatedApril 12, 2026, 4:25 p.m.
Changelog

Hinzugefügt

  • Revisionssichere Monatsfinalisierung (optional): Admin-Schalter month_closure_enabled (Standard aus). Mitarbeitende können einen vollen Kalendermonat finalisieren; die App speichert kanonischen JSON-Snapshot, SHA-256-Hashkette, Anhänge-Revisionen, Audit-Ereignisse und ein schlankes PDF. Finalisierte Monate sind über normale App-APIs nicht mehr änderbar; Administrator:innen können einen Monat mit Pflichtbegründung wieder öffnen (Audit). Monatsberichte für finalisierte Monate lesen den gespeicherten Snapshot. Datenbank: at_month_closure, at_month_closure_revision (Migration Version1014Date20260409120000).

Dokumentation

  • Nutzerhandbücher (DE/EN), Entwicklerdokumentation und Compliance-Hinweise zu Monatsabschluss, Aufbewahrung und Grenzen (Nachweis in der App, keine QES) ergänzt.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signature0mCLz3x6v/VzKxsK9I8J3HAMtz+lr9Z43v3UN+tH4hZeZLXvuXWayTxLB6EYKXXnNSfkvF5KMiYJqh3LJHUCTcPUgGfPqNDwCkkTK51T0cmghwWPQylVIe9L6My8a2Pu0sVCrG5P0Ev5t7wdLQNMSxKcHYKXYT7B2QvQG+ljdNKr1/ywfXDEpIg4yzCMnxVdfGIBiUNl4vUIYOXCNt30fUXiRCXHfl381LcA2Bv9ZP+Ddxk+qEpa1iuujWcRg6o32YRCESwDAO2IoXKEvLy16btLtNQd7wL+E6lhCfgST/jp+rWPxh4RSJ8kBlyaBYo8LqvhvMRpGqhYfNOJZTrq0BnKQZfjc1qnAcIHMDFjBfUwi8tp0/bmxOnXmMMFZZtGf6rGLUYinb470whWKydzhIib2K2kSTN9GrRvjmp+osUh9/qAlBzN5wRutIBewKqM8SkwJ52dYiYWU5jAyf3fVxXqRJs970WUccI7udQ8A7J9XqkmCRUBvl46mPugz0K481/X6cKHiZBK9681njxRWorGVGHpCiz92T+Ug2W+bRIBYLBM0oqPd9Dp2rXQ5+UFLDTC9eDG8WP3VVxsK7d5xtK/xWC1fSHy4c7Mgp8WAVITY1eU9ftn1tS8BHZxcgz7EvgtPmamoKwb55KKFTxQu4c6khCWaZ2pPQvXQjxtrNw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.11
Release Details
UpdatedApril 9, 2026, 2:45 p.m.
Changelog

Hinzugefügt

  • Manager-Ansicht „Mitarbeiter-Abwesenheiten“: Neue In-App-Seite und API für Manager/Admins zur Einsicht von Abwesenheiten mit sicherer Bereichsfilterung, Pagination und lokalisierten Statusbezeichnungen.
  • Kopierfunktion für Arbeitszeitmodelle: Neue Kopieraktion mit Modal-UX, eindeutiger Namensvorschlag-Logik und Schutz gegen Doppelklicks.

Geändert

  • Manager-Navigation / Sidebar: Struktur in klarere Manager-/Admin-Untermenüs überführt; Berichte in den Manager-Kontext verschoben; Compliance-Link zur besseren Übersicht umgruppiert.
  • UX Mitarbeiter-Zeiteinträge (Manager): Standard-Datumswerte sowie Datums-/Übersetzungsdarstellung im Filterfluss verbessert.
  • Kalender-Verhalten (Rollback-Bereinigung): Angefangene Funktionalität für direkte Kalendereinträge sowie zugehörige Admin-Optionen/Status/Test-Endpunkte wurde entfernt. Das unterstützte Verhalten bleibt unverändert: keine Synchronisation mit der Nextcloud-Kalender-App; optionale .ics-Anhänge werden weiterhin per E-Mail in den konfigurierten Abwesenheits-Workflows versendet.

Behoben

  • Arbeitszeitmodell-Modaldialoge: Interaktionsprobleme im Kopier-Modal, Darstellung des Quellmodells sowie Lokalisierung/Formatierung im Lösch-Dialog korrigiert.
  • Abwesenheits-iCal-Härtung: Strengere Status-/Datumsprüfungen, Empfänger-Deduplizierung und datenschutzärmere Beschreibungen für Vertretung/Manager ergänzt.

Dokumentation

  • Nutzerhandbücher und Changelogs an das finale Kalenderverhalten (optionale .ics-Mail, keine direkte Kalender-App-Synchronisation) sowie die aktuelle Manager/Admin-UX-Struktur angepasst.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureHwGRZcCLjb/plcL+LoYgcSBNEXoLoZU2DlOb7pcOx6X41OU6v9SkdO5YXOynEBr7kmViQeQzJfLyTUTRSfcqLlz4jC8KL7Xmaa7rImQ0EGSVpaBmmUuHC0MWlrhWWMEkG52smtFFalq0GZy0wLhcHRc6BtqCzilQLju2jS5SR6GTPWutj0i9LsbKsB6LFzkbc9cAbtcRCUjzx9A2oU/EAA1BhRBlyQTvR/OLyDa2FU/CBNWrm3I9293E+D9UP9gMBhKvSH5f1DXF/TpwiCEzYB/NRR0KBXvQb30whbv6O/WJfCEs9z1+wryRvNfGjT0+9X4C3tPtLTpyh7noU7NK7VzS0Cl0/TbACvlEY8yk9I+UPbNYA9jUiNny2JpAh6syrFE3k2RrhIpiJ9iLwqKgUYN2rlx6LFtqWP1NlIExC97DdmCTt1YRTyeDzi/NrZuGKHl5JBtCJWZalX6KwxjJd4oBrxoy1+i/2BLSpjoUlvPQ2FHPlqdtHWcIqryrVzmV+8ZJyxmo5EVJR6bmGESQjUovJ70j5KIltEg1OM/5MAyJ9hkIBJxjXiLTvocREbYOdoicChFs9aQFbDX0VN3BD4q6FNSiV5UXRsbzo57lxa4n51hB3tjoQAJ+rBlmMyVez7u1zNj+5X6lrvn7b5/5UQg2oHpaR8Hz1iPPou7E/GA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.10
Release Details
UpdatedApril 7, 2026, 7:49 p.m.
Changelog

Hinzugefügt

  • Urlaubsübertrag / Rollover: VacationRolloverService, Hintergrundauftrag, occ arbeitszeitcheck:vacation-rollover, Migration Version1013Date20260407120000 mit at_vacation_rollover_log; Unit-Tests.

Geändert

  • Frontend-L10n: Gemeinsame Partials templates/common/main-ui-l10n.php und teams-l10n.php, damit Übersetzungen früh verfügbar sind; zugehörige Template- und JS-Anpassungen.

Behoben

  • Manager-Dashboard — ausstehende Abwesenheiten: Die API liefert summary.typeLabel (serverseitig übersetzter Abwesenheitstyp); die Oberfläche nutzt das bevorzugt, damit Karten lokalisierte Bezeichnungen zeigen (z. B. Urlaub) statt Rohcodes wie vacation.

Dokumentation

  • docs/Developer-Documentation.en.md: API-Hinweis zu typeLabel bei Pending Approvals; Nutzerhandbücher EN/DE: Hinweis zu lokalisierten Abwesenheitstypen bei ausstehenden Genehmigungen.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturekmFxrMFQus0US44BSrw/0eOzjGU8zutOf6Q4Dqcc/39RNDiCiQOKB55We29dsKBZ77Qkk8fbitvBMURDmfLM21hqyrDTfltj77MNdonON7hcINJKQZG2fGLz3Rrc+10mDQDAiDqVQGOLrpJBQVuA+TxdUEA1C9+z0zwvmHLdlBEgXCw7k/4FoU8aKCA/Jcp02Fjr98PG+1MW5SbOtTs8oQG2iMpRe7Ogo+YzqZtU11KZ4tOr8zEblZeh7oSG+AaIlj16YscKKCWAL3MLmyRvYTXWpPgsu4xLp+AUvTGbSEKUlDeEznDDkGpUvVrd2pTm4Y7xyc8X8c/0WQRqWuioiqRLUHHldJg8MjgL4s7mQkqy95dfZ/xQRC9BAc/cbTceynA8PD5XILnQAVgVRe9hXsji6TgN2EURulrVsBbCN1wCAp/Be9FqH7NYiQYxhmVfYM3kmyMdVe/+owslEAaMcmjT/QcZQlCeJj5SNOXCqVwCsks0ijINP2utN0XO4mlHkCt712QwFAMw86rSjnuX7eA1W6w2OpFjFFobOekDaUgBs8ID4LMgpOWJSGTI2P9AHtBJTMNSrRmsMzQmafZYdBm2F9gO4tz9ktxbhcmBFWpTvNHZimE6Re354pnTOQIQ4yCKU+8VsqYEJxdxe1JYXE2yTeNCKOCcIywL8/hvVS0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.6
Release Details
UpdatedMarch 27, 2026, 6:08 p.m.
Changelog

Hinzugefügt

  • Entwicklung: CLI occ arbeitszeitcheck:generate-test-data für deterministische Demo-Daten (Zeiteinträge, Abwesenheiten, optional Verstöße, Demo-App-Team) zum Testen von UI, Berichten und Workflows.

Behoben

  • Berichte-UI: Berichtstyp-Karten werden bei teambezogenem Scope nicht mehr fälschlich deaktiviert.
  • Berichte (Tests): CSV-Download-Test nutzt DataDownloadResponse::render() für den Dateiinhalt.
  • Team-Berichte: Nutzer-IDs werden vor Berechtigungsprüfung und Aggregation dedupliziert (keine Doppelzählung bei Mehrfach-Teams).
  • Abwesenheits-Badges: Besser lesbare, theme-sichere Kontraste für Urlaub / Krank / Homeoffice / Sonstiges.

Geändert

  • Kompatibilität (Dev): Lokale Entwicklungsumgebungen an Nextcloud 33.x ausgerichtet (z. B. offizielles nextcloud-Docker-Image).
  • Berichte-Layout: Zu aggressive Vollbreiten-Regel für das Parameterformular zurückgenommen (verbessert Scroll/Layout).
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturehE0UvSaJEnunYMHOd5u3aR+5MyAg2Pl78l3t75Fx494nh6CzImBfoaswZXb9agJ6Iz1orktgFsKlTqfZoSGNxuZHRiRjcbtC+LsLLQsjONX5i5UOXK6crz87+6TEDAPkgdr318s+w9qHvTic2kdcdx+rpqbBSMIAgU/GuVZjyp4wtCV2Ti9VFR1pFzAlmH95b6WVCQCdTYmWs7LsLY//midoEYCd8JXSicLvr2nobqTL/soYZdR/39931AgpiUO5B9Rd0Wo7NVhk8C59bmlNqkLa8UDZHTZ/Eseks/njP9CdRsgdaUiqIm3libscOPzoFg2abyJpIZUV/nV8acOq8dh/XNNVRuLxxHs5v5FcByrnuxE4G1IbyC/FtB1KFRQlGF+rwwSEzBKdkNCdH5zbJ//gEgRfjZJb/Ijtma9+14jeRub/oLHQx0Mkh27aVMBPbqDI8LeuOLWo4Gbd4RXFknth02gSZpk1/Ko4uE90R44RcO2YUS58qvKQkickIoDEQId9w55FIEyP7LIAZa2bXl9qYZAA+CHCwixsBKi3a+yADg/wWaN4roVQ4LobTjp1adPOOVWbTHSemHRgEsqpboMxRXcrRWan8pNiQrnvTbJwIu9i3Q6zgHtHXe6RviFMzwiMJQTdvLhhHuANr9Lt04cCZjPS2dWfjGCZKVfo7hM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.5
Release Details
UpdatedMarch 26, 2026, 6:57 p.m.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturedkvj+LT0qxzHO59iXnzyYCXDEgfS9OMri9yD8QWcQqS/VPzNKFBHIHDqX/2JmnEuQFM6sKf+jyx0QORDIAC4h2XiZoUlJe+MHgZQGGqa/mA/SGFQtwzlxWw2A4Drm1ioGkOIwhGo5Ny0zIogawfyhPtDQX7Mjj2K9x5+OSHQKtQs8LGRiyy7EsVJUC4fWworktCvuqRYpvR+rY2GfSu0CcWWZVItcEYqAfDFl3UvmWag299QrF1g7SOVY1EcoDH2B+O2mOwXwj6JjWNhz4iUkdcbkthaHPwZ12cUTOYLOtopIILuRTdlXiYWqYvLn24yZUObqmS0LbNcyzAF8gF8LDOmp08FxRCo6NY4L9HJcvgaR4qDkOpiC1aj/9FK8LmRnmdOvH9FHIqr2P6eBP4uoetMWoMbW3QAqvizVMDYPe96Qj1m/Cwp2ogV5+D0JOt1Ms02LGHZ3pcBp0vojoUu52pdP+dXL1d0ZN4rzSPEVQboJllQz4dyahtQ55l2EuDdk6VVf35oOPFLt5HqIF84tFYbY4moxafMunMI2lSWeRj0jCxApnTcrjuWDRuG8Q/fv3Za2gtkSsx9XNLPAb6YNOrgKFEeZRtSIp7L2V6shwxn9H4PG2uETboUm44RWkoZO+JZFtNTTlZpij4B5mRvo/OamgruxwI6YgplBQXObSw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.4
Release Details
UpdatedMarch 26, 2026, 6:40 p.m.
Changelog

Behoben

  • Routing/Kompatibilität: indexApi()-Kompatibilitätsaliases für Legacy-Endpunkte ergänzt, um 500-Fehler in den Nextcloud-Logs zu verhindern.
  • PHP-Fatals: Konstruktor-Signaturprobleme in AbsenceService und ComplianceService behoben (konnte die App beim Laden von Services oder beim Speichern von Einstellungen zum Absturz bringen).
  • Reports-Sicherheit: Vorschau-Endpunkte gehärtet (start <= end Validierung + maximale Zeitraumbegrenzung) um DoS-Risiken durch untrusted Parameter zu reduzieren.
  • Admin-“Gesamte Organisation”: Admin-Organisation-Scope korrekt verarbeitet (userId="" = alle aktivierten Nutzer) inklusive passender Zugriffsprüfung, damit Preview/Download konsistent bleiben.
  • Reports-Rendering: Preview-Darstellung für Abwesenheiten und Compliance verbessert, sodass sie zur tatsächlichen Ergebnisstruktur passt.

Geändert

  • Reports-UI-Semantik: Team-Scope auf Team-Overview-/Export-Semantik eingeschränkt (verhindert irreführende Preview/Downloads).
  • Organisation-Download Hinweis: UI-Hinweis ergänzt, dass Organisation-Download erst vollständig unterstützt ist, sobald dedizierte Organization-Export-Endpunkte verfügbar sind.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureB+kiXQiNbiYsWVOlB3wiTffKZj021JMzAUzhQRYuwQmpszoGICQ7cCChEeggNXAMuOsRrPkznqB190jArt5Sfp7zKL5I3Z7IjyH6ur4aAqf6Tddq93/6Vb4W4ud9G30AJhkh3X0PBZ98bcOPcrxiaMrOqHryaIkcQ0os1pJnCAZ5v/zmUZGz/rVHxc0VNUGGvJZnx8Odwgd0r9z3McM4r9LL7n9+CrwtDMOVS/fUwAapkdaqM381pkLCa5BHM8VJd+ARz7Tt8rPVuVBwXDR9pkq38eoD9tQ61QVbCqrfsf4/8LgcbNlrHjWVRrAtUirX38JlJgFBKvmzaORvsgylNFggcrZ7sIx4o29kPPkFWZaUee0TKI/uc3WlThNIj/i4+sVTZ2Um23cfon/wr/sHByJIMOsFrw60s6RPm/XjAxeTnJbrm61ms9a0kKTodDR7puH0guqBQJX/CTJUQxcoPmKcfVqqblI2Ll/efOzi/BHYEEuiMGRVfYmuwtlALuFODD8ALFhf8EYmnB2EyCTLJwR+1bSUQF6/a/p4PP9cVSRKDbfYY3rpSU/QXbM3XTn3fET1dqE98FWEqPK6iNKdoMrcsZ4gkKNMNYKpAjMB9kbemHOVPNCIDVTIkYsVQO/edieH4N3EPouwzLWCvQVqWpb8h7SPbTslAhg45WtVByU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.3
Release Details
UpdatedMarch 19, 2026, 2:41 p.m.
Changelog

Behoben

  • ArbZG-Compliance: Pausenprüfung korrigiert (9h/45min-Zweig erreichbar; Prüfung ≥9h vor ≥6h)
  • Manager-Logik: employeeHasManager() nutzt nun getManagerIdsForEmployee() statt getColleagueIds()
  • Berichte: getTeamHoursSummary() berücksichtigt Periodenparameter (Woche/Monat)
  • Admin-Benutzer: hasTimeEntriesToday pro Benutzer statt systemweit
  • UserSettingsMapper: Falsy-Null/Leerstring-Behandlung in getIntegerSetting, getFloatSetting, getStringSetting
  • Routing: exportUsers-Route vor getUser verschoben (Shadowing behoben)
  • Version1009-Migration: MySQL-Backticks durch portablen QueryBuilder ersetzt; OCP\DB\Types
  • Doppelte Notifier-Registrierung: Aus Application.php boot() entfernt
  • API-Sicherheit: Generische Fehlermeldungen statt roher Exceptions (SubstituteController, GdprController)
  • PDF-Export: HTTP 422 mit klarer Meldung statt stillem CSV-Fallback
  • LIKE-Injection: WorkingTimeModelMapper::searchByName() verwendet escapeLikeParameter()
  • XSS: Modal-Titel in components.js escaped; compliance-violations.js innerHTML escaped
  • Admin-Einstellungen: CSRF-requesttoken ergänzt
  • AbsenceService DI: Konstruktorargument-Reihenfolge (IDBConnection) korrigiert
  • Admin-Feiertage und -Einstellungen: englische Quellstrings für l10n
  • UserDeletedListener: TeamMemberMapper und TeamManagerMapper per Injection
  • XSS: Team-Namen in admin-teams.js bereinigt

Geändert

  • CSS: Shadow-Light-Variable, scopierte Resets, Dark-Mode color-mix, semantische Farben, Navigationshöhe/z-index
  • Uhr-Buttons: Doppel-Submit-Guard (deaktiviert während API-Aufrufen)
  • initTimeline(): Max-Retry (20) gegen Endlosschleife
  • Barrierefreiheit: aria-label auf Header-Buttons, Label für Admin-Suche, aria-modal im Willkommens-Dialog, englische l10n-Keys in Navigation
  • Dokumentation: Interne Docs entfernt; docs/README ergänzt; Repo-URLs korrigiert
  • Manager-Dashboard: l10n von PHP an JS übergeben für Übersetzungen
  • Constants.php; benutzerfreundliche Fehlermeldungen
  • Zeiteintrags-Export: Optional (per Admin-Einstellung) können Einträge, die über Mitternacht laufen, im CSV/JSON-Export rein darstellungsbezogen in zwei Kalendertage segmentiert werden (vor/nach 00:00). Die zugrundeliegende Arbeitszeit- und ArbZG-Compliance-Berechnung bleibt unverändert auf Basis des originalen, unsplitteten Zeiteintrags.

Hinzugefügt

  • Version1010-Migration: Zusammengesetzte Indizes auf at_entries, at_violations, at_holidays, at_absences
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturePf3DfgKP/j8T95ElL4ORpuPFeD3UHt901udriCVI1yQdyRJDTp5Z8tHcaFpLRjjmjW8c1nFIEjrFVTjl5UNnPTTWzwf1+Woci/TtIHa7lDkMftxjIIVMf7khRJ6NGriUQD1WVS6Hqdi+FWafgnIqn7dO728K+lB3rFSlgoCoQgQpjjJ/D+N5yynIi44wiD7F8PngozN58wUdWoW02zBX3W+ndpEZXmrY2srqPndhBrlg4cOrE8cWSUFe9wtwSaopkDZPSl85Wsg7nwDOJGV1JaFzDdBxyHATs3kxJnsntXePI1j/O8bcWR69o45JkDY458TsiA0qweFMx5A3Ioh5K0Rrp4UQREthUP83sEzQCIo9ztzB3oeFr1sAs+/dfauAPLsHWNG3NO70fZ82RnsRKuhklTbL8RQ6gc2a3rqrOLSPypyLsv6+UxyoKwm41cggNl4UnhyUhoa33IjBiEoZDXTfB2d+fNZoTXkOYZdDTKcC9bNMc+mo8guNkTxqAYw8Ian0V7vmLs0uBJ9JYyyy5k8AUd+8ijMokWm/2VKPCbDga4mmZevp3KqSpVOqXYBJXmMzJH2Vf+LXZYjRHTScFQ92bXVz7VRRNoz+LEtZy4QYIT9u+YCIvu7ddT5RZmA08HIWU52W/jWQQiKraZE/Nw8Ks4VQBfB6TX+wDCGadBs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.2
Release Details
UpdatedMarch 11, 2026, 11:36 a.m.
Changelog

Geändert

  • Langfristiges Refactoring: Ersetzung aller \OC::$server-Verwendungen durch OCP-APIs und Konstruktor-Injection
  • CSPService: ContentSecurityPolicyNonceManager per Konstruktor injiziert
  • Controller: manuelles cspNonce entfernt (configureCSP übernimmt dies); IURLGenerator und IConfig injiziert, wo nötig
  • PageController: IURLGenerator und IConfig injiziert; übergibt urlGenerator an Templates
  • HealthController: IDBConnection für Datenbank-Check injiziert
  • ProjectCheckIntegrationService: LoggerInterface statt OC::$server->getLogger() injiziert
  • Templates: \OC::$server durch \OCP\Server::get() (öffentliche OCP-API) ersetzt
  • GitHub-Actions-Release-Workflow hinzugefügt (.github/workflows/release.yml)
  • PageControllerTest mit vollständigen Konstruktor-Mocks aktualisiert
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVdOLtKkuJFOvqioRam3iZGmEiSQrA4Xc99thIdm97dMKFlfHskcRIG34rWiqftbbIh+6CgWWxu+YdQOLSV63qOtZ7rH/rl1x5hnhaR4GBDbTtnE/frmfTJYlpHlKVw9KSyniEEAE30lLl5tuYA/4myl+9N6abL+9oJpQo8nAY2oApVgdJQFHPvUPeaJ6q0Qb6GUkOTwZo/UgmT0cIqTL7Ymkvkp3OGE1nRr2hD+T5aFyXu0E3IfS5m+eete4Xdn5TcSYzWVB3oBdMxmRTUtracW4ar/ZstAIwsVxmrLcW4/2AgvUQrrAZ87EBNNoiekUF+nJogWpFeh1n6lN7ZbuUSQJaQtlquovukPbnOgO1AAFe3EMG2DmBtlbyn/jt8/DY5ql8VTDp62eKDJxYTodidjAQYkqMEve7XuTtPgrNwG9c4hFNYS5fIGz07ER4otxErRKC25d89ql/bkSDre0IZPw/gTgdEjx71iD/UZBf9b2tzhMKpNfdtlkT0BV1mNOa376kZzYOk9DcpAaOgobPK00gb3ZeeODGn29N8LEvEAI5SCoa1m7eT4B0KbMQNtgDEUNZrrvRf3Tzpb0mL2QUmf5i3sn10IjQ6KdTDor1xWFEYIF03M240Dw5ml/UUrDgvXI9WZ1BzgyNDe2HAVeNPb9akpPHUWYkoe+uOoaf7A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.1
Release Details
UpdatedMarch 10, 2026, 10:18 p.m.
Changelog

Fixed

  • Resolved duplicate route names in absence API (absence#store, absence#show, absence#update, absence#delete)
  • Corrected settings class names in info.xml to use full OCA namespace
  • Added declare(strict_types=1) to routes.php

Changed

  • Removed non-existent screenshot references from info.xml until real screenshots are captured
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturec6nuFK9N2O61bf1GpNWz2G2FDt1GzTRzd2pXna6x5E/HI/m1e1dt8TheGnhfgYm/TY/o/W539hak3svOJbJmoJr/kmd7xVWRGnZH/PDBjROe5kwRIwWdZlR3z7DiOyTsZo44DBLvVFEaRMAjF4PpVpJxTIA0xV59d3YJHyFZXbMPxSvAbZu43bAjWU6kVGmfaKUOrW5d592aApbxQ+mwJS7LwFMXlxGSzyCTwYL3bMkwormPPS64RTJtrPhvImU09ACMsjwgERAuFGlvbGj8CiuXzAWoO7ISyxcsqiaw1jnA5OIlJ+hnQhUdYHtkIzdwNHxw4ItSBL3pSJjhwIyrs4zZRMkOVjTqDluDfmvbx3Ir9cglVHlMGGTOOJtuyU0PmL0Fo9HZ2R0Noz9w8T3cpetxRG+B+mSWapUblbM+BT6aIvfHMjSzvI0qjwzcczwVzkYJISHReObwYFpeVs5W7cW1gXY2mx42Q/fPqDkrM5wEiuYJ98QG7Y67uhYZce9wmAp0Pygx0UJILj4fNPLuA27hVOp3++x0rOxhEl1A4v0tgiX5pVRYK3qwf1vHFl3zSGgldQs2WUmJ6CoPWbIE6hzmtRUGMzSOnKEK+2eLHej/Edzdo75nVZd6maKXVAY1L+z74IK61HvJ6kQ0QXFO7urWBZJg+IfxzR6W4mrvZnY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32