from __future__ import annotations from pydantic import BaseModel, Field from typing import Optional, List from pydantic import BaseModel, Field class SOAPNote(BaseModel): """ A SOAP note is structured into four sections: Subjective, Objective, Assessment, and Plan. These fields help track the client's self-reported experiences, observable data, the clinician's assessment, and the future treatment plan. """ Subjective: Optional[str] = Field(None, description="Client's self-reported symptoms, emotions, concerns, and relevant personal history.") Objective: Optional[str] = Field(None, description="Observable and measurable data, such as behavior, affect, test results, or vital signs.") Assessment: Optional[str] = Field(None, description="Clinician's interpretation of the subjective and objective data, including diagnosis and progress.") Plan: Optional[str] = Field(None, description="Outline of next steps, changes to treatment, referrals, and any planned interventions.") class DAPNote(BaseModel): """ A DAP note includes Data, Assessment, and Plan. It condenses subjective and objective info into a single 'Data' section. """ Data: Optional[str] = Field(None, description="Combined subjective and objective information: client's statements, therapist observations, relevant tests.") Assessment: Optional[str] = Field(None, description="Therapist's interpretation of the data, clinical impressions, and identified issues.") Plan: Optional[str] = Field(None, description="Next steps, goals for future sessions, and recommended interventions or activities.") class BIRPNote(BaseModel): """ A BIRP note includes Behavior, Intervention, Response, and Plan, emphasizing the therapist's interventions and the client's reaction. """ Behavior: Optional[str] = Field(None, description="Client's behavior during the session (verbal/non-verbal) and any observations made by the therapist.") Intervention: Optional[str] = Field(None, description="Specific techniques, methods, or therapies used by the clinician during the session.") Response: Optional[str] = Field(None, description="How the client responded to the interventions, including changes in affect, participation, or symptom relief.") Plan: Optional[str] = Field(None, description="Follow-up steps, homework assignments, referrals, or next session focus.") class PIRPNote(BaseModel): """ A PIRP note is Problem, Intervention, Response, and Plan, focusing on a particular client problem. """ Problem: Optional[str] = Field(None, description="The client's presenting problem, symptoms, or reason for seeking therapy.") Intervention: Optional[str] = Field(None, description="Actions taken by the therapist to address the identified problem.") Response: Optional[str] = Field(None, description="Client's reaction or changes after the intervention was applied.") Plan: Optional[str] = Field(None, description="Next steps for addressing the problem, including future sessions, techniques, or referrals.") class GIRPNote(BaseModel): """ A GIRP note focuses on Goals, Intervention, Response, and Plan, centering around client-defined goals. """ Goals: Optional[str] = Field(None, description="The client's short-term and long-term therapy goals or objectives.") Intervention: Optional[str] = Field(None, description="Therapeutic interventions used to help the client work toward these goals.") Response: Optional[str] = Field(None, description="How the client responded to the interventions and their progress toward goals.") Plan: Optional[str] = Field(None, description="Plan for future sessions, homework, referrals, or adjustments to help achieve goals.") class SIRPNote(BaseModel): """ A SIRP note organizes notes by Situation, Intervention, Response, and Plan, emphasizing the client's current situation. """ Situation: Optional[str] = Field(None, description="The client's presenting situation, including current symptoms, concerns, and background info.") Intervention: Optional[str] = Field(None, description="Interventions, assessments, and recommendations made during the session.") Response: Optional[str] = Field(None, description="Client's response to the intervention, observed changes or feedback.") Plan: Optional[str] = Field(None, description="Next steps, follow-up appointments, referrals, and any planned adjustments.") class FAIRFDARPNote(BaseModel): """ A FAIR/F-DARP note includes Focus, Assessment, Intervention, Response (FAIR) or Focus, Data, Action, Response, Plan (F-DARP). Here we combine them: Focus, Data, Action, Response, (and optionally Plan). """ Focus: Optional[str] = Field(None, description="Focus of the note, such as a nursing diagnosis, event, or primary concern.") Data: Optional[str] = Field(None, description="Subjective and objective data about the client/patient condition.") Action: Optional[str] = Field(None, description="Actions taken by the provider in response to the data (e.g., treatments, education).") Response: Optional[str] = Field(None, description="Client's response to the actions taken.") Plan: Optional[str] = Field(None, description="Future steps or follow-up if using the full F-DARP format.") class DARENote(BaseModel): """ A DARE note stands for Data, Action, Response, Education. Emphasizes client education and their response. """ Data: Optional[str] = Field(None, description="Subjective and objective client information and therapist's observations.") Action: Optional[str] = Field(None, description="Specific actions, treatments, or interventions the therapist took.") Response: Optional[str] = Field(None, description="Client's response to those actions, improvements, or changes in symptoms.") Education: Optional[str] = Field(None, description="Education provided to the client about their condition, treatments, or coping strategies.") class PIENote(BaseModel): """ A PIE note: Problem, Intervention, Evaluation. It's similar to PIRP but focuses on evaluating interventions. """ Problem: Optional[str] = Field(None, description="Client's identified problem, whether mental health symptom or behavior issue.") Intervention: Optional[str] = Field(None, description="What the therapist did to address the problem (techniques, strategies).") Evaluation: Optional[str] = Field(None, description="How effective the intervention was, changes in the client, and next steps.") class SOAPIERNote(BaseModel): """ A SOAPIER note expands SOAP by adding Intervention, Evaluation, and Revision sections for more comprehensive documentation. """ Subjective: Optional[str] = Field(None, description="Client's subjective complaints, feelings, statements.") Objective: Optional[str] = Field(None, description="Observable, measurable data, test results, or observations.") Assessment: Optional[str] = Field(None, description="Therapist's interpretation, diagnosis, or clinical judgment.") Plan: Optional[str] = Field(None, description="Proposed interventions, follow-ups, or referrals.") Intervention: Optional[str] = Field(None, description="Specific interventions implemented during the session.") Evaluation: Optional[str] = Field(None, description="Client's response to interventions and progress made.") Revision: Optional[str] = Field(None, description="Adjustments to the treatment plan based on evaluation.") class SOAPIENote(BaseModel): """ A SOAPIE note is similar to SOAPIER but only adds Intervention and Evaluation to the standard SOAP note. """ Subjective: Optional[str] = Field(None, description="Client's self-reported experiences and symptoms.") Objective: Optional[str] = Field(None, description="Observable data and measurable findings.") Assessment: Optional[str] = Field(None, description="Clinician's interpretation and clinical impressions.") Plan: Optional[str] = Field(None, description="Planned interventions, referrals, or changes.") Intervention: Optional[str] = Field(None, description="Interventions used during the session.") Evaluation: Optional[str] = Field(None, description="Client's response to interventions and progress toward goals.") class POMRNote(BaseModel): """ POMR: Problem-Oriented Medical Record. Focuses on organizing data around problems. """ Database: Optional[str] = Field(None, description="Patient's history, exam findings, and relevant tests.") ProblemList: Optional[str] = Field(None, description="All identified problems, both active and resolved.") InitialPlan: Optional[str] = Field(None, description="Initial plan to address each problem, including diagnostics or treatments.") ProgressNotes: Optional[str] = Field(None, description="Ongoing progress, changes, and outcomes related to each problem.") class NarrativeNote(BaseModel): """ A Narrative note is a free-text record, providing flexibility for a descriptive, story-like documentation. """ Narrative: Optional[str] = Field(None, description="A free-form description of the session, events, observations, and client interactions.") class CBENote(BaseModel): """ CBE: Charting By Exception. Only notes deviations from the norm. """ Exceptions: Optional[str] = Field(None, description="Significant changes or unexpected findings from the norm, highlighting what differs.") class SBARNote(BaseModel): """ SBAR: Situation, Background, Assessment, and Recommendation. Used often in quick communication contexts. """ Situation: Optional[str] = Field(None, description="Brief description of the patient's current situation or issue.") Background: Optional[str] = Field(None, description="Relevant background information, history, current meds, or past sessions.") Assessment: Optional[str] = Field(None, description="Clinician's assessment of the current condition or problem.") Recommendation: Optional[str] = Field(None, description="Suggested next steps, treatments, referrals, or actions.") class ExtractedNotes(BaseModel): """Container for multiple note formats.""" soap: SOAPNote | None = None dap: DAPNote | None = None birp: BIRPNote | None = None pirp: PIRPNote | None = None girp: GIRPNote | None = None sirp: SIRPNote | None = None fairfdarp: FAIRFDARPNote | None = None dare: DARENote | None = None pie: PIENote | None = None soapiier: SOAPIERNote | None = None soapiie: SOAPIENote | None = None pomr: POMRNote | None = None narrative: NarrativeNote | None = None cbe: CBENote | None = None sbar: SBARNote | None = None