from dataclasses import dataclass from datetime import date from typing import Literal, NewType, Union PlaceRef = NewType("PlaceRef", str) SlotCode = Literal["AM", "PM", "AD"] @dataclass(frozen=True) class LogJobRequest: client_ref: str place_ref: PlaceRef appointment_date: date appointment_time: SlotCode short_description: str long_description: str @dataclass(frozen=True) class JobLogged: job_no: str logged_info: str @dataclass(frozen=True) class AbriRequestRejected: code: str message: str LogJobResult = Union[JobLogged, AbriRequestRejected]