Files
scan-receipts/scripts/test_structured.mjs
Timo 84b9987c49 Add full application: receipt scanning, auth, billing, and account deletion
Brings the working codebase (Next.js app, auth system, Stripe billing,
Docker/deploy config, tests, docs) into version control on top of the
placeholder initial commit, and adds account self-deletion (Danger Zone
in Settings, password + typed-email confirmation, cascading DB cleanup,
Stripe cancellation) per GDPR right-to-erasure.

Excludes local build caches, node_modules, and internal agent scratch
files; .gitignore hardened to keep those out going forward.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-19 20:59:04 +02:00

48 lines
1.5 KiB
JavaScript

import fs from "fs";
import { generateObject } from "ai";
import { createOpenAI } from "@ai-sdk/openai";
import { ReceiptExtractionSchema } from "../src/lib/schema/receipt.ts";
const envContent = fs.readFileSync(".env.local", "utf-8");
const apiKeyMatch = envContent.match(/OPENROUTER_API_KEY=([^\r\n]+)/);
const apiKey = apiKeyMatch ? apiKeyMatch[1].trim() : "";
const demoImgPath = "public/demo/01_aral_tankbeleg_muenchen.jpg";
const imgBase64 = fs.readFileSync(demoImgPath).toString("base64");
const dataUrl = `data:image/jpeg;base64,${imgBase64}`;
async function testStructuredExtraction() {
console.log("Testing structured object extraction with OpenRouter openai/gpt-4o-mini...");
const openrouter = createOpenAI({
apiKey,
baseURL: "https://openrouter.ai/api/v1",
headers: {
"HTTP-Referer": "http://localhost:3000",
"X-Title": "Receipt Scanner to Excel",
},
});
const { object } = await generateObject({
model: openrouter("openai/gpt-4o-mini"),
schema: ReceiptExtractionSchema,
messages: [
{
role: "system",
content: "Du bist ein präziser Belegscanner. Extrahiere alle Daten im vorgegebenen Schema.",
},
{
role: "user",
content: [
{ type: "text", text: "Extrahiere diesen Beleg vollständig:" },
{ type: "image", image: dataUrl },
],
},
],
});
console.log("Extracted Object:", JSON.stringify(object, null, 2));
}
testStructuredExtraction().catch(console.error);