Preise im Blog immer inkl. 19 % MwSt.

This commit is contained in:
2026-09-22 12:36:11 +02:00
parent 4754025e7d
commit b9a906d6e2
5 changed files with 156 additions and 147 deletions

View File

@@ -219,8 +219,10 @@ und sollte dort bleiben.
### Schreibregeln fuer content_html ### Schreibregeln fuer content_html
**Preise niemals ausschreiben.** Sie werden zentral gepflegt und per Shortcode **Preise niemals ausschreiben, immer inkl. MwSt.** Sie werden zentral gepflegt
eingesetzt: und per Shortcode eingesetzt, immer mit `brutto="1"`. Hinter dem Preis steht
"inkl. 19 % MwSt.", nie "netto", "brutto" oder "zzgl.". Die Stilpruefung meldet
Shortcodes ohne `brutto="1"` und jedes "netto"/"brutto" im Text.
``` ```
[skrift_preis key="SCHLUESSEL" ab="0|1" brutto="0|1"] [skrift_preis key="SCHLUESSEL" ab="0|1" brutto="0|1"]
@@ -246,7 +248,7 @@ reine Zahl.
Das Wort "ab" gehoert in den Fliesstext, der Shortcode liefert nur die Zahl: Das Wort "ab" gehoert in den Fliesstext, der Shortcode liefert nur die Zahl:
``` ```
Handschriftliche Briefe ab [skrift_preis key="briefe" ab="1"] pro Stueck. Handschriftliche Briefe ab [skrift_preis key="briefe" ab="1" brutto="1"] pro Stueck inkl. 19 % MwSt.
``` ```
Ein unbekannter `key` erzeugt eine leere Ausgabe, keinen Fehler. Ein unbekannter `key` erzeugt eine leere Ausgabe, keinen Fehler.

View File

@@ -298,14 +298,12 @@ const brief = {
}, },
schreibregeln: { schreibregeln: {
preise: 'Preise niemals ausschreiben. Immer den Shortcode einsetzen: ' preise: 'Preise niemals ausschreiben. Immer den Shortcode einsetzen, immer inklusive MwSt.: '
+ '[skrift_preis key="SCHLUESSEL" ab="0|1" brutto="0|1"]. ' + '[skrift_preis key="SCHLUESSEL" ab="0|1" brutto="1"]. '
+ 'key ist der Produktschluessel (z. B. briefe, postkarten, porto_inland). ' + 'key ist der Produktschluessel (briefe, postkarten). ab=1 liefert den guenstigsten Staffelpreis, '
+ 'ab=1 liefert den guenstigsten Staffelpreis, ab=0 den Standardpreis. ' + 'ab=0 den Standardpreis. brutto ist immer 1. Hinter dem Preis steht immer "inkl. 19 % MwSt.", '
+ 'brutto=1 inkl. MwSt., brutto=0 netto. Das Wort "ab" selbst gehoert in den Fliesstext, ' + 'nie "netto", "brutto" oder "zzgl.". Das Wort "ab" gehoert in den Fliesstext. Beispiel: '
+ 'der Shortcode liefert nur die Zahl. Beispiel: ' + 'Handschriftliche Briefe ab [skrift_preis key="briefe" ab="1" brutto="1"] pro Stueck inkl. 19 % MwSt.',
+ 'Handschriftliche Briefe ab [skrift_preis key="briefe" ab="1"] pro Stueck. '
+ 'Ein unbekannter key ergibt eine leere Ausgabe, keinen Fehler.',
faq: 'FAQ nicht in content_html schreiben, sondern als Feld faq mit Frage-Antwort-Paaren. ' faq: 'FAQ nicht in content_html schreiben, sondern als Feld faq mit Frage-Antwort-Paaren. '
+ 'Die Ausgabe im Beitrag uebernimmt der Shortcode [skrift_faq].', + 'Die Ausgabe im Beitrag uebernimmt der Shortcode [skrift_faq].',
kurzantwort: 'Ein Absatz, der die Hauptfrage direkt beantwortet, als eigenes Feld kurzantwort.', kurzantwort: 'Ein Absatz, der die Hauptfrage direkt beantwortet, als eigenes Feld kurzantwort.',

View File

@@ -84,6 +84,15 @@ function stilpruefung(artikel) {
add('Kein Praxiswissen hinterlegt', 'Feld "praxis" in artikel-index.json fuellen, dann den Artikel darauf aufbauen'); add('Kein Praxiswissen hinterlegt', 'Feld "praxis" in artikel-index.json fuellen, dann den Artikel darauf aufbauen');
} }
// 7b) Preise: immer inkl. MwSt., Formulierung "inkl. 19 % MwSt."
const alleTexte = [String(artikel.kurzantwort || ''), html,
...(Array.isArray(artikel.faq) ? artikel.faq.map(f => String(f.antwort || '')) : [])].join(' ');
(alleTexte.match(/\[skrift_preis[^\]]*\]/g) || []).forEach(s => {
if (!/brutto="1"/.test(s)) add('Preis ohne MwSt.', `${s} braucht brutto="1"`);
});
const nb = ohneTags(alleTexte.replace(/\[skrift_preis[^\]]*\]/g, 'PREIS')).match(/[^.]{0,40}\b(netto|brutto|zzgl\.?|zuzüglich)\b[^.]{0,30}/gi) || [];
nb.forEach(s => add('Preisangabe: "netto"/"brutto" statt "inkl. 19 % MwSt."', s.trim()));
// 8) Interne Links: primaer auf Business-Leistungsseiten // 8) Interne Links: primaer auf Business-Leistungsseiten
const B = 'https://skrift.de/'; const B = 'https://skrift.de/';
const BUSINESS = ['handgeschriebene-businessbriefe', 'handgeschriebene-postkarten', const BUSINESS = ['handgeschriebene-businessbriefe', 'handgeschriebene-postkarten',

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long