diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 35cc21d..11f6b58 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -7,6 +7,6 @@ jobs: ci: uses: Sea-Haven-Industries/.github/.github/workflows/ci-python-sam.yaml@main with: - source-dirs: "lambdas cdk shared" + source-dirs: "lambdas cdk" run-cdk-synth: true run-sam-validate: false diff --git a/shared/__init__.py b/shared/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/shared/models.py b/shared/models.py deleted file mode 100644 index 22374c0..0000000 --- a/shared/models.py +++ /dev/null @@ -1,83 +0,0 @@ -"""Data models for work order ingestion.""" - -from dataclasses import dataclass, field, asdict -from datetime import datetime -from enum import Enum -from typing import Optional - - -class EmailType(str, Enum): - NEW_WORK_ORDER = "new_work_order" - UPDATE = "update" - COMMENT = "comment" - UNKNOWN = "unknown" - - -class WorkOrderStatus(str, Enum): - NEW = "new" - ASSIGNED = "assigned" - IN_PROGRESS = "in_progress" - ON_HOLD = "on_hold" - COMPLETED = "completed" - CANCELLED = "cancelled" - UNKNOWN = "unknown" - - -@dataclass -class Comment: - work_order_id: str - comment_id: str # generated: {work_order_id}#{timestamp} - commenter: str - text: str - created_at: str # ISO 8601 - source_email_s3_key: str - ingested_at: str = field(default_factory=lambda: datetime.utcnow().isoformat()) - - def to_dynamo_item(self) -> dict: - return {k: v for k, v in asdict(self).items() if v is not None} - - -@dataclass -class WorkOrder: - work_order_id: str - description: Optional[str] = None - status: str = WorkOrderStatus.UNKNOWN.value - customer: str = "AMAZON" - site_code: Optional[str] = None - building: Optional[str] = None - address: Optional[str] = None - severity: Optional[str] = None - priority: Optional[str] = None - date_reported: Optional[str] = None - scheduled_start: Optional[str] = None - due_date: Optional[str] = None - assigned_to: Optional[str] = None - source_email_s3_key: Optional[str] = None - created_at: str = field(default_factory=lambda: datetime.utcnow().isoformat()) - updated_at: str = field(default_factory=lambda: datetime.utcnow().isoformat()) - - def to_dynamo_item(self) -> dict: - return {k: v for k, v in asdict(self).items() if v is not None} - - -@dataclass -class ParsedEmail: - """Result of AI parsing an inbound email.""" - - email_type: str # EmailType value - work_order_id: Optional[str] = None - description: Optional[str] = None - status: Optional[str] = None - site_code: Optional[str] = None - building: Optional[str] = None - address: Optional[str] = None - severity: Optional[str] = None - priority: Optional[str] = None - date_reported: Optional[str] = None - scheduled_start: Optional[str] = None - due_date: Optional[str] = None - assigned_to: Optional[str] = None - commenter: Optional[str] = None - comment_text: Optional[str] = None - comment_time: Optional[str] = None - raw_subject: Optional[str] = None diff --git a/test_local.py b/test_local.py index 4098ff3..77e8010 100644 --- a/test_local.py +++ b/test_local.py @@ -11,8 +11,7 @@ import json import sys from pathlib import Path -# Add project root to path so we can import the handler's parsing logic -sys.path.insert(0, str(Path(__file__).parent / "lambdas" / "email_processor")) +sys.path.insert(0, str(Path(__file__).parent / "lambdas" / "wo" / "email_processor")) from handler import parse_raw_email, extract_with_claude