One-user mode map: one local user context can switch across buyer, seller, business, and personal surfaces. Guard evidence: SaaS status | workflow/RBAC status | identity gate=true | auth connector off=true | no SSO/MFA activation claimed
Shared Context Contract
Buyer Marketplace Toggle Contract
MARKETPLACE_ONLINE
Productwise vs eShopProductwise
Online vs Offlineonline / MARKETPLACE_ONLINE
Personal vs Businessbusiness
Data ViewAll modules
B2B/B2C/C2CB2B
Domestic/Export/Bothdomestic
WalletON
ModuleON
Currency/CountryINR / IN
Origin/DestinationIN -> IN
Company ContextREQUIRED
PolicyON / unlocked
ConditionFresh
New Arrivalpending
Tax LabelGST
Provider ExecutionOFF
External Money MovementNO
Escrow/wallet readinessReady for provider activation
Payment providerOFF until activation
Delivery/return/payout chainPolicy-readback only before provider activation
Buyer Workspace
Buyer Purchase Workspace
Search products, compare suppliers, request quotes, review quotations, accept quotes, track orders, request inspection, track shipment, view invoice, pay or record payment, repeat order, and get support.
Profile completeness meter0%Use the linked buyer pages to continue each purchase step.
ERP ledger closureerp-ledger-frontend-closure-v1Buyer ledger status stays on existing wallet view plus guarded ledger-preview integration; no write path is introduced.
Receipt audit alias status0 receipt_audit / 0 audit / 0 overlapFrontend step naming remains receipt_audit while backend evidence may still emit audit labels.
Buyer receipt-audit route/textile/buyer/receipt-auditVisible buyer link to the existing receipt-audit page; no duplicate buyer page or backend route is added.
Sector / engine statussector=textile / engine=TransformationAll order module_key labels stay inside the exact 22 textile module registry.
Route-family guard/api/trade-core + /api/rfq onlyNo new backend route family, gateway attach, logistics attach, or ERP mutation was introduced.
Canonical order read endpointGET /api/trade-core/orders/mine
Canonical owner scopebuyer/seller identity query and canonical headers
Seller identity proofSeller identity pendingReadback source: /api/trade-core/orders/mine | /api/trade-core/erp/readiness. KYC status is displayed from configured records only; profile promotion remains governed by the seller-master workflow.
Company ownership proofcompany pending / 0/22 textile modulesCompany identity remains the ownership anchor. No off-registry ownership is promoted.
Business/personal continuity proofbuyer:pending -> seller:pendingBusiness company IDs and personal user IDs remain separate across listing -> comparison -> landed_cost -> order -> escrow -> logistics -> delivery -> wallet -> payout -> receipt_audit. Textile transformation surface only; no extraction or assembly engine logic is introduced.
Compatibility aliases preservedGET Aliases remain compatibility-only metadata. No alias route is deleted and canonical order reads still resolve to /api/trade-core/orders/mine.
Read-only route and DB proofNO_DB_CHANGE | NO_ROUTE_DELETE | FRONTEND_PROOF_ONLYThis proof is readonly display only and uses existing fields when present; backend route count, aliases, and DB schema are intentionally unchanged.
Buyer profile readiness / RISKLoading canonical buyer identity...Profile status reads localStorage:ach_client_active_role | localStorage:ach_canonical_buyer_identity | localStorage:ach_user:readonly; personal buyer ID and company ID stay separate and browser-readonly.
Buyer page view status / READY/textile/buyer/orders | /textile/buyer/rfq/exportExisting buyer pages provide RFQ and order view status. No duplicate buyer route, route handler, middleware, or backend alias is added.
RFQ ownership continuity / RISK0/0 RFQ-linked orders alignedRFQ continuity reads existing preparation/RFQ snapshots and buyerId only; it does not create or remap RFQs.
Order ownership continuity / RISK0/0 buyer order rows alignedOrder rows stay scoped to the canonical /api/trade-core/orders/mine view and selected buyer identity.
Receipt ownership continuity / RISK0/0 receipt rows alignedReceipt status reads existing order receipt, payoutReceiptReadiness, and ERP readiness fields. No receipt posting or schema change is triggered.
No new route or schema change / READYNO_DB_SCHEMA_CHANGE | NO_DUPLICATE_BUYER_ROUTE | READBACK_ONLYThe status preserves listing -> comparison -> landed_cost -> order -> escrow -> logistics -> delivery -> wallet -> payout -> receipt_audit and uses the current buyer/order/RFQ pages plus order view metadata only.
Buyer order rows visible0/0Rows are loaded through GET /api/trade-core/orders/mine with canonical buyer identity.
Seller visibility view0/0Seller IDs are read from order, RFQ, or listing snapshots so buyer can see seller-linked order context.
Lifecycle continuity rows0/0Status, payment, escrow, logistics, and payout fields are read from the same order row.
Status continuityNO_ORDER_ROWSCurrent status view is preserved across refreshes without mutating lifecycle state.
Buyer escrow timeline proof0/0Escrow stage rows are read from canonical execution timeline and order snapshots only.
Escrow stage visibility proof0/0Payment, hold, release, return window, and payout readiness stay visible without calling a gateway.
Buyer timeline status0/0Canonical execution timeline rows are displayed from the existing order view.
Status transition view0Transition rows come from order timeline, audit log, and canonical execution projection.
Admin audit link status0/0Admin audit rows point to the existing ERP audit timeline route; no duplicate audit route is created.
Admin escrow audit proof0/0Admin escrow audit points to the existing ERP audit timeline and immutable order audit views.
Payout deferred visibility proof0/0Payout stays deferred behind return window and seller release readiness; no payout execution is exposed.
Return/refund continuity proof0/0Return and refund visibility is view-only from existing returnWindow, refundHold, and releaseWindow fields.
Buyer stock reservation visibility0/0Reservation status is read from existing order inventoryReservationView and /api/trade-core/reservations metadata.
Warehouse reservation continuity0/0Warehouse codes and movement traces remain ERP view status only.
Receipt-audit buyer link/textile/buyer/receipt-auditBuyer can open canonical receipt/audit view without a duplicate page or API.
Buyer runtime statusbuyer-runtime-status-consolidation-v1Buyer, RFQ, order, ERP, wallet/payout, and audit status stays consolidated in this existing order panel without adding another visible status panel.
Route count guardNo new route or schemaStatus is view metadata only; compatibility aliases remain preserved.
Same-order status versionagent87-buyer-seller-admin-same-order-status-v1Existing buyer order page, no new route family.
Same order id visible0/0Order IDs are read from /api/trade-core/orders/mine.
Lifecycle fields visible0/0Payment, document, logistics, and wallet/escrow status are displayed from each same order row.
No standalone test-row statusNO_DB_ORDERS_VISIBLEWATCH: no DB source rows visible in the current buyer filter.
Order status continuity / WATCH0/0 ordersStatus, process stage, lifecycle snapshot, or canonical execution signal is read from the existing order row. Route: GET /api/trade-core/orders/mine.
Escrow / payment status / WATCH0/0 ordersPayment and escrow status uses existing payment, escrow, escrowView, and accounting escrowPaymentState fields only. Route: view only: payment / escrow / accountingMetadata.escrowPaymentState.
Seller identity status / WATCH0/0 ordersSeller identity is read from order, RFQ, seller, or listing snapshots; missing seller fields stay warning labels. Route: view only: order.sellerId / listingSnapshot.sellerId.
Document / receipt status / WATCH0/0 ordersDocument and receipt status uses order/preparation/listing document snapshots, receipt fields, and ERP receipt readiness rows. Route: /textile/buyer/receipt-audit + GET /api/trade-core/erp/readiness.
Module / sector status / WATCH0/0 ordersModule key must be present in the order or listing snapshot; sector=textile, engine=Transformation. Route: existing order/listing module_key view.
Missing data warning labels / WATCHNo buyer order rows returnedPhase 2 status waits for existing buyer-scoped order view; no placeholder order data is generated. Source: GET /api/trade-core/orders/mine.
ERP readiness rows0View is sourced from existing /api/trade-core/erp/readiness payload.
Journal view visible0/0Order-aligned journal DB status is projected from existing readiness rows only.
Invoice view visible0/0Invoice status/no is read from readiness and accounting metadata without new API family.
Invoice posted rows0/0Posted state is display-only; buyer surface does not call invoice-post.
Admin journal deep view/api/trade-core/erp/order/:orderId/journalsRoute remains admin-role guarded and is proved through admin ERP surfaces.
Invoice tax deep view/api/trade-core/erp/invoice-tax-breakupExisting invoice table/tax line view route is reused with no duplicate endpoint.
ExecutionNo payment, logistics, release, refund, payout, receipt, or audit write call is mounted here.
Listing -> RFQ -> Order Status
WATCH
0/0 orders
Order rows are read from the canonical buyer-scoped order endpoint and RFQ draft lineage can be advanced through existing draft lifecycle mutation routes.
GET /api/trade-core/orders/mine
Escrow / Release Status
WATCH
0/0 orders
Escrow hold and release states are read from existing order snapshots; buyer UI does not call payment or release processors.
view only: escrowStatus / releaseSnapshot
Refund / Return Status
WATCH
0/0 orders
Refund hold, return window, and release-window status are displayed from existing fields when present.
view only: refund / returnWindow / releaseWindow
Wallet / Payout Status
WATCH
0/0 orders
Wallet and payout readiness stays read-only and system controlled; payout write routes are not mounted here.