"""Application configuration management."""
import os

from dotenv import load_dotenv

if os.getenv('FLASK_ENV', 'development') != 'production':
    load_dotenv()

class Config: # pylint: disable=too-few-public-methods
    """Application configuration class."""
    MONGODB_URI = os.getenv('MONGODB_URI', 'mongodb://localhost:27017')
    MONGODB_DB_NAME = os.getenv('MONGODB_DB_NAME', 'hipograf')
    GROQ_API_KEY = os.getenv('GROQ_API_KEY', '')
    FLASK_ENV = os.getenv('FLASK_ENV', 'development')
    FLASK_DEBUG = os.getenv('FLASK_DEBUG', 'False').lower() == 'true'
    SECRET_KEY = os.getenv('SECRET_KEY', 'hipograf-dev-secret-change-me')
    AUTH_TOKEN_TTL_SECONDS = int(os.getenv('AUTH_TOKEN_TTL_SECONDS', '86400'))

swagger_template = {
    'openapi': '3.0.2',
    'info': {
        'title': 'Hipograf API',
        'version': '1.0.0',
        'description': 'API documentation for Hipograf backend services.',
    },
    'components': {
        'securitySchemes': {
            'BearerAuth': {
                'type': 'http',
                'scheme': 'bearer',
                'bearerFormat': 'JWT',
                'description': 'JWT token in the format: Bearer <token>',
            }
        },
        'schemas': {
            'AuthRegisterRequest': {
                'type': 'object',
                'required': ['username', 'email', 'password'],
                'properties': {
                    'username': {'type': 'string', 'minLength': 4},
                    'email': {'type': 'string', 'format': 'email'},
                    'password': {'type': 'string', 'minLength': 8},
                    'dispName': {'type': 'string'},
                    'residentCountry': {'type': 'string'},
                    'residentCity': {'type': 'string'},
                    'bloodType': {'type': 'string'},
                    'height': {'type': 'number'},
                    'weight': {'type': 'number'},
                    'allergies': {'type': 'array', 'items': {'type': 'string'}},
                    'sharingInfo': {'type': 'array', 'items': {'type': 'string'}},
                },
            },
            'AuthLoginRequest': {
                'type': 'object',
                'properties': {
                    'email': {'type': 'string', 'format': 'email'},
                    'username': {'type': 'string'},
                    'password': {'type': 'string', 'minLength': 1},
                },
                'required': ['password'],
                'anyOf': [
                    {'required': ['email', 'password']},
                    {'required': ['username', 'password']},
                ],
            },
            'UserCreateRequest': {
                'type': 'object',
                'required': ['username', 'dispName', 'email', 'passwdHash'],
                'properties': {
                    'username': {'type': 'string'},
                    'dispName': {'type': 'string'},
                    'email': {'type': 'string', 'format': 'email'},
                    'passwdHash': {'type': 'string'},
                    'roles': {'type': 'array', 'items': {'type': 'string'}},
                    'active': {'type': 'boolean'},
                    'residentCountry': {'type': 'string'},
                    'residentCity': {'type': 'string'},
                    'bloodType': {'type': 'string'},
                    'height': {'type': 'number'},
                    'weight': {'type': 'number'},
                    'allergies': {'type': 'array', 'items': {'type': 'string'}},
                    'sharingInfo': {'type': 'array', 'items': {'type': 'string'}},
                    'specialty': {'type': 'string'},
                    'hospital': {'type': 'string'},
                    'department': {'type': 'string'},
                    'title': {'type': 'string'},
                    'phoneNumber': {'type': 'string'},
                },
            },
            'UserUpdateRequest': {
                'type': 'object',
                'properties': {
                    'username': {'type': 'string', 'minLength': 4},
                    'dispName': {'type': 'string'},
                    'email': {'type': 'string', 'format': 'email'},
                    'roles': {'type': 'array', 'items': {'type': 'string'}},
                    'active': {'type': 'boolean'},
                    'residentCountry': {'type': 'string'},
                    'residentCity': {'type': 'string'},
                    'bloodType': {'type': 'string'},
                    'height': {'type': 'number'},
                    'weight': {'type': 'number'},
                    'allergies': {'type': 'array', 'items': {'type': 'string'}},
                    'sharingInfo': {'type': 'array', 'items': {'type': 'string'}},
                    'specialty': {'type': 'string'},
                    'hospital': {'type': 'string'},
                    'department': {'type': 'string'},
                    'title': {'type': 'string'},
                    'phoneNumber': {'type': 'string'},
                },
            },
            'HospitalCreateRequest': {
                'type': 'object',
                'required': ['trackingId', 'name', 'address'],
                'properties': {
                    'trackingId': {'type': 'string'},
                    'name': {'type': 'string'},
                    'address': {'type': 'string'},
                    'phoneNumber': {'type': 'string'},
                    'email': {'type': 'string', 'format': 'email'},
                },
            },
            'HospitalUpdateRequest': {
                'type': 'object',
                'properties': {
                    'trackingId': {'type': 'string'},
                    'name': {'type': 'string'},
                    'address': {'type': 'string'},
                    'phoneNumber': {'type': 'string'},
                    'email': {'type': 'string', 'format': 'email'},
                },
            },
            'DiagnosisCreateRequest': {
                'type': 'object',
                'required': ['patientId', 'practitioner', 'icdCode', 'hospital'],
                'properties': {
                    'patientId': {'type': 'string'},
                    'practitioner': {'type': 'string'},
                    'icdCode': {'type': 'string'},
                    'isPrediagnosis': {'type': 'boolean'},
                    'severity': {'type': 'string', 'enum': ['mild', 'moderate', 'severe']},
                    'hospital': {'type': 'string'},
                    'hospitalVisit': {'type': 'string'},
                    'diagnosisDate': {'type': 'string', 'format': 'date-time'},
                    'diagnosisClinic': {'type': 'string'},
                    'notes': {'type': 'string'},
                },
            },
            'DiagnosisUpdateRequest': {
                'type': 'object',
                'properties': {
                    'practitioner': {'type': 'string'},
                    'icdCode': {'type': 'string'},
                    'isPrediagnosis': {'type': 'boolean'},
                    'severity': {'type': 'string', 'enum': ['mild', 'moderate', 'severe']},
                    'hospital': {'type': 'string'},
                    'hospitalVisit': {'type': 'string'},
                    'diagnosisDate': {'type': 'string', 'format': 'date-time'},
                    'diagnosisClinic': {'type': 'string'},
                    'notes': {'type': 'string'},
                },
            },
            'HospitalVisitCreateRequest': {
                'type': 'object',
                'required': ['patientId', 'hospital'],
                'properties': {
                    'patientId': {'type': 'string'},
                    'hospital': {'type': 'string'},
                    'visitDate': {'type': 'string', 'format': 'date-time'},
                    'admissionDate': {'type': 'string', 'format': 'date-time'},
                    'dischargeDate': {'type': 'string', 'format': 'date-time'},
                    'doctorName': {'type': 'string'},
                    'department': {'type': 'string'},

                    'dischargeSummary': {'type': 'string'},
                    'diagnoses': {'type': 'array', 'items': {'type': 'string'}},
                },
            },
            'HospitalVisitUpdateRequest': {
                'type': 'object',
                'properties': {
                    'hospital': {'type': 'string'},
                    'visitDate': {'type': 'string', 'format': 'date-time'},
                    'admissionDate': {'type': 'string', 'format': 'date-time'},
                    'dischargeDate': {'type': 'string', 'format': 'date-time'},
                    'doctorName': {'type': 'string'},
                    'department': {'type': 'string'},

                    'dischargeSummary': {'type': 'string'},
                    'diagnoses': {'type': 'array', 'items': {'type': 'string'}},
                },
            },
            'OperationCreateRequest': {
                'type': 'object',
                'required': ['operationId', 'name', 'sutCode', 'patientId', 'practitionerIds'],
                'properties': {
                    'operationId': {'type': 'string'},
                    'name': {'type': 'string'},
                    'sutCode': {'type': 'string'},
                    'description': {'type': 'string'},
                    'date': {'type': 'string', 'format': 'date-time'},
                    'patientId': {'type': 'string'},
                    'practitionerIds': {'type': 'array', 'items': {'type': 'string'}},
                },
            },
            'OperationUpdateRequest': {
                'type': 'object',
                'properties': {
                    'operationId': {'type': 'string'},
                    'name': {'type': 'string'},
                    'sutCode': {'type': 'string'},
                    'description': {'type': 'string'},
                    'date': {'type': 'string', 'format': 'date-time'},
                    'practitionerIds': {'type': 'array', 'items': {'type': 'string'}},
                },
            },
            'PrescriptionCreateRequest': {
                'type': 'object',
                'required': ['prescriptionId', 'medicationId', 'dosage', 'frequency', 'patientId'],
                'properties': {
                    'prescriptionId': {'type': 'string'},
                    'medicationId': {'type': 'string', 'description': 'Reference to a medication in the medications collection'},
                    'dosage': {'type': 'string'},
                    'frequency': {'type': 'string'},
                    'patientId': {'type': 'string'},
                    'diagnosisId': {'type': 'string', 'description': 'Reference to a diagnosis'},
                },
            },
            'PrescriptionUpdateRequest': {
                'type': 'object',
                'properties': {
                    'prescriptionId': {'type': 'string'},
                    'medicationId': {'type': 'string'},
                    'dosage': {'type': 'string'},
                    'frequency': {'type': 'string'},
                    'diagnosisId': {'type': 'string'},
                },
            },
            'SubTestInput': {
                'type': 'object',
                'required': ['name'],
                'properties': {
                    'name': {'type': 'string'},
                    'value': {'type': 'number'},
                    'unit': {'type': 'string'},
                    'refMin': {'type': 'number'},
                    'refMax': {'type': 'number'},
                },
            },
            'TestCreateRequest': {
                'type': 'object',
                'required': ['testId', 'sutCode', 'name', 'patientId'],
                'properties': {
                    'testId': {'type': 'string'},
                    'sutCode': {'type': 'string'},
                    'name': {'type': 'string'},
                    'date': {'type': 'string', 'format': 'date-time'},
                    'testDescription': {'type': 'string'},
                    'subtests': {
                        'type': 'array',
                        'items': {'$ref': '#/components/schemas/SubTestInput'},
                    },
                    'patientId': {'type': 'string'},
                    'practitioner': {'type': 'string'},
                    'hospitalVisitId': {'type': 'string'},
                },
            },
            'TestUpdateRequest': {
                'type': 'object',
                'properties': {
                    'testId': {'type': 'string'},
                    'sutCode': {'type': 'string'},
                    'name': {'type': 'string'},
                    'date': {'type': 'string', 'format': 'date-time'},
                    'testDescription': {'type': 'string'},
                    'subtests': {
                        'type': 'array',
                        'items': {'$ref': '#/components/schemas/SubTestInput'},
                    },
                    'practitioner': {'type': 'string'},
                },
            },
            'TestSearchParseRequest': {
                'type': 'object',
                'required': ['query'],
                'properties': {
                    'query': {'type': 'string'},
                },
            },
            'TestQuery': {
                'type': 'object',
                'required': ['test_parameter', 'start', 'end', 'text'],
                'properties': {
                    'test_id': {'type': 'string'},
                    'test_parameter': {'type': 'string'},
                    'start': {'type': 'string', 'format': 'date'},
                    'end': {'type': 'string', 'format': 'date'},
                    'text': {'type': 'string'},
                },
            },
            'TestSearchParseResponse': {
                'type': 'object',
                'properties': {
                    'raw_query': {'type': 'string'},
                    'test_queries': {
                        'type': 'array',
                        'items': {'$ref': '#/components/schemas/TestQuery'},
                    },
                    'out_of_reference_only': {'type': 'boolean'},
                },
            },
            'GraphPresetDateRange': {
                'type': 'object',
                'properties': {
                    'startDate': {'type': 'string', 'format': 'date-time'},
                    'endDate': {'type': 'string', 'format': 'date-time'},
                },
            },
            'GraphDatasetOrigin': {
                'type': 'object',
                'properties': {
                    'dateFilterMode': {
                        'type': 'string',
                        'enum': ['preset', 'custom'],
                        'default': 'preset',
                    },
                    'selectedPreset': {
                        'type': 'string',
                        'enum': ['all', '1m', '3m', '6m', '12m'],
                    },
                    'appliedDateRange': {
                        '$ref': '#/components/schemas/GraphPresetDateRange',
                    },
                },
                'example': {
                    'dateFilterMode': 'preset',
                    'selectedPreset': 'all',
                    'appliedDateRange': {
                        'startDate': '2026-03-26T16:39:51.366Z',
                        'endDate': '2026-03-26T16:39:51.366Z',
                    },
                },
            },
            'GraphCreationContext': {
                'type': 'object',
                'properties': {
                    'datasetIds': {
                        'type': 'array',
                        'items': {'type': 'string'},
                    },
                    'datasetNames': {
                        'type': 'array',
                        'items': {'type': 'string'},
                    },
                    'dateFilterMode': {
                        'type': 'string',
                        'enum': ['preset', 'custom'],
                    },
                    'selectedPreset': {
                        'type': 'string',
                        'enum': ['all', '1m', '3m', '6m', '12m'],
                    },
                    'appliedDateRange': {
                        '$ref': '#/components/schemas/GraphPresetDateRange',
                    },
                    'datasetOrigins': {
                        'type': 'object',
                        'additionalProperties': {
                            '$ref': '#/components/schemas/GraphDatasetOrigin',
                        },
                        'example': {
                            'glucose': {
                                'dateFilterMode': 'preset',
                                'selectedPreset': 'all',
                                'appliedDateRange': {
                                    'startDate': '2026-03-26T16:39:51.366Z',
                                    'endDate': '2026-03-26T16:39:51.366Z',
                                },
                            },
                        },
                    },
                    'searchQuery': {'type': 'string'},
                },
                'example': {
                    'datasetIds': ['test-glucose'],
                    'datasetNames': ['Glucose'],
                    'dateFilterMode': 'preset',
                    'selectedPreset': 'all',
                    'appliedDateRange': {
                        'startDate': '2026-03-26T16:39:51.366Z',
                        'endDate': '2026-03-26T16:39:51.366Z',
                    },
                    'datasetOrigins': {
                        'glucose': {
                            'dateFilterMode': 'preset',
                            'selectedPreset': 'all',
                            'appliedDateRange': {
                                'startDate': '2026-03-26T16:39:51.366Z',
                                'endDate': '2026-03-26T16:39:51.366Z',
                            },
                        },
                    },
                    'searchQuery': 'glucose last month',
                },
            },
            'GraphDatasetConfig': {
                'type': 'object',
                'required': ['id', 'name', 'type', 'color'],
                'properties': {
                    'id': {'type': 'string'},
                    'name': {'type': 'string'},
                    'type': {
                        'type': 'string',
                        'enum': ['medication', 'line'],
                    },
                    'unit': {'type': 'string'},
                    'color': {'type': 'string'},
                    'lineStyle': {
                        'type': 'string',
                        'enum': ['solid', 'dashed', 'dotted'],
                    },
                    'pointStyle': {
                        'type': 'string',
                        'enum': ['circle', 'square', 'none'],
                    },
                    'dateFilterMode': {
                        'type': 'string',
                        'enum': ['preset', 'custom'],
                        'default': 'preset',
                    },
                    'selectedPreset': {
                        'type': 'string',
                        'enum': ['all', '1m', '3m', '6m', '12m'],
                    },
                    'appliedDateRange': {
                        '$ref': '#/components/schemas/GraphPresetDateRange',
                    },
                },
            },
            'GraphPresetGraph': {
                'type': 'object',
                'required': ['id'],
                'properties': {
                    'id': {'type': 'string'},
                    'normalizeByReference': {'type': 'boolean'},
                    'datasets': {
                        'type': 'array',
                        'items': {'$ref': '#/components/schemas/GraphDatasetConfig'},
                    },
                    'creation': {
                        '$ref': '#/components/schemas/GraphCreationContext',
                    },
                },
            },
            'GraphPreset': {
                'type': 'object',
                'properties': {
                    '_id': {'type': 'string'},
                    'patientId': {'type': 'string'},
                    'name': {'type': 'string'},
                    'exportedAt': {'type': 'string', 'format': 'date-time'},
                    'graphCount': {'type': 'integer'},
                    'graphs': {
                        'type': 'array',
                        'items': {'$ref': '#/components/schemas/GraphPresetGraph'},
                    },
                    'created_at': {'type': 'string', 'format': 'date-time'},
                    'updated_at': {'type': 'string', 'format': 'date-time'},
                },
            },
            'GraphPresetListResponse': {
                'type': 'array',
                'items': {'$ref': '#/components/schemas/GraphPreset'},
            },
            'GraphPresetDeleteResponse': {
                'type': 'object',
                'required': ['ok'],
                'properties': {
                    'ok': {'type': 'boolean'},
                },
            },
            'BulkDeleteResponse': {
                'type': 'object',
                'required': ['ok', 'deletedCount'],
                'properties': {
                    'ok': {'type': 'boolean'},
                    'deletedCount': {'type': 'integer'},
                },
            },
            'VaccinationCreateRequest': {
                'type': 'object',
                'required': ['vaccineId', 'patientId', 'name', 'administrationPlace'],
                'properties': {
                    'vaccineId': {'type': 'string'},
                    'patientId': {'type': 'string'},
                    'name': {'type': 'string'},
                    'administeredDate': {'type': 'string', 'format': 'date-time'},
                    'administrationPlace': {'type': 'string'},
                    'hospitalVisitId': {'type': 'string'},
                },
            },
            'VaccinationUpdateRequest': {
                'type': 'object',
                'properties': {
                    'vaccineId': {'type': 'string'},
                    'name': {'type': 'string'},
                    'administeredDate': {'type': 'string', 'format': 'date-time'},
                    'administrationPlace': {'type': 'string'},
                },
            },
            'EchoRequest': {
                'type': 'object',
                'additionalProperties': True,
            },
            'ErrorResponse': {
                'type': 'object',
                'properties': {
                    'error': {'type': 'string'},
                    'detail': {'type': 'string'},
                    'required': {
                        'type': 'array',
                        'items': {'type': 'string'},
                    },
                    'param': {'type': 'string'},
                    'field': {'type': 'string'},
                },
            },
            'UsernameAlreadyExistsError': {
                'type': 'object',
                'required': ['error'],
                'properties': {
                    'error': {
                        'type': 'string',
                        'enum': ['UsernameAlreadyExists'],
                    },
                },
                'example': {
                    'error': 'UsernameAlreadyExists',
                },
            },
            'UserPublic': {
                'type': 'object',
                'properties': {
                    '_id': {'type': 'string'},
                    'username': {'type': 'string'},
                    'dispName': {'type': 'string'},
                    'email': {'type': 'string', 'format': 'email'},
                    'roles': {'type': 'array', 'items': {'type': 'string'}},
                    'active': {'type': 'boolean'},
                    'residentCountry': {'type': 'string'},
                    'residentCity': {'type': 'string'},
                    'bloodType': {'type': 'string'},
                    'height': {'type': 'number'},
                    'weight': {'type': 'number'},
                    'allergies': {'type': 'array', 'items': {'type': 'string'}},
                    'sharingInfo': {'type': 'array', 'items': {'type': 'string'}},
                    'specialty': {'type': 'string'},
                    'hospital': {'type': 'string'},
                    'department': {'type': 'string'},
                    'title': {'type': 'string'},
                    'phoneNumber': {'type': 'string'},
                    'created_at': {'type': 'string', 'format': 'date-time'},
                    'updated_at': {'type': 'string', 'format': 'date-time'},
                },
            },
            'AuthTokenResponse': {
                'type': 'object',
                'required': ['accessToken', 'tokenType', 'expiresIn', 'user'],
                'properties': {
                    'accessToken': {'type': 'string'},
                    'tokenType': {'type': 'string', 'example': 'Bearer'},
                    'expiresIn': {'type': 'integer'},
                    'user': {'$ref': '#/components/schemas/UserPublic'},
                },
            },
            'AuthVerifyResponse': {
                'type': 'object',
                'properties': {
                    'valid': {'type': 'boolean'},
                    'payload': {
                        'type': 'object',
                        'properties': {
                            'sub': {'type': 'string'},
                            'email': {'type': 'string', 'format': 'email'},
                            'username': {'type': 'string'},
                            'roles': {'type': 'array', 'items': {'type': 'string'}},
                        },
                    },
                    'verifiedAt': {'type': 'string', 'format': 'date-time'},
                },
            },
            'DiagnosisResponse': {
                'type': 'object',
                'properties': {
                    '_id': {'type': 'string'},
                    'patientId': {'type': 'string'},
                    'practitioner': {'type': 'string'},
                    'icdCode': {'type': 'string'},
                    'isPrediagnosis': {'type': 'boolean'},
                    'severity': {'type': 'string', 'enum': ['mild', 'moderate', 'severe']},
                    'hospital': {'type': 'string'},
                    'hospitalVisit': {'type': 'string'},
                    'diagnosisDate': {'type': 'string', 'format': 'date-time'},
                    'diagnosisClinic': {'type': 'string'},
                    'notes': {'type': 'string'},
                    'disease': {
                        'type': 'object',
                        'description': 'Populated disease details from the diseases collection',
                        'properties': {
                            '_id': {'type': 'string'},
                            'icdCode': {'type': 'string'},
                            'name': {'type': 'string'},
                            'bodyRegion': {'type': 'string'},
                            'description': {'type': 'string'},
                            'symptoms': {'type': 'string'},
                            'commonTreatments': {'type': 'string'},
                        },
                    },
                    'relatedPrescriptions': {
                        'type': 'array',
                        'items': {
                            'type': 'object',
                            'properties': {
                                '_id': {'type': 'string'},
                                'prescriptionId': {'type': 'string'},
                                'dosage': {'type': 'string'},
                                'frequency': {'type': 'string'},
                                'medication': {
                                    'type': 'object',
                                    'properties': {
                                        '_id': {'type': 'string'},
                                        'genericName': {'type': 'string'},
                                        'brandName': {'type': 'string'},
                                        'pharmClass': {'type': 'string'},
                                    },
                                },
                            },
                        },
                    },
                    'created_at': {'type': 'string', 'format': 'date-time'},
                    'updated_at': {'type': 'string', 'format': 'date-time'},
                },
            },
            'DiagnosisResponseList': {
                'type': 'array',
                'items': {'$ref': '#/components/schemas/DiagnosisResponse'},
            },
            'HospitalVisitResponse': {
                'type': 'object',
                'properties': {
                    '_id': {'type': 'string'},
                    'patientId': {'type': 'string'},
                    'hospital': {'type': 'string'},
                    'visitDate': {'type': 'string', 'format': 'date-time'},
                    'admissionDate': {'type': 'string', 'format': 'date-time'},
                    'dischargeDate': {'type': 'string', 'format': 'date-time'},
                    'doctorName': {'type': 'string'},
                    'department': {'type': 'string'},

                    'dischargeSummary': {'type': 'string'},
                    'diagnoses': {'type': 'array', 'items': {'type': 'string'}},
                    'populatedDiagnoses': {
                        'type': 'array',
                        'items': {
                            'type': 'object',
                            'properties': {
                                '_id': {'type': 'string'},
                                'icdCode': {'type': 'string'},
                                'diseaseName': {'type': 'string'},
                                'bodyRegion': {'type': 'string'},
                                'notes': {'type': 'string'},
                                'practitioner': {'type': 'string'},
                                'diagnosisClinic': {'type': 'string'},
                            },
                        },
                    },
                    'populatedPrescriptions': {
                        'type': 'array',
                        'items': {
                            'type': 'object',
                            'properties': {
                                '_id': {'type': 'string'},
                                'medicationName': {'type': 'string'},
                                'dosage': {'type': 'string'},
                                'frequency': {'type': 'string'},
                            },
                        },
                    },
                    'created_at': {'type': 'string', 'format': 'date-time'},
                    'updated_at': {'type': 'string', 'format': 'date-time'},
                },
            },
            'HospitalVisitResponseList': {
                'type': 'array',
                'items': {'$ref': '#/components/schemas/HospitalVisitResponse'},
            },
            'HospitalResponse': {
                'type': 'object',
                'properties': {
                    '_id': {'type': 'string'},
                    'trackingId': {'type': 'string'},
                    'name': {'type': 'string'},
                    'address': {'type': 'string'},
                    'phoneNumber': {'type': 'string'},
                    'email': {'type': 'string', 'format': 'email'},
                    'created_at': {'type': 'string', 'format': 'date-time'},
                    'updated_at': {'type': 'string', 'format': 'date-time'},
                },
            },
            'OperationResponse': {
                'type': 'object',
                'properties': {
                    '_id': {'type': 'string'},
                    'operationId': {'type': 'string'},
                    'name': {'type': 'string'},
                    'sutCode': {'type': 'string'},
                    'description': {'type': 'string'},
                    'date': {'type': 'string', 'format': 'date-time'},
                    'patientId': {'type': 'string'},
                    'practitionerIds': {'type': 'array', 'items': {'type': 'string'}},
                    'created_at': {'type': 'string', 'format': 'date-time'},
                    'updated_at': {'type': 'string', 'format': 'date-time'},
                },
            },
            'OperationResponseList': {
                'type': 'array',
                'items': {'$ref': '#/components/schemas/OperationResponse'},
            },
            'PrescriptionResponse': {
                'type': 'object',
                'properties': {
                    '_id': {'type': 'string'},
                    'prescriptionId': {'type': 'string'},
                    'medicationId': {'type': 'string'},
                    'medication': {
                        'type': 'object',
                        'description': 'Populated medication details from the medications collection',
                        'properties': {
                            '_id': {'type': 'string'},
                            'genericName': {'type': 'string'},
                            'brandName': {'type': 'string'},
                            'route': {'type': 'string'},
                            'pharmClass': {'type': 'string'},
                            'indications': {'type': 'string'},
                            'dosageAndAdministration': {'type': 'string'},
                            'adverseReactions': {'type': 'string'},
                            'warnings': {'type': 'string'},
                            'contraindications': {'type': 'string'},
                            'drugInteractions': {'type': 'string'},
                        },
                    },
                    'dosage': {'type': 'string'},
                    'frequency': {'type': 'string'},
                    'patientId': {'type': 'string'},
                    'diagnosisId': {'type': 'string'},
                    'created_at': {'type': 'string', 'format': 'date-time'},
                    'updated_at': {'type': 'string', 'format': 'date-time'},
                },
            },
            'PrescriptionResponseList': {
                'type': 'array',
                'items': {'$ref': '#/components/schemas/PrescriptionResponse'},
            },
            'SubTestResponse': {
                'type': 'object',
                'properties': {
                    'name': {'type': 'string'},
                    'value': {'type': 'number'},
                    'unit': {'type': 'string'},
                    'refMin': {'type': 'number'},
                    'refMax': {'type': 'number'},
                    'status': {'type': 'string'},
                },
            },
            'TestResponse': {
                'type': 'object',
                'properties': {
                    '_id': {'type': 'string'},
                    'testId': {'type': 'string'},
                    'sutCode': {'type': 'string'},
                    'name': {'type': 'string'},
                    'date': {'type': 'string', 'format': 'date-time'},
                    'testDescription': {'type': 'string'},
                    'subtests': {
                        'type': 'array',
                        'items': {'$ref': '#/components/schemas/SubTestResponse'},
                    },
                    'patientId': {'type': 'string'},
                    'practitioner': {'type': 'string'},
                    'hospitalVisitId': {'type': 'string'},
                    'created_at': {'type': 'string', 'format': 'date-time'},
                    'updated_at': {'type': 'string', 'format': 'date-time'},
                },
            },
            'TestResponseList': {
                'type': 'array',
                'items': {'$ref': '#/components/schemas/TestResponse'},
            },
            'VaccinationResponse': {
                'type': 'object',
                'properties': {
                    '_id': {'type': 'string'},
                    'vaccineId': {'type': 'string'},
                    'patientId': {'type': 'string'},
                    'name': {'type': 'string'},
                    'administeredDate': {'type': 'string', 'format': 'date-time'},
                    'administrationPlace': {'type': 'string'},
                    'hospitalVisitId': {'type': 'string'},
                    'created_at': {'type': 'string', 'format': 'date-time'},
                    'updated_at': {'type': 'string', 'format': 'date-time'},
                },
            },
            'VaccinationResponseList': {
                'type': 'array',
                'items': {'$ref': '#/components/schemas/VaccinationResponse'},
            },
            'HelloResponse': {
                'type': 'object',
                'properties': {
                    'message': {'type': 'string'},
                    'status': {'type': 'string'},
                },
            },
            'DataItemsResponse': {
                'type': 'object',
                'properties': {
                    'items': {
                        'type': 'array',
                        'items': {
                            'type': 'object',
                            'properties': {
                                'id': {'type': 'integer'},
                                'name': {'type': 'string'},
                            },
                        },
                    },
                },
            },
            'EchoResponse': {
                'type': 'object',
                'properties': {
                    'received': {'type': 'object', 'additionalProperties': True},
                    'status': {'type': 'string'},
                },
            },
        },
    },
}