scouting_loop_sequence.puml 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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. == Designed, not yet built ==
  20. User --> API : POST .../confirm-category {category_id}
  21. API --> Orch : confirm_category(session, row_id, category_id)
  22. Orch --> Orch : row.resolved_category_id = ...\nrow.state = filtering
  23. User --> API : POST .../search {filters, page}
  24. API --> Orch : search_row(session, row_id, filters, page)
  25. Orch --> Adapter : search(category_id, params, filters, page)
  26. Adapter --> Orch : SearchResult(items, count)
  27. Orch --> API : SearchResult
  28. API --> User : results grid
  29. User --> API : POST .../confirm {pick}
  30. API --> Orch : confirm_pick(session, row_id, pick)
  31. Orch --> Orch : row.confirmed_pick = pick\nrow.state = confirmed
  32. User --> API : GET .../export
  33. API --> User : collated BOM (CSV/XLSX)
  34. @enduml