| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- @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)
- User -> API : POST .../confirm-category {category_id, category_name}
- API -> Orch : confirm_category(session, row_id, category_id, category_name)
- Orch -> Orch : row.resolved_category_id = ...\nrow.applied_filters = {}\nrow.state = filtering
- Orch -> Adapter : query_facets(category_id, applied_filters)
- Adapter --> Orch : facet groups (Package/Manufacturer/...)
- Orch -> Adapter : search(category_id, params, applied_filters, page=1)
- Adapter --> Orch : SearchResult(items, count)
- Orch --> API : row (facet_groups, search_results set)
- API --> User : facets + results (HTMX swap)
- User -> API : POST .../apply-filter {group, value}
- API -> Orch : apply_filter(session, row_id, group, value)
- Orch -> Orch : applied_filters[key].append(value)
- Orch -> Adapter : query_facets(...) + search(...)\n(same as confirm-category)
- Adapter --> Orch : narrowed facets + SearchResult
- Orch --> API : row (updated)
- API --> User : narrowed facets + results (HTMX swap)
- User -> API : POST .../confirm {product_code}
- API -> Orch : confirm_pick(session, row_id, product_code)
- Orch -> Orch : row.confirmed_pick = <matching item>\nrow.state = confirmed
- Orch --> API : row
- API --> User : confirmed summary (HTMX swap)
- == Designed, not yet built ==
- User --> API : POST .../apply-filter {group: <param name>, value}
- note right : per-component param filters\n(Capacitance/Tolerance/...) -\nrequest shape unverified live
- User --> API : GET .../export
- API --> User : collated BOM (CSV/XLSX)
- @enduml
|