← Code-Übersicht

0012_current_catalog.sql

Pfad: migrations/0012_current_catalog.sql

Ext: sql

Größe: 353105 Bytes

Geändert: 2026-07-16 17:04:55+02

-- Migration 0012: Additiver Snapshot des freigegebenen Doku-/Prozesskatalogs.
-- Automatisch aus dem belegten Stand 2026-07-16 erzeugt; keine Loeschoperationen.

INSERT INTO public."akteur" ("id","name","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('1','Besucher','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "name"=EXCLUDED."name","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."akteur"."name",public."akteur"."created_at",public."akteur"."updated_at") IS DISTINCT FROM (EXCLUDED."name",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."akteur" ("id","name","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('2','Anwendung','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "name"=EXCLUDED."name","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."akteur"."name",public."akteur"."created_at",public."akteur"."updated_at") IS DISTINCT FROM (EXCLUDED."name",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."akteur" ("id","name","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('3','Datenbank','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "name"=EXCLUDED."name","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."akteur"."name",public."akteur"."created_at",public."akteur"."updated_at") IS DISTINCT FROM (EXCLUDED."name",EXCLUDED."created_at",EXCLUDED."updated_at");
DO $sequence$ BEGIN IF has_sequence_privilege(current_user, pg_get_serial_sequence('public.akteur','id'), 'UPDATE') THEN PERFORM setval(pg_get_serial_sequence('public.akteur','id'), GREATEST(COALESCE((SELECT max(id) FROM public."akteur"),1),1), true); END IF; END $sequence$;

INSERT INTO public."system" ("id","name","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('1','demo.karlkratz.com','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "name"=EXCLUDED."name","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."system"."name",public."system"."created_at",public."system"."updated_at") IS DISTINCT FROM (EXCLUDED."name",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."system" ("id","name","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('2','PostgreSQL','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "name"=EXCLUDED."name","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."system"."name",public."system"."created_at",public."system"."updated_at") IS DISTINCT FROM (EXCLUDED."name",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."system" ("id","name","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('7','WEtell','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "name"=EXCLUDED."name","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."system"."name",public."system"."created_at",public."system"."updated_at") IS DISTINCT FROM (EXCLUDED."name",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."system" ("id","name","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('8','Node.js/Playwright','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "name"=EXCLUDED."name","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."system"."name",public."system"."created_at",public."system"."updated_at") IS DISTINCT FROM (EXCLUDED."name",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."system" ("id","name","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('9','Lexoffice','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "name"=EXCLUDED."name","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."system"."name",public."system"."created_at",public."system"."updated_at") IS DISTINCT FROM (EXCLUDED."name",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."system" ("id","name","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('10','Dateisystem','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "name"=EXCLUDED."name","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."system"."name",public."system"."created_at",public."system"."updated_at") IS DISTINCT FROM (EXCLUDED."name",EXCLUDED."created_at",EXCLUDED."updated_at");
DO $sequence$ BEGIN IF has_sequence_privilege(current_user, pg_get_serial_sequence('public.system','id'), 'UPDATE') THEN PERFORM setval(pg_get_serial_sequence('public.system','id'), GREATEST(COALESCE((SELECT max(id) FROM public."system"),1),1), true); END IF; END $sequence$;

DO $sequence$ BEGIN IF has_sequence_privilege(current_user, pg_get_serial_sequence('public.rolle','id'), 'UPDATE') THEN PERFORM setval(pg_get_serial_sequence('public.rolle','id'), GREATEST(COALESCE((SELECT max(id) FROM public."rolle"),1),1), true); END IF; END $sequence$;

INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('1','datenbank','demo_karlkratz_com',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('2','tabelle','public.dokumentation','1','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('3','tabelle','public.prozesse','1','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('4','tabelle','public.prozess_schritt','1','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('5','tabelle','public.artefakt','1','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('6','tabelle','public.history_dokumentation','1','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('7','schnittstelle','GET /',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('8','schnittstelle','GET /health',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('9','schnittstelle','GET /doku',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('10','schnittstelle','GET /doku/{slug}',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('11','schnittstelle','POST /doku/{slug}',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('12','schnittstelle','GET /prozesse',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('13','schnittstelle','GET /prozesse/{slug}',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('14','schnittstelle','GET /abgleich',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('15','db_funktion','audit.fn_write_history',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('16','db_funktion','audit.fn_touch_updated_at',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('17','db_funktion','audit.fn_on_create_table',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('18','db_funktion','public.fn_schritt_vorgaenger_check',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('19','db_funktion','public.fn_artefakt_hierarchie',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('20','db_funktion','public.fn_komposition_azyklik',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('21','db_funktion','public.fn_pruef_schritt_abdeckung',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('22','db_funktion','public.fn_pruef_artefakt_abdeckung',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('23','datei','/var/www/demo.karlkratz.com/public/index.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('24','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Http/Router.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('25','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Http/HomeAction.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('26','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Http/HealthAction.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('27','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Persistence/PostgresHealthProbe.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('28','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Http/DokuListeAction.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('29','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Persistence/PostgresDokumentationRepository.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('30','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Http/DokuDetailAction.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('31','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Content/MarkdownToHtml.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('32','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Http/DokuSpeichernAction.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('33','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Content/HtmlToMarkdown.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('34','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Http/ProzessListeAction.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('35','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Persistence/PostgresProzessRepository.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('36','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Http/ProzessDetailAction.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('37','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Flow/FlussLayout.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('38','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Flow/SvgFluss.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('39','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Http/AbgleichAction.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('40','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Persistence/PostgresArtefaktKatalog.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('41','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Reconcile/SystemRealitaet.php',NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('126','datei','/var/www/demo.karlkratz.com/run-rechnung.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('127','datei','/var/www/demo.karlkratz.com/src/Application/Rechnung/DiscoverInvoicesUseCase.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('128','datei','/var/www/demo.karlkratz.com/src/Application/Rechnung/DownloadInvoiceUseCase.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('129','datei','/var/www/demo.karlkratz.com/src/Application/Rechnung/ExtractInvoiceDataUseCase.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('130','datei','/var/www/demo.karlkratz.com/src/Application/Rechnung/IngestInvoicesUseCase.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('131','datei','/var/www/demo.karlkratz.com/src/Application/Rechnung/IngestResult.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('132','datei','/var/www/demo.karlkratz.com/src/Application/Rechnung/InvoiceProcessException.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('133','datei','/var/www/demo.karlkratz.com/src/Application/Rechnung/PostInvoiceUseCase.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('134','datei','/var/www/demo.karlkratz.com/src/Application/Rechnung/ResolveVendorUseCase.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('135','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/Amount.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('136','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/ExtractedInvoiceData.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('137','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/InvoiceFileStoragePort.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('138','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/InvoiceLoggerPort.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('139','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/InvoiceRecord.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('140','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/InvoiceState.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('141','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/InvoiceStatePort.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('142','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/InvoiceStatus.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('143','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/LexofficePort.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('144','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/PostingResult.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('145','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/SourceInvoice.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('146','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/TextExtractionPort.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('147','datei','/var/www/demo.karlkratz.com/src/Domain/Rechnung/WetellSourcePort.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('148','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/DateBasedInvoiceStorage.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('149','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/FallbackTextExtractor.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('150','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/FallbackWetellSourceAdapter.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('151','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/HeadlessWetellSourceAdapter.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('152','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/HttpWetellSourceAdapter.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('153','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/JsonInvoiceStateAdapter.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('154','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/JsonLineLogger.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('155','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/LexofficeApiAdapter.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('156','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/PdftotextExtractor.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('157','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/SystemClock.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('158','datei','/var/www/demo.karlkratz.com/src/Infrastructure/Rechnung/TesseractInvoiceExtractor.php',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('159','datei','/var/www/demo.karlkratz.com/wetell-headless/server.js',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('160','datei','/var/www/demo.karlkratz.com/rechnungen/rechnungen.json',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('161','datei','/var/www/demo.karlkratz.com/rechnungen/wetell-downloads.json',NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:51.702905+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('162','code_symbol','Demo\Application\Rechnung\IngestInvoicesUseCase::execute','130','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('163','code_symbol','Demo\Application\Rechnung\DiscoverInvoicesUseCase::execute','127','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('164','code_symbol','Demo\Application\Rechnung\DownloadInvoiceUseCase::execute','128','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('165','code_symbol','Demo\Application\Rechnung\ExtractInvoiceDataUseCase::execute','129','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('166','code_symbol','Demo\Application\Rechnung\PostInvoiceUseCase::execute','133','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('167','code_symbol','Demo\Application\Rechnung\ResolveVendorUseCase::execute','134','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('168','code_symbol','Demo\Domain\Rechnung\SourceInvoice::rechnungsschluessel','145','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('169','code_symbol','Demo\Domain\Rechnung\ExtractedInvoiceData::hasRequiredFields','136','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('170','code_symbol','Demo\Domain\Rechnung\ExtractedInvoiceData::hasPlausibleAmount','136','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('171','code_symbol','Demo\Domain\Rechnung\Amount::isConsistent','135','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('180','code_symbol','Demo\Domain\Rechnung\InvoiceState::findBySourceId','140','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('181','code_symbol','Demo\Domain\Rechnung\InvoiceState::findByRechnungsschluessel','140','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('182','code_symbol','Demo\Domain\Rechnung\InvoiceRecord::withDownload','139','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('183','code_symbol','Demo\Domain\Rechnung\InvoiceRecord::withExtraction','139','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('184','code_symbol','Demo\Domain\Rechnung\InvoiceRecord::withContact','139','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('185','code_symbol','Demo\Domain\Rechnung\InvoiceRecord::withPosting','139','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('186','code_symbol','Demo\Domain\Rechnung\InvoiceRecord::withError','139','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('187','code_symbol','Demo\Domain\Rechnung\InvoiceRecord::withRetry','139','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('188','code_symbol','Demo\Domain\Rechnung\InvoiceRecord::toArray','139','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('192','code_symbol','Demo\Infrastructure\Rechnung\LexofficeApiAdapter::uploadAttachment','155','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('193','code_symbol','Demo\Infrastructure\Rechnung\HeadlessWetellSourceAdapter::login','151','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('194','code_symbol','Demo\Infrastructure\Rechnung\HeadlessWetellSourceAdapter::discoverInvoices','151','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('195','code_symbol','Demo\Infrastructure\Rechnung\HeadlessWetellSourceAdapter::downloadInvoicePdf','151','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('196','code_symbol','Demo\Infrastructure\Rechnung\HeadlessWetellSourceAdapter::call','151','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('202','code_symbol','Demo\Infrastructure\Rechnung\FallbackTextExtractor::extract','149','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('203','code_symbol','Demo\Infrastructure\Rechnung\PdftotextExtractor::extract','156','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('204','code_symbol','Demo\Infrastructure\Rechnung\TesseractInvoiceExtractor::extract','158','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('205','code_symbol','Demo\Infrastructure\Rechnung\JsonInvoiceStateAdapter::load','153','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('206','code_symbol','Demo\Infrastructure\Rechnung\JsonInvoiceStateAdapter::save','153','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('207','code_symbol','Demo\Infrastructure\Rechnung\JsonLineLogger::logStep','154','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('208','code_symbol','Demo\Application\Rechnung\IngestResult::toArray','131','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."artefakt" ("id","typ","bezeichner","parent_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('209','code_symbol','Demo\Domain\Rechnung\PostingResult::toArray','144','2026-07-16 18:04:11.879788+02','2026-07-16 18:06:12.502913+02') ON CONFLICT ("id") DO UPDATE SET "typ"=EXCLUDED."typ","bezeichner"=EXCLUDED."bezeichner","parent_id"=EXCLUDED."parent_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."artefakt"."typ",public."artefakt"."bezeichner",public."artefakt"."parent_id",public."artefakt"."created_at",public."artefakt"."updated_at") IS DISTINCT FROM (EXCLUDED."typ",EXCLUDED."bezeichner",EXCLUDED."parent_id",EXCLUDED."created_at",EXCLUDED."updated_at");
DO $sequence$ BEGIN IF has_sequence_privilege(current_user, pg_get_serial_sequence('public.artefakt','id'), 'UPDATE') THEN PERFORM setval(pg_get_serial_sequence('public.artefakt','id'), GREATEST(COALESCE((SELECT max(id) FROM public."artefakt"),1),1), true); END IF; END $sequence$;

INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('1','startseite','Startseite (GET /)','Bereichs-Übersicht rendern.','{http}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('2','health','Health-Check (GET /health)','DB-Erreichbarkeit prüfen.','{http}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('3','doku-lesen','Dokumentation: Übersicht (GET /doku)','Liste aller Dokumentationen.','{http,doku}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('4','doku-anzeigen','Dokumentation anzeigen (GET /doku/{slug})','Markdown als HTML anzeigen.','{http,doku}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('5','doku-speichern','Dokumentation speichern (POST /doku/{slug})','HTML sanitisieren, als Markdown speichern.','{http,doku}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('6','prozesse-lesen','Prozesse: Übersicht (GET /prozesse)','Liste aller Prozesse.','{http}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('7','prozess-detail','Prozess-Detail mit Fluss (GET /prozesse/{slug})','Schritte laden und als SVG-Fluss rendern.','{http}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('8','abgleich','Katalog-Abgleich (GET /abgleich)','Artefakt-Katalog gegen die Realität prüfen.','{http,governance}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('9','versionierung','Versionierung (Trigger)','Alten Zeilenzustand als JSONB sichern.','{db,automatik}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('10','updated-at','updated_at pflegen (Trigger)','Änderungszeit setzen.','{db,automatik}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('11','auto-historisierung','Auto-Historisierung (Event-Trigger)','Neue Tabellen automatisch versionieren.','{db,automatik}','2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('12','integritaet-ablauf','Integrität: Ablauf azyklisch (I3)','Zyklen und Fremd-Prozess verhindern.','{db,integrität}','2026-07-16 03:48:48.543729+02','2026-07-16 03:51:23.719745+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('13','integritaet-hierarchie','Integrität: Artefakt-Hierarchie (I4)','Eltern-Typ erzwingen.','{db,integrität}','2026-07-16 03:48:48.543729+02','2026-07-16 03:51:23.719745+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('14','integritaet-komposition','Integrität: Komposition azyklisch (I5)','Zyklische Teilprozess-Aufrufe verhindern.','{db,integrität}','2026-07-16 03:48:48.543729+02','2026-07-16 03:51:23.719745+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('15','abdeckung-schritt','Abdeckung: Schritt hat Artefakt (I1)','Deferred Pflichtabdeckung je Schritt.','{db,integrität}','2026-07-16 03:48:48.543729+02','2026-07-16 03:51:23.719745+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('16','abdeckung-artefakt','Abdeckung: Artefakt hat Schritt (I2)','Deferred Pflichtabdeckung je Artefakt.','{db,integrität}','2026-07-16 03:48:48.543729+02','2026-07-16 03:51:23.719745+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('27','rechnung-starten','Rechnungssystem starten','Konfiguration laden, Adapter verdrahten und einen Ingestionslauf starten.','{rechnung,start}','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('28','rechnung-wetell-entdecken','Rechnungen bei WEtell entdecken','Anmelden, die Rechnungsübersicht lesen und SourceInvoice-Objekte erzeugen.','{rechnung,wetell,entdeckung}','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('29','rechnung-download','Rechnung herunterladen und Original speichern','Die PDF anfordern, validieren, lokal als Original ablegen und hashen.','{rechnung,download,pdf}','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('30','rechnung-pdf-extraktion','Rechnungsdaten aus PDF extrahieren','Lieferant, Anschrift, Rechnungsnummer, Datum und Beträge aus der PDF lesen und validieren.','{rechnung,pdf,extraktion}','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('31','rechnung-duplikat-pruefen','Duplikat und Verarbeitungsstatus prüfen','Quell-ID, Rechnungsschlüssel und lokalen Status prüfen, bevor eine Buchung erfolgt.','{rechnung,idempotenz,status}','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('32','rechnung-kontakt-abgleich','Lexoffice-Kontakt abgleichen','Den Lieferantenkontakt suchen und bei Bedarf einmalig anlegen.','{rechnung,lexoffice,kontakt}','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('33','rechnung-lexoffice-buchen','Rechnungsbeleg in Lexoffice buchen','Den Beleg mit echter Rechnungsnummer anlegen und die geprüfte PDF anhängen.','{rechnung,lexoffice,buchung}','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('34','rechnung-status-protokoll','Verarbeitungsstatus protokollieren','Fachlichen Rechnungsstatus, IDs und Einzelschritte dauerhaft schreiben.','{rechnung,status,protokoll}','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('35','rechnung-fehler-wiederholung','Fehler und Wiederholung behandeln','Fehler klassifizieren, Wiederholungen ermöglichen und Doppelbuchungen verhindern.','{rechnung,fehler,wiederholung}','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozesse" ("id","slug","titel","beschreibung","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('36','rechnung-nachweise','Rechnungsprozess nachweisen','Originaldatei, lokalen Datensatz und Lexoffice-Ergebnis als zusammengehörige Nachweise sichern.','{rechnung,nachweis,audit}','2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","beschreibung"=EXCLUDED."beschreibung","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozesse"."slug",public."prozesse"."titel",public."prozesse"."beschreibung",public."prozesse"."tags",public."prozesse"."created_at",public."prozesse"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."beschreibung",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
DO $sequence$ BEGIN IF has_sequence_privilege(current_user, pg_get_serial_sequence('public.prozesse','id'), 'UPDATE') THEN PERFORM setval(pg_get_serial_sequence('public.prozesse','id'), GREATEST(COALESCE((SELECT max(id) FROM public."prozesse"),1),1), true); END IF; END $sequence$;

INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('1','1','GET / empfangen','','1','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('2','1','Startseite-Action rendern','','2','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('3','2','GET /health empfangen','','1','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('4','2','Datenbank prüfen','','2','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('5','3','GET /doku empfangen','','1','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('6','3','Dokumentationen laden','','2','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('7','4','GET /doku/{slug} empfangen','','1','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('8','4','Laden und Markdown rendern','','2','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('9','5','POST /doku/{slug} empfangen','','1','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('10','5','HTML zu Markdown wandeln','','2','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('11','5','Persistieren','','2','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('12','6','GET /prozesse empfangen','','1','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('13','6','Prozesse laden','','2','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('14','7','GET /prozesse/{slug} empfangen','','1','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('15','7','Aggregat laden','','2','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('16','7','Fluss berechnen und rendern','','2','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('17','8','GET /abgleich empfangen','','1','1',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('18','8','Katalog lesen','','2','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('19','8','Realität prüfen','','2','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('20','9','AFTER UPDATE/DELETE feuert','','3','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('21','9','OLD in history schreiben','','3','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('22','10','BEFORE UPDATE setzt updated_at','','3','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('23','11','CREATE TABLE provisioniert history_','','3','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('24','12','Kante prüfen','','3','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('25','13','Hierarchie prüfen','','3','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('26','14','Komposition prüfen','','3','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('27','15','Schritt-Abdeckung prüfen','','3','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('28','16','Artefakt-Abdeckung prüfen','','3','2',NULL,NULL,'2026-07-16 03:48:48.543729+02','2026-07-16 03:48:48.543729+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('68','27','Ingestionslauf starten','Den zentralen Rechnungs-Use-Case ausführen und Ergebnisobjekt vorbereiten.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('69','27','Adapter und Use Cases verdrahten','Quelle, Speicher, Extraktion, Status und Lexoffice-Adapter verbinden.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('70','27','Konfiguration und Lauf-ID laden','WEtell-/Lexoffice-Konfiguration und Laufkontext laden.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('71','28','Entdeckungsfehler protokollieren','Fehler, Timeout oder unvollständige Quelle mit Lauf-ID protokollieren.','2','10',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('72','28','Playwright-Sitzung herstellen','Browser-Kontext öffnen und WEtell-Anmeldeseite laden.','2','8',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('73','28','Headless-Aufruf absichern','Aktion, Payload, Timeout und Serviceantwort prüfen.','2','8',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('74','28','Rechnungsübersicht öffnen','Rechnungsseite laden und HTML/DOM auswerten.','2','7',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('75','28','Anmelden und Zustand prüfen','Formular absenden und angemeldeten Zustand fachlich erkennen.','2','7',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('76','28','Entdeckungsergebnis bewerten','Leeren Bestand, valide Quellen und technische Fehler unterscheiden.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('77','28','SourceInvoice-Objekte erzeugen','Quell-ID, URL und sichtbare Rechnungs-Hinweise zu Objekten verbinden.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('78','28','Zugangsmethode auswählen','Headless-Adapter und konfigurierten Fallback auswählen.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('79','28','Lauf und WEtell-Konfiguration prüfen','Lauf-ID und erforderliche WEtell-Konfiguration für die Entdeckung prüfen.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('80','29','Original speichern und Hash bilden','Zielpfad bestimmen, Original schreiben und SHA-256 bilden.','2','10',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('81','29','PDF über WEtell anfordern','Download-URL über den aktiven WEtell-Adapter abrufen.','2','7',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('82','29','PDF-Datei validieren','Dateiinhalt, PDF-Signatur und Lesbarkeit vor Ablage prüfen.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('83','29','Quellrechnung auswählen','Eine valide SourceInvoice für den Download an den Download-Use-Case übergeben.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('84','30','PDF-Text extrahieren','Textlayer oder bei Bedarf OCR aus der Original-PDF lesen.','2','10',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('85','30','Pflichtfelder und Beträge validieren','Pflichtangaben und Betragskonsistenz prüfen.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('86','30','Rechnungsdaten parsen','Lieferant, Adresse, Nummer, Datum und Beträge in Fachobjekt überführen.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('87','30','Extractor bestimmen','Primären Textextraktor und OCR-Fallback bereitstellen.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('88','31','Lokalen Status laden','Gespeicherte InvoiceState-Daten aus rechnungen.json lesen.','2','10',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('89','31','Verarbeitungsentscheidung festhalten','Verarbeitung, Überspringen oder bereits gebuchten Zustand entscheiden.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('90','31','Quell-ID und Rechnungsschlüssel vergleichen','Vorhandene Quelle und fachlichen Rechnungsschlüssel suchen.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('91','32','Kontakt wiederverwenden oder anlegen','Bestehende Kontakt-ID verwenden oder genau einen neuen Kontakt anlegen.','2','9',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('92','32','Lexoffice-Kontakt suchen','Bestehende Kontakte nach Lieferantennamen abfragen.','2','9',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('93','32','Lieferantendaten übernehmen','Extrahierten Lieferanten und Adresssignatur für Lexoffice vorbereiten.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('94','33','Original-PDF anhängen','Geprüfte Originaldatei als Beleganhang hochladen.','2','9',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('95','33','Lexoffice-Beleg erstellen','Beleg mit echter Rechnungsnummer und Rechnungsdatum anlegen.','2','9',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('96','33','PostingResult übernehmen','Lexoffice-Beleg-ID und Uploadstatus in das Fachobjekt übernehmen.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('97','33','Buchungsdaten zusammenstellen','Extrahierte Daten, Kontakt-ID und Originalpfad für den Beleg bündeln.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('98','34','Schritt protokollieren','Lauf, Schritt, Status und Kontext als Logeintrag schreiben.','2','10',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('99','34','Statusdatei speichern','InvoiceState atomar in rechnungen.json persistieren.','2','10',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('100','34','InvoiceRecord fortschreiben','Download, Extraktion, Kontakt und Buchung als Zustandsübergänge festhalten.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('101','35','Fehler- oder Retry-Zustand schreiben','Fehlerdetails und Wiederholungsanzahl im InvoiceRecord speichern.','2','10',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('102','35','Folgelauf sicher entscheiden','Beim nächsten Lauf Status, Schlüssel und Quelle erneut idempotent bewerten.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('103','35','Fehler klassifizieren','Technischen oder fachlichen Fehler dem betroffenen Prozessschritt zuordnen.','2','1',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('104','36','Verarbeitungsnachweis ausgeben','Lokalen Rechnungsdatensatz mit Status und IDs bereitstellen.','2','10',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('105','36','Originalnachweis prüfen','Lokale Original-PDF und deren Hash als Belegnachweis feststellen.','2','10',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."prozess_schritt" ("id","prozess_id","name","beschreibung","akteur_id","system_id","rolle_id","ruft_prozess_id","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('106','36','Lexoffice-Ergebnis zuordnen','Kontakt-ID, Beleg-ID und PDF-Anhang als externes Ergebnis zuordnen.','2','9',NULL,NULL,'2026-07-16 18:04:11.879788+02','2026-07-16 18:04:11.879788+02') ON CONFLICT ("id") DO UPDATE SET "prozess_id"=EXCLUDED."prozess_id","name"=EXCLUDED."name","beschreibung"=EXCLUDED."beschreibung","akteur_id"=EXCLUDED."akteur_id","system_id"=EXCLUDED."system_id","rolle_id"=EXCLUDED."rolle_id","ruft_prozess_id"=EXCLUDED."ruft_prozess_id","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."prozess_schritt"."prozess_id",public."prozess_schritt"."name",public."prozess_schritt"."beschreibung",public."prozess_schritt"."akteur_id",public."prozess_schritt"."system_id",public."prozess_schritt"."rolle_id",public."prozess_schritt"."ruft_prozess_id",public."prozess_schritt"."created_at",public."prozess_schritt"."updated_at") IS DISTINCT FROM (EXCLUDED."prozess_id",EXCLUDED."name",EXCLUDED."beschreibung",EXCLUDED."akteur_id",EXCLUDED."system_id",EXCLUDED."rolle_id",EXCLUDED."ruft_prozess_id",EXCLUDED."created_at",EXCLUDED."updated_at");
DO $sequence$ BEGIN IF has_sequence_privilege(current_user, pg_get_serial_sequence('public.prozess_schritt','id'), 'UPDATE') THEN PERFORM setval(pg_get_serial_sequence('public.prozess_schritt','id'), GREATEST(COALESCE((SELECT max(id) FROM public."prozess_schritt"),1),1), true); END IF; END $sequence$;

INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('2','1',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('4','3',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('6','5',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('8','7',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('10','9',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('11','10',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('13','12',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('15','14',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('16','15',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('18','17',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('19','18',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('21','20',NULL) ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('68','69','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('69','70','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('71','76','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('72','73','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('73','78','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('74','75','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('75','72','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('76','77','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('77','74','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('78','79','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('80','82','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('81','83','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('82','81','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('84','87','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('85','86','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('86','84','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('89','90','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('90','88','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('91','92','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('92','93','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('94','95','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('95','97','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('96','94','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('98','99','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('99','100','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('101','103','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('102','101','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('104','105','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");
INSERT INTO public."schritt_vorgaenger" ("schritt_id","vorgaenger_id","ausgang") VALUES('106','104','weiter') ON CONFLICT ("schritt_id","vorgaenger_id") DO UPDATE SET "ausgang"=EXCLUDED."ausgang" WHERE (public."schritt_vorgaenger"."ausgang") IS DISTINCT FROM (EXCLUDED."ausgang");

INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('1','7','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('1','23','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('1','24','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('2','25','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('3','8','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('3','26','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('4','1','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('4','27','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('5','9','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('5','28','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('6','2','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('6','29','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('7','10','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('7','30','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('8','2','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('8','29','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('8','31','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('9','11','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('9','32','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('10','33','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('11','2','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('11','29','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('12','12','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('12','34','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('13','3','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('13','35','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('14','13','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('14','36','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('15','4','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('15','35','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('16','37','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('16','38','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('17','14','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('17','39','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('18','5','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('18','40','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('19','41','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('20','15','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('21','6','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('22','16','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('23','17','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('24','4','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('24','18','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('25','5','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('25','19','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('26','20','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('27','21','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('28','22','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('68','131','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('68','138','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('68','154','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('68','207','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('69','127','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('69','128','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('69','129','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('69','133','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('69','134','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('69','163','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('69','164','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('69','165','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('69','166','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('69','167','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('70','126','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('70','126','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('70','130','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('70','131','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('70','162','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('70','208','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('71','154','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('71','154','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('71','207','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('72','159','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('73','159','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('74','194','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('75','193','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('76','163','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('77','145','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('77','168','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('78','193','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('78','194','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('78','196','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('79','127','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('79','145','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('79','147','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('79','147','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('79','150','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('79','151','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('79','152','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('79','159','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('79','163','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('80','137','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('80','148','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('80','148','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('80','161','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('80','161','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('81','147','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('81','147','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('81','195','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('82','164','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('83','128','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('83','145','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('83','164','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('84','156','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('84','203','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('84','204','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('85','169','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('85','170','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('85','171','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('86','129','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('86','135','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('86','136','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('86','136','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('86','157','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('86','165','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('87','146','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('87','149','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('87','156','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('87','158','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('87','202','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('88','140','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('88','140','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('88','141','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('88','153','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('88','205','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('89','139','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('89','139','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('89','142','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('89','182','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('89','188','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('90','130','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('90','145','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('90','168','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('90','180','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('90','181','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('91','155','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('91','184','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('92','143','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('92','155','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('93','134','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('93','136','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('93','136','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('93','167','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('94','192','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('95','155','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('96','144','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('96','144','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('96','185','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('96','209','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('97','133','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('97','135','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('97','136','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('97','136','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('97','143','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('97','166','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('98','138','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('98','154','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('98','154','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('98','207','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('99','140','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('99','141','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('99','153','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('99','160','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('99','160','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('99','206','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('100','139','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('100','182','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('100','183','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('100','184','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('100','185','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('101','139','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('101','140','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('101','187','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('102','130','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('102','131','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('102','131','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('102','162','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('102','208','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('103','132','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('103','132','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('103','142','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('103','186','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('104','139','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('104','160','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('104','160','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('104','188','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('105','148','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('105','148','eingabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('105','161','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('106','144','ausgabe') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('106','144','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('106','155','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;
INSERT INTO public."schritt_artefakt" ("schritt_id","artefakt_id","beziehung") VALUES('106','209','beruehrt') ON CONFLICT ("schritt_id","artefakt_id","beziehung") DO NOTHING;

INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('1','system-ueberblick','System-Überblick','Minimales Demo-System der KI-Gemeinschaft, hexagonal geschnitten (Domain, Application, Infrastructure) auf PostgreSQL.

- **HTTP-Routen:** Startseite, Health, Doku (Übersicht, Anzeigen, Speichern), Prozesse (Übersicht, Detail), Abgleich.
- **Datenbank-Automatik:** Trigger für updated_at, Versionierung und Auto-Historisierung neuer Tabellen.
- **Integrität:** fünf Invarianten I1 bis I5 als Deferred Constraint Trigger sichern das Prozess-Modell.
- **Versionierung:** jede Tabelle außer Namen mit protokoll oder log wird historisiert; frühere Stände sind je Doku einsehbar.','{system}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:52.083709+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('2','ueber-startseite','Doku: Startseite (GET /)','Rendert die Startseite mit der Übersicht der Bereiche.

- Route: GET /
- Ablauf: Anfrage empfangen, Startseite-Action rendert die Seite.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:52.223743+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('3','ueber-health','Doku: Health-Check (GET /health)','Prüft, ob die Anwendung ihre Datenbank erreicht.

- Route: GET /health
- Ablauf: Anfrage empfangen, Datenbank prüfen, Status zurückgeben.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:52.359737+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('4','ueber-doku-lesen','Doku: Dokumentation: Übersicht (GET /doku)','Zeigt die Übersicht aller Dokumentationen.

- Route: GET /doku
- Ablauf: Anfrage empfangen, Dokumentationen laden, als sortier- und filterbare Tabelle anzeigen.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:52.495742+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('5','ueber-doku-anzeigen','Doku: Dokumentation anzeigen (GET /doku/{slug})','Zeigt eine einzelne Dokumentation als HTML.

- Route: GET /doku/{slug}
- Ablauf: Anfrage empfangen, Eintrag laden, Markdown zu HTML rendern.
- Darunter: Tabelle früherer Versionen; /doku/{slug}/{version} zeigt einen read-only Stand.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:52.631876+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('6','ueber-doku-speichern','Doku: Dokumentation speichern (POST /doku/{slug})','Speichert bearbeiteten Inhalt sicher zurück.

- Route: POST /doku/{slug}
- Ablauf: Anfrage empfangen, HTML per DOM-Whitelist zu Markdown wandeln (Sanitisierung), persistieren, danach Redirect (PRG).','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:52.767849+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('7','ueber-prozesse-lesen','Doku: Prozesse: Übersicht (GET /prozesse)','Zeigt die Übersicht aller Prozesse.

- Route: GET /prozesse
- Ablauf: Anfrage empfangen, Prozesse laden, Übersicht anzeigen.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:52.903693+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('8','ueber-prozess-detail','Doku: Prozess-Detail mit Fluss (GET /prozesse/{slug})','Zeigt einen Prozess samt Ablauf-Diagramm.

- Route: GET /prozesse/{slug}
- Ablauf: Anfrage empfangen, Aggregat (Schritte, Kanten, Artefakte) laden, Fluss berechnen und als SVG rendern.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:53.039738+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('9','ueber-abgleich','Doku: Katalog-Abgleich (GET /abgleich)','Read-only-Reconciler: prüft den Artefakt-Katalog gegen die Realität.

- Route: GET /abgleich
- Ablauf: Anfrage empfangen, Katalog lesen, Realität prüfen (Tabellen, Spalten, Dateien, Code-Symbole, DB-Funktionen, Routen), Abweichungen anzeigen.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:53.175724+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('10','ueber-versionierung','Doku: Versionierung (Trigger)','Sichert den vorherigen Zeilenzustand vor jeder Änderung.

- Auslöser: AFTER UPDATE und DELETE
- Wirkung: schreibt den alten Zustand (OLD) als JSONB nach history_<tabelle> (Pre-Image).','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:53.447723+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('11','ueber-updated-at','Doku: updated_at pflegen (Trigger)','Hält den Änderungszeitstempel einer Zeile aktuell.

- Auslöser: BEFORE UPDATE
- Wirkung: setzt updated_at auf die aktuelle Zeit.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:53.311744+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('12','ueber-auto-historisierung','Doku: Auto-Historisierung (Event-Trigger)','Versioniert neu angelegte Tabellen automatisch.

- Auslöser: Event-Trigger auf CREATE TABLE (ddl_command_end)
- Wirkung: legt die zugehörige history_-Tabelle samt Trigger an.
- Ausnahme: Tabellennamen mit protokoll oder log werden nicht versioniert.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:53.583705+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('13','ueber-integritaet-ablauf','Doku: Integrität: Ablauf azyklisch (I3)','Invariante I3: der Schritt-Ablauf bleibt azyklisch.

- Mechanik: Trigger prüft jede Kante
- Verbietet: Zyklen und Verweise auf fremde Prozesse.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:53.991716+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('14','ueber-integritaet-hierarchie','Doku: Integrität: Artefakt-Hierarchie (I4)','Invariante I4: die Artefakt-Hierarchie bleibt typkonform.

- Mechanik: Trigger prüft den Eltern-Bezug
- Erzwingt: den korrekten Eltern-Typ.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:54.127731+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('15','ueber-integritaet-komposition','Doku: Integrität: Komposition azyklisch (I5)','Invariante I5: Teilprozess-Aufrufe bleiben azyklisch.

- Mechanik: Trigger prüft ruft_prozess_id
- Verbietet: zyklische Kompositionen.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:54.263692+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('16','ueber-abdeckung-schritt','Doku: Abdeckung: Schritt hat Artefakt (I1)','Invariante I1: jeder Prozess-Schritt muss mindestens ein Artefakt berühren.

- Mechanik: Deferred Constraint Trigger
- Prüfung: am Transaktionsende, je Schritt.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:53.719747+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('17','ueber-abdeckung-artefakt','Doku: Abdeckung: Artefakt hat Schritt (I2)','Invariante I2: jedes Artefakt muss von mindestens einem Schritt verwendet werden.

- Mechanik: Deferred Constraint Trigger
- Prüfung: am Transaktionsende, je Artefakt.','{prozess-doku}','2026-07-16 03:48:48.543729+02','2026-07-16 11:01:53.855713+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('18','rechnung-prozess','Rechnungs-Download und Buchhaltung','# Rechnungs-Download und Buchhaltung




## Orientierung für interessierte Laien und Karl




Der Prozess holt Rechnungen aus dem WEtell-Kundenkonto und übergibt sie an Lexoffice. WEtell ist die Quelle, Lexoffice das Buchhaltungsziel. Die PDF bleibt zusätzlich lokal als Originalbeleg erhalten.




Die Code-Links zeigen auf die jeweilige Datei in der `/code`-Ansicht. Die genannten Klassen und Methoden sind die darin enthaltenen Symbole. Die Architektur trennt fachliche Regeln von technischen Adaptern: Ein Use Case beschreibt, was fachlich geschieht; ein Port beschreibt eine benötigte Fähigkeit; ein Adapter verbindet diese Fähigkeit mit WEtell, Lexoffice, PDF-Werkzeugen oder Dateien.




## 1. Prozess starten und orchestrieren




`run-rechnung.php` lädt die Konfiguration für WEtell und Lexoffice, baut die Adapter zusammen und startet den zentralen Ingestions-Use-Case. Ein Use Case ist ein klar abgegrenzter Anwendungsvorgang. Das Ergebnis wird als JSON ausgegeben.




### Relevante Symbole




- `run-rechnung.php` als Programmeinstieg: https://demo.karlkratz.com/code/105
- `IngestInvoicesUseCase::__construct`: https://demo.karlkratz.com/code/109
- `IngestInvoicesUseCase::execute`: https://demo.karlkratz.com/code/109
- `IngestResult::__construct`: https://demo.karlkratz.com/code/110
- `IngestResult::toArray`: https://demo.karlkratz.com/code/110
- `InvoiceProcessException::__construct`: https://demo.karlkratz.com/code/111




## 2. Bei WEtell anmelden und Rechnungen entdecken




Ziel dieses Teilprozesses ist eine belastbare Liste der Rechnungen, die WEtell für das angemeldete Kundenkonto bereitstellt. In diesem Abschnitt wird noch keine PDF gebucht und kein Lexoffice-Kontakt verändert. Es werden nur Zugang, Sitzung und Rechnungsmetadaten vorbereitet.




### 2.1 Lauf und Konfiguration vorbereiten




1. `run-rechnung.php` erzeugt beziehungsweise übernimmt eine Lauf-ID. Diese ID verbindet Logeinträge und alle späteren Zustandsänderungen eines Durchlaufs.
2. Die WEtell-Konfiguration wird aus der vorgesehenen Credential-Konfiguration geladen. Benutzername und Passwort werden nur zur Laufzeit verwendet.
3. Die Konfiguration wird auf erforderliche Werte geprüft. Fehlende WEtell-Zugangsdaten führen zu einem kontrollierten Fehler, bevor ein Loginversuch startet.
4. Die Zieladressen des Headless-Services, Zeitlimits und optionalen Fallbacks werden aus der Konfiguration übernommen.
5. Der PHP-Prozess erstellt den fachlichen `WetellSourcePort`. Dadurch kennt der Use Case nur die Fähigkeiten `login`, `discoverInvoices` und später `downloadInvoicePdf`, nicht die konkrete Browsertechnik.




### 2.2 Zugangsmethode auswählen




Der bevorzugte Zugang ist der bereitgestellte Node.js-/Playwright-Service. Die PHP-Anwendung steuert den Browser nicht direkt, sondern spricht den Service über den `HeadlessWetellSourceAdapter` an. Dadurch bleibt die Browserinstanz von der Buchungslogik getrennt.




Wenn der Headless-Service nicht erreichbar ist oder ausdrücklich anders konfiguriert wurde, kann der `FallbackWetellSourceAdapter` auf den alternativen `HttpWetellSourceAdapter` zurückgreifen. Der Fallback ist eine technische Ausweichroute, keine zweite fachliche Verarbeitung. Es wird nur eine Quelle erfolgreich verwendet.




### 2.3 Headless-Aufruf absichern




1. Der Adapter erstellt eine interne Aktion für `login` oder `discover`.
2. Er übergibt nur die notwendigen Lauf- und Zugangsdaten an den lokalen Headless-Service.
3. Der Service prüft die Anfrage und, sofern konfiguriert, ein gemeinsames Geheimnis zwischen PHP und Node.js.
4. Der Service antwortet als JSON. HTTP-Fehler, Timeout oder ungültiges JSON werden nicht als erfolgreiche Anmeldung behandelt.
5. Der Adapter wandelt die technische Antwort wieder in das fachliche Ergebnis des `WetellSourcePort` um.




### 2.4 Playwright-Sitzung herstellen




1. Der Headless-Service öffnet einen isolierten Browser-Kontext.
2. Der Kontext erhält die konfigurierten Laufzeitparameter, etwa User-Agent und Timeout.
3. Eine neue Seite wird geöffnet und zur WEtell-Anmeldeseite navigiert.
4. Die Seite wird auf den erwarteten DOM-Zustand geprüft. Ein unerwarteter Redirect oder eine nicht erreichbare Seite beendet den Schritt mit Fehler.
5. Loginformular, Formularaktion und relevante Eingabefelder werden aus der Seite bestimmt, statt feste Sitzungswerte vorauszusetzen.




Die Sitzung bleibt innerhalb des aktuellen Dienstaufrufs gekapselt. Nach dem Ergebnis werden Seite, Kontext und Browserressourcen geschlossen, damit keine alte Sitzung unkontrolliert in den nächsten Lauf hineinwirkt.




### 2.5 Anmeldedaten übermitteln




1. Benutzername und Passwort werden in das erkannte Formular eingesetzt.
2. Das Formular wird an die erkannte WEtell-Aktion abgesendet.
3. Der Service wartet auf den dokumentierten Ladezustand und berücksichtigt sowohl `domcontentloaded` als auch den Netzwerkzustand mit einem Timeout.
4. Danach wird nicht nur der HTTP-Status bewertet. Die Seite wird zusätzlich inhaltlich darauf geprüft, ob sie als angemeldete Kontoseite erkennbar ist.
5. Eine weiterhin sichtbare Loginseite, ein Fehlhinweis oder ein abweichender Zielzustand gilt als fehlgeschlagene Anmeldung.




Passwörter werden nicht in `rechnungen.json`, im Dokumentationsdatensatz oder in den fachlichen Rechnungsobjekten gespeichert.




### 2.6 Rechnungsübersicht öffnen




1. Nach erfolgreicher Anmeldung navigiert der Service zur konfigurierten WEtell-Rechnungsübersicht.
2. Die Seite wird geladen und als HTML-Dokument ausgelesen.
3. Der Service sucht Rechnungszeilen, PDF-Links und die sichtbaren Begleitdaten im DOM.
4. Für jede erkannte Zeile werden die verfügbaren Angaben wie Rechnungs-URL, Quell-ID, technische Dateibezeichnung sowie sichtbare Datums- oder Nummernhinweise zusammengeführt.
5. Absolute und relative Links werden zu normalisierten URLs aufgelöst. Fehlende oder offensichtlich externe/ungültige Downloadziele werden nicht als gültige Rechnungsquelle ausgegeben.




### 2.7 Rechnungsobjekte erzeugen




Für jede erkannte Rechnung entsteht ein `SourceInvoice`. Dieses Objekt ist noch keine Buchung. Es beschreibt ausschließlich, was die Quelle WEtell geliefert hat:




- stabile Quell-ID zur Wiedererkennung,
- Download-URL,
- mögliche technische Rechnungsnummer,
- mögliches Rechnungsdatum,
- weitere sichtbare Hinweise aus der Rechnungsübersicht.




Die Hinweise aus der Übersicht sind vorläufig. Die verbindliche Rechnungsnummer und der verbindliche Lieferant werden erst später aus der tatsächlich heruntergeladenen PDF extrahiert.




### 2.8 Entdeckungsergebnis bewerten




1. Die Liste wird an `DiscoverInvoicesUseCase::execute` zurückgegeben.
2. Ein leerer, aber technisch erfolgreicher Rechnungsbestand bedeutet: WEtell ist erreichbar, es wurde aber keine Rechnung gefunden.
3. Ein technischer Fehler bedeutet dagegen: Login, Navigation oder Extraktion konnte nicht zuverlässig abgeschlossen werden.
4. Nur valide `SourceInvoice`-Objekte gelangen in die nächsten Schritte.
5. Für jedes Objekt wird anschließend der Rechnungsschlüssel gebildet und gegen den lokalen Zustand geprüft. Die eigentliche Duplikatentscheidung erfolgt im zentralen Ingestions-Use-Case.
6. Erst nach diesem Teilprozess darf `DownloadInvoiceUseCase` den PDF-Inhalt anfordern.




### 2.9 Fehlerbilder und Zustände




- `CREDENTIALS_FEHLEN`: erforderliche Zugangsdaten fehlen.
- `LOGIN_FEHLGESCHLAGEN`: Formular wurde abgesendet, aber kein angemeldeter Zustand erkannt.
- `HEADLESS_NICHT_ERREICHBAR`: der lokale Node.js-/Playwright-Service antwortet nicht rechtzeitig.
- `RECHNUNGSSEITE_FEHLER`: die erwartete Übersicht ist nicht lesbar oder nicht erreichbar.
- `KEINE_RECHNUNGEN`: technisch erfolgreicher Zugriff ohne gefundene Rechnungszeile.
- `QUELLE_UNVOLLSTAENDIG`: eine Zeile enthält keine verwertbare Quell-ID oder keinen gültigen Downloadverweis.




Bei Fehlern wird kein Download als erfolgreich markiert und es wird keine Lexoffice-Aktion ausgelöst. Die Fehlerzuordnung erfolgt über Lauf-ID, Schrittname und Logger.




### Relevante Symbole




- `run-rechnung.php` als Programmeinstieg und Konfigurationsverdrahtung: https://demo.karlkratz.com/code/105
- `DiscoverInvoicesUseCase::__construct`: https://demo.karlkratz.com/code/106
- `DiscoverInvoicesUseCase::execute`: https://demo.karlkratz.com/code/106
- `IngestInvoicesUseCase::__construct`: https://demo.karlkratz.com/code/109
- `IngestInvoicesUseCase::execute`: https://demo.karlkratz.com/code/109
- `WetellSourcePort::login`: https://demo.karlkratz.com/code/128
- `WetellSourcePort::discoverInvoices`: https://demo.karlkratz.com/code/128
- `HeadlessWetellSourceAdapter::__construct`: https://demo.karlkratz.com/code/132
- `HeadlessWetellSourceAdapter::login`: https://demo.karlkratz.com/code/132
- `HeadlessWetellSourceAdapter::discoverInvoices`: https://demo.karlkratz.com/code/132
- `HeadlessWetellSourceAdapter::call`: https://demo.karlkratz.com/code/132
- `FallbackWetellSourceAdapter::__construct`: https://demo.karlkratz.com/code/131
- `FallbackWetellSourceAdapter::login`: https://demo.karlkratz.com/code/131
- `FallbackWetellSourceAdapter::discoverInvoices`: https://demo.karlkratz.com/code/131
- `HttpWetellSourceAdapter::__construct`: https://demo.karlkratz.com/code/133
- `HttpWetellSourceAdapter::login`: https://demo.karlkratz.com/code/133
- `HttpWetellSourceAdapter::discoverInvoices`: https://demo.karlkratz.com/code/133
- `HttpWetellSourceAdapter::request`: https://demo.karlkratz.com/code/133
- `HttpWetellSourceAdapter::extractLoginPayload`: https://demo.karlkratz.com/code/133
- `HttpWetellSourceAdapter::isLoginPage`: https://demo.karlkratz.com/code/133
- `HttpWetellSourceAdapter::extractFromHtml`: https://demo.karlkratz.com/code/133
- `HttpWetellSourceAdapter::fallbackRegexExtract`: https://demo.karlkratz.com/code/133
- `HttpWetellSourceAdapter::normalizeUrl`: https://demo.karlkratz.com/code/133
- `SourceInvoice::__construct`: https://demo.karlkratz.com/code/126
- `SourceInvoice::rechnungsschluessel`: https://demo.karlkratz.com/code/126
- `InvoiceLoggerPort::logStep`: https://demo.karlkratz.com/code/119
- `JsonLineLogger::logStep`: https://demo.karlkratz.com/code/135
- `InvoiceProcessException`: https://demo.karlkratz.com/code/111
- `InvoiceErrorCode`: https://demo.karlkratz.com/code/117
- `wetell-headless/server.js::withBrowser`: https://demo.karlkratz.com/code/142
- `wetell-headless/server.js::loginAndGetPage`: https://demo.karlkratz.com/code/142
- `wetell-headless/server.js::doLoginOnly`: https://demo.karlkratz.com/code/142
- `wetell-headless/server.js::doDiscover`: https://demo.karlkratz.com/code/142
- `wetell-headless/server.js::parseJsonBody`: https://demo.karlkratz.com/code/142
- `wetell-headless/server.js::sendJson`: https://demo.karlkratz.com/code/142




## 3. Rechnung herunterladen und Original speichern




Die gefundene Download-URL wird nicht ungeprüft als Beleg akzeptiert. Der Dateiinhalt wird geladen und als PDF validiert. Danach wird die Originaldatei datums- und lieferantenbezogen unter `rechnungen/originale/` gespeichert. Der SHA-256-Wert ist ein digitaler Fingerabdruck der gespeicherten Datei.




### Relevante Symbole




- `DownloadInvoiceUseCase::__construct`: https://demo.karlkratz.com/code/107
- `DownloadInvoiceUseCase::execute`: https://demo.karlkratz.com/code/107
- `DownloadInvoiceUseCase::isPdf`: https://demo.karlkratz.com/code/107
- `WetellSourcePort::downloadInvoicePdf`: https://demo.karlkratz.com/code/128
- `HeadlessWetellSourceAdapter::downloadInvoicePdf`: https://demo.karlkratz.com/code/132
- `FallbackWetellSourceAdapter::downloadInvoicePdf`: https://demo.karlkratz.com/code/131
- `HttpWetellSourceAdapter::downloadInvoicePdf`: https://demo.karlkratz.com/code/133
- `InvoiceFileStoragePort::buildTargetPath`: https://demo.karlkratz.com/code/118
- `InvoiceFileStoragePort::persistDownloadedPdf`: https://demo.karlkratz.com/code/118
- `InvoiceFileStoragePort::sha256`: https://demo.karlkratz.com/code/118
- `DateBasedInvoiceStorage::__construct`: https://demo.karlkratz.com/code/129
- `DateBasedInvoiceStorage::buildTargetPath`: https://demo.karlkratz.com/code/129
- `DateBasedInvoiceStorage::persistDownloadedPdf`: https://demo.karlkratz.com/code/129
- `DateBasedInvoiceStorage::sha256`: https://demo.karlkratz.com/code/129
- `DateBasedInvoiceStorage::sanitize`: https://demo.karlkratz.com/code/129
- `DateBasedInvoiceStorage::normalizeDate`: https://demo.karlkratz.com/code/129
- `wetell-headless/server.js::doDownload`: https://demo.karlkratz.com/code/142
- `wetell-headless/server.js::cryptoHash`: https://demo.karlkratz.com/code/142
- `rechnungen/wetell-downloads.json`: https://demo.karlkratz.com/code/144




## 4. PDF-Inhalt extrahieren und fachlich prüfen




Nach dem Download wird die PDF gelesen. Zuerst wird der normale Textextraktor verwendet. Ist der Textlayer unbrauchbar oder fehlt er, greift der Fallback über OCR. OCR bedeutet Texterkennung aus dem Bild einer Seite.




Aus dem PDF werden Lieferant, Anschrift, echte Rechnungsnummer, Rechnungsdatum sowie Beträge gelesen. Die fachlichen Prüfungen stellen sicher, dass Pflichtfelder vorhanden sind und die Beträge plausibel zusammenpassen. Die Rechnungsnummer stammt aus dem PDF, nicht aus einer technischen Datei-ID.




### Relevante Symbole




- `ExtractInvoiceDataUseCase::__construct`: https://demo.karlkratz.com/code/108
- `ExtractInvoiceDataUseCase::execute`: https://demo.karlkratz.com/code/108
- `TextExtractionPort::extract`: https://demo.karlkratz.com/code/127
- `FallbackTextExtractor::__construct`: https://demo.karlkratz.com/code/130
- `FallbackTextExtractor::extract`: https://demo.karlkratz.com/code/130
- `PdftotextExtractor::__construct`: https://demo.karlkratz.com/code/137
- `PdftotextExtractor::extract`: https://demo.karlkratz.com/code/137
- `PdftotextExtractor::parseText`: https://demo.karlkratz.com/code/137
- `PdftotextExtractor::extractPattern`: https://demo.karlkratz.com/code/137
- `PdftotextExtractor::extractAddress`: https://demo.karlkratz.com/code/137
- `TesseractInvoiceExtractor::__construct`: https://demo.karlkratz.com/code/139
- `TesseractInvoiceExtractor::extract`: https://demo.karlkratz.com/code/139
- `TesseractInvoiceExtractor::parseText`: https://demo.karlkratz.com/code/139
- `TesseractInvoiceExtractor::extractPattern`: https://demo.karlkratz.com/code/139
- `TesseractInvoiceExtractor::extractAddressLine`: https://demo.karlkratz.com/code/139
- `ExtractedInvoiceData::__construct`: https://demo.karlkratz.com/code/116
- `ExtractedInvoiceData::hasRequiredFields`: https://demo.karlkratz.com/code/116
- `ExtractedInvoiceData::hasPlausibleAmount`: https://demo.karlkratz.com/code/116
- `ExtractedInvoiceData::toArray`: https://demo.karlkratz.com/code/116
- `Amount::__construct`: https://demo.karlkratz.com/code/114
- `Amount::isConsistent`: https://demo.karlkratz.com/code/114
- `Amount::toArray`: https://demo.karlkratz.com/code/114
- `ClockPort::now`: https://demo.karlkratz.com/code/115
- `SystemClock::__construct`: https://demo.karlkratz.com/code/138
- `SystemClock::now`: https://demo.karlkratz.com/code/138




## 5. Duplikate und idempotente Wiederholung behandeln




Vor der Buchung wird geprüft, ob dieselbe Quellrechnung oder derselbe fachliche Rechnungsschlüssel schon bekannt ist. Ein zweiter Lauf mit derselben Rechnung soll nicht zu einem zweiten Lexoffice-Beleg führen. Das nennt man idempotentes Verhalten: Wiederholen ist sicher, weil das Ergebnis nicht doppelt angelegt wird.




### Relevante Symbole




- `IngestInvoicesUseCase::execute`: https://demo.karlkratz.com/code/109
- `IngestInvoicesUseCase::shouldProcess`: https://demo.karlkratz.com/code/109
- `IngestInvoicesUseCase::deriveRunStatus`: https://demo.karlkratz.com/code/109
- `InvoiceState::__construct`: https://demo.karlkratz.com/code/121
- `InvoiceState::findBySourceId`: https://demo.karlkratz.com/code/121
- `InvoiceState::findByRechnungsschluessel`: https://demo.karlkratz.com/code/121
- `InvoiceState::withRecord`: https://demo.karlkratz.com/code/121
- `InvoiceState::all`: https://demo.karlkratz.com/code/121
- `InvoiceState::toArray`: https://demo.karlkratz.com/code/121
- `InvoiceStatePort::load`: https://demo.karlkratz.com/code/122
- `InvoiceStatePort::save`: https://demo.karlkratz.com/code/122
- `JsonInvoiceStateAdapter::__construct`: https://demo.karlkratz.com/code/134
- `JsonInvoiceStateAdapter::load`: https://demo.karlkratz.com/code/134
- `JsonInvoiceStateAdapter::save`: https://demo.karlkratz.com/code/134
- `SourceInvoice::rechnungsschluessel`: https://demo.karlkratz.com/code/126
- `InvoiceStatus`: https://demo.karlkratz.com/code/123
- `InvoiceErrorCode`: https://demo.karlkratz.com/code/117
- `InvoiceRecord::withStatus`: https://demo.karlkratz.com/code/120
- `InvoiceRecord::withRetry`: https://demo.karlkratz.com/code/120
- `InvoiceRecord::toArray`: https://demo.karlkratz.com/code/120
- `rechnungen/rechnungen.json`: https://demo.karlkratz.com/code/143




## 6. Lieferantenkontakt in Lexoffice finden oder anlegen




Der Lieferant wird nicht fest im Programm kodiert. Die extrahierten Daten werden verwendet, um in Lexoffice nach einem passenden Kontakt zu suchen. Wird einer gefunden, wird seine ID wiederverwendet. Andernfalls wird ein neuer Kontakt mit Name und Adresssignatur angelegt.




### Relevante Symbole




- `ResolveVendorUseCase::__construct`: https://demo.karlkratz.com/code/113
- `ResolveVendorUseCase::execute`: https://demo.karlkratz.com/code/113
- `LexofficePort::findContactByName`: https://demo.karlkratz.com/code/124
- `LexofficePort::createContact`: https://demo.karlkratz.com/code/124
- `LexofficeApiAdapter::__construct`: https://demo.karlkratz.com/code/136
- `LexofficeApiAdapter::findContactByName`: https://demo.karlkratz.com/code/136
- `LexofficeApiAdapter::createContact`: https://demo.karlkratz.com/code/136
- `LexofficeApiAdapter::request`: https://demo.karlkratz.com/code/136
- `ExtractedInvoiceData::hasRequiredFields`: https://demo.karlkratz.com/code/116
- `InvoiceRecord::withContact`: https://demo.karlkratz.com/code/120




## 7. Rechnungsbeleg in Lexoffice anlegen




Mit der echten Rechnungsnummer, dem Rechnungsdatum, den extrahierten Beträgen und der Kontakt-ID wird der Lexoffice-Beleg erstellt. Danach wird die geprüfte lokale PDF als Anhang hochgeladen. Der Vorgang gilt erst als erfolgreich, wenn eine gültige Beleg-ID vorliegt und der Datei-Upload erfolgreich bestätigt wurde.




### Relevante Symbole




- `PostInvoiceUseCase::__construct`: https://demo.karlkratz.com/code/112
- `PostInvoiceUseCase::execute`: https://demo.karlkratz.com/code/112
- `LexofficePort::postInvoice`: https://demo.karlkratz.com/code/124
- `LexofficeApiAdapter::postInvoice`: https://demo.karlkratz.com/code/136
- `LexofficeApiAdapter::request`: https://demo.karlkratz.com/code/136
- `LexofficeApiAdapter::uploadAttachment`: https://demo.karlkratz.com/code/136
- `PostingResult::__construct`: https://demo.karlkratz.com/code/125
- `PostingResult::toArray`: https://demo.karlkratz.com/code/125
- `InvoiceRecord::withPosting`: https://demo.karlkratz.com/code/120
- `ExtractedInvoiceData::toArray`: https://demo.karlkratz.com/code/116
- `Amount::toArray`: https://demo.karlkratz.com/code/114




## 8. Status und Protokoll schreiben




Jeder wichtige Schritt wird protokolliert. Der dauerhafte fachliche Zustand liegt in `rechnungen.json`; die einzelnen Logeinträge helfen bei der zeitlichen Nachvollziehbarkeit. Ein Status wie `POSTED` bedeutet, dass der Beleg erfolgreich verarbeitet wurde. Fehler und Wiederholungsversuche bleiben als Zustand erkennbar.




### Relevante Symbole




- `InvoiceRecord::withDownload`: https://demo.karlkratz.com/code/120
- `InvoiceRecord::withExtraction`: https://demo.karlkratz.com/code/120
- `InvoiceRecord::withContact`: https://demo.karlkratz.com/code/120
- `InvoiceRecord::withPosting`: https://demo.karlkratz.com/code/120
- `InvoiceRecord::withError`: https://demo.karlkratz.com/code/120
- `InvoiceRecord::withRetry`: https://demo.karlkratz.com/code/120
- `InvoiceRecord::toArray`: https://demo.karlkratz.com/code/120
- `InvoiceState::withRecord`: https://demo.karlkratz.com/code/121
- `InvoiceState::toArray`: https://demo.karlkratz.com/code/121
- `JsonInvoiceStateAdapter::save`: https://demo.karlkratz.com/code/134
- `InvoiceLoggerPort::logStep`: https://demo.karlkratz.com/code/119
- `JsonLineLogger::__construct`: https://demo.karlkratz.com/code/135
- `JsonLineLogger::logStep`: https://demo.karlkratz.com/code/135
- `IngestResult::toArray`: https://demo.karlkratz.com/code/110
- `rechnungen/rechnungen.json`: https://demo.karlkratz.com/code/143
- `rechnungen/wetell-downloads.json`: https://demo.karlkratz.com/code/144




## 9. Fehler behandeln und sicher wiederholen




Ein Fehler bei Anmeldung, Entdeckung, Download, PDF-Auslesung, Kontaktabgleich oder Lexoffice-Buchung wird dem jeweiligen Schritt zugeordnet. Der Lauf wird nicht fälschlich als vollständig erfolgreich markiert. Bei einem erneuten Lauf entscheiden Status, Quell-ID, Rechnungsschlüssel und Hash erneut, ob eine Rechnung verarbeitet werden muss.




### Relevante Symbole




- `InvoiceProcessException`: https://demo.karlkratz.com/code/111
- `InvoiceErrorCode`: https://demo.karlkratz.com/code/117
- `IngestInvoicesUseCase::execute`: https://demo.karlkratz.com/code/109
- `IngestInvoicesUseCase::shouldProcess`: https://demo.karlkratz.com/code/109
- `IngestInvoicesUseCase::deriveRunStatus`: https://demo.karlkratz.com/code/109
- `InvoiceRecord::withError`: https://demo.karlkratz.com/code/120
- `InvoiceRecord::withRetry`: https://demo.karlkratz.com/code/120
- `InvoiceState::findBySourceId`: https://demo.karlkratz.com/code/121
- `InvoiceState::findByRechnungsschluessel`: https://demo.karlkratz.com/code/121
- `JsonLineLogger::logStep`: https://demo.karlkratz.com/code/135
- `PostingResult::toArray`: https://demo.karlkratz.com/code/125




## 10. Nachweise des Gesamtergebnisses




Ein erfolgreicher Durchlauf hinterlässt drei zusammengehörige Nachweise:




1. die geprüfte Original-PDF unter `rechnungen/originale/`,
2. den lokalen Status in `rechnungen/rechnungen.json`,
3. den Lexoffice-Kontakt und den Beleg mit PDF-Anhang.




Die fachliche Verarbeitung wird durch Application-Use-Cases gesteuert. Die technischen Details bleiben austauschbar: WEtell kann über Headless-Browser, HTTP oder Fallback angebunden werden; die PDF-Auslesung kann über `pdftotext` oder OCR erfolgen; Lexoffice wird über den API-Adapter angesprochen.




### Relevante Symbole




- `run-rechnung.php`: https://demo.karlkratz.com/code/105
- `IngestInvoicesUseCase::execute`: https://demo.karlkratz.com/code/109
- `IngestResult::toArray`: https://demo.karlkratz.com/code/110
- `InvoiceRecord::toArray`: https://demo.karlkratz.com/code/120
- `JsonInvoiceStateAdapter::save`: https://demo.karlkratz.com/code/134
- `LexofficeApiAdapter::postInvoice`: https://demo.karlkratz.com/code/136
- `LexofficeApiAdapter::uploadAttachment`: https://demo.karlkratz.com/code/136
- `DateBasedInvoiceStorage::persistDownloadedPdf`: https://demo.karlkratz.com/code/129
- `rechnungen/rechnungen.json`: https://demo.karlkratz.com/code/143
- `rechnungen/wetell-downloads.json`: https://demo.karlkratz.com/code/144
- `wetell-headless/server.js`: https://demo.karlkratz.com/code/142','{rechnung,buchhaltung,wetell,lexoffice,prozess,code}','2026-07-16 17:29:04.735128+02','2026-07-16 17:52:55.100621+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('19','release-notes','Release Notes: Rechnungsprozess','
# Release Notes: Rechnungsprozess

Zeitlich absteigend. Die Datenbank-Historie speichert jeweils den Vorzustand unmittelbar vor einem Update; der aktuelle Stand steht an erster Stelle.

- **Aktueller Stand seit 2026-07-16 17:50 (+02:00): detaillierte Teilprozesse.** Punkt 2 wurde von einer allgemeinen Beschreibung in neun konkrete Schritte überführt: Konfiguration, Adapterwahl, abgesicherter Headless-Aufruf, Playwright-Sitzung, Login, Rechnungsübersicht, `SourceInvoice`, Ergebnisbewertung sowie Fehlerzustände. Die Verantwortlichkeiten und Abbruchbedingungen sind jetzt bis zum Entdeckungsergebnis nachvollziehbar dokumentiert. Siehe https://demo.karlkratz.com/doku/rechnung-prozess und die Symbole unter https://demo.karlkratz.com/code/106, https://demo.karlkratz.com/code/132 und https://demo.karlkratz.com/code/142.

- **Stand vor dem Update um 17:50 (+02:00): Code- und Symbolverknüpfung.** Jeder Hauptprozess enthielt eine Liste relevanter Application-, Domain- und Infrastructure-Symbole mit Links in die `/code`-Ansicht. Die fachliche Beschreibung wurde dabei auf die aktuelle Use-Case-/Port-/Adapter-Struktur ausgerichtet. Der Umfang lag bei 244 Zeilen.

- **Stand vor dem Update um 17:47 (+02:00): vollständige didaktische Prozessbeschreibung.** Der zunächst kurze Eintrag wurde zu einer laienverständlichen End-to-End-Erklärung mit zehn Hauptprozessen ausgebaut: Start, WEtell-Login, Download, PDF-Prüfung, Duplikaterkennung, Datenextraktion, Lexoffice-Kontakt, Beleganlage, Statusführung sowie Fehler-/Wiederholungsverhalten. Der Umfang lag bei 112 Zeilen.

- **Initialer Stand, angelegt vor dem ersten Update um 17:41 (+02:00): Kurznotiz.** Der Datensatz beschrieb nur knapp Node.js/Playwright, den WEtell-Download, PDF-Prüfung, dynamische Rechnungsdaten, Lexoffice-Kontakt und `rechnungen.json`. Der Umfang lag bei 3 Zeilen; dieser INSERT-Vorzustand wird vom Audit-System nicht als History-Eintrag gespeichert.
','{rechnung,release,historie,dokumentation}','2026-07-16 17:53:14.112753+02','2026-07-16 17:53:14.112753+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('20','task-rechnungs-posting-exactly-once','F01 Rechnungs-Posting transaktional und Exactly-Once absichern','# Rechnungs-Posting transaktional und Exactly-Once absichern

**Finding:** F01  
**Priorität:** P0  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- LexofficeApiAdapter legt zuerst den Beleg an und lädt danach die Datei hoch (LexofficeApiAdapter.php:98/103).
- Der lokale Status folgt erst nach dem gesamten Posting (IngestInvoicesUseCase.php:110/115); Crash oder State-Fehler nach Remote-Erfolg kann beim Retry einen zweiten Beleg erzeugen.
- Die Upload-Antwort wird verworfen; die File-ID ist nicht faktisch belegt (LexofficeApiAdapter.php:113/202).

## Ziel

Für einen fachlichen Rechnungsschlüssel entsteht trotz Retry, Crash und Parallelstart höchstens ein Lexware-Beleg; jeder Teilerfolg ist fortsetzbar.

## Aufgabe

1. Persistierte Saga mit POSTING_INTENT, VOUCHER_CREATED, FILE_ATTACHED, POSTED implementieren.
2. Vor Remote-Mutation Intent und danach jede Remote-ID durable speichern.
3. Vor Retry Remote-Zustand reconciliieren; nie blind POST wiederholen.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: beliebig viele Läufe ergeben genau eine Voucher-ID.
- MUST: unbekannter Remote-Status wird RECONCILIATION_REQUIRED.
- MUST: Upload-ID/Zuordnung werden per Response oder GET bestätigt.

## Harte Quality Gateways

- Failure-Injection nach Intent/Create/Upload/Final-Save zählt exakt einen wirksamen Create.
- Zwei identische CLI-Läufe liefern dieselben Remote-IDs.
- Contract-Test validiert Status, IDs und Uploadschema.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: Ingest/Post Use Cases, Lexoffice-Port/Adapter, PostingResult, InvoiceRecord, State-Adapter.
- Daten: rechnungen.json; extern: Lexware Vouchers/Files.

## Code-Impact-Analyse

- Doppelbelege werden verhindert; Zwischenzustände werden sichtbar.
- Bestehende POSTED-Records müssen ohne Mutation übernommen werden.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Doppelbeleg nach Crash | hoch | kritisch |
| Falsche Kompensation | mittel | kritisch |

## Strategie zur Risikonullierung

1. Prevent: durable Intent/Schlüssel.
2. Detect: Reconciliation.
3. Contain: Unknown sperren.
4. Recover: nur mit gespeicherten IDs.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p0,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('21','task-rechnungs-identitaet-und-duplikate','F02 Fachliche Rechnungsidentität und Duplikatschutz korrigieren','# Fachliche Rechnungsidentität und Duplikatschutz korrigieren

**Finding:** F02  
**Priorität:** P0  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- shouldProcess prüft nur sourceId/status (IngestInvoicesUseCase.php:203).
- SourceInvoice.rechnungsschluessel enthält sourceId (SourceInvoice.php:37); gleiche Rechnung unter neuer URL gilt als neu.
- Nummer, Lieferant, Hash und Voucherlist sind keine zwingenden Schranken; State-Löschung entfernt den Schutz.

## Ziel

Dieselbe wirtschaftliche Rechnung wird unabhängig von URL, Dateiname, State-Reset und Parallelität genau einmal verarbeitet.

## Aufgabe

1. Kanonischen Schlüssel aus Lieferant, echter Nummer und Datum definieren.
2. SHA-256 und Konfliktregeln ergänzen.
3. Lokalen Index und Voucherlist vor Posting prüfen; Bestand ohne Reposting migrieren.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: Identität URL-/Pfad-unabhängig.
- MUST: gleicher Hash/neue URL wird nicht gepostet.
- MUST: gleiche Nummer/anderer Hash blockiert.
- MUST: leerer Local-State plus Remote-Beleg erzeugt 0 POSTs.

## Harte Quality Gateways

- Vollständige URL/Hash/Nummern-Matrix grün.
- Zwei Parallelworker erzeugen einen Intent.
- Realer Beleg wird RF183233049809, nicht 148077689, zugeordnet.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: SourceInvoice, InvoiceRecord/State, Ingest, State-Adapter, LexofficePort.
- Datenmigration; lesender Voucherlist-Abgleich.

## Code-Impact-Analyse

- Schützt nach Portalwechsel/Reset.
- Konflikte werden sichtbar und benötigen Operator-Workflow.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Duplikat nach URL-Wechsel | hoch | kritisch |
| Falsch-positive Dublette | mittel | hoch |

## Strategie zur Risikonullierung

1. Prevent: Schlüssel plus Hash.
2. Detect: lokal/remote.
3. Contain: Quarantäne.
4. Recover: auditierte Entscheidung.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p0,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('22','task-rechnungs-extraktion-fachliche-korrektheit','F03 Rechnungsextraktion fachlich korrekt und belegbar machen','# Rechnungsextraktion fachlich korrekt und belegbar machen

**Finding:** F03  
**Priorität:** P0  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- Deutsche Dezimalzahlen werden direkt zu float gecastet (PdftotextExtractor.php:71; TesseractInvoiceExtractor.php:70).
- firstLine entfernt vor Zeilentrennung Umbrüche (PdftotextExtractor.php:130).
- 0+0=0 gilt als konsistent; positiver Bruttobetrag ist nicht Pflicht.
- Reales PDF nennt 04.07.2026, State desselben SHA-256 speichert 14.07.2026.
- Tesseract erhält PDF ohne definierte Rasterpipeline.

## Ziel

Buchungsfelder sind formatrobust, quellenbelegt und gegen das Original geprüft; Unsicherheit stoppt vor Lexware.

## Aufgabe

1. Decimal-Value-Object ohne Float bauen.
2. Label-/Positionsparser samt Seite/Matcher/Confidence umsetzen.
3. PDF seitenweise rasterisieren; Review-Quarantäne und Golden Masters einführen.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: Geld als Minor Units/Decimal-String.
- MUST: Brutto > 0, Währung/Rundung explizit.
- MUST: Nummer/Datum besitzen Textbeleg.
- MUST: Widerspruch/geringe Confidence führt REVIEW_REQUIRED.

## Harte Quality Gateways

- Reales Fixture erwartet 2026-07-04, RF183233049809, 26.0504, 4.9496, 31.0000.
- Property-Tests für Komma/Punkt/vier Nachkommastellen.
- Mutiertes Datum/Summe verhindert Posting.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: beide Extractors, Fallback, ExtractedInvoiceData, Amount, Extract Use Case.
- State erhält Feldbelege/Confidence; Betrieb erhält Reviewfälle.

## Code-Impact-Analyse

- Verhindert falsche Buchungsdaten.
- Bestand wird revalidiert, nie automatisch neu gepostet.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Falscher Betrag/Datum | hoch | kritisch |
| False negative | mittel | mittel |

## Strategie zur Risikonullierung

1. Prevent: typisierte Parser.
2. Detect: Golden Masters/Kreuzsummen.
3. Contain: Review.
4. Recover: Original plus versionierte Korrektur.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p0,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('23','task-rechnungs-state-integritaet-und-parallelitaet','F04 Rechnungs-State korruptions- und parallelitätssicher machen','# Rechnungs-State korruptions- und parallelitätssicher machen

**Finding:** F04  
**Priorität:** P0  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- Ungültiges/unlesbares JSON wird als leer behandelt (JsonInvoiceStateAdapter.php:31).
- Fester .tmp und Schreib-LOCK schützen nicht den Read-Modify-Write-Zyklus (JsonInvoiceStateAdapter.php:54).
- Parallele Läufe können überschreiben, doppelt posten oder Revisionen verlieren.

## Ziel

Korruption und Parallelität führen fail-closed zu einem reparierbaren Zustand, nie zum erneuten Vollimport.

## Aufgabe

1. Transaktionale DB-Persistenz oder vollständiges Prozesslocking umsetzen.
2. Invaliden State als STATE_CORRUPT abbrechen.
3. Schema-Version, atomare Migration, Revision/CAS sowie Kill-/Paralleltests ergänzen.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: invalides JSON ist nie leerer State.
- MUST: genau ein Lauf mutiert einen Schlüssel.
- MUST: Save fsync-atomar oder transaktional.
- MUST: Revision monoton.

## Harte Quality Gateways

- 20 Parallelworker ohne Lost Update.
- Truncated JSON stoppt vor Netzwerk.
- Kill während Save lässt alte oder neue vollständige Revision.
- Restore erzeugt keinen POST.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: State-Adapter/Port, InvoiceState/Record, Ingest, CLI.
- Daten: JSON-Migration oder neue DB-Tabelle.

## Code-Impact-Analyse

- Parallelstart kann bewusst abgelehnt werden.
- Bestands-JSON benötigt kontrollierten Einmalimport.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Korruption als Erstlauf | hoch | kritisch |
| Lost Update | hoch | kritisch |

## Strategie zur Risikonullierung

1. Prevent: Eindeutigkeit/Revision.
2. Detect: Schema/Checksum.
3. Contain: fail-closed.
4. Recover: Backup/Import.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p0,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('24','task-lexware-api-vertrag-und-kontaktabgleich','F05 Lexware-API-Vertrag und Lieferantenabgleich korrigieren','# Lexware-API-Vertrag und Lieferantenabgleich korrigieren

**Finding:** F05  
**Priorität:** P0  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- Reale Config nutzt api.lexoffice.io; offiziell gilt seit Mai 2025 api.lexware.io, die alte Verfügbarkeit war nur bis Dezember 2025 angekündigt.
- Adapter nutzt /v1/billing-documents und salesinvoice (LexofficeApiAdapter.php:84); Eingangsbelege sind purchaseinvoice, offiziell sind Vouchers/Files.
- Kontaktpayload ist flach statt Roles/Company/Addresses.
- Namensmatch ohne Adresse/Steuer-ID wird akzeptiert (ResolveVendorUseCase.php:33).

## Ziel

Integration entspricht dem aktuellen offiziellen Lexware-Vertrag und ordnet nur eindeutig validierte Lieferanten zu.

## Aufgabe

1. Gateway/Endpunkte migrieren.
2. Purchaseinvoice über Vouchers/Files modellieren.
3. Vendor-Rolle, Company, Adressen korrekt payloaden; Matching und Contract-Tests ergänzen.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: Base URL https://api.lexware.io.
- MUST: nur offizielle Payloads und purchaseinvoice.
- MUST: Name allein ist kein Match.
- MUST: Status, IDs und Async-Schemas validiert.

## Harte Quality Gateways

- Contract-Tests Contacts/Voucherlist/Vouchers/Files.
- Zwei gleichnamige Kontakte führen Review.
- Request-Capture belegt aktuelle URL/Typ/Struktur.
- Live-Smoke GET-only, Mutation nur Testtenant.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: Lexoffice-Credentials, Adapter/Port, Resolve/Post, CLI.
- Extern: Lexware Contacts/Voucherlist/Vouchers/Files.

## Code-Impact-Analyse

- Behebt veralteten Gatewayvertrag/falschen Belegtyp.
- Strenger Match erzeugt Review, verhindert falschen Kreditor.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Alter Gateway/Endpoint | hoch | hoch |
| Falscher Belegtyp/Lieferant | mittel | kritisch |

## Strategie zur Risikonullierung

1. Prevent: aktuelle Schemas.
2. Detect: Contract/Response.
3. Contain: unklarer Match stoppt.
4. Recover: Remote-ID/Korrelation; https://developers.lexware.io/docs/ .

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p0,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('25','task-wetell-download-integritaet-und-ssrf','F06 Wetell-Download gegen SSRF und falsche Dokumente härten','# Wetell-Download gegen SSRF und falsche Dokumente härten

**Finding:** F06  
**Priorität:** P0  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- Adapter akzeptieren URLs ohne Host-Allowlist (HeadlessWetellSourceAdapter.php:83; HttpWetellSourceAdapter.php:121) und folgen Redirects.
- Headless vertraut beliebigem lokalem filePath (HeadlessWetellSourceAdapter.php:88).
- Storage akzeptiert vorhandenes Ziel ohne Hashvergleich (DateBasedInvoiceStorage.php:45).
- HTML-Heuristik ersetzt keine PDF-Magic/MIME/Größe/Parserprüfung.

## Ziel

Nur authentisierte WEtell-PDFs erlaubter Hosts/Redirects erreichen die Ablage; interne Ressourcen bleiben unerreichbar.

## Aufgabe

1. HTTPS-/Host-/Pfad-/IP-/Redirect-Policy bauen.
2. Bytes/Stream statt Serverpfad übertragen.
3. Magic, MIME, Größe, Parsebarkeit prüfen; Ziel nur bei gleichem Hash akzeptieren.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: nur erlaubte WEtell-Hosts/Pfade.
- MUST: jeder Redirect erneut geprüft; private Netze verboten.
- MUST: kein beliebiger Hostpfad.
- MUST: anderer Zielhash blockiert.

## Harte Quality Gateways

- SSRF-Matrix blockiert file/http/localhost/RFC1918/IPv6/DNS-Rebinding/externe Redirects.
- HTML/leer/falsche Magic abgewiesen.
- Gleicher Hash idempotent, anderer Fehler.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: beide WEtell-Adapter, Download, Storage, Port.
- Node-Protokoll/Netzpolicy; kein Lexware-Schreiben.

## Code-Impact-Analyse

- Reduziert SSRF und Dokumentverwechslung.
- Portaländerung verlangt explizite Allowlist-Anpassung.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| SSRF | mittel | kritisch |
| Falsches Dokument | mittel | kritisch |

## Strategie zur Risikonullierung

1. Prevent: egress allowlist/Bytevertrag.
2. Detect: Magic/MIME/Parser/Hash.
3. Contain: Quarantäne.
4. Recover: Original/Audit-Hash.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p0,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('26','task-playwright-service-haertung-und-lifecycle','F07 Playwright-Service sicher, begrenzt und instanztreu betreiben','# Playwright-Service sicher, begrenzt und instanztreu betreiben

**Finding:** F07  
**Priorität:** P1  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- server.js startet Chromium je Aktion (server.js:9/59), nicht eine bestehende Instanz.
- ignoreHTTPSErrors=true schwächt TLS (server.js:67).
- Leeres WETELL_HEADLESS_SECRET erlaubt jeden POST (server.js:401).
- Body ist unlimitiert (server.js:36), URLs frei steuerbar, Login-Erfolg nur Heuristik.

## Ziel

Ein kontrollierter Browser wird wiederverwendet; Dienst ist zwingend authentisiert, TLS-validierend und begrenzt.

## Aufgabe

1. Browser beim Start, Context pro Job.
2. Pflichtsecret oder Unix-Socket/mTLS plus Allowlist.
3. Body-/Zeit-/Queue-/Speicherlimits und Readiness implementieren.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: kein launch im Handler.
- MUST: Secret nie leer/geloggt.
- MUST: TLS-Fehler nicht ignoriert.
- MUST: Body max 64 KiB, Limits/Cleanup.

## Harte Quality Gateways

- 100 Requests nutzen eine Browser-PID, 0 offene Contexts.
- Kein/falsches Secret immer 401/403.
- Fremde URL/TLS-Fehler blockiert.
- Überlast 429/503; Node-Tests grün.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: server.js, package, README, Service-Unit, Headless-PHP-Adapter.
- Betrieb: Browser-PID, Speicher, Neustart.

## Code-Impact-Analyse

- Weniger Ressourcen/Startlatenz.
- Erfordert Browser-Recovery und Servicevertrag.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Unauthentisierter SSRF-Proxy | mittel | kritisch |
| TLS/DoS/Sessionleck | hoch | hoch |

## Strategie zur Risikonullierung

1. Prevent: Auth/Loopback/TLS/Allowlist.
2. Detect: PID/Context/Queue.
3. Contain: Isolation/Limits.
4. Recover: Browserneustart.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p1,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('27','task-wetell-adapter-session-und-fallback','F08 Wetell-Adapterwahl und Session-Fallback deterministisch machen','# Wetell-Adapterwahl und Session-Fallback deterministisch machen

**Finding:** F08  
**Priorität:** P1  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- Fallback merkt den erfolgreichen Login-Adapter nicht; Discover/Download probieren Primary/Fallback (FallbackWetellSourceAdapter.php:47/71).
- Fallback kann ohne eigenen Login laufen.
- Headless-Login nutzt Methoden-Credentials, Discover Constructor-Credentials (HeadlessWetellSourceAdapter.php:33/44).

## Ziel

Pro Lauf ist genau ein Adapter mit einer Identität/Session aktiv; Fallback nur nach klassifiziertem Fehler.

## Aufgabe

1. Login liefert Session-Handle.
2. Discover/Download nur aktive Session.
3. Fallback nur bei technischen Fehlern; Credentials einmal injizieren und Matrix testen.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: Discover/Download nach Login derselben Instanz.
- MUST: keine Credentialmischung.
- MUST: leere Liste ist Ergebnis.
- MUST: Authfehler nicht verschluckt.

## Harte Quality Gateways

- 2x2x2 Session-Matrix mit exakten Calls.
- Primary leer folgt expliziter Policy.
- Credentialmischung typseitig unmöglich.
- Fehlercodes bleiben erhalten.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: Fallback/Headless/HTTP-Adapter, Port, Use Cases, CLI.
- Netz: Anzahl Logins/Sessionverhalten.

## Code-Impact-Analyse

- Deterministische Sessions.
- Portsignatur migriert alle Adapter gemeinsam.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Nicht eingeloggter Adapter | hoch | hoch |
| Authfehler verschleiert | mittel | hoch |

## Strategie zur Risikonullierung

1. Prevent: Session-Handle.
2. Detect: Callsequence.
3. Contain: klassifizierter Fallback.
4. Recover: eigener Login.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p1,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('28','task-dokumentation-schreibschutz-und-csrf','F09 Dokumentationsänderungen authentisieren und gegen CSRF schützen','# Dokumentationsänderungen authentisieren und gegen CSRF schützen

**Finding:** F09  
**Priorität:** P0  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- POST /doku/{slug} ist öffentlich (public/index.php:127).
- DokuSpeichernAction schreibt ohne AuthN/AuthZ/CSRF (DokuSpeichernAction.php:30).
- App-Rolle hat pauschales DML auf alle Public-Tabellen (migrations/0004_app_grants.sql:7).

## Ziel

Lesen bleibt möglich; Schreiben nur authentisiert/autorisiert mit CSRF und Actor-Audit.

## Aufgabe

1. AuthN/AuthZ-Middleware.
2. Synchronizer Token, SameSite, Originprüfung.
3. app.actor transaktional setzen; DB-Grants, Revision, Rate-/Body-Limit minimieren.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: anonymer POST verändert 0 Zeilen.
- MUST: falscher CSRF liefert 403.
- MUST: History enthält Actor.
- MUST: keine globalen DML-Rechte.

## Harte Quality Gateways

- HTTP-Matrix anonym/Rolle/CSRF.
- DB-Diff nach Ablehnung leer.
- Grant-Abfrage minimal.
- Concurrent Edit erkannt/Actor auditiert.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: public/index, Doku-Action/View/JS, Middleware, Repository.
- DB: Grants/Actor/Sessions.

## Code-Impact-Analyse

- Editor erfordert Login.
- Automatik braucht Serviceaccount/CLI.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Öffentliche Manipulation | hoch | kritisch |
| CSRF/breite DB-Rolle | hoch | kritisch |

## Strategie zur Risikonullierung

1. Prevent: AuthN/AuthZ/CSRF/Least Privilege.
2. Detect: Actor-Audit.
3. Contain: Schreibrolle/Limit.
4. Recover: Historie.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p0,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('29','task-code-spiegel-datenabfluss-und-safe-get','F10 Öffentlichen Code-Spiegel von Datenabfluss und GET-Seiteneffekten trennen','# Öffentlichen Code-Spiegel von Datenabfluss und GET-Seiteneffekten trennen

**Finding:** F10  
**Priorität:** P0  
**Status:** ERLEDIGT
**Stand:** 2026-07-16

## Problembeschreibung

- GET /code scannt und synchronisiert DB (CodeListeAction.php:62/65); Leseaufruf kann DML/History erzeugen.
- Scanner erlaubt JSON/YAML/Shell und ignoriert rechnungen/root-staging nicht (CodeDateiScanner.php:32).
- Aktuell publiziert er Rechnungs-State, Downloads-State und Deploymentskript samt Remote-IDs; History konserviert Altwerte.

## Ziel

GET ist read-only; nur positiv freigegebener Quellcode ohne Laufzeit-, Deployment-, Secret- oder Personendaten wird publiziert.

## Aufgabe

1. Sync in authentisierten CLI/Deploy-Job.
2. Pfad-Allowlist.
3. Sensible Basis-/Historyzeilen auditierbar purgen.
4. Secret-/PII-Scan und Read-only-GET-Rolle.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: Code-GET führt 0 DML aus.
- MUST: credentials/rechnungen/root-staging/tmp/vendor/node_modules ausgeschlossen.
- MUST: sensible History bereinigt.
- MUST: Secretscan vor Sync.

## Harte Quality Gateways

- Statement-Capture nur SELECT.
- Verbotene Fixtures 0.
- Basis/History sensible Pfade 0.
- Wiederholte GETs ändern nichts.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: Scanner, Code-Actions/Sync/Repository, Routing.
- DB: code_datei/history/grants; ID-Linkmigration.

## Code-Impact-Analyse

- Codeansicht bleibt, Update explizit.
- Purge benötigt ID-Mapping für Doku-Links.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Datenoffenlegung | hoch | kritisch |
| GET-DB-Last/Linkbruch | hoch | hoch |

## Strategie zur Risikonullierung

1. Prevent: Allowlist/Secretscan/read-only.
2. Detect: Audit.
3. Contain: Sync-Rolle.
4. Recover: ID-Export/Linkmigration.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.

## Umsetzungsstatus

- Die Sichtbarkeit interner Rechnungs-, Laufzeit- und Deploymentdaten ist im ausschließlich lokalen Schulungs-/Demo-System ausdrücklich akzeptiert und wurde nicht eingeschränkt.
- GET `/code` und GET `/code/{id}` enthalten keine Scanner-/Sync-Abhängigkeit mehr.
- Synchronisation erfolgt explizit über `sync-code.php`; belegter Lauf: 153 Dateien.
- Faktischer Safe-GET-Nachweis: `code_datei` 153 -> 153 und `history_code_datei` 30 -> 30 nach Listen- und Detail-GET.
- PHPUnit `CodeSafeGetTest`: 1 Test, 6 Assertions, grün.','{task,supervision,p0,erledigt,accepted-demo-risk}','2026-07-16 18:39:13.335375+02','2026-07-16 19:02:06.153766+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('30','task-credentials-dateirechte-und-aufbewahrung','F11 Credentials, Rechnungsdateien und Aufbewahrung absichern','# Credentials, Rechnungsdateien und Aufbewahrung absichern

**Finding:** F11  
**Priorität:** P0  
**Status:** AUSGESCHLOSSEN
**Stand:** 2026-07-16

## Problembeschreibung

- Echte Wetell-/Lexoffice-Credentials liegen im Projekt mit 0664, world-readable; externe DB-Credentials sind 0640.
- CLI fällt ohne APP_CREDENTIALS_DIR auf Projekt-Credentials zurück (run-rechnung.php:76).
- PDFs/State/Metadaten sind 0664 mit personenbezogenen Daten/Remote-IDs.
- Retention, Löschung, Backup/Restore fehlen.

## Ziel

Secrets/Rechnungsdaten sind nur für Serviceaccount lesbar, außerhalb publizierter Bereiche und folgen geprüfter Retention.

## Aufgabe

1. Projektsecrets entfernen/rotieren; nur Examples.
2. Fallback entfernen, Env fail-closed.
3. Umask/ACL 0750/0640 oder strenger.
4. Retention/Backup/Restore/Löschung/Redaction definieren.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: keine Prod-Secrets unter Root.
- MUST: APP_CREDENTIALS_DIR Pflicht plus Modeprüfung.
- MUST: PDF/State/Logs nie world-readable.
- MUST: bekannte Secrets rotieren.

## Harte Quality Gateways

- Find zeigt nur Credential-Examples.
- Permissiontest maximal 0640/0750.
- Start ohne Env vor Netzwerk beendet.
- Secretscan Projekt/DB/History 0; Restore-/Löschtest grün.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: CLI, Credentials, Storage, State, Logger, Deploy.
- Rotation betrifft WEtell/Lexware und ACL/Backup.

## Code-Impact-Analyse

- Strenger Start braucht korrekte Env.
- Rotation muss koordiniert werden.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Credential-Diebstahl/PII | hoch | kritisch |
| Rotation sperrt Prozess | mittel | hoch |

## Strategie zur Risikonullierung

1. Prevent: externe Secrets/ACL.
2. Detect: Scans.
3. Contain: Serviceidentität.
4. Recover: Rotation/Restore.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.

## Umsetzungsstatus

- Durch explizite Zielabgrenzung des Auftraggebers vollständig ausgeschlossen.
- Credentials, Credential-Pfade, Secrets, Dateirechte und Rotation wurden nicht verändert.
- Dieser Task blockiert die Zielerreichung nicht.','{task,supervision,p0,ausgeschlossen}','2026-07-16 18:39:13.335375+02','2026-07-16 19:02:06.153766+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('31','task-migrationssicherheit-und-datenbankdrift','F12 Migrationen zerstörungsfrei, nachvollziehbar und driftfrei machen','# Migrationen zerstörungsfrei, nachvollziehbar und driftfrei machen

**Finding:** F12  
**Priorität:** P0  
**Status:** IN UMSETZUNG
**Stand:** 2026-07-16

## Problembeschreibung

- DB hat 0 Migrationstracking, aber vor Taskanlage 19 Dokus, 26 Prozesse und 10 Rechnungsprozesse.
- 0008_system_seed.sql:17 truncatet Doku/Prozesse und würde aktuellen Stand löschen.
- 0006:17 und 0008:7 hardcodieren /var/www/demo.karlkratz.com/.
- Idempotenz ist nicht belegt.

## Ziel

Jeder DB-Stand ist aus immutable, einmaligen, vorwärtsgerichteten Migrationen reproduzierbar; Seeds löschen nie Fachdaten.

## Aufgabe

1. Tracking mit SHA-256/Transaktion.
2. 0008 sperren; additive Ist-Baseline.
3. Rechnungsprozesse/Dokus/Links migrieren.
4. Absolute Pfade eliminieren; Backup/Restore-Preflight.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: Version/Checksum/Zeit/Actor.
- MUST: angewandte Checksums immutable.
- MUST: keine destructive Fach-/Doku-Seeds.
- MUST: Neubau/Upgrade gleicher Fingerprint.

## Harte Quality Gateways

- Leere DB erzeugt aktuelle Slugs.
- Zweitlauf No-op.
- Upgrade Snapshot verliert 0 Zeilen.
- rg absolute/destructive Seeds 0; Restore grün.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: Migrationen 0001-0010, Runner, Deploy.
- DB: 24 Tabellen/Audit/Sequenzen; Doku/Prozess-/Code-IDs.

## Code-Impact-Analyse

- Verhindert Totalverlust.
- Baseline muss Ad-hoc-Iststand konservieren.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Seed löscht Daten | hoch | kritisch |
| Drift verhindert Recovery | hoch | kritisch |

## Strategie zur Risikonullierung

1. Prevent: immutable additive Migrationen.
2. Detect: Checksum/Fingerprint.
3. Contain: Transaktion/Backup.
4. Recover: Restore/Roll-forward.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.

## Umsetzungsstatus

- `run-migrations.php` und checksum-basierter `MigrationRunner` implementiert.
- Versionen 0001-0010 mit aktuellen SHA-256-Werten als `BASELINED` registriert; 0011 als `APPLIED`.
- Zweiter Lauf faktisch No-op (`changes: []`).
- Destruktives TRUNCATE aus 0008 entfernt; Initialseed bricht auf nichtleeren Fachtabellen fail-closed ab.
- Absolute Projektpfade aus 0006/0008 entfernt.
- Offen: additive Reproduktion des aktuellen Doku-/Rechnungsprozessstands und Empty-DB-Fingerprint-Gateway.','{task,supervision,p0,in-umsetzung}','2026-07-16 18:39:13.335375+02','2026-07-16 19:02:06.153766+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('32','task-phpstan-und-code-rules-konformitaet','F13 PHPStan-Level-8 und harte Code-Regeln vollständig erfüllen','# PHPStan-Level-8 und harte Code-Regeln vollständig erfüllen

**Finding:** F13  
**Priorität:** P1  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- PHPStan Level 8 meldet 58 Fehler.
- Nichtkommentierte LOC über 150: InvoiceRecord 304, HttpWetellSourceAdapter 231, run-rechnung 204, Ingest 174, LexofficeAdapter 155.
- Nullable Strings, cURL string|true, untypisierte Iterables, tote Bedingungen und Constructorreihenfolge.
- Syntax/Tests grün, Level-8 rot.

## Ziel

Produktiver PHP-Code ist Level-8-fehlerfrei, unter Größenlimits und in kleine kohäsive Verantwortlichkeiten zerlegt.

## Aufgabe

1. 58 Befunde ohne Baseline/Ignore lösen.
2. Großklassen in Mapper/Parser/Retry/Transitions/HTTP teilen.
3. Shapes/List-Typen und Rückgabewertprüfungen ergänzen.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: 0 PHPStan ohne Ignore.
- MUST: jede PHP-Datei <=150 nichtkommentierte LOC.
- MUST: final/strict/Docblocks/Constructor Injection.
- MUST: Dependencies nach innen.

## Harte Quality Gateways

- PHPStan Level 8 Exit 0.
- LOC 0 und php -l Exit 0.
- Architekturtest grün.
- PHPUnit bleibt grün.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: mindestens 12 Fehlerdateien/5 LOC-Dateien.
- Indirekt: Constructors, Komposition, Tests.

## Code-Impact-Analyse

- Großer Refactor mit Regressionseinfluss.
- Zuerst Characterization, dann Struktur.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Refactor-Regression | mittel | hoch |
| Blindes Casting/Baseline | hoch | hoch |

## Strategie zur Risikonullierung

1. Prevent: Characterization.
2. Detect: Level8/LOC/Architektur CI.
3. Contain: kleine Pakete.
4. Recover: Fixturevergleich.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p1,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('33','task-rechnungstests-und-fehlerinjektion','F14 Rechnungssystem mit Unit-, Contract- und End-to-End-Tests absichern','# Rechnungssystem mit Unit-, Contract- und End-to-End-Tests absichern

**Finding:** F14  
**Priorität:** P1  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- 22 Tests/54 Assertions sind grün, aber 0 Rechnungstests.
- Login, Download, Hash, Extraktion, Kontakt, Posting, Retry, Recovery sind ungesichert.
- POSTED-Happy-Path enthält falsches Datum; technischer Erfolg ist keine Fachabnahme.

## Ziel

Jede fachliche Regel und jeder externe Fehlerzustand ist deterministisch getestet; Standardtests mutieren nie Produktion.

## Aufgabe

1. Unit-Tests Value Objects/Parser/Transitions/Identität.
2. Port-Fakes/Contract-Fixtures.
3. Golden-Master-PDF/Testtenant.
4. Crash-/Parallel-/Timeout-/Korruptionsmatrix.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: offline/deterministisch; Zeit/Random injiziert.
- MUST: jede Fehlerklasse getestet.
- MUST: Fixtures ohne Secrets/PII.
- MUST: Mutation nur Flag/Testtenant.

## Harte Quality Gateways

- Rechnungs-Domain/Application >=90% Branch, kritische State-Logik 100%.
- Mutation-Score Kernregeln >=90%.
- Offline 0 Netz.
- HTTP-/Timeout-/HTML-/Disk-/Corruption-/Crashmatrix grün.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Neu: tests/Rechnung, Node-Tests, Fixtures/Fakes.
- Kleine Produktänderungen für injizierbare Zeit/Randomness.

## Code-Impact-Analyse

- Mehr Testcode, massiv weniger Risiko.
- E2E braucht getrennte Secrets/Testtenant.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Regression erst bei Buchung | hoch | kritisch |
| Test/Fixture trifft oder leakt Produktion | niedrig | kritisch |

## Strategie zur Risikonullierung

1. Prevent: Offline/Testtenant.
2. Detect: Coverage/Mutation/Contract/E2E.
3. Contain: Flag.
4. Recover: Run-ID-Cleanup.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p1,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('34','task-fehlerklassifikation-logging-und-datenschutz','F15 Fehlerklassifikation, Logging und Betriebsnachweis belastbar machen','# Fehlerklassifikation, Logging und Betriebsnachweis belastbar machen

**Finding:** F15  
**Priorität:** P1  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- Unerwarteter Throwable wird pauschal ERROR_POSTING/PERSISTENCE (IngestInvoicesUseCase.php:149).
- Lexware-Fehlerbody kann in State/Log gelangen.
- Logger ignoriert Schreibfehler (JsonLineLogger.php:34).
- Korrelation, Metrik, Alarm und Redaction fehlen.

## Ziel

Jeder Fehler ist ursachentreu, redigiert, korreliert und sichtbar; fehlender Auditnachweis bleibt nie still.

## Aufgabe

1. Phasen-/Retry-Taxonomie.
2. Remote-Exceptions redigiert übersetzen.
3. Loggerausfall fail-closed.
4. Run-ID und Metriken/Alarme durchgängig.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: Code bezeichnet echte Phase.
- MUST: keine Secrets/Bodies/PDF-Text/PII.
- MUST: jeder Remote-Request korreliert.
- MUST: Audit-Ausfall blockiert Mutation/durable Fallback.

## Harte Quality Gateways

- Fehlerinjektion je Phase exakter Code.
- Canary-Secrets nirgends.
- Read-only FS stoppt vor Posting.
- Run korrelierbar, Alarme für Unknown/Auth.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: ErrorCode/Exception, Ingest, Logger, Remoteadapter, Node.
- Daten: versioniertes Fehler-/Logformat; Betrieb: Alarme.

## Code-Impact-Analyse

- Bessere Root Cause.
- Korrekte Taxonomie blockiert gefährliche Retries.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Falscher Retry | mittel | kritisch |
| Secret/PII oder fehlendes Audit | hoch | kritisch |

## Strategie zur Risikonullierung

1. Prevent: Typen/Redaction.
2. Detect: Canary/Failure.
3. Contain: fail-closed.
4. Recover: Korrelation/Original.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p1,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('35','task-betriebsreife-deployment-und-abhaengigkeiten','F16 Betriebsreife, Service-Management und Abhängigkeiten herstellen','# Betriebsreife, Service-Management und Abhängigkeiten herstellen

**Finding:** F16  
**Priorität:** P1  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- Kein versionierter Headless-Service-/Restart-/Hardening-Vertrag.
- Host/Port defaulten 127.0.0.1:3001, Secret kann leer sein.
- Playwright ^1.54, installiert 1.61.1; Node/Browser/Deploy nicht als Releaseartefakt belegt.
- Node/NPM kollidiert mit Package-Manager-Verbot ohne Ausnahme.

## Ziel

Prozess startet, überwacht, aktualisiert und stoppt reproduzierbar; Runtimeversionen und Regelentscheidung sind explizit.

## Aufgabe

1. Entscheidung externer Service vs. genehmigte Node-Ausnahme.
2. Gehärtete systemd/container Definition.
3. Node/Playwright/Browser pinnen.
4. Readiness/Runbook für Upgrade, Rotation, Incident, Rollback.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: keine impliziten Prod-Defaults.
- MUST: Runtime reproduzierbar.
- MUST: nichtprivilegierter Serviceuser.
- MUST: Restart ohne Duplikat; Rules-Abweichung geklärt.

## Harte Quality Gateways

- Neuinstallation auf leerem Host grün.
- Kill/Restart jeder Phase ohne Duplikat.
- Versionen entsprechen Lock.
- Hardening-/Rotation-/Rollback-Drill grün.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- Direkt: package files, server.js/README, Serviceconfig, PHP-Endpoint.
- Betrieb: Manager, Browser, Monitoring.

## Code-Impact-Analyse

- Macht Dienst nach Reboot betreibbar.
- Pinning erhöht kontrollierten Upgradeaufwand.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Dienst nach Reboot aus/Versionsdrift | hoch | hoch |
| Restart-Duplikat | mittel | kritisch |

## Strategie zur Risikonullierung

1. Prevent: deklarativer Service/Pins.
2. Detect: Readiness/Version.
3. Contain: Limits/Exactly-once.
4. Recover: Rollback/Reconciliation.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p1,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('36','task-dokumentations-kongruenz-und-fachabnahme','F17 Dokumentation und Prozessmodell an den belegten Ist-Stand angleichen','# Dokumentation und Prozessmodell an den belegten Ist-Stand angleichen

**Finding:** F17  
**Priorität:** P1  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- Planung, /doku/rechnung-prozess, /prozesse und Code sind inkongruent: Doku behauptet bestehende Playwright-Instanz, Code startet Chromium je Request.
- POSTED-State enthält falsches Datum.
- 10 Rechnungsprozesse/jüngste Dokus fehlen Migrationen.
- Legacy-Pfade /var/www/tmp/playwright-test stehen in Planung.

## Ziel

Code, Regeln, Prozessmodell, Doku und Akzeptanzbelege sind kongruent; Einsatzreife ist evidenzbasiert.

## Aufgabe

1. Single Source of Truth je Vertrag.
2. Jeden Schritt mit Code/Input/Output/Fehler/Idempotenz/Owner traceen.
3. Fertig/erfolgreich nur mit Evidenz.
4. Legacy markieren; Release Notes aus Gates.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: jede Behauptung mit Code/Test/Run.
- MUST: Schritte entsprechen Use Cases.
- MUST: Abweichungen verlinken Task.
- MUST: kein einsatzbereit bei P0; DB-Inhalte migriert.

## Harte Quality Gateways

- Linkcheck 0 tote Links.
- Traceability jeder Rechnungsschritt.
- Reales PDF stimmt feldweise.
- Neuaufbau-DB gleiche Slugs.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- DB: Doku/Prozesse/Schritte/Artefakte/Links.
- Datei: planung/prozess-rechnung.md und Migrationen.

## Code-Impact-Analyse

- Beseitigt falsche Einsatzreife.
- Doku wird Release-Gateway.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Betrieb folgt falscher Doku | hoch | hoch |
| DB-Inhalt verloren/Drift | hoch | kritisch |

## Strategie zur Risikonullierung

1. Prevent: Traceability/Migration.
2. Detect: Link/Drift/Evidenz.
3. Contain: P0 blockiert Release.
4. Recover: Baseline.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p1,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('37','task-versionskontrolle-und-reproduzierbare-quality-toolchain','F18 Versionskontrolle und reproduzierbare Quality-Toolchain herstellen','# Versionskontrolle und reproduzierbare Quality-Toolchain herstellen

**Finding:** F18  
**Priorität:** P2  
**Status:** OFFEN  
**Stand:** 2026-07-16

## Problembeschreibung

- Projektpfad ist kein Git-Repository.
- Kein Composer-, PHPUnit- oder PHPStan-Projektmanifest; globale Tools sind nicht gepinnt.
- Direkte DB-Änderungen ohne Migrationstracking lassen Code/DB/Doku keinem Release zuordnen.

## Ziel

Jeder Release aus Code, DB, Doku und Qualitykonfiguration ist versioniert, reproduzierbar und rollbackfähig.

## Aufgabe

1. Autoritativen Repository-Checkout herstellen.
2. Qualitytools/-config versionieren und Runtime trennen.
3. Commit-/Release-ID in Deploy/Doku.
4. CI-Gates für Syntax, Tests, PHPStan, LOC, Secrets, Migration.

## Scope

- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

## Harte Spezifikation

- MUST: Produktion referenziert immutable Artefakt.
- MUST: Toolversionen reproduzierbar.
- MUST: Secrets/PDF/State/Logs nie versioniert.
- MUST: Release bindet Migration/Doku; Rollback getestet.

## Harte Quality Gateways

- Sauberer Checkout reproduziert Offline-Gates.
- Secret-/Large-file-Scan vor Initialcommit 0.
- Deploy zeigt Commit/Migration/Doku.
- Rollback ohne DB-Datenverlust.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

## Code Blast

- VCS/CI/Ignore/Deploymetadaten.
- Kein unmittelbarer Fachcodewechsel.

## Code-Impact-Analyse

- Mehr Audit-/Rollbackfähigkeit.
- Initialimport braucht Secret-/Datenprüfung.

## Risikoanalyse

| Risiko | Eintritt | Schaden |
|---|---|---|
| Nicht rollbackfähige Änderung | hoch | hoch |
| Initialcommit enthält Secrets/Tooldrift | mittel | kritisch |

## Strategie zur Risikonullierung

1. Prevent: Ignore/Secretgates.
2. Detect: CI/Fingerprint.
3. Contain: immutable Artefakte.
4. Recover: Rollback/DB Roll-forward.

## Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.','{task,supervision,p2,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
INSERT INTO public."dokumentation" ("id","slug","titel","body","tags","created_at","updated_at") OVERRIDING SYSTEM VALUE VALUES('38','task-supervision-gesamtbefund','Supervision Gesamtbefund Rechnungssystem','# Vollständige Supervision: Gesamtbefund

**Stand:** 2026-07-16  
**Bewertung:** NICHT EINSATZBEREIT für unbeaufsichtigte produktive Buchungen  
**Befunde:** 10 P0, 7 P1, 1 P2

## Prüfumfang

- code-rules.yaml, PHP, Rechnungssystem, Node/Playwright, SQL und reale DB.
- Syntax, JSON, PHPUnit, PHPStan Level 8 und nichtkommentierte LOC.
- Credential-Schemata redigiert, Dateirechte, Code-Spiegel, State und reales PDF mit SHA-256/Textabgleich.
- Offizieller Lexware-Vertrag: https://developers.lexware.io/docs/ .

## Faktische Kernergebnisse

- PHPUnit: 22 Tests/54 Assertions grün; 0 Rechnungstests.
- PHPStan Level 8: 58 Fehler; 5 Dateien über 150 LOC.
- Vor Taskanlage: 24 Public-Tabellen, 0 Migrationstracking, 19 Dokus, 26 Prozesse, 10 Rechnungsprozesse.
- Reales PDF: Kopien byteidentisch; PDF-Datum 04.07.2026, State-Datum 14.07.2026.
- /code spiegelt Rechnungs-State/Deploymentskript; Doku-POST ist anonym/CSRF-ungeschützt.
- Migration 0008 würde aktuellen Doku-/Prozessstand löschen.

## Findings

| ID | Priorität | Task | Status |
|---|---|---|---|
| F01 | P0 | [Rechnungs-Posting transaktional und Exactly-Once absichern](/doku/task-rechnungs-posting-exactly-once) | OFFEN |
| F02 | P0 | [Fachliche Rechnungsidentität und Duplikatschutz korrigieren](/doku/task-rechnungs-identitaet-und-duplikate) | OFFEN |
| F03 | P0 | [Rechnungsextraktion fachlich korrekt und belegbar machen](/doku/task-rechnungs-extraktion-fachliche-korrektheit) | OFFEN |
| F04 | P0 | [Rechnungs-State korruptions- und parallelitätssicher machen](/doku/task-rechnungs-state-integritaet-und-parallelitaet) | OFFEN |
| F05 | P0 | [Lexware-API-Vertrag und Lieferantenabgleich korrigieren](/doku/task-lexware-api-vertrag-und-kontaktabgleich) | OFFEN |
| F06 | P0 | [Wetell-Download gegen SSRF und falsche Dokumente härten](/doku/task-wetell-download-integritaet-und-ssrf) | OFFEN |
| F07 | P1 | [Playwright-Service sicher, begrenzt und instanztreu betreiben](/doku/task-playwright-service-haertung-und-lifecycle) | OFFEN |
| F08 | P1 | [Wetell-Adapterwahl und Session-Fallback deterministisch machen](/doku/task-wetell-adapter-session-und-fallback) | OFFEN |
| F09 | P0 | [Dokumentationsänderungen authentisieren und gegen CSRF schützen](/doku/task-dokumentation-schreibschutz-und-csrf) | OFFEN |
| F10 | P0 | [Öffentlichen Code-Spiegel von Datenabfluss und GET-Seiteneffekten trennen](/doku/task-code-spiegel-datenabfluss-und-safe-get) | OFFEN |
| F11 | P0 | [Credentials, Rechnungsdateien und Aufbewahrung absichern](/doku/task-credentials-dateirechte-und-aufbewahrung) | OFFEN |
| F12 | P0 | [Migrationen zerstörungsfrei, nachvollziehbar und driftfrei machen](/doku/task-migrationssicherheit-und-datenbankdrift) | OFFEN |
| F13 | P1 | [PHPStan-Level-8 und harte Code-Regeln vollständig erfüllen](/doku/task-phpstan-und-code-rules-konformitaet) | OFFEN |
| F14 | P1 | [Rechnungssystem mit Unit-, Contract- und End-to-End-Tests absichern](/doku/task-rechnungstests-und-fehlerinjektion) | OFFEN |
| F15 | P1 | [Fehlerklassifikation, Logging und Betriebsnachweis belastbar machen](/doku/task-fehlerklassifikation-logging-und-datenschutz) | OFFEN |
| F16 | P1 | [Betriebsreife, Service-Management und Abhängigkeiten herstellen](/doku/task-betriebsreife-deployment-und-abhaengigkeiten) | OFFEN |
| F17 | P1 | [Dokumentation und Prozessmodell an den belegten Ist-Stand angleichen](/doku/task-dokumentations-kongruenz-und-fachabnahme) | OFFEN |
| F18 | P2 | [Versionskontrolle und reproduzierbare Quality-Toolchain herstellen](/doku/task-versionskontrolle-und-reproduzierbare-quality-toolchain) | OFFEN |

## Globale Release-Regel

1. Alle P0 sind erledigt und unabhängig verifiziert.
2. PHPStan, PHPUnit, Node, LOC, Secret, Permission, Migration und Link-Gates liefern 0 Fehler.
3. Ein isolierter E2E-Lauf belegt Download, Extraktion, Kontakt, Exactly-once-Posting und Wiederanlauf.
4. Erst danach ist einsatzbereit zulässig.','{task,supervision,index,offen}','2026-07-16 18:39:13.335375+02','2026-07-16 18:39:13.335375+02') ON CONFLICT ("id") DO UPDATE SET "slug"=EXCLUDED."slug","titel"=EXCLUDED."titel","body"=EXCLUDED."body","tags"=EXCLUDED."tags","created_at"=EXCLUDED."created_at","updated_at"=EXCLUDED."updated_at" WHERE (public."dokumentation"."slug",public."dokumentation"."titel",public."dokumentation"."body",public."dokumentation"."tags",public."dokumentation"."created_at",public."dokumentation"."updated_at") IS DISTINCT FROM (EXCLUDED."slug",EXCLUDED."titel",EXCLUDED."body",EXCLUDED."tags",EXCLUDED."created_at",EXCLUDED."updated_at");
DO $sequence$ BEGIN IF has_sequence_privilege(current_user, pg_get_serial_sequence('public.dokumentation','id'), 'UPDATE') THEN PERFORM setval(pg_get_serial_sequence('public.dokumentation','id'), GREATEST(COALESCE((SELECT max(id) FROM public."dokumentation"),1),1), true); END IF; END $sequence$;

INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('2','1') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('3','2') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('4','3') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('5','4') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('6','5') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('7','6') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('8','7') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('9','8') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('10','9') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('11','10') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('12','11') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('13','12') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('14','13') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('15','14') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('16','15') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('17','16') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('18','27') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('18','28') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('18','29') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('18','30') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('18','31') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('18','32') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('18','33') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('18','34') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('18','35') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;
INSERT INTO public."doku_prozess" ("doku_id","prozess_id") VALUES('18','36') ON CONFLICT ("doku_id","prozess_id") DO NOTHING;

INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','68') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','69') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','70') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','71') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','72') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','73') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','74') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','75') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','76') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','77') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','78') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','79') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','80') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','81') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','82') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','83') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','84') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','85') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','86') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','87') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','88') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','89') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','90') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','91') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','92') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','93') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','94') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','95') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','96') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','97') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','98') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','99') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','100') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','101') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','102') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','103') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','104') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','105') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;
INSERT INTO public."doku_prozess_schritt" ("doku_id","schritt_id") VALUES('18','106') ON CONFLICT ("doku_id","schritt_id") DO NOTHING;