- Shipped
- August 12, 2026 at 5:52 AM UTC
- Author
- Kamo
- Commit
- 00042e8
Batches the remaining wage-and-hour schema into one shared-lib change so the whole domain lands in a single KamoInitializer run rather than a migration per phase. Entities: pay periods with rule-version freeze columns, earning lines, break rules and violations, labor accounts and work segments, accrual policies, balances and ledger, leave cases, export batches, attendance occurrences. Four pure engines, 51 tests: BreakEvaluator — never auto-deducts a lunch, because an auto-deducted meal books an unpaid half hour the employer cannot prove was duty-free. Premiums are WAGES (Naranjo), so they flow into earnings rather than a report. One premium per CATEGORY per day (UPS v. Superior Court): two missed meals owe one, a missed meal plus a missed rest owe two. A meal waiver is honoured only where the statute permits one — an employee cannot consent outside it. Rests are unpunched, so silence on attestation is never scored as a violation. RegularRateCalculator — overtime is owed on the REGULAR rate, not the base rate. 778.115 weighted average, 778.209 retroactive overtime on nondiscretionary bonuses, 778.216/218 exclusions, and the half-time premium: straight time is already in the total, so overtime adds 0.5x, not 1.5x. AccrualEngine — a ceiling stops accrual without deleting balance, carryover is capped separately from the ceiling, and a deduction that would breach the floor throws rather than silently approving half a day off. PayPeriodCalendar — generated, not hand-entered, and verifyContiguous refuses a gap (work belonging to no period, never paid) or an overlap (paid twice).