Ecommerce Payments
Ecommerce is the only channel that uses Razorpay. COD and Razorpay are toggled in admin ecommerce settings (paymentcodenabled / paymentrazorpayenabled on EcommerceSettings (backend-main/ecommerce/models.py)). Keys live in backend env only — see docs/RAZORPAY_SETUP.md.
POS & Link Payments
POS counter sales and customer/catalog link checkouts use UPI (or bank) payment screenshots, not Razorpay. Razorpay is ecommerce-only (Ecommerce payments, docs/RAZORPAY_SETUP.md).
Stock Rules
Warehouse quantities live in WarehouseStock (backend-main/warehouse/models.py). Ecommerce reads/writes through ecommerce/services.py (backend-main/ecommerce/services.py) (getproductstock, allocateanddecrement_stock). POS catalog visibility uses stock filters in pos/views.py (backend-main/pos/views.py) / customer-link services, but POS order create does not decrement stock.
Checkout Internals
SPA for customer links (and post-submit tracking/chat) printbazar-checkout/App.tsx. API client Customer link lifecycle, POS & link payments.
Known Limitations
Source of truth for this page: static audit report.md (dated 2026-11-02; cleanup pass notes from 2026-11-03). Do not treat this as a live bug tracker — re-verify against code before relying on severity. The audit did not cover full test/CI runs, production env/webhook verification, SSE load tests, or deep XSS/CSRF.