""" AGB checks — §305ff BGB. Level 1: Pflichtangabe erwaehnt? Level 2: Pflichtangabe korrekt/vollstaendig? """ AGB_CHECKLIST = [ # ── L1: Geltungsbereich ─────────────────────────────────────────── { "id": "scope", "label": "Geltungsbereich", "level": 1, "parent": None, "patterns": [ r"geltungsbereich", r"geltung", r"scope", r"diese\s+(?:agb|bedingungen)\s+gelten", ], "severity": "HIGH", "hint": "Ohne Geltungsbereich ist unklar, ob die AGB fuer B2C, B2B oder beides gelten. Definieren Sie Vertragsgegenstand, Parteien und raeumlichen Anwendungsbereich — sonst droht Unwirksamkeit nach §305 Abs. 2 BGB.", }, { "id": "incorporation_clause", "label": "Einbeziehungsklausel (§305 BGB)", "level": 2, "parent": "scope", "patterns": [ r"einbezieh", r"bestandteil\s+des\s+vertrag", r"(?:mit|durch)\s+(?:der\s+)?bestellung.*(?:anerkennen|akzeptieren|zustimm)", r"§\s*305", ], "severity": "MEDIUM", "hint": "Ohne wirksame Einbeziehung nach §305 Abs. 2 BGB werden AGB nicht Vertragsbestandteil. Der Kunde muss vor Vertragsschluss ausdruecklich auf die AGB hingewiesen werden und die Moeglichkeit zur Kenntnisnahme erhalten.", }, # ── L1: Vertragsschluss ─────────────────────────────────────────── { "id": "contract", "label": "Vertragsschluss", "level": 1, "parent": None, "patterns": [ r"vertragsschluss", r"zustandekommen", r"contract\s+formation", r"angebot\s+und\s+annahme", ], "severity": "HIGH", "hint": "Haeufiger Fehler: Die Bestellung wird als Angebot des Kunden dargestellt, aber die Auftragsbestaetigung als Annahme — das ist nur wirksam, wenn klar zwischen Eingangsbestaetigung (§312i BGB) und Auftragsbestaetigung/Annahme unterschieden wird.", }, # ── L1: Haftung ─────────────────────────────────────────────────── { "id": "liability", "label": "Haftung / Haftungsbeschraenkung", "level": 1, "parent": None, "patterns": [ r"haftung", r"liability", r"schadensersatz", r"haftungsbeschr(?:ae|ä)nkung", ], "severity": "HIGH", "hint": "Haftungsklauseln sind nach §309 Nr. 7 BGB unwirksam, wenn sie Haftung fuer Vorsatz, grobe Fahrlaessigkeit, Koerperschaeden oder Verletzung wesentlicher Vertragspflichten (Kardinalpflichten) ausschliessen. Haeufigster AGB-Abmahngrund.", }, # ── L1: Gerichtsstand / Anwendbares Recht ───────────────────────── { "id": "jurisdiction", "label": "Gerichtsstand / Anwendbares Recht", "level": 1, "parent": None, "patterns": [ r"gerichtsstand", r"anwendbares\s+recht", r"jurisdiction", r"governing\s+law", ], "severity": "MEDIUM", "hint": "Gerichtsstandsklauseln gegenueber Verbrauchern sind nach §38 ZPO nur sehr eingeschraenkt moeglich. Bei B2C-Shops: Besser auf eine Gerichtsstandsvereinbarung verzichten und nur das anwendbare Recht (deutsches Recht unter Ausschluss UN-Kaufrecht) benennen.", }, { "id": "dispute_odr_link", "label": "ODR-Plattform-Link (EU-Verordnung 524/2013)", "level": 2, "parent": "jurisdiction", "patterns": [ r"ec\.europa\.eu.*odr", r"(?:os|odr)[\-\s]plattform", r"(?:online[\-\s]?streitbeilegung|online\s+dispute\s+resolution)", ], "severity": "MEDIUM", "hint": "Online-Haendler muessen nach Art. 14 EU-VO 524/2013 einen klickbaren Link zur OS-Plattform (https://ec.europa.eu/consumers/odr) setzen — nicht nur die URL als Text. Fehlt der Link, droht Abmahnung. Seit 20.07.2025 gilt: Plattform wird eingestellt, pruefen Sie ob Pflicht noch besteht.", }, { "id": "choice_of_law_specific", "label": "Konkretes Recht benannt (z.B. deutsches Recht)", "level": 2, "parent": "jurisdiction", "patterns": [ r"(?:deutsches|(?:oe|ö)sterreichisches|schweizerisches)\s+recht", r"recht\s+der\s+bundesrepublik", r"german\s+law|law\s+of\s+germany", r"un[\-\s]kaufrecht.*(?:ausgeschlossen|findet\s+keine\s+anwendung)", ], "severity": "LOW", "hint": "Formulierung: 'Es gilt das Recht der Bundesrepublik Deutschland unter Ausschluss des UN-Kaufrechts (CISG).' Bei B2C zusaetzlich: 'Zwingende Verbraucherschutzvorschriften des Aufenthaltsstaates bleiben unberuehrt' (Art. 6(2) Rom-I-VO).", }, # ── L1: Zahlungsbedingungen ─────────────────────────────────────── { "id": "payment", "label": "Zahlungsbedingungen", "level": 1, "parent": None, "patterns": [ r"zahlungsbedingung", r"payment\s+terms", r"(?:preis|kosten|entgelt|verg(?:ue|ü)tung)", r"zahlungsweise", r"rechnungsstellung", ], "severity": "MEDIUM", "hint": "Bei B2C muessen Preise den Gesamtpreis inkl. MwSt. angeben (§1 PAngV). Zusatzkosten (Versand, Nachnahme) muessen VOR Vertragsschluss transparent sein. Versteckte Kosten sind nach §312a Abs. 3 BGB unwirksam.", }, { "id": "payment_methods", "label": "Konkrete Zahlungsarten benannt", "level": 2, "parent": "payment", "patterns": [ r"(?:vorkasse|nachnahme|lastschrift|sepa|(?:ue|ü)berweisung|kreditkarte|paypal|sofort(?:ue|ü)berweisung|klarna|rechnung|giropay|apple\s*pay|google\s*pay)", ], "severity": "LOW", "hint": "Listen Sie alle akzeptierten Zahlungsmethoden auf. Hinweis: Gaengige unentgeltliche Zahlungsmethode ist Pflicht (§312a Abs. 4 BGB). Aufschlaege auf bestimmte Zahlungsarten (z.B. Kreditkarte) sind seit 13.01.2018 verboten (§270a BGB).", }, { "id": "payment_due_date", "label": "Faelligkeit/Zahlungsziel angegeben", "level": 2, "parent": "payment", "patterns": [ r"(?:f(?:ae|ä)llig|zahlbar|zahlungsziel)\s+(?:sofort|innerhalb|nach|bei|mit)", r"(?:netto|brutto)\s*\d+\s+tage", r"zahlungsfrist", ], "severity": "LOW", "hint": "Ohne Faelligkeitsregelung gilt §271 BGB (sofort faellig). Bei 'Vorkasse' muss klar sein, dass erst nach Zahlungseingang geliefert wird. Verzugszinsen-Pauschalen ueber 40 EUR (§288 Abs. 5 BGB) sind in B2C-AGB unwirksam (§309 Nr. 5 BGB).", }, # ── L1: Lieferung ───────────────────────────────────────────────── { "id": "delivery", "label": "Lieferung / Leistungserbringung", "level": 1, "parent": None, "patterns": [ r"lieferung", r"leistungserbringung", r"delivery", r"lieferfrist", r"bereitstellung", r"(?:zugang|zugriff).*(?:dienst|leistung)", ], "severity": "MEDIUM", "hint": "Bei Fernabsatzvertraegen muss der Unternehmer spaetestens 30 Tage nach Vertragsschluss liefern (§475 Abs. 1 BGB). Formulierungen wie 'Lieferung in der Regel in...' oder 'voraussichtlich' sind nur als Richtwert zulaessig, nicht als verbindliche Frist.", }, { "id": "delivery_timeframe", "label": "Konkrete Lieferzeit/Frist angegeben", "level": 2, "parent": "delivery", "patterns": [ r"(?:lieferzeit|lieferfrist|versanddauer)\s*(?:betr(?:ae|ä)gt|von|ca\.?|circa)", r"\d+[\-\s]+(?:\d+\s+)?(?:werk)?tage.*(?:liefer|versand)", r"(?:liefer|versand).*\d+[\-\s]+(?:\d+\s+)?(?:werk)?tage", ], "severity": "LOW", "hint": "Nennen Sie eine konkrete Lieferfrist (z.B. '3-5 Werktage'). Haeufiger Fehler: 'Lieferzeit ca. 2-4 Wochen' ist zu vage. Die Angabe muss so konkret sein, dass der Kunde den spaetesten Lieferzeitpunkt erkennen kann (BGH, Az. I ZR 133/20).", }, # ── L1: Gewaehrleistung ─────────────────────────────────────────── { "id": "warranty", "label": "Gewaehrleistung / Maengelrechte", "level": 1, "parent": None, "patterns": [ r"gew(?:ae|ä)hrleistung", r"m(?:ae|ä)ngelrecht", r"warranty", r"sachm(?:ae|ä)ngel", r"gew(?:ae|ä)hrleistungsfrist", ], "severity": "MEDIUM", "hint": "Gewaehrleistungsrechte (§§434ff BGB) duerfen bei B2C nicht eingeschraenkt werden (§476 BGB). Haeufiger Verstoss: AGB-Klausel 'Gewaehrleistung ausgeschlossen' — bei Verbrauchern stets unwirksam. Bei B2B ist Beschraenkung auf Nacherfuellung zulaessig.", }, { "id": "warranty_period", "label": "Gewaehrleistungsfrist angegeben", "level": 2, "parent": "warranty", "patterns": [ r"(?:gew(?:ae|ä)hrleistungsfrist|verj(?:ae|ä)hrungsfrist)\s*(?:betr(?:ae|ä)gt|von|:)", r"(?:2|zwei)\s+jahre.*(?:gew(?:ae|ä)hrleistung|m(?:ae|ä)ngel|verj(?:ae|ä)hrung)", r"(?:gew(?:ae|ä)hrleistung|m(?:ae|ä)ngel|verj(?:ae|ä)hrung).*(?:2|zwei)\s+jahre", ], "severity": "LOW", "hint": "Gesetzlich: 2 Jahre bei Neuware (§438 BGB). Bei Gebrauchtware kann die Frist auf 1 Jahr verkuerzt werden (§476 Abs. 2 BGB) — aber NUR bei ausdruecklicher Vereinbarung. Seit 01.01.2022 gilt zusaetzlich die Beweislastumkehr fuer 1 Jahr (statt 6 Monate).", }, # ── L1: Kuendigung ──────────────────────────────────────────────── { "id": "termination", "label": "Kuendigung / Vertragsbeendigung", "level": 1, "parent": None, "patterns": [ r"k(?:ue|ü)ndigung", r"vertragsbeendigung", r"termination", r"laufzeit.*(?:vertrag|abo)", r"k(?:ue|ü)ndigungsfrist", ], "severity": "MEDIUM", "hint": "Bei Dauerschuldverhaeltnissen (Abos, SaaS) muss das Recht zur ordentlichen Kuendigung gewaehrt werden. Automatische Verlaengerungen ueber 1 Jahr sind nach §309 Nr. 9 BGB unwirksam. Seit 01.03.2022: Kuendigungsbutton nach §312k BGB Pflicht.", }, { "id": "termination_period", "label": "Kuendigungsfrist angegeben", "level": 2, "parent": "termination", "patterns": [ r"k(?:ue|ü)ndigungsfrist\s+(?:von|betr(?:ae|ä)gt)", r"\d+\s+(?:tage?|wochen?|monate?).*(?:k(?:ue|ü)ndig|frist)", r"(?:k(?:ue|ü)ndig|frist).*\d+\s+(?:tage?|wochen?|monate?)", ], "severity": "LOW", "hint": "§309 Nr. 9 BGB: Erstlaufzeit max. 2 Jahre, Verlaengerung max. 1 Jahr, Kuendigungsfrist max. 3 Monate. Seit 01.03.2022: Nach Erstlaufzeit jederzeit mit 1 Monat kuendbar (§314 BGB analog). Laengere Fristen sind bei B2C unwirksam.", }, { "id": "termination_form", "label": "Formvorschrift fuer Kuendigung", "level": 2, "parent": "termination", "patterns": [ r"k(?:ue|ü)ndigung.*(?:schriftlich|textform|per\s+(?:brief|e-?mail|fax))", r"(?:schriftlich|textform).*k(?:ue|ü)ndigung", ], "severity": "LOW", "hint": "Kuendigung per E-Mail genuegt der Textform (§126b BGB). Klauseln, die Schriftform (§126 BGB, eigenhaendige Unterschrift) verlangen, sind bei B2C nach §309 Nr. 13 BGB unwirksam. Seit 01.07.2022: Kuendigung in Textform muss stets akzeptiert werden.", }, # ── L1: Datenschutzhinweis in AGB ───────────────────────────────── { "id": "data_protection", "label": "Datenschutzhinweis in AGB", "level": 1, "parent": None, "patterns": [ r"datenschutz.*(?:agb|bedingung)", r"(?:agb|bedingung).*datenschutz", r"personenbezogen.*daten.*(?:agb|vertrag)", r"dsgvo.*(?:agb|vertrag)", ], "severity": "LOW", "hint": "AGB und Datenschutzerklaerung sind rechtlich getrennte Dokumente. Mischen Sie KEINE Datenschutzhinweise in die AGB ein — stattdessen genuegt ein Verweis: 'Details zur Datenverarbeitung finden Sie in unserer Datenschutzerklaerung [Link].'", }, # ── Neue L1: Salvatorische Klausel ──────────────────────────────── { "id": "salvatory_clause", "label": "Salvatorische Klausel", "level": 1, "parent": None, "patterns": [ r"salvatorische", r"(?:unwirksamkeit|nichtigkeit)\s+(?:einer|einzelner)\s+(?:bestimmung|klausel|regelung)", r"(?:sollte|sofern).*(?:bestimmung|klausel).*(?:unwirksam|nichtig)", r"(?:uebrigen|übrigen)\s+bestimmungen.*(?:unberuehrt|unberührt|wirksam|bestehen)", ], "severity": "LOW", "hint": "Die klassische salvatorische Klausel ('unwirksame Bestimmungen werden durch wirksame ersetzt') ist nach BGH-Rechtsprechung in AGB selbst unwirksam. Besser: Nur die Erhaltungsklausel verwenden ('Die uebrigen Bestimmungen bleiben wirksam').", }, # ── Neue L1: Aenderungsklausel ──────────────────────────────────── { "id": "amendment_clause", "label": "Aenderungsklausel fuer AGB", "level": 1, "parent": None, "patterns": [ r"(?:ae|ä)nderung.*(?:agb|bedingung)", r"(?:agb|bedingung).*(?:ae|ä)nder", r"(?:anpassung|aktualisierung).*(?:agb|bedingung|geschaeftsbedingung|geschäftsbedingung)", r"(?:neue\s+fassung|neufassung).*(?:agb|bedingung)", ], "severity": "LOW", "hint": "AGB-Aenderungsklauseln bei B2C sind nur unter engen Voraussetzungen wirksam (BGH Az. XI ZR 388/10): Aenderungsgrund muss konkret benannt sein, Kunde muss angemessene Frist zur Kuendigung erhalten. Pauschale 'Wir koennen jederzeit aendern'-Klauseln sind unwirksam.", }, # ── Neue L1: Verbraucherrechte §309 ─────────────────────────────── { "id": "consumer_rights", "label": "Verbraucherrechte nicht eingeschraenkt (§309 BGB)", "level": 1, "parent": None, "patterns": [ r"§\s*309", r"verbraucherrecht", r"(?:gesetzlich|zwingende)\w*\s+recht\w*.*(?:unberuehrt|unberührt|bestehen\s+bleiben)", r"(?:verbrauch|konsument).*(?:recht|anspruch|schutz)", ], "severity": "LOW", "hint": "Haeufigste §309 BGB-Verstoesse: Pauschalierter Schadensersatz ohne Gegenbeweismoeglichkeit (Nr. 5), Haftungsausschluss bei Koerperschaeden (Nr. 7a), Schriftformerfordernis fuer Kuendigung (Nr. 13). Jede dieser Klauseln ist einzeln abmahnfaehig.", }, ]