/** * /comparison — plain-English comparison of how four teams built the same PO chatbot. * * Four questions, one figure + one small table + one takeaway each. */ export function ComparisonView() { return (
Rajat, Naman, Sreedath, Pritam and ourselves each built a chatbot for Ramco's Procure-to-Pay using the same source data drop. This page answers four simple questions about how the approaches differ.
Ramco's data drop has about a dozen kinds of files. Each team picks a different subset. Rajat reads the most kinds of file (11), Sreedath reads the fewest (4) but covers all five Procure-to-Pay sub-modules. Naman and ours sit in the middle.
| Team | # source types | Coverage | The thing only they read |
|---|---|---|---|
| Rajat | 11 | PO only · 13 journeys | OLH HTML, ARM PDF, FSC sheets, step sheets, test cases, PO_info.xml |
| Naman | 6 | PO only · 17 journeys | BPC component registry |
| Sreedath | 4 | All 5 P2P sub-modules · 91 journeys | — |
| Ours | 5 | PO pilot, deep | — |
Takeaway: different teams optimised for different things. Rajat went wide on source variety, Sreedath went wide across sub-modules, Naman and ours went deep on a single journey. Only Rajat reads the Online Help HTML — the file that tells you which fields Ramco's real users see marked as "mandatory".
"Slots" are the fields the bot asks the user for — supplier, item, quantity, and so on. The interesting question is: which Ramco file did each team treat as the source of truth for that list?
| Team | Source of slot list | What that means |
|---|---|---|
| Rajat | OLH HTML "mandatory" markers | Matches what real Ramco users see on screen. |
| Naman | OpenAPI request schema | Matches what the API will accept; may miss UI-only fields. |
| Sreedath | A hand-written JSON file | ~6 fields a developer typed in. Goes stale if Ramco changes anything. |
| Ours | API alias map + variant graph | Variant-aware priority list; lives behind the alias map of API ↔ UI ↔ SP names. |
Takeaway: five teams, five different answers to "what should the bot ask for?" On the same prompt, our bots will request different fields until we agree on one source of truth.
Three of the five bots have an explicit notion of "step 1 → step 2 → step 3". One uses screens-as-steps. Ours has no steps at all — every turn just picks the next slot to ask. It's a slot machine.
| Team | Has steps? | Where steps come from |
|---|---|---|
| Rajat | Yes | One step per OLH group-box on screen. |
| Naman | Yes | One step per UI screen (PoCrtMain, PoCrtDrpshp, …). |
| Sreedath | Yes | Developer-aggregated "user beats" in journeys.json. |
| Pritam | Yes | Server-side step machine (code private). |
| Ours | No — slot machine | Resolver picks the next missing slot each turn. |
Takeaway: steps match Ramco's screen layout. A slot machine matches natural conversation. Both are reasonable — they're different design philosophies, not a right/wrong choice.
Eventually a real chatbot has to call Ramco's APIs to create the PO. So which bots actually do that, and which just stop at naming the API that would be called?
| Team | API actually fires? | How API is referenced |
|---|---|---|
| Rajat | No | Each slot carries its API binding. Static HTML demo. |
| Naman | No | Per-step API list from the CSV. Demo is scripted. |
| Sreedath | No | Each step references its CSV row. No dispatch. |
| Pritam | Unclear (private) | Audit pane suggests real calls for some journeys. |
| Ours | Yes — mocked | Variant lock → build payload → POST → real Ramco-style errors / PO/MOCK/<id>. |
Takeaway: only our bot reaches the point of actually firing a request. Everyone else's demo stops one step short of the API call. To compare fairly we'd need a shared mock environment that replays each team's "I would have called X with payload Y".
Each team made a different trade. Rajat went deep on source variety — he's the only one reading the Online Help HTML where Ramco marks mandatory fields. Sreedath went wide across sub-modules — 91 journeys covering all five P2P modules. Naman built the tightest API audit trail per step. Pritam is the only other team with a server-side stack, but his repo is private. Ours is the only bot that actually fires (mocked) API calls and returns real Ramco-style errors at variant lock. None of these is wrong; they're four different design philosophies for the same problem.