from __future__ import annotations
from datetime import datetime
from typing import Any, Dict, List
from pydantic import Field, RootModel
from imednet.models.json_base import JsonModel
[docs]class Keyword(JsonModel):
"""A keyword or tag associated with a record."""
keyword_name: str = Field("", alias="keywordName")
keyword_key: str = Field("", alias="keywordKey")
keyword_id: int = Field(0, alias="keywordId")
date_added: datetime = Field(default_factory=datetime.now, alias="dateAdded")
pass
[docs]class Record(JsonModel):
"""A data record for a subject, form, and visit."""
study_key: str = Field("", alias="studyKey")
interval_id: int = Field(0, alias="intervalId")
form_id: int = Field(0, alias="formId")
form_key: str = Field("", alias="formKey")
site_id: int = Field(0, alias="siteId")
record_id: int = Field(0, alias="recordId")
record_oid: str = Field("", alias="recordOid")
record_type: str = Field("", alias="recordType")
record_status: str = Field("", alias="recordStatus")
deleted: bool = Field(False, alias="deleted")
date_created: datetime = Field(default_factory=datetime.now, alias="dateCreated")
date_modified: datetime = Field(default_factory=datetime.now, alias="dateModified")
subject_id: int = Field(0, alias="subjectId")
subject_oid: str = Field("", alias="subjectOid")
subject_key: str = Field("", alias="subjectKey")
visit_id: int = Field(0, alias="visitId")
parent_record_id: int = Field(0, alias="parentRecordId")
keywords: List[Keyword] = Field(default_factory=list, alias="keywords")
record_data: Dict[str, Any] = Field(default_factory=dict, alias="recordData")
pass
[docs]class RecordJobResponse(JsonModel):
"""Response for a record-related job (batch operations, etc)."""
job_id: str = Field("", alias="jobId")
batch_id: str = Field("", alias="batchId")
state: str = Field("", alias="state")
pass
[docs]class RecordData(RootModel[Dict[str, Any]]):
"""Arbitrary record data as a dictionary."""
pass
[docs]class BaseRecordRequest(JsonModel):
"""Base class for record creation/update requests."""
form_key: str = Field("", alias="formKey")
data: RecordData = Field(default_factory=lambda: RecordData({}), alias="data")
pass
[docs]class RegisterSubjectRequest(BaseRecordRequest):
site_name: str = Field(
"", alias="siteName", description="Name of the site where the subject is enrolled"
)
subject_key: str = Field(
"", alias="subjectKey", description="Unique identifier for the subject"
)
pass
[docs]class UpdateScheduledRecordRequest(BaseRecordRequest):
subject_key: str = Field("", alias="subjectKey")
interval_name: str = Field("", alias="intervalName")
pass
[docs]class CreateNewRecordRequest(BaseRecordRequest):
subject_key: str = Field("", alias="subjectKey")
pass