import { initContract } from '@ts-rest/core'; import { z } from 'zod'; import { analyzeInvoiceResponseSchema, confirmRestockSchema, } from '../schemas/shopkeeper-vision.schemas'; import { errorResponseSchema, insufficientTokensErrorSchema } from '../schemas/common.schemas'; const c = initContract(); export const shopkeeperVisionContract = c.router({ analyzeInvoice: { method: 'POST', path: '/shopkeeper/vision/invoice', contentType: 'multipart/form-data', body: z.object({ file: z.any() }), responses: { 200: analyzeInvoiceResponseSchema, 400: errorResponseSchema, 401: errorResponseSchema, 402: insufficientTokensErrorSchema, }, summary: 'Upload image and return parsed invoice items', }, confirmRestock: { method: 'POST', path: '/shopkeeper/vision/confirm', body: confirmRestockSchema, responses: { 200: z.object({ stockMovements: z.array( z.object({ productId: z.string().uuid(), productName: z.string(), quantity: z.number(), balanceAfter: z.number(), }), ), }), 400: errorResponseSchema, 401: errorResponseSchema, }, summary: 'Commit parsed invoice items to inventory', }, });