01must proveConfirmed | Generation creates one to five years, defaulting to one, after the latest existing year or, with no calendar, from the unit’s fiscal year containing the workspace’s current month. | calculation | api, service | test |
02must proveConfirmed | January-start years use one calendar-year name, other years use both calendar years, and each has twelve open monthly periods named with two-digit period suffixes. ✓ A valid configuration completes the stated operation. | calculation | service | test |
03must proveConfirmed | No generated year starts after the calendar date five years from the workspace’s current date, using February 28 for a leap-day anniversary in a common year, and an out-of-range request writes no years. | validation | service | test |
04must proveConfirmed | At commit the database requires month-boundary years, uninterrupted succession and exactly twelve monthly periods matching each year. | invariant | database | test |
05must proveConfirmed | Only the year name is editable; attempts to change dates, status or periods are refused, and renamed years retain the existing period names. | lifecycle | service | test |
06must proveConfirmed | Only the unit’s latest year can be deleted, with every period still open, and an older-year refusal identifies the latest year. | lifecycle | service | test |
07must proveConfirmed | A year becomes closed when every period closes and reopens when a period reopens; period-status changes belong to fiscal close rather than configuration. | invariant | database | test |
08must proveConfirmed | Generation uses the workspace’s date and time zone rather than the server’s date. | calculation | service | test |
09Confirmed | Year lists order by start date and unit, include each year’s twelve periods and support unit and status filters. | policy | api, service | test |