/** * This file was auto-generated by openapi-typescript. * Do not make direct changes to the file. */ interface paths { "/hr/rules/resolve": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Resolve every rule class for a subject, returning §2 * @description Resolve every rule class for a subject, returning §2.6's resolution result verbatim INCLUDING the full trace of every candidate considered. Writes no snapshot. */ post: operations["hr_rules_resolve"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/validate/config": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Validate an org's parameters for one rule class * @description Validate an org's parameters for one rule class. On invalid the caller gets 200 WITH violations, not a 4xx — the admin UI calls this on every keystroke. The same predicate returns 422 hr_unlawful_config on submit. */ post: operations["hr_validate_config"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/calc/overtime": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Overtime for one workweek * @description Overtime for one workweek. The workweek is the OT unit, never the pay period (AR 1.5). Multi-rate weeks return weighted_average_regular_rate (AR 1.6). subject.type=hr_workweek. */ post: operations["hr_calc_overtime"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/calc/break-premium": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Meal/rest premiums for one work date * @description Meal/rest premiums for one work date. Premiums are interval_kind='premium_only', hours=1.0, MEAL_PREMIUM/REST_PREMIUM. subject.type=hr_workweek, parameters.work_date names the day. */ post: operations["hr_calc_break_premium"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/calc/leave-accrual": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Accrual for one enrollment through a date * @description Accrual for one enrollment through a date. Per-hours-worked accrual reads the TIMESHEET, not the pay period (AR 1.8). subject.type=hr_leave_enrollment. */ post: operations["hr_calc_leave_accrual"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/calc/carryover": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Plan-year carryover * @description Plan-year carryover. Carryover legality clamps org config and the clamp appears in clamps[]. subject.type=hr_leave_enrollment. */ post: operations["hr_calc_carryover"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/calc/termination-payout": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Final payout at termination * @description Final payout at termination. A $0 payout STILL writes a snapshot — the evidence that we checked. subject.type=hr_employment. */ post: operations["hr_calc_termination_payout"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/calc/predictability-pay": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Fair-workweek predictability pay * @description Fair-workweek predictability pay. subject.type=hr_schedule_change. Where the ordinance rule is advisory the money field is OMITTED and flags[] explains — never a zero. */ post: operations["hr_calc_predictability_pay"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/calc/training-mandates": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Training mandates for a trigger * @description Training mandates for a trigger. Additive: every applicable mandate produces its own assignment. subject.type=hr_employment. */ post: operations["hr_calc_training_mandates"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/calc/retention-due": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Retention disposition date for a record * @description Retention disposition date for a record. Legal hold overrides everything; absence of a rule NEVER authorizes destruction. subject.type=hr_record_class. */ post: operations["hr_calc_retention_due"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/calc/i9-deadlines": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * I-9 Section 1/2/reverification deadlines * @description I-9 Section 1/2/reverification deadlines. Rules-as-data replaces SPEC-ONBOARDING's in-code Section-2 arithmetic: business-day counting against the FEDERAL calendar, never the org's holiday calendar. subject.type=hr_i9. */ post: operations["hr_calc_i9_deadlines"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/time/recompute": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Pair punches, apply the neutral rounding bound, write work intervals, roll up workweeks, evaluate rules * @description Pair punches, apply the neutral rounding bound, write work intervals, roll up workweeks, evaluate rules. Recomputation NEVER deletes — superseded rows get is_current=false. Refuses 423 hr_period_locked against a locked/closed period. */ post: operations["hr_time_recompute"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/time/exceptions/scan": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Attendance-exception detector over a window: variance, no-show, late/early against the grace knobs, unscheduled work, wo * @description Attendance-exception detector over a window: variance, no-show, late/early against the grace knobs, unscheduled work, worked-through-break, orphan-punch auto-close. dry_run:true writes nothing. */ post: operations["hr_time_exceptions_scan"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/time/overtime/evaluate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Approaching-OT evaluator for one employment — cheap enough for a clock screen on every punch * @description Approaching-OT evaluator for one employment — cheap enough for a clock screen on every punch. ALWAYS prospective: it projects, it never writes hours. Daily thresholds are not optional (an 8-hour CA day triggers OT regardless of the weekly total). */ post: operations["hr_time_overtime_evaluate"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/time/overtime/scan": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * The async sweep behind the real-time alerts * @description The async sweep behind the real-time alerts. Idempotent per (employment_id, workweek_id, threshold_key) so a 15-minute cadence does not alert four times an hour. Runs on the dedicated worker lane (§1.5b). Which roles receive which tier is D24g routing resolved from configuration, never a list in code. */ post: operations["hr_time_overtime_scan"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/accruals/run": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Accrual run * @description Accrual run. The ledger is append-only and immutable — an error is a reversal entry, never an edit — so a re-run over an already-accrued window writes nothing and the endpoint is idempotent by construction as well as by header. */ post: operations["hr_accruals_run"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/accruals/carryover/run": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Plan-year carryover run * @description Plan-year carryover run. A statutory floor that overrides org policy is counted in clamped_by_statute and recorded in each snapshot's clamps[]. */ post: operations["hr_accruals_carryover_run"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/schedule/draft": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Create shifts from nothing — a template or rotating pattern plus staffing requirements and labor targets — into a draft * @description Create shifts from nothing — a template or rotating pattern plus staffing requirements and labor targets — into a draft schedule. DIFFERENT JOB from autofill, which assigns people to shifts that already exist. */ post: operations["hr_schedule_draft"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/schedule/autofill": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Assign people to open shifts * @description Assign people to open shifts. Every null constraint means 'resolve the knob' (D13) — a caller may override for a one-off run, never embed a default. recommend and review_and_comment postures write NOTHING; only apply_final writes. */ post: operations["hr_schedule_autofill"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/schedule/{schedule_id}/validate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Pre-publish gate: double-booking, OT projection, rest periods, credential expiry, approved-leave exclusion, minors, fair * @description Pre-publish gate: double-booking, OT projection, rest periods, credential expiry, approved-leave exclusion, minors, fair-workweek notice window. THE SAME CODE PATH the swap checker uses — one conflict engine, never a second that drifts. */ post: operations["hr_schedule_validate"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/exports/formats": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * The format registry, so the client never hard-codes a list * @description The format registry, so the client never hard-codes a list. export_format is a closed set of six; a seventh is a schema change plus a §7 amendment. */ get: operations["hr_exports_formats_list"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/exports/payroll/preview": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Synchronous dry run * @description Synchronous dry run. Creates NO hr.payroll_export row — a separate endpoint precisely so that looking is not an act with a record. */ post: operations["hr_exports_payroll_preview"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/exports/payroll": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Generate the payroll artifact * @description Generate the payroll artifact. REFUSES 422 hr_advisory_rule_blocks_money rather than omitting an amount — a payroll file with a silently-missing premium is the exact failure that rule exists to prevent. 400 with details.unmapped[] rather than blanks in an identifier column. */ post: operations["hr_exports_payroll_create"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/exports/timesheet": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * The human-readable sibling: the same intervals rendered as a timesheet report * @description The human-readable sibling: the same intervals rendered as a timesheet report. Writes an access_audit row and does NOT create a payroll_export row — conflating the two would let a report supersede a payroll file. */ post: operations["hr_exports_timesheet_create"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/exports/{export_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Export state and metadata * @description Export state and metadata. */ get: operations["hr_exports_get"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/exports/{export_id}/artifact": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Returns the REFERENCE envelope, never bytes * @description Returns the REFERENCE envelope, never bytes. file_id is the identity and download_url is the durable, per-request-authenticated /files/{file_id}/download route — nothing expires and nothing is signed, so the whole envelope is safe to persist. */ get: operations["hr_exports_artifact_get"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/exports/{export_id}/acknowledge": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * sent -> acknowledged * @description sent -> acknowledged. acknowledgement_ref is the receiving system's, opaque to us. After this the export can NEVER be superseded, regenerated or re-sent. */ post: operations["hr_exports_acknowledge"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/exports/{export_id}/fail": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * generated|sent -> failed * @description generated|sent -> failed. Failure is recorded, not swallowed. */ post: operations["hr_exports_fail"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/exports/{export_id}/supersede": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * generated|failed -> superseded, generating a new export at version n+1 * @description generated|failed -> superseded, generating a new export at version n+1. 🚨 An ACKNOWLEDGED export can never be superseded: 409 hr_export_already_acknowledged. Once payroll has taken the file the only correction path is an adjustment row in the NEXT export, because a re-export double-pays. */ post: operations["hr_exports_supersede"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/providers/{seam}/bindings": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * The org's bindings for a seam, minus every secret * @description The org's bindings for a seam, minus every secret. */ get: operations["hr_providers_bindings_list"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/providers/{seam}/dispatch": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * The edge OUT * @description The edge OUT. On completion the engine has written outbound_sent_at, outbound_request_ref and an outbound_payload_summary — A SUMMARY, NEVER THE PAYLOAD, because the payload carries PII our own tables should not duplicate. */ post: operations["hr_providers_dispatch"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/providers/{seam}/results": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * The org-recorded path — D12's actual first shipping mode (path='manual') * @description The org-recorded path — D12's actual first shipping mode (path='manual'). Same body shape the webhook produces after mapping, so the manual path and the provider path converge on ONE writer. */ post: operations["hr_providers_results_record"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/providers/{seam}/sync": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Poll the black box for results * @description Poll the black box for results. The resolution path for MCP bindings, which have no webhook lane. */ post: operations["hr_providers_sync"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hooks/providers/{seam}/{provider_key}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * The edge IN * @description The edge IN. Deliberately outside /hr/* because it carries no user bearer token. Verifies an HMAC over the raw body, rejects a timestamp outside the skew knob, and is idempotent on (provider_key, provider_event_id) so a provider retrying five times produces ONE state change. Returns 202 for an event it recognizes but does not map, so a provider never sees a failure for an event we simply do not consume. */ post: operations["hr_hooks_provider_webhook"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/background-checks/{check_id}/request": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * The FCRA-gated front door to dispatch * @description The FCRA-gated front door to dispatch. Refuses 400 unless disclosure_presented_at AND authorized_at are both set — a standalone disclosure and a separate authorization, in that order. */ post: operations["hr_background_checks_request"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/background-checks/{check_id}/adverse-action/pre": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Sends the pre-adverse notice with the report copy and summary of rights through the e-sign/notification lanes — never a * @description Sends the pre-adverse notice with the report copy and summary of rights through the e-sign/notification lanes — never a bespoke sender — and sets candidate_response_deadline_at from the statutory waiting period. */ post: operations["hr_background_checks_adverse_action_pre"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/background-checks/{check_id}/adverse-action/final": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Returns 409 hr_state_conflict with details * @description Returns 409 hr_state_conflict with details.earliest_at if called BEFORE the statutory deadline. The waiting period being enforced in code rather than trusted to a human is the entire reason these are endpoints and not a status dropdown. */ post: operations["hr_background_checks_adverse_action_final"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/new-hire-reports/generate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * State new-hire report artifact for a batch of employments * @description State new-hire report artifact for a batch of employments. REQUIRES the employer profile's EIN and returns 400 with details.missing:['employer_profile.ein'] when absent — a hard failure rather than a blank field in a government file. */ post: operations["hr_new_hire_reports_generate"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/new-hire-reports/{report_id}/record-submission": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Record the confirmation an org got back from the portal or the mail * @description Record the confirmation an org got back from the portal or the mail. */ post: operations["hr_new_hire_reports_record_submission"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/verification-letters/{letter_id}/generate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Renders the letter and FREEZES exactly what it asserted into snapshot, because a letter is an assertion the org will be * @description Renders the letter and FREEZES exactly what it asserted into snapshot, because a letter is an assertion the org will be held to. 403 when includes_compensation is true and employee_consent_at is null — the DB CHECK enforces the same thing so the two cannot drift. */ post: operations["hr_verification_letters_generate"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/i9/inspection-export": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * The I-9 inspection package for a government audit: the form set, its versions, the timing evidence, and a manifest * @description The I-9 inspection package for a government audit: the form set, its versions, the timing evidence, and a manifest. Reads the separate I-9 storage lane, writes an access_audit row with action='export', gated to i9.inspect alone. */ post: operations["hr_i9_inspection_export"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/identity/{identity_id}/ssn/reveal": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * The ONE confidential operation that is server-side, and only because a Postgres RPC cannot decrypt * @description The ONE confidential operation that is server-side, and only because a Postgres RPC cannot decrypt. Runs as the calling user, requires a justification, writes access_audit action='reveal', RETURNS THE VALUE ONCE with Cache-Control: no-store, never caches. Crossing the daily threshold raises an alert AND STILL RETURNS THE VALUE — an alarm is not a denial. */ post: operations["hr_identity_ssn_reveal"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/hr/outsider-tokens/mint": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Mints a platform * @description Mints a platform.outsider_token. Server-side only — never by a browser, never by anon. The SECRET IS RETURNED EXACTLY ONCE, to the sender, and goes straight into the outbound message; every later read returns a masked prefix. */ post: operations["hr_outsider_tokens_mint"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/careers/{org_slug}/openings": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Public openings list * @description Public openings list. Projects the posting ONLY — never requisition budget or range (comp data), applicant counts, or hiring-team identities. An org with the portal disabled returns 404, never a differently-shaped error that confirms it exists. */ get: operations["hr_careers_openings_list"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/careers/{org_slug}/openings/{posting_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * One public opening * @description One public opening. */ get: operations["hr_careers_opening_get"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/careers/widget/bootstrap": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * The widget's single call * @description The widget's single call. VERIFIES THE Origin HEADER against the embed_key's allowlist and returns 403 otherwise, so a stolen key cannot be embedded elsewhere. The key is public by nature — it is in a