What's really used after that call is the visit object and not the origin one.
Before:
def origin_visit_add( self, origin: Origin, date: Union[datetime.datetime, str], type: str) -> Optional[Dict[str, BaseModel]]:
After:
def origin_visit_add( self, origin: Origin, date: Union[str, datetime.datetime], type: str) -> OriginVisit:
Might as well remove the indirection
Depends on D2820