Source code for endoreg_db.models.administration.case.case

from django.db import models

from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from ..person import Patient
    from ...medical.patient.patient_examination import PatientExamination
from django.utils import timezone

[docs] class Case(models.Model): """ Represents a clinical case, linking a patient to one or more examinations over a specific period. Attributes: patient (Patient): The patient associated with this case. patient_examinations (QuerySet[PatientExamination]): Examinations included in this case. hash (str): An optional hash value for the case. start_date (datetime): The start date and time of the case. end_date (datetime): The end date and time of the case (optional). is_active (bool): Indicates if the case is currently active. is_closed (bool): Indicates if the case has been closed. is_deleted (bool): Indicates if the case is marked as deleted. created_at (datetime): Timestamp of case creation. updated_at (datetime): Timestamp of last case update. """ patient = models.ForeignKey( 'Patient', on_delete=models.CASCADE, related_name='cases', help_text="The patient associated with this case.", db_index=True ) patient_examinations = models.ManyToManyField( 'PatientExamination', related_name='cases', help_text="The examinations included in this case." ) hash = models.CharField( max_length=255, blank=True, null=True, help_text="An optional hash value associated with the case." ) start_date = models.DateTimeField( help_text="The start date and time of the case.", db_index=True ) end_date = models.DateTimeField( null=True, blank=True, help_text="The end date and time of the case (optional)." ) is_active = models.BooleanField( default=True, help_text="Flag indicating if the case is currently active.", db_index=True ) is_closed = models.BooleanField( default=False, help_text="Flag indicating if the case has been closed.", db_index=True ) is_deleted = models.BooleanField( default=False, help_text="Flag indicating if the case is marked as deleted.", db_index=True ) created_at = models.DateTimeField( auto_now_add=True, help_text="The date and time the case was created." ) updated_at = models.DateTimeField( auto_now=True, help_text="The date and time the case was last updated." ) if TYPE_CHECKING: patient: "Patient" patient_examinations: models.QuerySet["PatientExamination"] class Meta: ordering = ['-start_date', 'patient'] verbose_name = "Case" verbose_name_plural = "Cases" def __str__(self): string_representation = f"Case {self.pk} ({self.patient})" if self.start_date: string_representation += f" - {self.start_date.strftime('%Y-%m-%d')}" if self.end_date: string_representation += f" - {self.end_date.strftime('%Y-%m-%d')}" return string_representation
[docs] def close(self, end_date=None): """Close this case with optional end date.""" self.is_closed = True self.is_active = False if end_date: self.end_date = end_date elif not self.end_date: self.end_date = timezone.now() self.save()
[docs] def reopen(self): """Reopen this case if it was closed.""" self.is_closed = False self.is_active = True self.save()
[docs] def mark_as_deleted(self): """Mark this case as deleted.""" self.is_deleted = True self.is_active = False self.save()