| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- @startuml
- actor User
- participant "API" as API
- participant "Orchestrator" as Orch
- participant "LcscCategoryResolver" as Resolver
- participant "LcscAdapter" as Adapter
- == Implemented ==
- User -> API : POST /upload (file)
- API -> Orch : build_session(content, filename)
- Orch --> API : BomSession (rows: pending)
- API --> User : row table (HTMX)
- User -> API : GET .../row/{id}/scout
- API -> Orch : scout_row(session, row_id)
- Orch -> Resolver : resolve(row)
- Resolver --> Orch : [LcscCategory] (cache hit or Haiku call)
- Orch -> Orch : row.scout_candidates = [...]\nrow.state = scouting
- Orch --> API : row
- API --> User : candidate list (HTMX swap)
- == Designed, not yet built ==
- User --> API : POST .../confirm-category {category_id}
- API --> Orch : confirm_category(session, row_id, category_id)
- Orch --> Orch : row.resolved_category_id = ...\nrow.state = filtering
- User --> API : POST .../search {filters, page}
- API --> Orch : search_row(session, row_id, filters, page)
- Orch --> Adapter : search(category_id, params, filters, page)
- Adapter --> Orch : SearchResult(items, count)
- Orch --> API : SearchResult
- API --> User : results grid
- User --> API : POST .../confirm {pick}
- API --> Orch : confirm_pick(session, row_id, pick)
- Orch --> Orch : row.confirmed_pick = pick\nrow.state = confirmed
- User --> API : GET .../export
- API --> User : collated BOM (CSV/XLSX)
- @enduml
|