Dataclasses generate the routine methods a value record needs, including construction and equality. You still choose the field rules. A list needs a default factory so each record receives a fresh container. A frozen record rejects field reassignment, while replace creates a revised copy without changing the original.
Enums give external strings a fixed vocabulary. Their member names and values have separate roles: an external system can send "queued" while your code uses Status.QUEUED. Unknown values deserve an explicit response. You will combine these ideas with ordered service windows and independent baskets. Sorting uses field declaration order, so choose that order deliberately. The checks retain duplicate windows and test both invalid states and unchanged original records.