ASiC Handel
Architektur, Funktionsumfang und Codeübersicht der App
Technische Architektur
Grundprinzip
Reine clientseitige Web-App (HTML/CSS/JavaScript, „Vanilla JS“, keine Frameworks wie React oder Vue). Die App benötigt keine eigene Backend-Anwendung und keine klassische serverseitige Datenbank.
Die wesentlichen Funktionen laufen vollständig im Browser. Zur Laufzeit ist für die Grundfunktionen keine Internetverbindung erforderlich, da die benötigten HTML-, CSS- und JavaScript-Dateien lokal über den Service Worker verfügbar gemacht werden.
Speicherarchitektur
Die App verwendet mehrere getrennte lokale Speicherorte im Browser. Die Daten bleiben grundsätzlich geräte- und browsergebunden.
| Speicher | Inhalt | Warum dort |
|---|---|---|
localStoragebegehungState
|
Aktuelle Begehung: Betriebsdaten, Bewertungen, Kommentare, Maßnahmen, Unterschriften und „Nicht vorhanden“-Schalter | Kleine strukturierte Textdaten der aktuell laufenden Begehung |
IndexedDBasicHandelPhotos
|
Fotodokumentation: Bilddaten als Blobs sowie Kommentare und Zuordnungen | Geeignet für größere Binärdaten wie komprimierte JPEG-Fotos |
IndexedDBasicHandelArchiv
|
Archivierte Begehungen mit Betriebsdaten, Bewertungen, Maßnahmen, Unterschriften und den zum Archivzeitpunkt vorhandenen Fotos | Vollständige, getrennte Schnappschüsse abgeschlossener Begehungen |
indexedDB.open() können
in seltenen Fällen Anfragen hängen bleiben; hierfür bestehen
Zeitüberschreitungen bzw. Fehlerbehandlungen, damit die App nicht
dauerhaft blockiert.
Verwendete Bibliotheken
-
jsPDF
(
js/jspdf.umd.min.js) – lokale Bibliothek zur PDF-Erzeugung -
Space Grotesk
(
fonts/*.woff2) – lokal eingebundene Schrift für Überschriften (siehe Abschnitt 6) - Keine Framework-Abhängigkeit wie React, Vue oder Angular
- Keine CDN- oder Fremdserver-Abhängigkeit: Bibliotheken und Schrift liegen lokal im Projekt, es werden keine Daten an Dritte übertragen
- Kein Build-Prozess und kein npm/Bundler erforderlich; die App läuft direkt aus den bereitgestellten Dateien
Offline-Fähigkeit / Service Worker
Der Service Worker sw.js stellt die Offline-Fähigkeit
der App bereit. Er wird über js/app.js registriert.
Die aktuelle technische Cache-Version lautet:
asic-handel-v1.54.
-
Beim Installieren einer neuen Version werden die
hinterlegten App-Dateien ausdrücklich mit einer
cache: 'reload'-Anforderung neu geladen. - HTML-, CSS-, JavaScript-, Icon-, Manifest-, Schrift- und jsPDF-Dateien werden anschließend für den Offline-Betrieb im neuen Cache gespeichert.
- Der Service Worker verwendet online grundsätzlich „Netzwerk zuerst“. Eine erfolgreiche Netzwerkantwort wird anschließend im aktuellen Cache aktualisiert.
-
Nicht zwischengespeichert werden die
Server-Endpunkte (
*.php) sowie Anfragen an fremde Adressen. Dadurch erscheinen offline keine veralteten Dateilisten oder Begehungsdaten aus dem Cache. - Ist kein Netzwerk verfügbar, wird auf die bereits vorhandene Cache-Version zurückgegriffen.
-
Beim
activate-Ereignis werden ältere ASiC-Handel-Caches automatisch gelöscht. -
self.skipWaiting()sorgt dafür, dass eine neue Version nicht erst beim nächsten Browserstart installiert werden muss. -
self.clients.claim()übernimmt vorhandene offene Tabs möglichst unmittelbar durch den neuen Service Worker. -
Registrierung erfolgt mit
{ updateViaCache: 'none' }— verhindert, dass der Browsersw.jsselbst aus seinem eigenen HTTP-Cache liest und dadurch eine neue Version (neuerCACHE_NAME) gar nicht erst erkennt. Zusätzlich wird nach der Registrierung sofortregistration.update()aufgerufen, statt nur auf den nächsten browserinternen periodischen Check zu warten.
CACHE_NAME
werden die vorgesehenen App-Dateien erneut geladen und der
bisherige ASiC-Handel-Cache entfernt.
Lokale Benutzerdaten in localStorage und IndexedDB werden
dabei nicht gelöscht.
updateViaCache: 'none' und sofortigem
registration.update()-Aufruf kann es einzelne
Geräte/Browser geben, die eine neue Version nicht sofort
erkennen (insbesondere iOS Safari kann hier hartnäckig sein).
In diesem Fall der Reihe nach:
- Seite mit einer echten Aktualisierung neu laden (nicht nur zwischen Tabs wechseln)
- Falls als Home-Bildschirm-Symbol installiert: Symbol löschen und über Safari neu hinzufügen
- Als letzte Möglichkeit: Einstellungen → Safari → Verlauf und Websitedaten löschen (betrifft dann allerdings auch andere Websites)
CACHE_NAME in sw.js auf eine neue Version
gesetzt werden, beispielsweise von
asic-handel-vX.Y auf
asic-handel-vX.Y+1 (jeweils die auf 1 erhöhte
Zahl nach dem Punkt).
Dadurch wird ein neuer App-Cache aufgebaut.
PWA-Grundgerüst & Installation als Desktop-App
-
manifest.jsonund Icons (icon-192.png,icon-512.png) sind vorhanden. - Die App kann auf unterstützten Geräten zum Home-Bildschirm hinzugefügt bzw. als installierbare Web-App verwendet werden.
- Auf Firmenrechnern kann die über GitHub Pages bereitgestellte HTTPS-Adresse beispielsweise in Edge oder Chrome als App installiert werden.
- Die HTTPS-Bereitstellung ist Voraussetzung für Service Worker und PWA-Funktionen.
Zugangs-Hürde
js/access-gate.js zeigt eine Zugangscode-Abfrage,
wenn die App als installierte Anwendung läuft
(beispielsweise über display-mode: standalone
bzw. navigator.standalone auf iOS).
Beim normalen Aufruf in einem gewöhnlichen Browser-Tab bleibt die Seite frei zugänglich.
Der Code steht nicht im Quelltext, sondern als SHA-256-Prüfsumme
in zugang-config.js (Hauptordner). Dort kann der
Betreiber einen neuen Code hinterlegen oder die Abfrage mit
aktiv: false abschalten. Die Eingabe wird im Browser
gehasht (Web Crypto, ohne HTTPS mit eingebauter Ersatzfunktion)
und mit der Prüfsumme verglichen.
Nach erfolgreicher Eingabe wird die Prüfsumme des gültigen Codes pro Gerät/Browser lokal gespeichert. Wird der Code geändert, passt sie nicht mehr und die App fragt einmal neu.
config.php,
ggf. Anmeldung am Webserver).
Seitenstruktur
Die App besteht aus mehreren eigenständigen HTML-Seiten, die gemeinsame CSS-, Daten- und Logikdateien verwenden.
| Seite | Zweck |
|---|---|
| index.html | Prüfkatalog und Eingabe der Begehungsdaten |
| massnahmen.html | Aktionsplan: Maßnahmen, Status, Fotos und Unterschriften |
| fotos.html | Allgemeine Fotodokumentation |
| verlauf.html | Mein Verlauf (lokales Archiv) und Team-Archiv (Server) |
| auswertung.html | Auswertung der lokal archivierten Begehungen |
| auswertung-team.html | Auswertung aller Begehungen im Team-Archiv |
| einstellungen.html | Server-Adresse und Zugriffsschlüssel |
| hilfe.html | Bedienungsanleitung und FAQ |
| dokumentation.html | Technische Dokumentation |
| impressum.html | Impressum |
| datenschutz.html | Datenschutzerklärung |
Die Hauptseiten teilen sich den gemeinsamen Header, das Branding, die Navigation und die Fußzeile mit Versionsangabe und rechtlichen Links.
Fachlicher Funktionsumfang
Prüfkatalog – 24 Kategorien, 199 Einzelfragen
Die Kategorie Beleuchtung ist bewusst auf eine kompakte Begehungsprüfung begrenzt und in die drei separat aufklappbaren Unterbereiche Verkaufsraum, Lager und Servicebereich gegliedert. Jeder Unterbereich besitzt – wie bei den Flüssiggasflaschen – einen eigenen N.V.-Schalter. Im Verkaufsbereich wird der Referenzwert von mindestens 300 lx nach ASR A3.4 genannt. Im Lager und Servicebereich richtet sich die erforderliche Beleuchtung nach der tatsächlichen Tätigkeit und Sehaufgabe; die Begehung ersetzt keine vollständige lichttechnische Gefährdungsbeurteilung.
Die Kategorie Flüssiggasflaschen ist zur besseren Übersicht in fünf innerhalb der Hauptkategorie separat aufklappbare Unterbereiche gegliedert: „Lagerung und Lagerbereich“, „Flaschenzustand und Dichtheit“, „Ausgabe, Rücknahme und Transport“, „Brand- und Explosionsschutz“ sowie „Organisation, Unterweisung und PSA“. Die 24 enthaltenen Unterfragen bleiben eigenständige Prüfpunkte und können einzeln mit OK, Mangel oder N.V. bewertet werden.
In der Bedienung wird zunächst die Hauptkategorie „Flüssiggasflaschen“ geöffnet. Darunter erscheinen die fünf Unterbereiche als aufklappbare Menüzeilen. Ein Unterbereich kann unabhängig von den anderen geöffnet oder geschlossen werden. Das Auf- und Zuklappen dient ausschließlich der Übersicht und verändert keine bereits gespeicherten Bewertungen, Kommentare oder Maßnahmen.
Wird eine der 24 Flüssiggasfragen mit Mangel bewertet, gelten dieselben Funktionen wie bei allen anderen Prüfpunkten: Die optionale Mangelbeschreibung kann erfasst werden und die zugehörige Maßnahme wird in den Aktionsplan übernommen.
Jeder der fünf Unterbereiche besitzt zusätzlich einen eigenen Schalter „Unterbereich nicht vorhanden / nicht anwendbar“. Der Schalter wirkt nur auf die Fragen dieses Unterbereichs und markiert sie automatisch als N.V.: Lagerung und Lagerbereich 6 Fragen, Flaschenzustand und Dichtheit 4 Fragen, Ausgabe/Rücknahme/Transport 5 Fragen, Brand- und Explosionsschutz 4 Fragen sowie Organisation, Unterweisung und PSA 5 Fragen.
Für die gesamte Kategorie steht darüber hinaus der Schalter „Keine Flüssiggasflaschen im Markt vorhanden“ zur Verfügung. Wird dieser aktiviert, werden alle 24 Flüssiggasfragen in allen fünf Unterbereichen automatisch als N.V. markiert und für die manuelle Bearbeitung gesperrt. Nach dem Ausschalten können die einzelnen Unterbereiche und Fragen wieder bearbeitet werden.
Jede Frage kann mit OK, Mangel oder Nicht vorhanden / nicht anwendbar (N.V.) bewertet werden.
Bei einem Mangel kann zusätzlich ein individueller Freitext-Kommentar erfasst werden. Gleichzeitig wird die zugehörige Maßnahme angelegt.
Für bestimmte ausstattungsabhängige Kategorien gibt es einen „Nicht vorhanden“-Schalter. Dieser markiert die enthaltenen Prüfpunkte automatisch als N.V. und sperrt die manuelle Bewertung.
Maßnahmentexte in drei Sprachstilen
Zu den Prüffragen sind vorformulierte Maßnahmentexte hinterlegt. Der gewählte Sprachstil kann jederzeit umgeschaltet werden.
- Einfach – verständliche Alltagssprache
- BGHW – Formulierungen mit Bezug auf relevante Arbeitsschutzregeln und Regelwerke
- Rechtlich – Formulierungen mit einschlägigen Gesetzes-, Verordnungs- und Normverweisen
Quellenverzeichnis der Maßnahmentexte
Die Maßnahmentexte im Sprachstil „BGHW“ und „Rechtlich“
beziehen sich auf die nachfolgend aufgeführten Vorschriften,
Regeln und technischen Regelwerke. Das Verzeichnis wurde mit
der fachlich vollständig geprüften js/text.js
abgeglichen. Die Quellen werden hier bewusst einzeln und mit
ihrem jeweiligen fachlichen Bezug dargestellt
(Stand der fachlichen Vollprüfung: 01.10.2026).
1. DGUV-/BGHW-Regelwerk und Unfallverhütungsvorschriften
| Quelle | Bezug im Maßnahmenkatalog |
|---|---|
| DGUV Vorschrift 1 – Grundsätze der Prävention | Grundpflichten der Prävention, Organisation des Arbeitsschutzes, Unterweisung und Dokumentation sowie Erste Hilfe. |
| DGUV Regel 100-001 – Grundsätze der Prävention, Ausgabe 06/2025 | Aktuelle Konkretisierung der DGUV Vorschrift 1, insbesondere zur praktischen Organisation und Durchführung von Unterweisungen. |
| DGUV Vorschrift 2 – Betriebsärzte und Fachkräfte für Arbeitssicherheit | Betriebsärztliche und sicherheitstechnische Betreuung des Betriebes. |
| DGUV Vorschrift 3 – Elektrische Anlagen und Betriebsmittel | Sicherer Zustand sowie Prüfungen elektrischer Anlagen und Betriebsmittel. |
| DGUV Vorschrift 25 – Überfallprävention | Organisation der Überfallprävention, Umgang mit Bargeld, Unterweisung und Maßnahmen nach einem Überfall. |
| DGUV Regel 108-010 – Überfallprävention in Verkaufsstellen | Branchenspezifische Konkretisierung der Überfallprävention für Verkaufsstellen. |
| DGUV Vorschrift 68 – Flurförderzeuge | Führen, Beauftragung, Unterweisung und Prüfung von Flurförderzeugen. |
| DGUV Regel 108-601 – Branche Einzelhandel | Zentrale branchenspezifische DGUV-Grundlage für den Einzelhandel; wird bei zahlreichen Prüfpunkten ergänzend herangezogen. |
| DGUV Regel 100-500 Kapitel 2.35 – Betreiben von Kälteanlagen, Wärmepumpen und Kühleinrichtungen | Kälteanlagen (auch CO₂), Gefährdungen durch Kältemittel, Betrieb, Prüfung und Unterweisung. |
| DGUV Regel 110-010 – Verwendung von Flüssiggas, Ausgabe 11/2024 | Lagerung, Handhabung, Rücknahme, Dichtheitskontrolle, Brand- und Explosionsschutz bei Flüssiggasflaschen. |
| DGUV Regel 112-191 – Benutzung von Fuß- und Knieschutz, Ausgabe 12/2025 | Auswahl und Benutzung geeigneten Fußschutzes; berücksichtigt die aktuellen Anforderungen an Sicherheitsschuhe und Rutschhemmung. |
| DGUV Information 204-020 – Dokumentation der Erste-Hilfe-Leistungen | Dokumentation betrieblicher Erste-Hilfe-Leistungen. |
| DGUV Information 204-022 – Erste Hilfe im Betrieb | Organisation der Ersten Hilfe, Erste-Hilfe-Material und betriebliche Abläufe. |
| DGUV Information 208-016 – Handlungsanleitung für den Umgang mit Leitern und Tritten | Auswahl, Benutzung, Kontrolle und wiederkehrende Prüfung von Leitern und Tritten. |
| DGUV Information 208-061 – Lagereinrichtungen und Ladungsträger | Sichere Nutzung und Kontrolle von Regalen, Lagereinrichtungen und Ladungsträgern. |
2. Technische Regeln für Arbeitsstätten (ASR)
| Quelle | Bezug im Maßnahmenkatalog |
|---|---|
| ASR A1.2 – Raumabmessungen und Bewegungsflächen | Ausreichende Bewegungs- und Arbeitsflächen. |
| ASR A1.3 – Sicherheits- und Gesundheitsschutzkennzeichnung | Sicherheitszeichen, Verbots-, Warn-, Rettungs- und Brandschutzkennzeichnung. |
| ASR A1.5 – Fußböden | Rutsch-, Stolper- und Sturzgefahren sowie sicherer Zustand von Fußböden. |
| ASR A1.7 – Türen und Tore | Sicherer Betrieb und wiederkehrende Prüfung kraftbetätigter Türen und Tore. |
| ASR A1.8 – Verkehrswege | Gestaltung und Freihaltung betrieblicher Verkehrswege. |
| ASR A2.1 – Schutz vor Absturz und herabfallenden Gegenständen | Absturzsicherung und Schutz vor herabfallenden Gegenständen. |
| ASR A2.2 – Maßnahmen gegen Brände | Feuerlöscheinrichtungen, Brandschutzorganisation und Brandschutzhelfer. |
| ASR A2.3 – Fluchtwege und Notausgänge | Flucht- und Rettungswege, Notausgänge sowie Anforderungen an Sicherheitsbeleuchtung im Fluchtwegkontext. |
| ASR A3.4 – Beleuchtung und Sichtverbindung | Beleuchtungsstärken und ausreichende Beleuchtung von Arbeitsbereichen. |
| ASR A4.1 – Sanitärräume | Toiletten- und Sanitärräume. |
| ASR A4.2 – Pausen- und Bereitschaftsräume | Anforderungen an Pausen- und Bereitschaftsräume. |
| ASR A4.3 – Erste-Hilfe-Räume, Mittel und Einrichtungen zur Ersten Hilfe | Erste-Hilfe-Ausstattung und betriebliche Erste-Hilfe-Einrichtungen. |
| ASR V3a.2 – Barrierefreie Gestaltung von Arbeitsstätten | Ergänzende Anforderungen bei Beschäftigten mit Behinderungen und barrierefreier Gestaltung. |
3. Technische Regeln für Gefahrstoffe und Betriebssicherheit
| Quelle | Bezug im Maßnahmenkatalog |
|---|---|
| TRGS 400 – Gefährdungsbeurteilung für Tätigkeiten mit Gefahrstoffen | Systematische Gefahrstoff-Gefährdungsbeurteilung und Festlegung von Schutzmaßnahmen. |
| TRGS 401 – Gefährdung durch Hautkontakt | Hautgefährdungen, Hautschutz und geeignete Schutzmaßnahmen. |
| TRGS 510 – Lagerung von Gefahrstoffen in ortsbeweglichen Behältern | Gefahrstofflagerung und insbesondere Anforderungen an die Lagerung von Flüssiggasflaschen. |
| TRGS 555 – Betriebsanweisung und Information der Beschäftigten | Betriebsanweisungen und Unterweisung bei Tätigkeiten mit Gefahrstoffen. |
| TRBS 1201 – Prüfungen und Kontrollen von Arbeitsmitteln und überwachungsbedürftigen Anlagen | Ermittlung von Art, Umfang und Fristen erforderlicher Prüfungen und Kontrollen. |
| TRBS 1201 Teil 4 – Prüfung von Aufzugsanlagen | Prüfung überwachungsbedürftiger Aufzugsanlagen. |
| TRBS 1203 – Zur Prüfung befähigte Personen | Anforderungen an Personen, die Prüfungen von Arbeitsmitteln durchführen. |
| TRBS 3121 – Betrieb von Aufzugsanlagen | Sicherer Betrieb von Aufzugsanlagen, Notfallorganisation und betriebliche Maßnahmen. |
4. Normen und weitere technische Grundlagen
| Quelle | Bezug im Maßnahmenkatalog |
|---|---|
| DIN 14406-4 – Tragbare Feuerlöscher, Instandhaltung | Technische Grundlage zur Instandhaltung tragbarer Feuerlöscher, ergänzend zu ASR A2.2 und Herstellerangaben. |
| DIN EN 15635 – Ortsfeste Regalsysteme aus Stahl, Nutzung und Instandhaltung | Inspektion, sichere Nutzung und Instandhaltung von Regalsystemen. |
| DIN V VDE V 0108-100 / DIN EN 50172 | Sicherheitsbeleuchtungsanlagen; technische Anforderungen werden nur soweit für die vorhandene Anlage einschlägig herangezogen. |
| DIN 18040-1 – Barrierefreies Bauen, öffentlich zugängliche Gebäude | Bauliche Barrierefreiheit öffentlich zugänglicher Bereiche. |
| DIN 18650-2 / DIN EN 13241 | Technische Anforderungen an kraftbetätigte Türen bzw. Tore, soweit für die konkrete Anlage einschlägig. |
| DIN VDE 0834 – Rufanlagen | Nur soweit für die konkret installierte Ruf- oder Notrufanlage einschlägig; keine pauschale Prüffrist wird allein aus der Norm abgeleitet. |
5. Staatliche Gesetze und Verordnungen
| Quelle | Im Maßnahmenkatalog insbesondere relevant für |
|---|---|
| Arbeitsschutzgesetz (ArbSchG), insbesondere §§ 3, 4, 5, 5a, 6, 10 und 12 | Grundpflichten, Gefährdungsbeurteilung, Dokumentation, Notfallorganisation und Unterweisung. |
| Arbeitsstättenverordnung (ArbStättV), insbesondere §§ 3, 3a, 4, 6 und 9 | Einrichten und Betreiben von Arbeitsstätten sowie Umsetzung über die ASR. |
| Betriebssicherheitsverordnung (BetrSichV), insbesondere §§ 3, 4, 5, 10, 12, 14, 15 und 16 sowie Anhänge | Bereitstellung und sichere Verwendung von Arbeitsmitteln, Prüfungen und Aufzugsanlagen. |
| Gefahrstoffverordnung (GefStoffV), insbesondere §§ 6 und 14 | Gefährdungsbeurteilung, Betriebsanweisung, Information und Unterweisung beim Umgang mit Gefahrstoffen. |
| Verordnung zur arbeitsmedizinischen Vorsorge (ArbMedVV), insbesondere §§ 3, 4, 5 und 5a | Pflicht-, Angebots- und Wunschvorsorge. |
| Arbeitszeitgesetz (ArbZG), insbesondere §§ 3, 4 und 5 | Arbeitszeit, Ruhepausen und Ruhezeiten. |
| Jugendarbeitsschutzgesetz (JArbSchG), insbesondere §§ 22 ff. und § 29 | Beschäftigungsbeschränkungen und Unterweisung Jugendlicher. |
| SGB VII, insbesondere § 22 | Betriebliche Sicherheitsbeauftragte. |
| SGB IX, insbesondere § 167 Abs. 2 | Betriebliches Eingliederungsmanagement. |
| Betriebsverfassungsgesetz (BetrVG), insbesondere §§ 75, 81 und 82 | Unterrichtung, Erörterung und betriebliche Zusammenarbeit, soweit im jeweiligen Prüfthema einschlägig. |
| Bürgerliches Gesetzbuch (BGB), § 618 | Schutzpflichten bei der Gestaltung von Arbeitsbedingungen. |
| PSA-Benutzungsverordnung (PSA-BV), insbesondere § 2 | Bereitstellung und Benutzung erforderlicher persönlicher Schutzausrüstung. |
| Lastenhandhabungsverordnung (LasthandhabV) | Manuelle Handhabung von Lasten und ergonomische Schutzmaßnahmen. |
| Lebensmittelhygiene-Verordnung (LMHV) | Hygienische Anforderungen in lebensmittelbezogenen Arbeitsbereichen. |
| REACH-Verordnung (EG) Nr. 1907/2006, Art. 31 | Sicherheitsdatenblätter für Gefahrstoffe. |
| Aufzugsrichtlinie 2014/33/EU | Produkt- und Sicherheitsanforderungen an Aufzüge; ergänzend zum betrieblichen Recht. |
Hinweis: DGUV-Vorschriften sind Unfallverhütungsvorschriften. DGUV-Regeln und DGUV-Informationen konkretisieren die praktische Umsetzung und sind von staatlichen Gesetzen und Verordnungen zu unterscheiden. ASR, TRGS und TRBS konkretisieren die jeweiligen staatlichen Verordnungen und lösen bei Einhaltung grundsätzlich die dort vorgesehene Vermutungswirkung aus. DIN-/VDE-Normen sind technische Regelwerke und werden nur soweit herangezogen, wie sie für die konkrete Anlage oder Tätigkeit einschlägig sind. Maßgeblich bleiben stets die aktuelle Gefährdungsbeurteilung, die tatsächlich vorhandene Anlage bzw. Tätigkeit und der jeweils aktuelle Stand der einschlägigen Vorschriften.
Aktionsplan
Für festgestellte Mängel wird ein eigener Maßnahmenbereich
geführt. Neben dem Maßnahmentext können insbesondere
zugehörige Fotos und der Bearbeitungsstatus gepflegt
werden. Wird im Prüfkatalog bei einer mit „Mangel"
bewerteten Frage das optionale Feld „Beschreibung des
Mangels" ausgefüllt, erscheint dieser Text zusätzlich zum
Maßnahmentext im Aktionsplan (Bildschirm und PDF), direkt
unter der jeweiligen Maßnahme – gelesen wird dafür
unmittelbar aus state.comments, sodass
Bildschirmanzeige und PDF-Export stets denselben,
aktuellen Stand zeigen. Die Gesamtverantwortung für
Durchführung und Mängelbeseitigung liegt bei der
Marktleitung; ein entsprechender Hinweis wird auch in den
erzeugten PDFs ausgegeben.
Für Prüfer und Marktleitung stehen Unterschriftenfelder zur Verfügung. Die Signaturen werden lokal gespeichert und können in die erzeugten PDFs übernommen werden.
Fotodokumentation
Die App bietet eine vollständige lokale Fotodokumentation. Fotos können direkt mit dem iPad aufgenommen bzw. über die Gerätefunktionen eingefügt werden.
- Fotoaufnahme bzw. Fotoauswahl direkt über die Fotoseite der App
- Fotos werden lokal in IndexedDB gespeichert
- Bilddaten werden für die Speicherung automatisch verkleinert und als JPEG verarbeitet, um den benötigten Speicherplatz zu reduzieren
- Zu jedem Foto kann ein Kommentar erfasst werden
- Einzelne Fotos können wieder gelöscht werden
- Fotos können als allgemeine Fotodokumentation gespeichert werden
- Fotos können zusätzlich direkt einer konkreten Maßnahme zugeordnet werden
- Von jedem einer Maßnahme zugeordneten Foto wird zusätzlich ein kleines Vorschaubild (220px, stark komprimiert, wenige KB) direkt im JSON der Begehung gespeichert. Das eigentliche Foto bleibt geräte- gebunden in IndexedDB — wird eine Begehung z. B. über das Team-Archiv auf einem anderen Gerät geladen, sind dort keine echten Fotos vorhanden. Das Vorschaubild dient dann als reine Anzeige-Referenz in der Maßnahmenliste (erkennbar an gestricheltem Rahmen und „Vorschau"-Kennzeichnung), kann dort aber nicht gelöscht werden.
- Fotos, die zu einem Zeitpunkt aufgenommen wurden, als diese Vorschaubild-Funktion noch nicht existierte (z. B. eine bereits laufende Begehung während eines App-Updates), bekommen das Vorschaubild automatisch beim nächsten Öffnen der Maßnahmenseite nachträglich erzeugt — kein manuelles Neu-Fotografieren nötig.
Speicherung und Löschung
Fotos gehören funktional zur jeweiligen Begehung. Sie werden getrennt von den Textdaten im IndexedDB-Speicher verwaltet.
Beim vollständigen Zurücksetzen der aktuellen Begehung werden deshalb neben den normalen Begehungsdaten auch die zugehörigen Fotos gelöscht.
Beim Archivieren einer Begehung werden die zu diesem Zeitpunkt vorhandenen Fotos zusammen mit dem Archivdatensatz gespeichert.
PDF-Erzeugung und Export
Die PDF-Dokumente werden direkt im Browser mit jsPDF erzeugt. Es ist keine externe PDF-Serververarbeitung erforderlich.
Die Dokumente werden im DIN-A4-Format aufgebaut und enthalten ein Deckblatt mit Betriebsdaten und einer Übersicht des Begehungsstatus.
Die App verwendet automatische Seitenumbrüche, Seitenzahlen und für längere Texte automatische Zeilenumbrüche.
Export-Modi
- Checkliste – Prüffragen inklusive Bewertungen und ggf. Mangelkommentaren
- Maßnahmen – Aktionsplan mit Maßnahmen, Fotos, Status und Unterschriften
- Fotos – eigenständiges Fotoprotokoll mit mehreren Fotos pro Seite und Kommentaren
- Alles / Gesamtbericht – kombinierter Bericht aus Checkliste, Maßnahmen und Fotodokumentation
Fotos im PDF
Fotos können an mehreren Stellen in die PDF-Ausgabe einfließen:
- Allgemeine Fotos werden als Fotodokumentation ausgegeben.
- Fotos einer Maßnahme werden direkt im Maßnahmenbereich als Vorschaubilder dargestellt.
- Zusätzlich kann für Maßnahmen mit zugehörigen Fotos ein eigener Fotoanhang erzeugt werden.
- Die eigenständige Fotodokumentation verwendet ein kompaktes Raster mit bis zu vier Fotos pro DIN-A4-Seite.
Teilen und Drucken
- Drucken – erzeugt das PDF und öffnet es zum Drucken über den PDF-Betrachter des Geräts
- PDF teilen – verwendet, sofern verfügbar, die native Teilen-Funktion des Geräts
- Mail vorbereiten – erzeugt einen vorausgefüllten Mailtext mit Markt, Prüfer und Betreff
- Bei nicht unterstützten Teilen-Funktionen erfolgt ein Fallback auf den normalen PDF-Download.
Design und Schrift
-
Farbschema:
roter Markenakzent
(
#cc071ebzw. dunkler#a30517) - Verwendung eines neutralen Brandings „ASiC Handel / Märkte“
- Durchgängige Karten-, Rundungs- und Pillen-Optik
- Responsive Darstellung, insbesondere für die Bedienung auf dem iPad
- Touch-orientierte Bedienelemente für die praktische Verwendung während einer Begehung
-
Schrift: Überschriften und Kennzahlen
verwenden Space Grotesk (Schnitte 500,
600 und 700), der Fließtext die Systemschrift des Geräts.
Die Schrift liegt als
.woff2-Dateien im Ordnerfonts/und wird incss/styles.cssper@font-faceeingebunden. Es erfolgt kein Abruf bei Google oder einem anderen Fremdserver; die Dateien sind Teil des Offline-Caches. Lizenz: SIL Open Font License 1.1 (Lizenztext im Ordnerfonts/). Fällt die Schrift aus, greift die Systemschrift (Segoe UI bzw.system-ui).
Rechtliche Bestandteile
Impressum und Datenschutzerklärung sind als eigene HTML-Seiten vorhanden und über die Fußzeile der App erreichbar.
Die Anwendung dokumentiert ihren aktuellen technischen Revisionsstand in der Fußzeile und auf den erzeugten PDF-Dokumenten.
Bekannte Einschränkungen / offene Punkte
nasUrl() baut
daraus die tatsächliche Adresse, ohne Konfiguration gilt der relative Pfad). Optional zusätzlich ein
Zugriffsschlüssel, der als Kopfzeile mitgeschickt und
serverseitig zeitsicher per hash_equals()
geprüft wird, sofern dort ebenfalls einer hinterlegt ist.
- Voraussetzung zum Speichern: Datum und Marktnummer müssen in den Betriebsdaten ausgefüllt sein
- Von der lokalen Speicherung komplett getrennt – ein fehlgeschlagener Server-Zugriff hat keinen Einfluss auf lokal gespeicherte Daten
- Bei externer Adresse (andere Herkunft als die App selbst) muss der Zielserver CORS für die App-Adresse erlauben
list.php/load.phperkennen sowohl die vonsave.phpselbst erzeugten Dateien als auch manuell in den Datenordner eingespielte Exporte aus „JSON exportieren"/„JSON per Mail teilen" — beide erscheinen im Team-Archivlist.phpliefert je Datei Datum, Marktnummer, Firma und PLZ/Ort für die Anzeige in „Vom Server laden" und im Team-Archiv- Wird für denselben Markt am selben Tag erneut
gespeichert, ersetzt
save.phpdie Datei. Der vorherige Stand wird vorher mit Zeitstempel in den Unterordnerversionendes Datenordners kopiert. Dieser Ordner wird vonlist.phpundload.phpnicht erfasst und dient nur der Wiederherstellung durch Administratoren; er wird nicht automatisch geleert.
list.php
gefundenen, von beliebigen Nutzern auf dem Server gespeicherten
Begehungen). Beide bieten „PDF exportieren" sowie „In App
anzeigen" — lädt die jeweilige Begehung zurück in den
laufenden Arbeitsstand (nach Bestätigung, da der aktuell
laufende Stand dabei überschrieben wird; das Archiv selbst
bleibt unberührt).
- Beim lokalen Archiv werden auch die zugehörigen Fotos zurückgeschrieben (mit ursprünglicher id/measureId, damit die Zuordnung zu den Maßnahmen erhalten bleibt)
- Team-Archiv-Datensätze enthalten keine Fotos (nur Text-/Bewertungsdaten) — beim Wiederherstellen wird ein vorhandener lokaler Fotobestand deshalb nur geleert, nicht ersetzt
- Beide Reiter nur verfügbar, wenn die App direkt über die Server-Adresse aufgerufen wird oder eine Server-Adresse in den Einstellungen hinterlegt wurde
Wiederholungsbegehung (ab Rev. 1.52)
Jeder Eintrag im eigenen Verlauf und im Team-Archiv hat den Knopf
„Wiederholungsbegehung“. buildFollowUpState() in
js/app.js erzeugt daraus einen neuen Arbeitsstand:
- Betriebsdaten,
notApplicableundsubgroupNotApplicablewerden übernommen,datumwird auf heute gesetzt. - Jede Maßnahme mit Status ungleich „erledigt“ wird übernommen; der zugehörige Prüfpunkt wird auf „Mangel“ gesetzt, der Kommentar übernommen.
- Die übernommene Maßnahme trägt
vorbegehung: { datum, status }. Prüfkatalog, Aktionsplan und PDF zeigen daraus „Offen aus Vorbegehung vom …“. - Unterschriften und Fotos werden nicht übernommen; der laufende Arbeitsstand und die lokalen Fotos werden nach Rückfrage ersetzt.
navigator.share() mit vorgefertigtem Betreff/Text
und fallen ohne Unterstützung dafür automatisch auf den
normalen Download zurück. Der JSON-Export ist verlustfrei
(vollständige Begehung inkl. Maßnahmen/Status/Unterschriften),
der CSV-Export enthält nur die reinen Bewertungsdaten.
Wichtig: Der CSV-Export sowie
„Kategorien-Schwachstellen" lesen die Bewertungen direkt
aus den in jeder Begehung gespeicherten Schlüsseln
(Object.keys(record.ratings)), nicht über
den aktuellen Fragenkatalog. So bleiben auch Begehungen
auswertbar, deren Frage-IDs sich seither geändert haben —
nicht mehr zuordenbare Fragen werden mit „(nicht mehr im
aktuellen Katalog)" gekennzeichnet statt zu verschwinden.
auswertung.html bietet zusätzlich einen
Zeitraum-Filter („Letzte 3/6 Monate/Alles"), eine Liste
„Auffällige Märkte" (Märkte über der durchschnittlichen
Mängelquote) sowie eine „Gesamtauswertung als PDF"
(Kategorien-Schwachstellen, Auffällige Märkte und
Marktverlauf in einem Dokument, herunterladbar oder per
Mail teilbar).
„Gesamtverteilung" (Tortendiagramm Ja/Mangel/N.V.) und „Kategorien-Schwachstellen" (Balkendiagramm nach Mängelquote) werden zusätzlich als Diagramm dargestellt – sowohl am Bildschirm (SVG, ohne externe Chart-Bibliothek) als auch im PDF-Export (direkt mit jsPDF-Bordmitteln gezeichnet), mit identischen Farben und Zahlen an beiden Stellen.
auswertung-team.html bietet dieselben
Diagramme sowie ebenfalls Rohdaten-Export (CSV) und
Gesamtauswertung als PDF, nur bezogen auf alle im
Team-Archiv (Server) gefundenen Begehungen statt nur die
lokal auf diesem Gerät archivierten. Die eigentliche
Erzeugungslogik ist dieselbe wie bei
auswertung.html (js/auswertung.js
wird dafür auch auf dieser Seite mitgeladen) – nur die
Datenquelle unterscheidet sich.
Ladestatus (ab Rev. 1.53): Oberhalb der
Filter zeigt auswertung-team.html einen
Statusbalken (#team-lade-status,
setzeTeamLadeStatus() in
js/auswertung-team.js). Während des Ladens:
Spinner, „x von y Begehungen geladen" und Fortschrittsbalken;
die Dateien werden weiterhin parallel geladen, jede fertige
Datei zählt hoch. Danach grün „vollständig geladen" mit
Anzahl, Dauer und Uhrzeit, gelb „teilweise geladen", wenn
Dateien übersprungen wurden, oder rot mit Fehlergrund. Ein
Knopf „Neu laden" bzw. „Erneut versuchen" lädt das
Team-Archiv ohne Seitenneuladen erneut. Filter und
Export-Knöpfe sind während des Ladens gesperrt.
Frische Dateien und schneller Seitenaufbau (ab Rev. 1.53/1.54):
Alle Einbindungen von js/… und css/…
tragen den Zusatz ?v=1.54. Diese Dateien (und die
Schriften) liefert der Service Worker ab Rev. 1.54 sofort aus
dem Cache auf dem Gerät, ohne Rückfrage beim Server; nach einem
Update ändert sich der Zusatz, dadurch werden sie automatisch
neu geladen. HTML-Seiten, zugang-config.js (ohne
Zusatz, damit eine Änderung des Betreibers sofort greift),
Manifest und Icons werden zuerst beim Server nachgefragt
(cache: 'no-cache'), offline aus dem Cache.
js/jspdf.umd.min.js wird mit defer
geladen und blockiert den Seitenaufbau nicht mehr.
js/auswertung.js liest das lokale Archiv nur noch
auf auswertung.html, nicht mehr auf der
Team-Auswertung. Bei jedem Update ?v=,
APP_VERSION in sw.js und
APP_REVISION gemeinsam hochzählen.
Markt-Filter: Ein zweites Dropdown neben
dem Zeitraum-Filter schränkt alle Auswertungsbereiche
(außer „Wiederkehrende Mängel") auf einen einzelnen Markt
ein. Die Optionen werden automatisch aus den geladenen
Daten ermittelt (populateMarktFilter(),
numerisch sortiert).
Kategorie-Drilldown: Ein Klick/Tipp auf einen Balken in „Kategorien-Schwachstellen" zeigt die einzelnen Fragen dieser Kategorie mit eigener Mängelquote darunter an (erneuter Klick klappt es wieder zu). Nutzt dieselben, zuletzt gerenderten Daten wie das Diagramm selbst.
Gesamt-Trend über Zeit: Ein Liniendiagramm zeigt die Mängelquote je Kalendermonat, über alle (gefilterten) Märkte hinweg zusammengefasst – sowohl am Bildschirm als auch im PDF-Export. Bei nur einem Monat mit Daten wird stattdessen ein Hinweistext angezeigt, da für einen Trend mindestens zwei Punkte nötig sind.
Kriterium bei „Auffällige Märkte": Das Kriterium ist über eine Auswahl wählbar (Über Durchschnitt, Top 5, Top 10, ab 50%, ab 75%) – wirkt sich auch auf den PDF-Export aus.
- Der Zeitraum-Filter gilt bewusst nicht für „Wiederkehrende Mängel" (soll immer den tatsächlich letzten Vergleich finden) und „Offene Maßnahmen" (eine alte offene Maßnahme darf nicht gerade dann verschwinden, wenn sie am dringendsten ist)
- Die eigentliche Berechnungslogik
(
berechneKategorienSchwachstellen(),berechneAuffaelligeMaerkte(),berechneVerlaufProMarkt(),filterNachZeitraum()) liegt zentral injs/auswertung-logik.js, genutzt vonauswertung.htmlundauswertung-team.html— Bildschirmanzeige und PDF greifen auf dieselben Funktionen zu, zeigen also garantiert identische Zahlen zeitwertVonBegehung(r)ermittelt einen Zeitstempel unabhängig von der Datenquelle (lokale Datensätze:createdAt; Server-Datensätze ohne dieses Feld: ersatzweise auscompanyInfo.datum)
<a class="btn btn-secondary btn-small verlauf-tab">).
- „Auswertung Verlauf" →
auswertung.html(lokales Archiv) - „Auswertung Team" →
auswertung-team.html(Team-Archiv/Server; dieselben drei Bereiche Kategorien-Schwachstellen/Auffällige Märkte/Verlauf pro Markt, eigener Zeitraum-Filter; lädt jede Team-Datei einzeln, defekte Dateien werden übersprungen statt die Auswertung scheitern zu lassen) js/verlauf.jskennt dadurch nur noch zwei echte Tabs (lokal,team)
Sicherheit und Robustheit im Code
| Thema | Umsetzung |
|---|---|
| Ausgabe von Texten |
Alle Nutzereingaben und von außen geladenen Werte
(Foto-Kommentare, Mängelbeschreibung, Maßnahmentexte,
Marktnummer, Server-Dateiliste, Fehlermeldungen) werden
mit escapeHtml() aus js/app.js
maskiert, bevor sie in innerHTML gelangen.
Importierte JSON-Dateien und Server-Daten gelten als nicht
vertrauenswürdig.
|
| Team-Archiv |
Dateinamen stehen im data-filename-Attribut;
die Schaltflächen lesen sie von dort und setzen sie nicht
in den JavaScript-Code des onclick ein.
|
| Datum |
todayIsoLocal() liefert das Tagesdatum in
lokaler Zeit. toISOString() rechnet nach UTC
und lieferte zwischen 0 und 2 Uhr deutscher Zeit das
Datum des Vortags.
|
| Downloads |
URL.revokeObjectURL() wird erst nach
einer Sekunde aufgerufen, weil iOS-Safari den Download
sonst abbrechen kann.
|
| Offline-Cache |
Der Service Worker speichert keine *.php-Antworten
und keine Anfragen an fremde Adressen.
|
| Server-Dateien |
load.php akzeptiert nur Dateinamen, die einem der
beiden bekannten Muster entsprechen, und entfernt
Pfadanteile mit basename(). save.php
schreibt über eine temporäre Datei und sichert den
Vorgängerstand (siehe Abschnitt 8).
|
| Zugriffsschlüssel |
Optional. Wird mit hash_equals() geprüft.
Der Schlüssel steht zentral in config.php
(standardmäßig leer) und muss in den App-Einstellungen
jedes Geräts identisch hinterlegt werden (siehe
Abschnitt 10).
|
| Fremdserver | Es werden weder Schriften noch Bibliotheken von Dritten geladen. Die einzigen Netzwerkzugriffe sind die konfigurierten Server-Endpunkte. |
Jeden neuen Text aus Eingabefeldern, Dateien oder vom Server
mit escapeHtml() ausgeben. Das Tagesdatum immer
über todayIsoLocal() bilden. Neue Dateien in
tools/doku-dateien.json eintragen.
Betrieb, Einrichtung und Updates
Die App-Dateien laufen vollständig im Browser. Nur „Auf Server speichern“, „Vom Server laden“, das Team-Archiv und die Team-Auswertung sprechen die PHP-Endpunkte an. App und Endpunkte können im selben Ordner liegen (Regelfall) oder auf verschiedenen Servern, z. B. App über GitHub Pages und Endpunkte auf einem eigenen Speicherserver.
Konfiguration
Schlüssel und Codes stehen nicht in dieser Dokumentation und gehören nicht in ein öffentliches Repository.
| Einstellung | Ort | Wirkung |
|---|---|---|
datenOrdner |
config.php | Ablage der JSON-Dateien. Empfohlen außerhalb des Web-Verzeichnisses (z. B. /srv/asic-daten); alternativ Unterordner daten mit Sperrdateien für Apache (.htaccess) und IIS (web.config). |
apiKey (Zugriffsschlüssel) |
config.php | Leer = kein Schlüssel. Gesetzt: save/list/load antworten ohne passende Kopfzeile X-Api-Key mit HTTP 401; pruefen.php öffnet nur mit ?schluessel=…. |
| Zugangscode | zugang-config.js (aktiv, codeHash) |
Einmalige Abfrage beim ersten Start der installierten App. Gespeichert ist nur die SHA-256-Prüfsumme. |
| Server-Adresse, Zugriffsschlüssel | Einstellungen-Seite (localStorage nasBaseUrl, nasApiKey) |
Je Gerät und Browser. Leer = Endpunkte im selben Ordner wie die App. |
Zugriffsschlüssel erneuern
- Neuen Wert erzeugen, z. B.
openssl rand -hex 24(mindestens 32 Zeichen). - In config.php bei
apiKeyeintragen. - Auf jedem Gerät unter Einstellungen eintragen, speichern und „Verbindung testen“.
- Mit
pruefen.php?schluessel=<Schlüssel>kontrollieren.
Zugangscode ändern
- Prüfsumme erzeugen:
printf '%s' 'NeuerCode' | sha256sum(Groß-/Kleinschreibung zählt). - Den 64-stelligen Wert in zugang-config.js bei
codeHasheintragen. - Alle Geräte fragen den neuen Code beim nächsten Start einmal ab;
aktiv: falseschaltet die Abfrage ab.
Installation auf einem Server
Voraussetzungen: Webserver mit PHP 7.0 oder neuer (empfohlen
8.x), HTTPS mit gültigem Zertifikat, post_max_size
mindestens 20M. Apache, nginx und IIS sind möglich.
- App-Ordner vollständig in das Web-Verzeichnis kopieren.
- Datenordner anlegen; der Webserver-/PHP-Benutzer braucht Lese- und Schreibrecht.
- In config.php
datenOrdnerundapiKeyeintragen. - Liegt der Datenordner im Web-Verzeichnis: Apache braucht
AllowOverridefür die .htaccess, IIS die web.config, nginx eine eigene Sperrregel. pruefen.phpaufrufen; alle Punkte müssen grün sein. Danach löschen oder umbenennen, da die Seite Server-Pfade anzeigt.- App auf dem iPad über „Zum Home-Bildschirm“, am PC über „App installieren“ einrichten.
Content-Type und
X-Api-Key sowie der OPTIONS-Vorabanfrage. Die
PHP-Dateien setzen diese Kopfzeilen nicht selbst; die Freigabe
gehört in die Webserver-Konfiguration. Liegen App und Endpunkte im
selben Ordner, entfällt das.
Updates
Jedes Update braucht eine neue Versionsnummer, sonst liefert der Service Worker weiter die zwischengespeicherten Dateien aus.
| Stelle | Aktuell |
|---|---|
APP_REVISION / APP_REVISION_DATE in js/app.js |
1.54 / 24.10.2026 |
CACHE_NAME und Kommentar SERVICE-WORKER-VERSION in sw.js |
asic-handel-v1.54 |
- Geänderte Dateien auf den Server bzw. in das Repository übertragen. config.php und zugang-config.js des Servers dabei nicht überschreiben.
- Versionsnummer an allen Stellen erhöhen.
- Neue Skriptdateien auf allen Seiten einbinden, die js/app.js nutzen.
- Nach Änderungen am Prüfkatalog oder an Dateien
python tools/doku-zahlen.pyausführen. - Gerät einmal online öffnen; die Fußzeile zeigt die aktive Revision.
Datensicherung und Fehlerbehebung
Auf dem Server den Datenordner einschließlich
versionen/ in die reguläre Sicherung aufnehmen. Auf
den Geräten liegen laufende Begehung, Fotos und Archiv im
Browser-Speicher; Fotos werden nicht auf den Server übertragen,
Vorschaubilder und Unterschriften schon.
| Meldung / Symptom | Ursache | Abhilfe |
|---|---|---|
| „Ungültiger oder fehlender Zugriffsschlüssel“ (HTTP 401) | Schlüssel im Gerät passt nicht zu config.php | Schlüssel unter Einstellungen neu eintragen |
| Verbindungstest ohne Antwort | Server nicht erreichbar oder CORS fehlt | Adresse im Browser öffnen; bei getrennten Servern CORS freigeben |
| „Datenordner ist in config.php nicht eingetragen“ | datenOrdner leer |
config.php ergänzen |
| „Der Datenordner konnte nicht erstellt werden“ | Rechte fehlen | Ordner anlegen, Schreibrecht für den PHP-Benutzer |
| „Keine Daten empfangen“ | post_max_size zu klein |
auf mindestens 20M setzen |
| Geräte zeigen alten Stand | Versionsnummer nicht erhöht | CACHE_NAME und APP_REVISION anheben |
| App nicht installierbar, kein Offline-Betrieb | kein HTTPS | gültiges Zertifikat einrichten |
Dateiübersicht
Die Zahlen dieser Tabelle werden mit
python tools/doku-zahlen.py aus dem Code erzeugt
und nicht von Hand gepflegt.
| Datei | Zeilen | Funktion |
|---|---|---|
| index.html | 789 | Prüfkatalog und Eingabe der Begehungsdaten |
| massnahmen.html | 699 | Aktionsplan, Maßnahmenbearbeitung, Status und Unterschriften |
| fotos.html | 543 | Aufnahme, Einfügen, Kommentieren und Verwaltung von Fotos |
| verlauf.html | 359 | Archivierte Begehungen (Mein Verlauf) und Team-Archiv (Server) |
| auswertung.html | 937 | Auswertung der lokal archivierten Begehungen |
| auswertung-team.html | 869 | Auswertung aller Begehungen im Team-Archiv (Server) |
| einstellungen.html | 341 | Konfigurierbare Server-Adresse und Zugriffsschlüssel |
| impressum.html | 164 | Impressum |
| datenschutz.html | 236 | Datenschutzerklärung |
| hilfe.html | 1.130 | Bedienungsanleitung und FAQ |
| dokumentation.html | 2.577 | Technische Dokumentation (diese Seite) |
| css/styles.css | 2.543 | Gesamtes gemeinsames Styling |
| js/app.js | 3.324 | Kernlogik, State-Verwaltung, Checkliste, PDF-Erzeugung, Export, Archivierung, Server-Zugriff, Hilfsfunktionen (escapeHtml, todayIsoLocal) und Service-Worker-Registrierung |
| js/audit-data.js | 348 | Prüfkatalog: 24 Kategorien / 199 Prüfpunkte |
| js/text.js | 1.146 | Hinterlegte Maßnahmentexte und Sprachstile |
| js/massnahmen.js | 1.060 | Logik der Aktionsplan-Seite |
| js/photos-store.js | 187 | IndexedDB-Speicherung und Verwaltung der Fotos |
| js/fotos.js | 111 | Bedienlogik der Fotodokumentationsseite |
| js/archive-store.js | 91 | IndexedDB-Speicherung der archivierten Begehungen |
| js/verlauf.js | 314 | Bedienlogik der Archiv-/Verlaufseite inkl. Team-Archiv (Server) |
| js/einstellungen.js | 157 | Bedienlogik der Einstellungsseite |
| js/auswertung-logik.js | 486 | Gemeinsame Auswertungs-Berechnungslogik (auswertung.html, auswertung-team.html, verlauf.html) |
| js/auswertung.js | 792 | Logik der Auswertungsseite |
| js/auswertung-team.js | 233 | Logik der Team-Auswertungsseite |
| js/access-gate.js | 149 | Clientseitige Zugangshürde für die installierte App-Ansicht (prüft die Prüfsumme aus zugang-config.js) |
| zugang-config.js | 24 | Betreiber-Einstellung: Prüfsumme (SHA-256) des Zugangscodes, Abfrage ein/aus |
| sw.js | 296 | Service Worker, Offline-Fähigkeit, Cache-Version v1.54 |
| manifest.json | 24 | Web-App-Manifest für die Installation als App |
| config.php | 49 | Server: Datenordner und Zugriffsschlüssel, zentral für alle PHP-Skripte |
| pruefen.php | 303 | Server: Prüfseite für die Einrichtung (PHP, Rechte, Schutz des Datenordners, HTTPS, Schlüssel) |
| save.php | 579 | Server: Begehung speichern (sichert den Vorgängerstand im Unterordner versionen) |
| list.php | 355 | Server: Liste aller gespeicherten Begehungen für das Team-Archiv |
| auswertung.js | 716 | Auswertungs-Skript im Hauptordner (wird von den App-Seiten nicht eingebunden; wird auf dem Server verwendet) |
| js/webdav-store.js | 161 | Ältere WebDAV-Anbindung für ein Server-Backup (wird von den App-Seiten nicht eingebunden) |
| load.php | 182 | Server: einzelne gespeicherte Begehung laden |
| tools/doku-zahlen.py | 280 | Hilfsskript: aktualisiert Zahlen und Dateitabelle in dokumentation.html und hilfe.html |
| tools/doku-dateien.json | 1 | Dateiliste mit Beschreibungen für das Hilfsskript |
| js/jspdf.umd.min.js | 398 (minifiziert) | Lokal eingebundene Bibliothek zur PDF-Erzeugung |
| fonts/space-grotesk-latin-500-normal.woff2 | 13,0 KB | Schrift Space Grotesk, Schnitt 500 (lokal eingebunden) |
| fonts/space-grotesk-latin-600-normal.woff2 | 13,0 KB | Schrift Space Grotesk, Schnitt 600 (lokal eingebunden) |
| fonts/space-grotesk-latin-700-normal.woff2 | 12,5 KB | Schrift Space Grotesk, Schnitt 700 (lokal eingebunden) |
| fonts/LICENSE-SpaceGrotesk-OFL.txt | 4,3 KB | Lizenztext der Schrift (SIL Open Font License 1.1) |
Gesamt (eigener Code, ohne jsPDF und Schrift): 22.555 Zeilen
Stand der Zeilenzahlen: 23.10.2026. Die Werte wurden aus den tatsächlich enthaltenen Dateien gezählt.