Shop Review B I-4: Steuerart und Lieferzeit ohne Vorbelegung

kleinunternehmer ist ab jetzt null (nicht gewaehlt), lieferzeit leer. istVollstaendig verlangt eine
bewusste Wahl (true oder false), der Shop kann sonst nicht geoeffnet werden. Im Reiter
Einstellungen gibt es zwei Pflicht-Radiobuttons ohne Vorauswahl; Preise, Artikel und Muster
rechnen bei null wie bei Regelbesteuerung. Tests und Fixtures angepasst.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-05 09:50:54 +00:00
1 parent 7104f97feb
commit 1f56b86791
20 files changed
+123 -20

No files matched your search

+7 -3
View File
@@ -6,7 +6,8 @@ import { withLocks } from '../keyedLock.js'
* Shop-Einstellungen (Plan 2026-10-05-webshop.md, Task C2; shopConfig.einstellungen als JSON-Text).
* Normalisieren ist rein: Eingabe => { einstellungen } mit frischem, vollstaendigem Objekt oder { fehler: { 'feld.pfad': 'Text' } }
* (Texte in Du-Form, das Portal spricht den Haendler an). Leere Pflichtangaben sind beim Normalisieren erlaubt, damit der Haendler
* Schritt fuer Schritt speichern kann; ob alles da ist, sagt istVollstaendig(). Geld ist immer ganze Cent.
* Schritt fuer Schritt speichern kann; ob alles da ist, sagt istVollstaendig() (u. a. muss kleinunternehmer true oder false sein;
* null = noch nicht gewaehlt, rechnet wie false). Geld ist immer ganze Cent.
*/
const ZAHLUNGSARTEN = ['card', 'klarna', 'sepa_debit']
@@ -26,10 +27,11 @@ const tief = (wert) => {
export const STANDARD_EINSTELLUNGEN = tief({
shopname: '',
anbieter: { name: '', strasse: '', plz: '', ort: '', land: 'DE', email: '', telefon: '', ustId: '' },
kleinunternehmer: true,
// null = noch nicht gewaehlt: der Haendler muss sich bewusst entscheiden (istVollstaendig verlangt true oder false)
kleinunternehmer: null,
versand: { aktiv: true, laender: ['DE'], kostenCent: { DE: 490 }, freiAbCent: null },
abholung: { aktiv: false, adresse: '', hinweis: '' },
lieferzeit: '2–4 Werktage',
lieferzeit: '',
zahlungsarten: ['card'],
akzent: '#111111',
mindestbestellCent: null,
@@ -245,6 +247,8 @@ export function istVollstaendig(einstellungen) {
const r = normalisiereEinstellungen(einstellungen)
if (r.fehler) return false
const e = r.einstellungen
// Die Steuerart muss bewusst gewaehlt sein (kein Standardwert): sonst stuenden unrichtige Steuerangaben im Shop
if (typeof e.kleinunternehmer !== 'boolean') return false
return [e.shopname, e.anbieter.name, e.anbieter.strasse, e.anbieter.plz, e.anbieter.ort, e.anbieter.email, e.lieferzeit].every((s) => s !== '')
}
+1 -1
View File
@@ -215,7 +215,7 @@ export async function bereitschaft(ctx, { produkte } = {}) {
ok: istVollstaendig(shop.einstellungen),
text: istVollstaendig(shop.einstellungen)
? 'Deine Shop-Angaben sind vollständig.'
: 'Bitte vervollständige deine Shop-Angaben (Shopname, Anbieter mit Anschrift und E-Mail, Lieferzeit).',
: 'Bitte vervollständige deine Shop-Angaben (Shopname, Anbieter mit Anschrift und E-Mail, Steuerart, Lieferzeit).',
},
{
id: 'rechtstexte',