import { z } from "zod"; //#region src/schemas/session.d.ts /** * One companion on the arriving party. Every field is optional so an * identified guest (`ref` + `model`), a named walk-in (`name`), and an * anonymous head-count all validate through ONE shape. */ /** * STRICT throughout — an unknown key is a 400, never a silent strip. * * These were `z.object()`, whose default is to DROP unrecognised keys. For a command * schema that is not lenient, it is lossy in the dangerous direction: * * - `idempotencyKeey` — accepted, dropped, and device-replay DEDUPLICATION is now off. * The punch double-posts and nothing reports a problem. * - `companionCounnt` — accepted, dropped, occupancy undercounts by the whole party. * - `scheduledStrat` — accepted, dropped, lateness is computed against no schedule. * * Every one produces a plausible record rather than an error, which is exactly the * failure mode this codebase is built against (AGENTS.md FAIL LOUD, rule 2: an input you * do not understand must FAIL, not widen). Nested objects — companion, geo, device — are * strict too, because that is where a typo is easiest to make and hardest to see. */ declare const companionSchema: z.ZodObject<{ ref: z.ZodOptional; model: z.ZodOptional; name: z.ZodOptional; relation: z.ZodOptional; }, z.core.$strict>; /** POST /attendance/sessions/actions { action: 'checkIn' } */ declare const checkInSchema: z.ZodObject<{ subjectRef: z.ZodString; subjectModel: z.ZodString; scope: z.ZodOptional; sessionKind: z.ZodOptional; method: z.ZodEnum<{ biometric: "biometric"; facial: "facial"; geofence: "geofence"; kiosk: "kiosk"; manual: "manual"; mobile: "mobile"; qr: "qr"; rfid: "rfid"; unknown: "unknown"; }>; occurredAt: z.ZodOptional>; scheduledStart: z.ZodOptional>; scheduledEnd: z.ZodOptional>; geo: z.ZodOptional; }, z.core.$strict>>; device: z.ZodOptional; ip: z.ZodOptional; userAgent: z.ZodOptional; }, z.core.$strict>>; note: z.ZodOptional; metadata: z.ZodOptional>; idempotencyKey: z.ZodOptional; companionCount: z.ZodOptional; companions: z.ZodOptional; model: z.ZodOptional; name: z.ZodOptional; relation: z.ZodOptional; }, z.core.$strict>>>; }, z.core.$strict>; /** POST /attendance/sessions/:id/actions { action: 'checkOut' } */ declare const checkOutSchema: z.ZodObject<{ method: z.ZodEnum<{ biometric: "biometric"; facial: "facial"; geofence: "geofence"; kiosk: "kiosk"; manual: "manual"; mobile: "mobile"; qr: "qr"; rfid: "rfid"; unknown: "unknown"; }>; occurredAt: z.ZodOptional>; geo: z.ZodOptional; }, z.core.$strict>>; device: z.ZodOptional; ip: z.ZodOptional; userAgent: z.ZodOptional; }, z.core.$strict>>; note: z.ZodOptional; idempotencyKey: z.ZodOptional; }, z.core.$strict>; /** * POST /attendance/punch — a direction-less device tap (biometric terminal, * RFID turnstile). The engine resolves check-in vs check-out; the * `idempotencyKey` (`SN:PIN:timestamp`) makes device-batch replays no-ops. */ declare const punchSchema: z.ZodObject<{ subjectRef: z.ZodString; subjectModel: z.ZodString; scope: z.ZodOptional; sessionKind: z.ZodOptional; method: z.ZodEnum<{ biometric: "biometric"; facial: "facial"; geofence: "geofence"; kiosk: "kiosk"; manual: "manual"; mobile: "mobile"; qr: "qr"; rfid: "rfid"; unknown: "unknown"; }>; occurredAt: z.ZodOptional>; geo: z.ZodOptional; }, z.core.$strict>>; device: z.ZodOptional; ip: z.ZodOptional; userAgent: z.ZodOptional; }, z.core.$strict>>; note: z.ZodOptional; metadata: z.ZodOptional>; idempotencyKey: z.ZodOptional; }, z.core.$strict>; /** POST /attendance/sessions/:id/actions { action: 'breakStart' | 'breakEnd' } */ declare const breakSchema: z.ZodObject<{ method: z.ZodOptional>; occurredAt: z.ZodOptional>; geo: z.ZodOptional; }, z.core.$strict>>; device: z.ZodOptional; ip: z.ZodOptional; userAgent: z.ZodOptional; }, z.core.$strict>>; note: z.ZodOptional; }, z.core.$strict>; /** POST /attendance/sessions/:id/actions { action: 'cancel' } */ declare const cancelSessionSchema: z.ZodObject<{ reason: z.ZodString; occurredAt: z.ZodOptional>; }, z.core.$strict>; type CheckInBody = z.infer; type CheckOutBody = z.infer; type PunchBody = z.infer; type BreakBody = z.infer; type CancelSessionBody = z.infer; //#endregion export { BreakBody, CancelSessionBody, CheckInBody, CheckOutBody, PunchBody, breakSchema, cancelSessionSchema, checkInSchema, checkOutSchema, companionSchema, punchSchema };