Merge lane/berichte in feature/craftvia-mvp

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 12:23:34 +02:00
co-authored by Claude Opus 5
57 changed files with 4781 additions and 6 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ export type JobProcessor = (payload: JobPayload) => Promise<void>;
export const PROCESSORS: Partial<Record<JobQueueName, () => Promise<JobProcessor>>> = {
"import-extraction": () => import("./import-extraction").then((m) => m.process),
// lane-lotse: "transcription": () => import("./transcription").then((m) => m.process),
// lane-reports: "report-pdf": () => import("./report-pdf").then((m) => m.process),
"report-pdf": () => import(/* turbopackIgnore: true */ "./report-pdf").then((m) => m.process), // worker-only (react-dom/server + Chromium), kept out of the app bundle
// lane-field: "image-derivatives": () => import("./image-derivatives").then((m) => m.process),
};
+19
View File
@@ -0,0 +1,19 @@
import { dbForTenant } from "@/server/db";
import type { ServiceCtx } from "@/server/services/context";
import { generateReportPdf } from "@/server/services/reports/pdf";
import type { JobPayload } from "../queues";
/**
* Queue "report-pdf": renders the PDF of an approved report (lane L5).
* System context: tenant-bound db, read access to all reports of the tenant — nothing else.
*/
export async function process(payload: JobPayload): Promise<void> {
const ctx: ServiceCtx = {
db: dbForTenant(payload.tenantId),
tenantId: payload.tenantId,
userId: payload.actorId ?? "system",
permissions: new Set(["report:read", "work_order:read_all", "document:read_internal"]),
};
const res = await generateReportPdf(ctx, payload.entityId);
console.info(`[report-pdf] ${payload.entityId}: ${res.skipped ? "already rendered" : `stored ${res.documentId}`}`);
}