scouting_loop_sequence.puml 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. @startuml
  2. actor User
  3. participant "API" as API
  4. participant "Orchestrator" as Orch
  5. participant "LcscCategoryResolver" as Resolver
  6. participant "LcscAdapter" as Adapter
  7. == Implemented ==
  8. User -> API : POST /upload (file)
  9. API -> Orch : build_session(content, filename)
  10. Orch --> API : BomSession (rows: pending)
  11. API --> User : row table (HTMX)
  12. User -> API : GET .../row/{id}/scout
  13. API -> Orch : scout_row(session, row_id)
  14. Orch -> Resolver : resolve(row)
  15. Resolver --> Orch : [LcscCategory] (cache hit or Haiku call)
  16. Orch -> Orch : row.scout_candidates = [...]\nrow.state = scouting
  17. Orch --> API : row
  18. API --> User : candidate list (HTMX swap)
  19. User -> API : POST .../confirm-category {category_id, category_name}
  20. API -> Orch : confirm_category(session, row_id, category_id, category_name)
  21. Orch -> Orch : row.resolved_category_id = ...\nrow.applied_filters = {}\nrow.state = filtering
  22. Orch -> Adapter : query_facets(category_id, applied_filters)
  23. Adapter --> Orch : facet groups (Package/Manufacturer/...)
  24. Orch -> Adapter : search(category_id, params, applied_filters, page=1)
  25. Adapter --> Orch : SearchResult(items, count)
  26. Orch --> API : row (facet_groups, search_results set)
  27. API --> User : facets + results (HTMX swap)
  28. User -> API : POST .../apply-filter {group, value}
  29. API -> Orch : apply_filter(session, row_id, group, value)
  30. Orch -> Orch : applied_filters[key].append(value)
  31. Orch -> Adapter : query_facets(...) + search(...)\n(same as confirm-category)
  32. Adapter --> Orch : narrowed facets + SearchResult
  33. Orch --> API : row (updated)
  34. API --> User : narrowed facets + results (HTMX swap)
  35. User -> API : POST .../confirm {product_code}
  36. API -> Orch : confirm_pick(session, row_id, product_code)
  37. Orch -> Orch : row.confirmed_pick = <matching item>\nrow.state = confirmed
  38. Orch --> API : row
  39. API --> User : confirmed summary (HTMX swap)
  40. == Designed, not yet built ==
  41. User --> API : POST .../apply-filter {group: <param name>, value}
  42. note right : per-component param filters\n(Capacitance/Tolerance/...) -\nrequest shape unverified live
  43. User --> API : GET .../export
  44. API --> User : collated BOM (CSV/XLSX)
  45. @enduml