/** * /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 (

Four teams. One chatbot. Four different ways to build it.

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.

  1. What Ramco files does each team read?
  2. Where does the slot list come from?
  3. Does the bot have journey steps?
  4. Does the bot actually call Ramco APIs?
Numbers come from reading each repo directly. Pritam's repo is private, so his column is filled in from the live deployed app where possible.
{/* ============================ 1. DATA SOURCES ============================ */}

1 · What Ramco files does each team read?

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.

Matrix of source files vs teams
Figure 1 — Filled cell means that team's pipeline reads that file.
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".

{/* ============================ 2. SLOTS ============================ */}

2 · Where does the slot list come from?

"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?

Slot extraction pipelines per team
Figure 2 — Four different sources of truth for "what should the bot ask?"
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.

{/* ============================ 3. STEPS ============================ */}

3 · Does the bot have journey steps?

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.

Journey step representation per team
Figure 3 — Three teams have linear step sequences. Ours has a loop.
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.

{/* ============================ 4. APIs ============================ */}

4 · Does the bot actually call Ramco APIs?

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?

API wiring per team
Figure 4 — Three teams stop at "API named". Pritam is unclear (private). Ours actually fires the call (mocked) and surfaces real Ramco-style errors.
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".

{/* ============================ SUMMARY ============================ */}

One-paragraph summary

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.

{/* ============================ FOOTER ============================ */}

What's not verified here

); }