ASiC Handel Märkte „Sicher geprüft. Sicher gehandelt.“
Technische Dokumentation

ASiC Handel

Architektur, Funktionsumfang und Codeübersicht der App

Dokumentstand
24.10.2026
App-Revision
1.54 (24.10.2026)
Service Worker
v1.54
Zielgerät
Firmen-iPad, Safari
Umfang
24 Kategorien · 199 Prüfpunkte
1. Technische Architektur 2. Seitenstruktur 3. Fachlicher Funktionsumfang 4. Fotodokumentation 5. PDF und Export 6. Design und Schrift 7. Rechtliche Bestandteile 8. Bekannte Einschränkungen 9. Sicherheit im Code 10. Betrieb und Updates 11. Dateiübersicht
Abschnitt 1

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
localStorage
begehungState
Aktuelle Begehung: Betriebsdaten, Bewertungen, Kommentare, Maßnahmen, Unterschriften und „Nicht vorhanden“-Schalter Kleine strukturierte Textdaten der aktuell laufenden Begehung
IndexedDB
asicHandelPhotos
Fotodokumentation: Bilddaten als Blobs sowie Kommentare und Zuordnungen Geeignet für größere Binärdaten wie komprimierte JPEG-Fotos
IndexedDB
asicHandelArchiv
Archivierte Begehungen mit Betriebsdaten, Bewertungen, Maßnahmen, Unterschriften und den zum Archivzeitpunkt vorhandenen Fotos Vollständige, getrennte Schnappschüsse abgeschlossener Begehungen
Hinweis zur Robustheit
IndexedDB-Zugriffe sind gegen bekannte Safari/WebKit-Probleme abgesichert. Insbesondere bei 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 Browser sw.js selbst aus seinem eigenen HTTP-Cache liest und dadurch eine neue Version (neuer CACHE_NAME) gar nicht erst erkennt. Zusätzlich wird nach der Registrierung sofort registration.update() aufgerufen, statt nur auf den nächsten browserinternen periodischen Check zu warten.
Verhalten bei einem App-Update
Ein neuer technischer Versionsstand des Service Workers erzeugt einen neuen Cache. Bei einer Umstellung des 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.
Falls ein Update nicht ankommt
Trotz 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)
Wichtig bei zukünftigen Änderungen
Wenn sich ausgelieferte App-Dateien technisch ändern, sollte 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.json und 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.

Kein echter Zugriffsschutz
Die Prüfung findet im Browser statt. Der Code selbst ist zwar nicht mehr lesbar, die Abfrage lässt sich von technisch versierten Personen aber umgehen. Sie ersetzt deshalb keinen serverseitigen Schutz (Firmennetz, Zugriffsschlüssel in config.php, ggf. Anmeldung am Webserver).
Abschnitt 2

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.

Abschnitt 3

Fachlicher Funktionsumfang

Prüfkatalog – 24 Kategorien, 199 Einzelfragen

Gesamtmarkt Brandschutz Sozialräume Erste Hilfe Elektrische Sicherheit CO2-Kühleinrichtungen Kühlhaus Lager und Regale Leergut Praktikanten Arbeitsmedizin Backstation Serviceabteilung Kassenzone Gefahrstoffe Marktleiterbüro Barrierefreies WC Notfallmanagement Dokumentation Psychische Belastung Kundenaufzug (15) Lastenaufzug (9) Flüssiggasflaschen (24 · 5 Unterbereiche) Beleuchtung (3 · 3 Unterbereiche)

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

QuelleBezug im Maßnahmenkatalog
DGUV Vorschrift 1 – Grundsätze der PräventionGrundpflichten der Prävention, Organisation des Arbeitsschutzes, Unterweisung und Dokumentation sowie Erste Hilfe.
DGUV Regel 100-001 – Grundsätze der Prävention, Ausgabe 06/2025Aktuelle Konkretisierung der DGUV Vorschrift 1, insbesondere zur praktischen Organisation und Durchführung von Unterweisungen.
DGUV Vorschrift 2 – Betriebsärzte und Fachkräfte für ArbeitssicherheitBetriebsärztliche und sicherheitstechnische Betreuung des Betriebes.
DGUV Vorschrift 3 – Elektrische Anlagen und BetriebsmittelSicherer Zustand sowie Prüfungen elektrischer Anlagen und Betriebsmittel.
DGUV Vorschrift 25 – ÜberfallpräventionOrganisation der Überfallprävention, Umgang mit Bargeld, Unterweisung und Maßnahmen nach einem Überfall.
DGUV Regel 108-010 – Überfallprävention in VerkaufsstellenBranchenspezifische Konkretisierung der Überfallprävention für Verkaufsstellen.
DGUV Vorschrift 68 – FlurförderzeugeFühren, Beauftragung, Unterweisung und Prüfung von Flurförderzeugen.
DGUV Regel 108-601 – Branche EinzelhandelZentrale 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ühleinrichtungenKälteanlagen (auch CO₂), Gefährdungen durch Kältemittel, Betrieb, Prüfung und Unterweisung.
DGUV Regel 110-010 – Verwendung von Flüssiggas, Ausgabe 11/2024Lagerung, Handhabung, Rücknahme, Dichtheitskontrolle, Brand- und Explosionsschutz bei Flüssiggasflaschen.
DGUV Regel 112-191 – Benutzung von Fuß- und Knieschutz, Ausgabe 12/2025Auswahl und Benutzung geeigneten Fußschutzes; berücksichtigt die aktuellen Anforderungen an Sicherheitsschuhe und Rutschhemmung.
DGUV Information 204-020 – Dokumentation der Erste-Hilfe-LeistungenDokumentation betrieblicher Erste-Hilfe-Leistungen.
DGUV Information 204-022 – Erste Hilfe im BetriebOrganisation der Ersten Hilfe, Erste-Hilfe-Material und betriebliche Abläufe.
DGUV Information 208-016 – Handlungsanleitung für den Umgang mit Leitern und TrittenAuswahl, Benutzung, Kontrolle und wiederkehrende Prüfung von Leitern und Tritten.
DGUV Information 208-061 – Lagereinrichtungen und LadungsträgerSichere Nutzung und Kontrolle von Regalen, Lagereinrichtungen und Ladungsträgern.

2. Technische Regeln für Arbeitsstätten (ASR)

QuelleBezug im Maßnahmenkatalog
ASR A1.2 – Raumabmessungen und BewegungsflächenAusreichende Bewegungs- und Arbeitsflächen.
ASR A1.3 – Sicherheits- und GesundheitsschutzkennzeichnungSicherheitszeichen, Verbots-, Warn-, Rettungs- und Brandschutzkennzeichnung.
ASR A1.5 – FußbödenRutsch-, Stolper- und Sturzgefahren sowie sicherer Zustand von Fußböden.
ASR A1.7 – Türen und ToreSicherer Betrieb und wiederkehrende Prüfung kraftbetätigter Türen und Tore.
ASR A1.8 – VerkehrswegeGestaltung und Freihaltung betrieblicher Verkehrswege.
ASR A2.1 – Schutz vor Absturz und herabfallenden GegenständenAbsturzsicherung und Schutz vor herabfallenden Gegenständen.
ASR A2.2 – Maßnahmen gegen BrändeFeuerlöscheinrichtungen, Brandschutzorganisation und Brandschutzhelfer.
ASR A2.3 – Fluchtwege und NotausgängeFlucht- und Rettungswege, Notausgänge sowie Anforderungen an Sicherheitsbeleuchtung im Fluchtwegkontext.
ASR A3.4 – Beleuchtung und SichtverbindungBeleuchtungsstärken und ausreichende Beleuchtung von Arbeitsbereichen.
ASR A4.1 – SanitärräumeToiletten- und Sanitärräume.
ASR A4.2 – Pausen- und BereitschaftsräumeAnforderungen an Pausen- und Bereitschaftsräume.
ASR A4.3 – Erste-Hilfe-Räume, Mittel und Einrichtungen zur Ersten HilfeErste-Hilfe-Ausstattung und betriebliche Erste-Hilfe-Einrichtungen.
ASR V3a.2 – Barrierefreie Gestaltung von ArbeitsstättenErgänzende Anforderungen bei Beschäftigten mit Behinderungen und barrierefreier Gestaltung.

3. Technische Regeln für Gefahrstoffe und Betriebssicherheit

QuelleBezug im Maßnahmenkatalog
TRGS 400 – Gefährdungsbeurteilung für Tätigkeiten mit GefahrstoffenSystematische Gefahrstoff-Gefährdungsbeurteilung und Festlegung von Schutzmaßnahmen.
TRGS 401 – Gefährdung durch HautkontaktHautgefährdungen, Hautschutz und geeignete Schutzmaßnahmen.
TRGS 510 – Lagerung von Gefahrstoffen in ortsbeweglichen BehälternGefahrstofflagerung und insbesondere Anforderungen an die Lagerung von Flüssiggasflaschen.
TRGS 555 – Betriebsanweisung und Information der BeschäftigtenBetriebsanweisungen und Unterweisung bei Tätigkeiten mit Gefahrstoffen.
TRBS 1201 – Prüfungen und Kontrollen von Arbeitsmitteln und überwachungsbedürftigen AnlagenErmittlung von Art, Umfang und Fristen erforderlicher Prüfungen und Kontrollen.
TRBS 1201 Teil 4 – Prüfung von AufzugsanlagenPrüfung überwachungsbedürftiger Aufzugsanlagen.
TRBS 1203 – Zur Prüfung befähigte PersonenAnforderungen an Personen, die Prüfungen von Arbeitsmitteln durchführen.
TRBS 3121 – Betrieb von AufzugsanlagenSicherer Betrieb von Aufzugsanlagen, Notfallorganisation und betriebliche Maßnahmen.

4. Normen und weitere technische Grundlagen

QuelleBezug im Maßnahmenkatalog
DIN 14406-4 – Tragbare Feuerlöscher, InstandhaltungTechnische Grundlage zur Instandhaltung tragbarer Feuerlöscher, ergänzend zu ASR A2.2 und Herstellerangaben.
DIN EN 15635 – Ortsfeste Regalsysteme aus Stahl, Nutzung und InstandhaltungInspektion, sichere Nutzung und Instandhaltung von Regalsystemen.
DIN V VDE V 0108-100 / DIN EN 50172Sicherheitsbeleuchtungsanlagen; technische Anforderungen werden nur soweit für die vorhandene Anlage einschlägig herangezogen.
DIN 18040-1 – Barrierefreies Bauen, öffentlich zugängliche GebäudeBauliche Barrierefreiheit öffentlich zugänglicher Bereiche.
DIN 18650-2 / DIN EN 13241Technische Anforderungen an kraftbetätigte Türen bzw. Tore, soweit für die konkrete Anlage einschlägig.
DIN VDE 0834 – RufanlagenNur 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

QuelleIm Maßnahmenkatalog insbesondere relevant für
Arbeitsschutzgesetz (ArbSchG), insbesondere §§ 3, 4, 5, 5a, 6, 10 und 12Grundpflichten, Gefährdungsbeurteilung, Dokumentation, Notfallorganisation und Unterweisung.
Arbeitsstättenverordnung (ArbStättV), insbesondere §§ 3, 3a, 4, 6 und 9Einrichten und Betreiben von Arbeitsstätten sowie Umsetzung über die ASR.
Betriebssicherheitsverordnung (BetrSichV), insbesondere §§ 3, 4, 5, 10, 12, 14, 15 und 16 sowie AnhängeBereitstellung und sichere Verwendung von Arbeitsmitteln, Prüfungen und Aufzugsanlagen.
Gefahrstoffverordnung (GefStoffV), insbesondere §§ 6 und 14Gefährdungsbeurteilung, Betriebsanweisung, Information und Unterweisung beim Umgang mit Gefahrstoffen.
Verordnung zur arbeitsmedizinischen Vorsorge (ArbMedVV), insbesondere §§ 3, 4, 5 und 5aPflicht-, Angebots- und Wunschvorsorge.
Arbeitszeitgesetz (ArbZG), insbesondere §§ 3, 4 und 5Arbeitszeit, Ruhepausen und Ruhezeiten.
Jugendarbeitsschutzgesetz (JArbSchG), insbesondere §§ 22 ff. und § 29Beschäftigungsbeschränkungen und Unterweisung Jugendlicher.
SGB VII, insbesondere § 22Betriebliche Sicherheitsbeauftragte.
SGB IX, insbesondere § 167 Abs. 2Betriebliches Eingliederungsmanagement.
Betriebsverfassungsgesetz (BetrVG), insbesondere §§ 75, 81 und 82Unterrichtung, Erörterung und betriebliche Zusammenarbeit, soweit im jeweiligen Prüfthema einschlägig.
Bürgerliches Gesetzbuch (BGB), § 618Schutzpflichten bei der Gestaltung von Arbeitsbedingungen.
PSA-Benutzungsverordnung (PSA-BV), insbesondere § 2Bereitstellung 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. 31Sicherheitsdatenblätter für Gefahrstoffe.
Aufzugsrichtlinie 2014/33/EUProdukt- 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.

Abschnitt 4

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.
Fotos und Maßnahmen sind miteinander verknüpft
Wird ein Foto einer Maßnahme zugeordnet, bleibt der Bezug zur entsprechenden Maßnahme erhalten. Dadurch kann im PDF direkt neben der Feststellung bzw. Maßnahme eine Foto-Vorschau ausgegeben werden.

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.

Abschnitt 5

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.
Abschnitt 6

Design und Schrift

  • Farbschema: roter Markenakzent (#cc071e bzw. 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 Ordner fonts/ und wird in css/styles.css per @font-face eingebunden. 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 Ordner fonts/). Fällt die Schrift aus, greift die Systemschrift (Segoe UI bzw. system-ui).
Abschnitt 7

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.

Abschnitt 8

Bekannte Einschränkungen / offene Punkte

Kein automatischer Cloud-Sync
Die aktuell laufenden Begehungsdaten und die lokalen Fotos werden grundsätzlich lokal auf dem jeweiligen Gerät gespeichert. Ein automatischer Mehrgeräte-Sync ist nicht Bestandteil der clientseitigen Kernarchitektur.
Lokales Backup beachten
Werden Browser-/Website-Daten gelöscht, kann der lokale Bestand verloren gehen. Für die aktuelle Begehung steht deshalb weiterhin der JSON-Export als externes Backup zur Verfügung. Archivierte Begehungen und Fotos liegen ebenfalls lokal im Browser bzw. in IndexedDB, sofern keine zusätzliche externe Sicherung eingerichtet wurde.
Server-Speicherung (save.php / list.php / load.php)
Über „Datei ▾ → Auf Server speichern" bzw. „Vom Server laden" lässt sich der aktuelle Begehungsstand zusätzlich auf einem Server sichern, über drei serverseitige PHP-Skripte. Standardmäßig wird eine relative Adresse im selben Verzeichnis wie die App verwendet; unter „Einstellungen" lässt sich stattdessen eine externe Server-Adresse hinterlegen (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.php erkennen sowohl die von save.php selbst erzeugten Dateien als auch manuell in den Datenordner eingespielte Exporte aus „JSON exportieren"/„JSON per Mail teilen" — beide erscheinen im Team-Archiv
  • list.php liefert 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.php die Datei. Der vorherige Stand wird vorher mit Zeitstempel in den Unterordner versionen des Datenordners kopiert. Dieser Ordner wird von list.php und load.php nicht erfasst und dient nur der Wiederherstellung durch Administratoren; er wird nicht automatisch geleert.
Verlauf-Seite: Mein Verlauf, Team-Archiv, Wiederherstellen
Zwei Reiter: „Mein Verlauf" (lokal archivierte Begehungen, IndexedDB) und „Team-Archiv (Server)" (alle über 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, notApplicable und subgroupNotApplicable werden übernommen, datum wird 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.
Rohdaten teilen: CSV (auswertung.html) und JSON (index.html)
Neben dem jeweiligen Download-Button („CSV herunterladen" / „JSON exportieren") gibt es „… per Mail teilen" — für den Fall, dass kein Server-Zugriff möglich ist und die Daten stattdessen manuell weitergegeben werden sollen. Beide nutzen 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.

Auswertungsseiten: Zeitraum-Filter, Auffällige Märkte, Gesamtauswertung als PDF
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 in js/auswertung-logik.js, genutzt von auswertung.html und auswertung-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 aus companyInfo.datum)
„Auswertung Verlauf" und „Auswertung Team"
Zwei Buttons auf der Verlauf-Seite, neben „Mein Verlauf" und „Team-Archiv (Server)". Beide sind reine Links auf eigenständige Seiten, kein eingebettetes Panel — optisch identisch gestaltet (<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.js kennt dadurch nur noch zwei echte Tabs (lokal, team)
Jahreszahlen in der Fußzeile
Werden anhand des aktuellen Systemdatums berechnet, nicht fest hinterlegt: Copyright als Zeitspanne ab Gründungsjahr 2026 (z. B. „© 2026–2027" ab dem jeweils nächsten Jahr), „(Sifa) Arbeitssicherheit" mit dem jeweils aktuellen Jahr.
Zugangscode ist kein kryptografischer Schutz
Der clientseitige Zugangsschutz dient als organisatorische Zugriffshürde, ersetzt aber keine serverseitige Authentifizierung oder Verschlüsselung.
Abschnitt 9

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.
Bei zukünftigen Änderungen

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.

Abschnitt 10

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

  1. Neuen Wert erzeugen, z. B. openssl rand -hex 24 (mindestens 32 Zeichen).
  2. In config.php bei apiKey eintragen.
  3. Auf jedem Gerät unter Einstellungen eintragen, speichern und „Verbindung testen“.
  4. Mit pruefen.php?schluessel=<Schlüssel> kontrollieren.

Zugangscode ändern

  1. Prüfsumme erzeugen: printf '%s' 'NeuerCode' | sha256sum (Groß-/Kleinschreibung zählt).
  2. Den 64-stelligen Wert in zugang-config.js bei codeHash eintragen.
  3. Alle Geräte fragen den neuen Code beim nächsten Start einmal ab; aktiv: false schaltet 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.

  1. App-Ordner vollständig in das Web-Verzeichnis kopieren.
  2. Datenordner anlegen; der Webserver-/PHP-Benutzer braucht Lese- und Schreibrecht.
  3. In config.php datenOrdner und apiKey eintragen.
  4. Liegt der Datenordner im Web-Verzeichnis: Apache braucht AllowOverride für die .htaccess, IIS die web.config, nginx eine eigene Sperrregel.
  5. pruefen.php aufrufen; alle Punkte müssen grün sein. Danach löschen oder umbenennen, da die Seite Server-Pfade anzeigt.
  6. App auf dem iPad über „Zum Home-Bildschirm“, am PC über „App installieren“ einrichten.
App und Endpunkte auf verschiedenen Servern
Der Speicherserver muss CORS für die Adresse der App erlauben, einschließlich der Kopfzeilen 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
  1. Geänderte Dateien auf den Server bzw. in das Repository übertragen. config.php und zugang-config.js des Servers dabei nicht überschreiben.
  2. Versionsnummer an allen Stellen erhöhen.
  3. Neue Skriptdateien auf allen Seiten einbinden, die js/app.js nutzen.
  4. Nach Änderungen am Prüfkatalog oder an Dateien python tools/doku-zahlen.py ausführen.
  5. 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
Abschnitt 11

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.