Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions backend/app/models/UserData.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class UserData(Base):
ethnic_group = Column(JSON, nullable=True) # Array of strings
marital_status = Column(Text, nullable=True)
has_kids = Column(Text, nullable=True)
timezone = Column(Text, nullable=True)

# Cancer Experience
diagnosis = Column(Text, nullable=True)
Expand Down
16 changes: 8 additions & 8 deletions backend/app/seeds/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def seed_users(session: Session) -> None:
"gender_identity": "Woman",
"pronouns": ["she", "her"],
"ethnic_group": ["White/Caucasian"],
"marital_status": "Married",
"marital_status": "Married/Common Law",
"has_kids": "Yes",
"diagnosis": "Acute Lymphoblastic Leukemia",
"date_of_diagnosis": date(2023, 8, 10),
Expand Down Expand Up @@ -83,7 +83,7 @@ def seed_users(session: Session) -> None:
"gender_identity": "Woman",
"pronouns": ["she", "her"],
"ethnic_group": ["Hispanic/Latino"],
"marital_status": "Married",
"marital_status": "Married/Common Law",
"has_kids": "Yes",
"has_blood_cancer": "No",
"caring_for_someone": "Yes",
Expand Down Expand Up @@ -115,7 +115,7 @@ def seed_users(session: Session) -> None:
"gender_identity": "Man",
"pronouns": ["he", "him"],
"ethnic_group": ["White/Caucasian"],
"marital_status": "Married",
"marital_status": "Married/Common Law",
"has_kids": "Yes",
"diagnosis": "Acute Lymphoblastic Leukemia",
"date_of_diagnosis": date(2018, 4, 20), # Survivor
Expand Down Expand Up @@ -149,7 +149,7 @@ def seed_users(session: Session) -> None:
"gender_identity": "Woman", # Same as Sarah
"pronouns": ["she", "her"],
"ethnic_group": ["Asian"],
"marital_status": "Married", # Same as Sarah
"marital_status": "Married/Common Law", # Same as Sarah
"has_kids": "Yes", # Same as Sarah
"diagnosis": "Acute Lymphoblastic Leukemia", # Same diagnosis as Sarah!
"date_of_diagnosis": date(2020, 8, 15), # Survivor
Expand Down Expand Up @@ -200,7 +200,7 @@ def seed_users(session: Session) -> None:
"gender_identity": "Woman", # Same as Sarah
"pronouns": ["she", "her"],
"ethnic_group": ["Asian"],
"marital_status": "Married", # Same as Sarah
"marital_status": "Married/Common Law", # Same as Sarah
"has_kids": "Yes", # Same as Sarah
"diagnosis": "Acute Lymphoblastic Leukemia", # Same diagnosis as Sarah!
"date_of_diagnosis": date(2019, 5, 10), # Survivor
Expand All @@ -225,7 +225,7 @@ def seed_users(session: Session) -> None:
"gender_identity": "Woman", # Same as Sarah
"pronouns": ["she", "her"],
"ethnic_group": ["Hispanic/Latino"],
"marital_status": "Married", # Same as Sarah
"marital_status": "Married/Common Law", # Same as Sarah
"has_kids": "Yes", # Same as Sarah
"diagnosis": "Acute Lymphoblastic Leukemia", # Same diagnosis as Sarah!
"date_of_diagnosis": date(2021, 3, 18), # Survivor
Expand All @@ -250,7 +250,7 @@ def seed_users(session: Session) -> None:
"gender_identity": "Woman", # Same as Sarah
"pronouns": ["she", "her"],
"ethnic_group": ["White/Caucasian"],
"marital_status": "Married", # Same as Sarah
"marital_status": "Married/Common Law", # Same as Sarah
"has_kids": "Yes", # Same as Sarah
"diagnosis": "Acute Lymphoblastic Leukemia", # Same diagnosis as Sarah!
"date_of_diagnosis": date(2018, 9, 25), # Survivor
Expand All @@ -276,7 +276,7 @@ def seed_users(session: Session) -> None:
"gender_identity": "Woman",
"pronouns": ["she", "her"],
"ethnic_group": ["White/Caucasian"],
"marital_status": "Married",
"marital_status": "Married/Common Law",
"has_kids": "Yes",
"has_blood_cancer": "No", # Not a cancer patient herself
"caring_for_someone": "Yes", # Is a caregiver
Expand Down
10 changes: 10 additions & 0 deletions backend/app/services/implementations/intake_form_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@

logger = logging.getLogger(__name__)

# Valid Canadian timezone abbreviations
VALID_TIMEZONES = {"NST", "AST", "EST", "CST", "MST", "PST"}


class IntakeFormProcessor:
"""
Expand Down Expand Up @@ -177,6 +180,13 @@ def _process_demographics(self, user_data: UserData, demographics: Dict[str, Any
user_data.ethnic_group = demographics.get("ethnic_group", [])
user_data.marital_status = self._trim_text(demographics.get("marital_status"))
user_data.has_kids = demographics.get("has_kids")

# Validate and set timezone
timezone = self._trim_text(demographics.get("timezone"))
if timezone and timezone not in VALID_TIMEZONES:
raise ValueError(f"Invalid timezone: {timezone}. Must be one of {sorted(VALID_TIMEZONES)}")
user_data.timezone = timezone

user_data.other_ethnic_group = self._trim_text(demographics.get("ethnic_group_custom"))
user_data.gender_identity_custom = self._trim_text(demographics.get("gender_identity_custom"))

Expand Down
2 changes: 1 addition & 1 deletion backend/docs/intake_api.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Create a new form submission and process it into structured data.
"pronouns": ["array of strings (optional)"],
"ethnicGroup": ["array of strings (optional)"],
"maritalStatus": "string (optional)",
"hasKids": "yes|no|prefer not to say (optional)",
"hasKids": "Yes|No|Prefer not to answer (optional)",
"ethnicGroupCustom": "string (optional)",
"genderIdentityCustom": "string (optional)"
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""add_timezone_column_to_user_data

Revision ID: 2ccee7a88d08
Revises: 8d2cd99b9eb8
Create Date: 2025-10-30 19:02:10.801071

"""

from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision: str = "2ccee7a88d08"
down_revision: Union[str, None] = "8d2cd99b9eb8"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.add_column("user_data", sa.Column("timezone", sa.Text(), nullable=True))
# ### end Alembic commands ###


def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column("user_data", "timezone")
# ### end Alembic commands ###
34 changes: 17 additions & 17 deletions backend/tests/unit/test_intake_form_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,8 @@ def test_participant_with_cancer_only(db_session, test_user):
"gender_identity": "Male",
"pronouns": ["he", "him"],
"ethnic_group": ["White"],
"marital_status": "Married",
"has_kids": "yes",
"marital_status": "Married/Common Law",
"has_kids": "Yes",
},
"cancer_experience": {
"diagnosis": "Leukemia",
Expand All @@ -185,8 +185,8 @@ def test_participant_with_cancer_only(db_session, test_user):
assert user_data.gender_identity == "Male"
assert user_data.pronouns == ["he", "him"]
assert user_data.ethnic_group == ["White"]
assert user_data.marital_status == "Married"
assert user_data.has_kids == "yes"
assert user_data.marital_status == "Married/Common Law"
assert user_data.has_kids == "Yes"

# Assert - Cancer Experience
assert user_data.diagnosis == "Leukemia"
Expand Down Expand Up @@ -247,7 +247,7 @@ def test_volunteer_caregiver_experience_processing(db_session, test_user):
"pronouns": ["she", "her"],
"ethnic_group": ["Indigenous"],
"marital_status": "Divorced",
"has_kids": "yes",
"has_kids": "Yes",
},
"caregiver_experience": {
"experiences": ["Anxiety", "Depression"],
Expand Down Expand Up @@ -339,8 +339,8 @@ def test_form_submission_json_structure(db_session, test_user):
"pronouns": ["they", "them"],
"ethnic_group": ["Other", "Asian"],
"ethnic_group_custom": "Mixed heritage - Filipino and Indigenous",
"marital_status": "Common-law",
"has_kids": "yes",
"marital_status": "Married/Common Law",
"has_kids": "Yes",
},
"cancer_experience": {
"diagnosis": "Ovarian Cancer",
Expand Down Expand Up @@ -471,8 +471,8 @@ def test_participant_caregiver_without_cancer(db_session, test_user):
"gender_identity": "Female",
"pronouns": ["she", "her"],
"ethnic_group": ["Black"],
"marital_status": "Married",
"has_kids": "yes",
"marital_status": "Married/Common Law",
"has_kids": "Yes",
},
"loved_one": {
"demographics": {"gender_identity": "Male", "age": "55-64"},
Expand Down Expand Up @@ -550,8 +550,8 @@ def test_participant_cancer_patient_and_caregiver(db_session, test_user):
"pronouns": ["he", "him"],
"ethnic_group": ["White", "Other"],
"ethnic_group_custom": "Mixed European heritage",
"marital_status": "Married",
"has_kids": "yes",
"marital_status": "Married/Common Law",
"has_kids": "Yes",
},
"cancer_experience": {
"diagnosis": "Lymphoma",
Expand Down Expand Up @@ -635,7 +635,7 @@ def test_participant_no_cancer_experience(db_session, test_user):
"pronouns": ["she", "her"],
"ethnic_group": ["Asian", "Indigenous"],
"marital_status": "Single",
"has_kids": "no",
"has_kids": "No",
},
# No cancer_experience, caregiver_experience, or loved_one sections
}
Expand All @@ -658,7 +658,7 @@ def test_participant_no_cancer_experience(db_session, test_user):
assert "Asian" in user_data.ethnic_group
assert "Indigenous" in user_data.ethnic_group
assert user_data.marital_status == "Single"
assert user_data.has_kids == "no"
assert user_data.has_kids == "No"

# Assert - No cancer-related data
assert user_data.diagnosis is None
Expand Down Expand Up @@ -770,8 +770,8 @@ def test_volunteer_cancer_patient_and_caregiver(db_session, test_user):
"gender_identity": "Female",
"pronouns": ["she", "her"],
"ethnic_group": ["White"],
"marital_status": "Married",
"has_kids": "yes",
"marital_status": "Married/Common Law",
"has_kids": "Yes",
},
"cancer_experience": {
"diagnosis": "Breast Cancer",
Expand Down Expand Up @@ -848,7 +848,7 @@ def test_volunteer_no_cancer_experience(db_session, test_user):
"pronouns": ["he", "him"],
"ethnic_group": ["White"],
"marital_status": "Single",
"has_kids": "no",
"has_kids": "No",
},
# No cancer_experience, caregiver_experience, or loved_one sections
}
Expand All @@ -870,7 +870,7 @@ def test_volunteer_no_cancer_experience(db_session, test_user):
assert user_data.pronouns == ["he", "him"]
assert user_data.ethnic_group == ["White"]
assert user_data.marital_status == "Single"
assert user_data.has_kids == "no"
assert user_data.has_kids == "No"

# Assert - No cancer-related data
assert user_data.diagnosis is None
Expand Down
Loading