Getting started
A ten-minute orientation. Where to sign in, how to install the console on your phone, what the screen chrome does, and who sees what.
1.1Access & login
The console lives at https://crm.nicksonpumps.com. Two sign-in methods, both fronted by the same /login screen with a tab switcher:
- Email + password — the default for all salaried staff and admins.
- Phone + WhatsApp OTP — for shop-floor workers and temporary hires. Enter a 10-digit Indian mobile, receive a 6-digit code on WhatsApp, log in. First-time OTP sign-in silently mints a User account and links it to the worker record — no ticket to IT required.
Forgotten passwords go through the standard reset link on the login form. Ask HR if the reset email doesn't arrive.
1.2Install as a phone app
The console is a Progressive Web App. Once installed it opens fullscreen like a native app, works offline for the login shell, and supports push notifications on Android.
- Android · Chrome / Edge / Brave. Menu (⋮) → Install app. Or wait for the floating Install Nickson CRM pill at the bottom of the screen.
- iPhone · Safari. Share (□↑) → Add to Home Screen. Note iOS does not support push notifications for PWAs.
- Desktop. Look for the install icon (⊕) in the URL bar or menu → Install Nickson CRM.
1.3Interface tour
Sidebar
Grouped by function. What you see depends on your role — a sales rep sees leads, dealers, catalog, commerce; HR sees HR and payroll; the owner sees everything. Collapse the sidebar via the arrow at the bottom-left when the workstation monitor is short on horizontal room.
Command palette · ⌘K / Ctrl+K
Fastest way to jump anywhere. Type a record identifier, a page name, or a customer name — hit enter, land on the record. Faster than clicking through the sidebar for anything a user does more than twice a day.
Top bar
- QR scanner. Scan a pump serial sticker, a package label, a vendor code, or a dealer QR. Camera permission asked once, then it's a one-tap lookup.
- Quick capture. One-tap add of a new lead, task, or note.
- Notifications. Inbox of things needing your attention — pending approvals, overdue tasks, new lead assignments, warranty claims raised.
- Language. English · हिन्दी · ਪੰਜਾਬੀ. Cookie-scoped, applies to the whole console.
1.4Roles & permissions
Every user carries one role. The role controls which sidebar sections appear, which pages open, which actions are allowed, and — critically — which rows are visible. A sales rep sees their team's leads, not other teams'. A worker sees only their own payslip. Row-level security is enforced at the database boundary, not on the frontend.
| Role | Purpose | Landing |
|---|---|---|
| ADMIN | Owner / super-user, sees everything | / |
| SALES | Sales rep — leads, dealers, quotes, orders | /dashboards/sales |
| DISPATCH | Warehouse and dispatch floor | /dashboards/dispatch |
| ACCOUNTS | Bookkeeping, invoices, payments, cash register | /dashboards/finance |
| WARRANTY | Service and warranty claims | /dispatch/warranty-claims |
| HR | HR, payroll, attendance, statutory compliance | /hr/employees |
| EMPLOYEE | Shop-floor worker (own attendance, work, pay) | /e |
| DEALER_PORTAL | External dealer login (self-service) | /dealers |
Modules
Every function of the business, one card per module. Skim the grid for orientation, dive into a section for the fields, screens, and integrations that come with each.
The seventeen
Every inquiry from IndiaMART, walk-in, phone, dealer referral, web. Pipeline stages, kanban, activity timeline, conversion.
/leadsMaster of every dealer — contacts, locations, credit terms, tier, GST + PAN, consignment warehouses.
/dealersEvery SKU — pumps, motors, panels, raw materials, spares. Variants, specs, pricing, marketing content.
/productsQuote → Order → Invoice → Payment. GST breakdown, IRN, e-way bills, credit notes.
/commerceVendors, POs, GRNs (formal + cash), three-way match, MSME compliance, vendor–part directory.
/procurementBOM → Work Order → Job Cards → Piece-rate logs → Stock entry. Workstations, operations, batch tracking.
/manufacturingWarehouses, stock balances, reorder rules, movement history, FIFO/LIFO valuation, landed cost.
/inventoryEmployees, wage workers, departments, attendance, leave, expense, payroll — statutory compliance built in.
/hrThe shop-floor worker's own view — home, work log, attendance punches, payslips, running balance.
/eDispatch orders, packing, e-way bills, serial number allocation, delivery challan, warranty registration setup.
/dispatchInvoices, payments, credit notes, AR aging, MSME 45-day gate, and the Cash Register for non-GST cash.
/financeVisits, beat plans, daily call reports, helpdesk tickets — the field force's daily rhythm.
/fieldNon-conformance reports, corrective/preventive actions, calibration schedules — ISO 9001:2015 aligned.
/qmsFixed asset register, AMC contracts, maintenance schedules, depreciation runs.
/assetsSerial-scan lookup, customer self-registration, claim submission, technician dispatch, resolution log.
/w/[serial]Announcements to roles and departments, plus the notification log auditing every message the system has sent.
/notificationsThird-party integrations (IndiaMART, WhatsApp Cloud, GST GSP), notification templates, general configuration.
/settings2.1Leads
Every inquiry that walks in the door. IndiaMART leads land automatically via the ingest webhook; walk-in and phone leads get typed in at /leads/new. The pipeline runs New → Contacted → Qualified → Proposal → Won / Lost. The kanban view is a five-minute daily stand-up in one screen.
Key actions
- Create a lead: buyer name, phone, city, product interest, source, query, UTM if applicable.
- Advance stage — either on the detail page dropdown or by dragging on the kanban.
- Log activities: calls, emails, WhatsApp screenshots. Each is timestamped and shown in the timeline.
- Convert to a dealer if the buyer is a new distributor, or route straight into a quote if they want to buy.
2.2Dealers
Master of every business customer that stocks Nickson pumps. Codes are free-form (DLR-PB-001 for the first Punjab dealer). Each dealer carries contacts, locations, credit terms, tier, GST, PAN, address. Consignment warehouses — dealers who hold Nickson stock on their floor — get their own Warehouse row pointing back here.
Set credit days accurately
The MSME 45-day gate at /finance/msme reads this to flag statutory-breach risk before it becomes one.
2.3Products & Catalog
Every SKU flows through here — finished pumps, motors, control panels, and the raw materials and components used in manufacturing. The same catalog powers sales, procurement, and BOMs.
Fields that matter
- SKU (unique), name, category, brand — the identity.
- HP · voltage · head · flow rate — the specs dealers ask about.
- Base price (internal, in paise) · MRP (marketing site) · MOQ.
- Variants (HP × phase × voltage) auto-generate child SKUs when the parent has hasVariants set.
- Serial / batch tracking flags — turn these on for finished pumps that ship with a warranty QR.
2.4Commerce · Quotes, Orders, Invoices
The GST-invoiced customer-facing flow. A quote gets picked up by the customer, converts to a sales order, which — when dispatched — becomes an invoice, which — when paid — settles receivables.
Order states
DRAFT → CONFIRMED → RELEASED_TO_FACTORY → PARTIALLY_DISPATCHED → FULLY_DISPATCHED → INVOICED → PAID
Invoice generation
Once dispatched, the sales order's Generate Invoice action mints an INV-YYYY-##### with GST breakdown (CGST + SGST for intra-state, IGST for inter-state, decided from your Warehouse state code vs the dealer state). IRN + QR code auto-populate via NIC's GSP if it's configured under Settings. Interstate invoices over ₹50,000 also auto-generate the e-way bill number.
2.5Procurement
Raw materials, spares, consumables. Two parallel paths — the formal Purchase Order lifecycle for regular vendors, and the cash-purchase shortcut for market runs.
Vendor onboarding
At /procurement/vendors/new. Code is auto (V-000001). Fill legal name, trade name, vendor type (RAW_MATERIAL / CONSUMABLE / SERVICE / CAPEX / SUBCONTRACTOR), GSTIN, PAN, Udyam, MSME classification. New vendors start as PROSPECT until documents are verified.
Purchase Order flow
DRAFT → PENDING_APPROVAL → APPROVED → SENT_TO_VENDOR → ACKNOWLEDGED → PARTIALLY_RECEIVED → FULLY_RECEIVED → CLOSED
Approval threshold configured in Settings — anything above needs an approver at /workflows-admin/approvals before it can be sent.
Cash-purchase GRN — the market-run path
At /procurement/grns/new. Two vendor modes — pick from the master (existing) or type an ad-hoc shop name (market run). Line items support a datalist auto-fill from the catalog, or free-text for uncatalogued consumables. Payment mode and reference logged at the header. Catalog lines hit the stock ledger; free-text consumables (cotton waste, tea for the floor) do not.
Vendor–Part directory
At /procurement/vendor-parts. Derived entirely from GRN history — no separate maintenance table. Shows every (product, vendor) pair with last unit price, average, total quantity, GRN count, and a cash-vs-PO split badge. Consult before raising the next PO to spot the cheapest historical supplier.
Three-way match
At /procurement/three-way-match. Every vendor invoice recorded against a PO runs an automated match — line by line — against the PO and the GRN. Mismatches land in the review queue; matched invoices move to Approved for Payment.
2.6Manufacturing
Bill of Materials
A BOM specifies what a product is made of — components, quantities, scrap allowance, operations. Header + version-snapshot pattern: each release creates an immutable BOMVersion, so old work orders remain reproducible even after a design revision.
Work Order
The production order — pick a BOM, target quantity, start / end dates, priority. Statuses run Planned → Released → In-Progress → Hold → Completed → Cancelled. Releasing a WO freezes material requirements and dispatches requisitions to WIP.
Job Cards
One workstation's chunk of a work order — "stator winding for 20 impellers on Machine 3". Operator starts, logs progress, closes. Piece-rate earnings roll up here.
Stock Entry
Material movements. Purposes: Material transfer for manufacture, Manufacture (finished output), Disassemble, Material return. Serial / batch tracked items prompt for the right picker. Once posted, item quantities and warehouses are frozen — corrections raise a reversal + redo entry, never a silent update.
2.7Inventory & Warehouses
Physical stock — where it is, how much, at what value. Warehouses come in eight types (RAW_MATERIAL, FINISHED_GOODS, WIP, SPARES, SCRAP, TRANSIT, DEALER_CONSIGNMENT, RETURNS). Stock levels roll up from an append-only StockMovement ledger; the FIFO / LIFO / MOVING_AVERAGE valuation runs off a parallel StockLedgerEntry queue.
Reorder rules
Per (product, warehouse). Reorder point + reorder quantity + lead time + safety stock + preferred vendor. When on-hand drops below the reorder point, an alert fires on the Owner Brief.
Landed cost vouchers
For freight, clearing, duty, or any post-receipt cost that should be absorbed into inventory value. Distributes across the receipt basis you pick (by qty / value / weight).
2.8HR & Payroll
Everything people-related. Two employee models by design — EmployeeV2 for salaried permanent staff with a full compensation structure, statutory identifiers (PF · ESI · TDS · Aadhaar hash · PAN · UAN), department, designation, and grade; and TemporaryWorker for shop-floor piece-rate hires with just name, phone, join date and optional email.
Attendance
Two capture methods — biometric device push, or the worker's phone via /e/attendance with GPS + selfie verification. Both write to AttendanceLog; the day-record rollup computes hours + overtime + half-day markers.
Daily work submission — piece-rate approval
The worker's day of piece-rate entries at /e/work gets a Submit today action that locks it for HR. HR reviews the summary at /hr/approvals/daily-work: approve rolls into the next payslip, reject with a note lets the worker resubmit.
Payslip generation
At /hr/payroll/payslips → Generate for period. EmployeeV2 rows roll up base + allowances − statutory deductions − advance recoveries → net. TemporaryWorker rows sum approved piece-rate earnings for the period. Both write to /e/salary per worker.
2.9My Nickson — employee self-service
The shop-floor worker's home. As of this revision the entire tree renders inside the standard AppShell — same sidebar, same install prompt, same command palette as everyone else. A dedicated "My Nickson" sidebar section (visible only to EMPLOYEE) holds the five surfaces.
- Home — today's earnings, pending work, last payslip, ledger balance.
- Work — log a piece-rate entry, submit today's work at day-end.
- Attendance — punch in / out with GPS + selfie. Regularize a missed punch.
- Salary — payslip history (or month-by-month piece-rate earnings for temp workers).
- Balance — advances, recoveries, cash payments received, running net.
2.10Dispatch
The path out. Dispatch order pulls from a confirmed sales order, allocates serial numbers from FG stock, generates the e-way bill, prints the delivery challan. Marked dispatched when the truck leaves.
Serial numbers
Every finished pump gets a unique serial — either generated at Job Card completion or imported from a batch. Serial + Batch + Dispatch + Customer is a four-way link that powers warranty for the pump's lifetime.
Warranty claims triage
Customers scanning the QR on a delivered pump can register warranty and later raise a claim. Both land on the dispatch team's /dispatch/warranty-claims queue — assign a technician, schedule the visit, coordinate replacement if needed, close on resolution.
2.11Finance & Accounting
Money in, money out, and the books. Invoices come from Commerce; payments settle them; credit notes reverse them.
Cash Register — non-GST cash movements
Every cash movement outside the GST-invoiced flow — below-threshold vendor purchases, walk-in cash sales without invoice, petty cash, employee advances, owner drawings, deposits, reverse-charge purchases. One book, complete visibility. Every entry carries a mandatory legal exemption tag from a fixed list, so the year-end CA pack splits the same records into three audit buckets cleanly.
The three buckets at year-end
- GST-invoiced turnover — already in Commerce; goes into GSTR filings.
- Non-GST taxable income — cash sales without invoice, below-threshold vendors; goes into ITR only.
- Non-income entries — advances, deposits, owner transactions; neither GSTR nor ITR-taxable at the moment of entry.
2.12Field & Service
The field force's daily rhythm. Visits log check-in / check-out at customer or dealer sites with GPS and optional selfie. Beat plans pre-define which dealers to visit which days. The Daily Call Report summarises the day. Helpdesk absorbs inbound tickets from customers, dealers, and internal — warranty claims from the public QR flow auto-create tickets here.
2.13Quality — QMS
ISO 9001:2015-aligned. Non-conformance reports capture defects from incoming QC, in-process inspection, final QC, or customer complaint — severity classified, immediate containment logged, owner assigned. Corrective / preventive actions (CAPAs) trigger from NCRs or audit findings; root-cause analysis attached, action items with owners and due dates, effectiveness verification required before closure.
2.14Assets
Fixed asset register — machines, vehicles, computers, furniture. Purchase cost, salvage value, useful life, depreciation method (SLM / WDV) power the depreciation schedule. AMC contracts renew with a 30-day-before-expiry alert. Preventive maintenance schedules (every X hours / km / months) surface due-date alerts on the maintenance calendar.
2.15Warranty
Every finished pump ships with a QR sticker linking to /w/[serial]. First scan by the customer prompts warranty registration — name, phone, address, installation date — verified by WhatsApp OTP. Later scans show warranty status and a Report a problem action that files a claim + a helpdesk ticket. Warranty reps triage at /dispatch/warranty-claims: assign technician, schedule visit, approve replacement, close on resolution.
2.16Notifications
Announcements broadcast to a role, department, region, or custom user list — surfaced as an in-app banner with optional email / SMS / WhatsApp / push fan-out. Priority levels (LOW → NORMAL → HIGH → CRITICAL) and mandatory-ack flag for policy rollouts. Notification log is the append-only audit trail of every message the system has sent — recipient, channel, template, delivery status, retries. Use it to answer "did the customer get the invoice?".
2.17Settings
Third-party API keys and integration toggles — IndiaMART lead webhook, WhatsApp Cloud API, GST GSP for IRN + e-way bill, PostHog, Sentry, notification templates. Every change is audit-logged.
Role playbooks
Each role's daily rhythm mapped to the console. Not everything on the list, every day — the load-bearing beats that keep the operation moving.
Morning · through the day · end
- Owner brief at /dashboards/owner — yesterday's summary tiles, cash movement, pending approvals count.
- Inbox at /inbox for anything flagged.
- Finance dashboard for AR aging highlights.
- Approve pending items at /workflows-admin/approvals — above-threshold POs, expense claims, leave.
- Review any HR-flagged daily work anomalies at /hr/approvals/daily-work.
- Answer team questions by jumping to their view via ⌘K.
- Skim /finance/cash-register — sanity-check the day's cash movements.
- Review /dashboards/sales to see what closed.
Fill the pipeline, then move it forward
- Kanban at /leads/kanban to see the day's pipeline shape.
- Beat plan at /field/beats for today's route.
- Filter /leads?assignedToId=<self>&stage=CONTACTED for the call list.
- Log activities on each lead as calls happen.
- Push accepted quotes → orders at /commerce/quotes.
- Punch visits at /field/visits when meeting dealers.
- New leads walk in → /leads/new.
- File the Daily Call Report at /field/dcr/new.
Books tight, breaches zero
- Finance dashboard for cash position and AR aging highlights.
- /finance/msme for any breach approaching the 45-day mark.
- AR aging report — build the collection call list.
- Record incoming payments at /finance/payments/new.
- Match vendor invoices at /procurement/three-way-match.
- Log cash movements at /finance/cash-register/new — petty cash, below-threshold vendor purchases, walk-in cash sales.
- Issue credit notes at /finance/credit-notes/new as needed.
- Reconcile bank statement with recorded payments.
- Confirm the day's cash register entries.
Keep the line supplied
- Procurement hub for KPIs — open POs, pending 3-way matches, days-to-MSME breach.
- Reorder alerts firing at /inventory/reorder-rules.
- POs awaiting approval at /procurement/purchase-orders?status=PENDING_APPROVAL.
- Raise new POs when alerts fire; receive against POs at /procurement/grns as vendors deliver.
- Cash purchases from market runs → /procurement/grns/new.
- Consult vendor–part directory before raising the next PO to spot the cheapest historical supplier.
- Onboard new vendors as needed at /procurement/vendors/new.
People first, then paperwork
- HR dashboard for attendance rate, pending approvals, headcount.
- Attendance grid at /hr/attendance — absentees, regularization requests.
- Leave applications waiting at /hr/leave/approvals.
- Approve daily work submissions at /hr/approvals/daily-work.
- Handle expense claims at /hr/expense/claims.
- Onboard new hires at /hr/employees/new or /hr/wage-workers/new.
- Generate payslips for the period at /hr/payroll/payslips.
- Spot-check outliers before finalising.
- Trigger bulk payment via /finance/payments.
Ready → truck → gate
- Dispatch dashboard for today's queue by priority.
- Orders at /dispatch?status=READY — ready to leave today.
- Pick + pack, allocate serial numbers as items are packed.
- Generate e-way bills at dispatch time.
- Print delivery challans, hand to driver.
- Mark dispatched when the truck leaves the plant.
- Triage new warranty claims at /dispatch/warranty-claims.
Every claim, every day
- Open queue + new claims at /dispatch/warranty-claims.
- My open helpdesk tickets at /helpdesk/tickets?assignedToId=<self>.
- Assign technicians to claims; schedule visits.
- Coordinate with field service; update customers on progress.
- Approve replacement units when diagnosis warrants; close claims with a resolution note.
Punch in · log work · punch out
- Open PWA on phone → /e/attendance → punch in.
- Complete assigned work.
- /e/work → log an entry for each operation completed.
- Punch out.
- /e/work → submit today's work (locks the day for HR review).
- Check /e/salary for month-so-far earnings.
- Check /e/balance for running ledger.
Walkthroughs
Six real scenarios using the seeded data. Real names, real values to type, real screens to expect. If you've never used the console before, work through these end-to-end — you'll understand the whole thing.
A dealer inquiry becomes a booked order
Sales · about 12 minutes end-to-end
Balbir Singh Pump House (Ludhiana) rings the office asking for ten V4 5HP submersibles for a tubewell project near Sultanpur Lodhi. The dealer already exists in the master. Vikram Bhalla, the sales manager, takes it from a fresh lead to a confirmed order.
Before you start
- Signed in as sales@test.nicksonpumps.com (password TestPass123!).
- Dealer Balbir Singh Pump House exists (DLR-PB-... seeded).
- Product Nickson V4 5HP Submersible (NIC-V4-5HP) exists in the catalog.
-
Open the leads list
In the sidebar under Leads & Data, click All Leads — you land on /leads.
Top-right corner: click + New Lead.
ExpectedThe New Lead form opens at /leads/new. -
Fill in the lead
Enter these values (copy-safe):
Buyer name Balbir Singh Phone +91 98888-12345 City Ludhiana Source PHONE Product interest NIC-V4-5HP Estimated quantity 10 Query Wants 10 x V4 5HP for a tubewell project near Sultanpur Lodhi. Requesting a bulk quote. Click Save.
ExpectedLead saves. Detail page opens with stage NEW. -
Log the call as an activity
On the lead detail page, scroll to the Activity timeline.
Click + Add note and type: Called Balbir at 11:20am. Confirmed spec, price expectation, 3-week delivery window acceptable.
From the Stage dropdown at the top, change NEW → QUALIFIED.
ExpectedThe activity appears in the timeline with your name and timestamp. The lead's stage badge updates. -
Link to the existing dealer
On the lead detail page, find the Dealer field in the right-hand panel.
Start typing Balbir — the picker suggests Balbir Singh Pump House · DLR-PB-.... Select it.
Click Save.
ExpectedThe dealer link appears on the lead. Opening the dealer detail page now shows this lead in its history. -
Create a quote
Sidebar → Commerce → Quotes → click + New Quote.
Fill in:
Customer / dealer Balbir Singh Pump House Delivery address (auto-fills from dealer) Validity 30 days from today Under Line items, click + Add line:
Product NIC-V4-5HP Quantity 10 Unit price 18500 GST rate 18 Click Save quote.
ExpectedQuote saves with number QT-YYYY-#####. Subtotal ₹1,85,000; CGST + SGST ₹33,300 (intra-state PB → PB); total ₹2,18,300. -
Convert to a sales order
On the quote detail page, click Convert to Order in the top-right.
Confirm the customer + lines match what you quoted.
Click Create order.
ExpectedNew Sales Order at /commerce/orders/[id] with status DRAFT. Lines copied from the quote. -
Confirm the order
Once you've received the customer's PO or advance, click Confirm order on the detail page.
The status moves to CONFIRMED and the order enters the Manufacturing + Dispatch queues.
Bearings from the market — cash purchase
Procurement · about 5 minutes
Simran Kaur, the store keeper, drives to Chowk Mehta and buys five SKF 6205 bearings from Guru Nanak Hardware — cash, no bill because the shop is below the GST threshold. She logs it in the CRM the moment she's back so stock is up to date and the paperwork is clean for the CA.
Before you start
- Signed in as accounts@test.nicksonpumps.com, dispatch@test.nicksonpumps.com, or admin@test.nicksonpumps.com.
- The PLANT-MAIN warehouse and the RM-BRG-6205 product both exist (from master seed).
-
Open the cash-purchase GRN form
Sidebar → Procurement → Goods receipts → click + Cash purchase at the top-right.
ExpectedThe form opens at /procurement/grns/new. -
Switch vendor mode to ad-hoc
Top of the form: the vendor mode toggle. Click Ad-hoc / market.
Enter shop details:
Shop / supplier name Guru Nanak Hardware, Chowk Mehta Phone +91 98765-43210 GSTIN (leave blank — shop is below threshold, no GSTIN) -
Set receipt meta
Fill:
Warehouse PLANT-MAIN · Main Plant (default) Received at Now (default) Vehicle number (leave blank) Bill number (no bill — leave blank) -
Add the line item
Under What did you buy?, on the first row of the table, start typing in the Item cell: SKF 6205.
The catalog auto-fills. Select SKF 6205-2Z Deep Groove Ball Bearing. The SKU column auto-populates to RM-BRG-6205.
Fill the rest of the row:
UOM EACH Quantity 5 Unit ₹ 1600 GST % 0 The row total shows ₹8,000 at the right.
ExpectedSubtotal ₹8,000, GST ₹0, grand total ₹8,000 in the footer. -
Record the payment
Bottom section, How was it paid?:
Mode Cash Amount paid 8000.00 Reference Voucher 42 Click Post cash-purchase receipt.
ExpectedPost succeeds, redirects to the GRN detail page with number GRN-YY-######, status POSTED. Stock ledger for RM-BRG-6205 at PLANT-MAIN increments by 5.
Petty cash — tea for the shop floor
Accounts · under 2 minutes
Ravi (accountant) hands over ₹340 from the office kitty to a tea stall. No goods came in, no invoice out — just money moving. This is a Cash Register entry, not a GRN. The distinction matters because the CA at year-end wants to see kitty spend split from stock purchases.
Before you start
- Signed in as accounts@test.nicksonpumps.com or admin@test.nicksonpumps.com.
-
Open the Cash Register
Sidebar → Finance → Cash Register.
Top-right: + Log entry.
ExpectedThe form opens at /finance/cash-register/new. -
Pick direction and nature
Direction toggle at the top: click Money out (amber).
Nature dropdown: select Kitty spend (tea, courier, small consumable).
-
Fill the numbers
Amount (₹) 340 Entry date Today (default) Payment mode Cash -
Counterparty
Name Amritsar Tea Stall Phone / Reference (leave blank) Link to dealer / vendor (leave blank) -
Pick the legal exemption
This is the mandatory field — the whole point of the module. Select the radio for Petty cash under limit.
Description (optional): Tea and snacks for factory floor during machining shift.
Click Log entry.
ExpectedRedirects to the entry detail page at /finance/cash-register/[id]. Voucher code CR-YYYYMMDD-####.
HR approves a worker's day of piece-rate
HR · about 3 minutes per worker
At day-end, worker "Test Temp Worker" (worker@) submitted her work for the day — 48 pieces of V4 impeller assembly. Sunita (HR Executive) reviews it the next morning and approves so it rolls into the next payslip.
Before you start
- Signed in as hr@test.nicksonpumps.com or admin@test.nicksonpumps.com.
- Worker has already submitted a day's work via /e/work.
-
Open the approvals queue
Sidebar → HR → Approvals → Daily Work Approvals.
ExpectedList at /hr/approvals/daily-work shows submitted-but-not-reviewed entries. -
Open a submission
Click the row for Test Temp Worker · today's date · 48 pcs · ₹2,160.
The detail page opens with a table of the day's entries — each operation, piece count, rate, line total.
-
Sanity-check the numbers
Compare against the workstation log or the supervisor's tally sheet.
Look for outliers — an unusually high piece count for the operation duration, or an operation the worker isn't normally on.
If any line looks off, click Reject and add a note like "Please split OP-WIND-V4-5HP from OP-BAL-ROTOR and resubmit." The worker can then fix and resubmit.
-
Approve
If everything checks out, click Approve.
Optional note field: leave a one-liner if there's context worth preserving.
ExpectedStatus changes to APPROVED. The row disappears from the pending queue.
A shop-floor worker's day, on the phone
Employee · under 90 seconds each end + during work
Ramesh Yadav (temp worker) opens the Nickson CRM PWA on his phone when he arrives at the plant, logs work through the day, and punches out at end of shift.
Before you start
- PWA installed on Ramesh's phone (see Part I, §1.2).
- Signed in as worker@test.nicksonpumps.com, or via phone-OTP at +91 9999-999-902.
- Location permission granted (first-time only).
-
Punch in at start of shift
Open the app. Sidebar → My Nickson → Attendance. Or tap the app icon and go straight to /e/attendance.
Tap the big green Punch In button.
The phone camera opens for a quick selfie. Take it, tap Use photo.
ExpectedAn entry appears in today's list: IN · timestamp · location "Jagdish Industries plant". A green Present banner shows at the top. -
Log the day's first piece-rate work
Sidebar → My Nickson → My work.
Tap + Log entry.
Operation V4 5HP impeller assembly Pieces 24 Notes (optional) Tap Save. Rate is auto-fetched from the operation master; earnings for this entry show as ₹1,080 (24 × ₹45).
-
Log more entries as work progresses
After lunch Ramesh does another 24 pieces on the same operation. Same form, tap + Log entry, another 24 pieces.
The top tile Today's earnings ticks up to ₹2,160 across two entries.
Same operation same day The database enforces one row per (worker, operation, date). If Ramesh already logged 24 for this operation today, saving another 24 will replace, not add. To add, edit the existing row and change 24 → 48. -
Punch out at end of shift
Back to /e/attendance → tap Punch Out. Selfie again, tap Use photo.
ExpectedToday's list shows both IN and OUT punches with timestamps. The day's total hours computes at the top. -
Submit today for HR review
Sidebar → My Nickson → My work.
Bottom of the page: Submit today's work. Tap it.
Confirmation prompt shows the day's total (48 pcs, ₹2,160). Tap Yes, submit.
ExpectedThe day locks. Ramesh sees a Submitted, awaiting HR review banner. The row is now in Sunita's queue at /hr/approvals/daily-work (see scenario 04).
Warranty claim — from customer QR to technician dispatch
Warranty · about 5 minutes to triage
A farmer in Sirsa scans the QR sticker on his V4 5HP pump — installed 6 months ago — and reports that the pump is running but discharge has dropped by half. The claim lands in the warranty team's queue. The warranty rep assigns a technician and schedules a visit.
Before you start
- Signed in as warranty@test.nicksonpumps.com or admin@test.nicksonpumps.com.
- Customer has already registered the warranty via the public QR flow (/w/[serial]/register).
- A warranty claim has been raised via /w/[serial] → Report a problem.
-
Open the warranty claim queue
Sidebar → Field & Service → Warranty Claims. Or if it's your role landing, you're already there at /dispatch/warranty-claims.
New claims sort to the top with an Open pill.
-
Read the claim
Click the top row. Detail page shows:
- Pump serial, model, dispatch date, warranty valid-till date
- Customer name, phone, address, installation location (map link)
- Issue type (in this case: Low discharge) + customer description + photos they uploaded
-
Assign a technician
Right-hand panel: Assign technician.
Pick from the technician dropdown — the list is field-service staff filtered to the customer's region.
Set visit date (default: 2 working days out; adjust if the customer specified a slot).
Click Assign.
ExpectedClaim status moves from OPEN → TECHNICIAN_ASSIGNED. Customer receives an SMS + WhatsApp with the visit slot. The technician sees the visit in their /field/visits queue. -
Wait for the visit outcome
The technician visits the customer, diagnoses the issue, logs findings on the visit detail page. Common outcomes:
- Field-fixable — cleaned strainer, tightened seal — technician closes visit; you close the claim with Resolved on site.
- Replacement needed — motor burnt, impeller worn — technician requests a replacement pump; you approve, dispatch a fresh unit against the claim.
- Out of warranty — misuse, damage — technician logs the reason; you close the claim as Out of warranty, customer gets a quote for paid service.
-
Close the claim
Once the outcome is known, click Close claim. Pick resolution status and add a note explaining the outcome.
ExpectedStatus CLOSED with a resolution timestamp. Customer receives a closure notification via WhatsApp.
Reports & dashboards
Aggregations that turn day-in day-out entries into decisions. One dashboard per role, plus a year-end pack for the CA.
| Dashboard | Reads | Shows |
|---|---|---|
| /dashboards/owner | ADMIN | Yesterday's summary — new leads, orders booked, cash in/out, WIP work orders, dispatches, pending approvals, reorder alerts. |
| /dashboards/sales | ADMIN · SALES | Pipeline value by stage, win rate, rep leaderboard, top products, conversion funnel. |
| /dashboards/finance | ADMIN · ACCOUNTS | Cash position, AR outstanding by aging bucket, AP outstanding, MSME breach count, monthly cash flows. |
| /dashboards/hr | ADMIN · HR | Headcount by department, today's attendance %, absentees, pending approvals, monthly payroll accrual. |
| /dashboards/quality | ADMIN · QUALITY | QC pass rate, open NCRs by severity, overdue CAPAs, calibrations due. |
| /dashboards/employee | ADMIN · shop-floor managers | Attendance heat map, per-worker piece-rate productivity, weekly accrual, anomalies. |
| /dashboards/dispatch | ADMIN · DISPATCH | Today's dispatch queue, on-time dispatch %, warranty claim inflow. |
| /dashboards/field | ADMIN · SALES | Field-rep visit counts, beat coverage, dealer touch frequency. |
Year-end pack for the CA
Exports to hand your Chartered Accountant at financial year end:
- /commerce/invoices?fromDate=&toDate= — GST-invoiced sales (CSV export).
- /procurement/vendor-invoices?fromDate=&toDate= — GST-invoiced purchases (CSV).
- /finance/cash-register?from=&to= — non-GST cash movements, tagged by legal reason.
- /finance/payments?fromDate=&toDate= — payments log.
- /finance/msme — MSME 45-day compliance report.
- /hr/payroll/payslips?year= — annual payroll summary.
Reference
Compliance guardrails, the URL directory, test credentials, and where to shout when something's off.
6.1Compliance guardrails
Automatic protections the console enforces. You don't have to remember them — the system asks the right question before you save.
| Guardrail | Where | Prevents |
|---|---|---|
| Section 269ST cash cap | /finance/cash-register/new | Soft-blocks any cash-mode entry ≥ ₹2 lakh. Section 271DA penalty is 100 % of the amount. |
| MSME 45-day gate | vendor invoice save · /finance/msme | Warns when an invoice is going to breach the 45-day statutory limit (Section 43B). |
| Vendor threshold advisory | Cash Register save | Warns at 87 % of ₹40 lakh cumulative unbilled purchases from a single vendor in a fiscal year. |
| Back-date lock · Cash Register | Cash Register form | No entries older than 90 days without admin re-opening the accounting period. |
| Back-date lock · Stock Entry meta | Stock Entry edit | Posting date can't shift more than 14 days. |
| Ledger integrity | Stock Entry detail | Item quantity / warehouse frozen once posted. Corrections raise a reversal + redo. |
| PO approval workflow | Purchase Order save | Above-threshold POs need explicit approval before being sent to vendor. |
| BOM activation | BOM detail | DRAFT BOMs can't drive Work Orders. Release explicitly. |
| Duplicate GRN detection | GRN save | Warns if the same vendor + PO already has a POSTED GRN today. |
6.2URL directory
6.3Test credentials
Nine test logins are seeded on prod. All share password TestPass123!. Rotate before you'd hand these to anyone real — they exist for staff walkthroughs and demos.
| Login | Role | Notes |
|---|---|---|
| admin@test.nicksonpumps.com | ADMIN | Full app · owner view |
| sales@test.nicksonpumps.com | SALES | Leads, dealers, quotes, orders |
| dispatch@test.nicksonpumps.com | DISPATCH | Dispatch queue, serials, warranty triage |
| accounts@test.nicksonpumps.com | ACCOUNTS | Finance, invoices, cash register |
| warranty@test.nicksonpumps.com | WARRANTY | Warranty claims, helpdesk tickets |
| hr@test.nicksonpumps.com | HR | HR, payroll, attendance, approvals |
| dealer@test.nicksonpumps.com | DEALER_PORTAL | External dealer self-service |
| employee@test.nicksonpumps.com | EMPLOYEE | Linked to TMP-2026-0002 |
| worker@test.nicksonpumps.com | EMPLOYEE | Also phone-OTP at +91 9999-999-902 |
6.4Support
- Business owner · Rahul Singh — rahulsingh0893450@gmail.com · +91 98772-69207
- Developer · Tarun Bhardwaj — itarunbhardwaj@gmail.com
- CRM issues & feedback — file a ticket at /helpdesk/tickets/new with category set to internal.
Options & choices
Every meaningful dropdown, radio, and status enum in the console — what each value means, when to reach for it, why it matters, and the common mistake to avoid.
7.1Sales & Leads
Lead stage
Every lead lives in one stage at a time. The whole daily kanban lives off this field.
| Value | What / when to use | Downstream effect | Common mistake |
|---|---|---|---|
| NEW | Just captured. No conversation yet. Every incoming lead — IndiaMART, walk-in, phone — starts here. | Owner brief flags any NEW lead older than 24 hours as untouched. | Leaving a lead in NEW after the first call — move it to CONTACTED right away. |
| CONTACTED | You've reached the buyer at least once — even just to acknowledge the inquiry. | Lead scoring events start counting. | Advancing to QUALIFIED before you actually know their spec, budget, and timing. |
| QUALIFIED | You know what they want (SKU + quantity), their budget range, and their expected timing. | Lead becomes eligible to open a quote against. | Marking QUALIFIED to look busy on the kanban when you haven't actually confirmed the spec. |
| PROPOSAL_SENT | A quote has been sent — email or WhatsApp — and you're waiting for a decision. | Aging timer starts. Sales dashboard shows this as "in review" pipeline value. | Not following up on stale PROPOSAL_SENT leads — they rot the pipeline. |
| NEGOTIATION | Buyer's engaging but haggling — price, terms, spec change. | Manager gets a nudge on the dashboard to help close. | Skipping this and jumping straight from PROPOSAL_SENT to WON — you lose the "why did we discount?" trail. |
| WON | Buyer has said yes. Usually paired with quote → order conversion. | closedAt stamped. Rep leaderboard updates. Dealer credit history extends. | Marking WON before the order is actually confirmed. Wait for the customer PO or advance. |
| LOST | Buyer bought elsewhere or dropped off. Set a loss reason so the pattern is visible later. | Feeds the loss-reason analytics. | Marking LOST without a reason. "Ghosted" is a reason too — just say so. |
| ON_HOLD | Deal paused — buyer's project got delayed, financing pending, seasonal. | Removed from active aging metrics; reappears on the "revisit in X weeks" list. | Using this as a permanent parking lot. Set a wake-up date. |
Lead source
Where the lead came from. Drives attribution reports + which team owns the follow-up SLA.
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| INDIAMART | Auto-ingested from IndiaMART's webhook. Set automatically — don't override. | UTM auto-populated from the payload. Rep auto-assigned by round-robin. | Manually creating an "IndiaMART" lead when the actual source was a phone call — breaks source ROI. |
| WALK_IN | Customer physically walked into the office or dealer shop. | Usually pairs with a same-day WON conversion. | Under-logging walk-ins because they feel too casual. Log them anyway — the pattern matters. |
| PHONE | Cold or warm phone inquiry. | SLA: first response within 4 business hours. | - |
| DEALER_REFERRAL | Existing dealer referred a customer. | Referral credit accrues to the dealer's account. | Not linking the referring dealer — the credit gets lost. |
| WEB_FORM | From the marketing site contact form. | UTM captured from the page URL. | - |
| TRADE_SHOW | Business card / lead-form from a trade show. | Batch-created after the event; tag with the show name. | Losing the follow-up in the pile of cards — set a hard 7-day follow-up SLA on TRADE_SHOW leads. |
7.2Products
Product status
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| ACTIVE | Sellable + manufacturable. Shows up in every dropdown. | Included in stock reports, sales forecasts, reorder rules. | Making a product ACTIVE before the SKU + images + description are final. Draft-then-activate. |
| DISCONTINUED | No longer manufactured or sold. Kept in the system for warranty on units already in the field. | Hidden from sales quote picker. Still queryable for serial lookups. | Deleting instead of discontinuing — you lose the warranty history. |
| BUILT_TO_ORDER | Only made when a specific customer PO comes in. No stock kept. | Reorder rules disabled. Lead time surfaces on the quote. | Marking regular SKUs BUILT_TO_ORDER — it turns off replenishment. |
Stock valuation method
Set per product. Governs how the average cost is computed as receipts land.
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| FIFO | First-in-first-out. Oldest stock is deemed consumed first. Standard for pumps and components without shelf-life concerns. | Cost of sale reflects the oldest cost lot — usually lowest in an inflation environment. | Changing the method mid-year — creates a discontinuity in valuation. |
| LIFO | Last-in-first-out. Newest stock deemed consumed first. Not permitted under IND-AS / Ind-GAAP for most items — use only where auditor has explicitly permitted. | Cost of sale reflects the newest cost — usually highest. | Using LIFO without checking with the CA. Most SME auditors will disallow it. |
| MOVING_AVERAGE | Running weighted average recomputed after every receipt. Best for consumables and low-value raw materials. | Cost per unit updates continuously. | - |
Warranty start
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| DISPATCH | Warranty clock starts the moment the pump leaves the plant. Default. Conservative from the customer's angle. | Warranty valid-till = dispatch date + warrantyMonths. | Using this for products with long dealer-shelf time — you'll get warranty claims on units that were never installed. |
| DEALER_RECEIPT | Clock starts when the dealer receives the unit at their warehouse. Better for slow-moving models. | Uses the GRN date at the dealer warehouse. | - |
| INSTALLATION | Clock starts when the customer registers the warranty (records installation date at /w/[serial]/register). | Warranty inactive until scan-and-register happens. | Setting this on SKUs where dealers don't push customers to register — warranty never activates. |
7.3Procurement
Vendor type
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| RAW_MATERIAL | Copper wire, steel, castings, bearings, insulation. Anything that becomes part of the finished pump. | Feeds cost-of-goods rollup on BOMs. | - |
| CONSUMABLE | Not part of the pump — tea, cotton waste, printer ink, safety gear. | Categorized as operating expense in the ledger. | Coding a real raw material as CONSUMABLE — it never rolls into BOM cost. |
| SERVICE | Calibration house, security agency, transporter, courier. | Invoice usually posts to a specific expense head, not inventory. | - |
| CAPEX | New machine, new vehicle, computer purchase. | Invoice routes to Fixed Assets, not inventory. | Treating capex as raw material — creates a phantom stock balance. |
| SUBCONTRACTOR | Job-work vendor — Singh Machining does your shafts, Chawla does winding piecework. | PO turns into a subcontracting order; you send raw material to them and receive finished sub-assemblies back. | Coding a subcontractor as RAW_MATERIAL — the job-work paperwork gets skipped. |
Vendor status
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| PROSPECT | Talking to them, not yet approved. Default on create. | Can request quotes; cannot raise a formal PO. | Forgetting to move to ACTIVE after docs are verified — POs sit blocked. |
| ACTIVE | Approved and transacting. | Full PO + GRN + invoice flow available. | - |
| ON_HOLD | Temporarily paused — quality issue under investigation, delivery dispute, or credit hold. | New POs blocked; existing open POs continue. | Leaving vendors ON_HOLD forever. Set an exit date or move to BLACKLISTED. |
| BLACKLISTED | Never buy from again. Fraud, repeated critical NCRs, credit fraud. | All new activity blocked. Cannot be reactivated without admin override. | Blacklisting on a single dispute — this is permanent-flag territory. |
| INACTIVE | Discontinued the relationship — not adversarial, just stopped. Historical records preserved. | No new POs; historical rollups still work. | - |
Vendor onboarding stage
Independent from status — this is the paperwork progress.
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| REGISTERED | Basic info captured. No documents received yet. | Vendor visible in reports but can't be used. | - |
| DOCS_PENDING | Waiting on GST cert, PAN, bank details, MSME cert. | Chase list surfaces on the procurement dashboard. | Sitting on this stage — every day of delay is a day of delivery you're not getting. |
| DOCS_VERIFIED | All docs received and internally checked. | Ready for the final approval step. | - |
| APPROVED | Sign-off done. Status can now flip to ACTIVE. | Formal POs unlocked. | - |
| REJECTED | Onboarding failed — docs bad, KYC red flag. | Blocks all transactions. Rejection reason logged for audit. | Rejecting without a written reason. |
GRN purchase type
The critical distinction — what kind of receipt this is. Set at GRN creation and never mutated.
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| PO_BACKED | Classic pull from an approved PO. Vendor sends the goods against a specific PO line. | Feeds 3-way match (PO ↔ GRN ↔ Invoice). Vendor performance score computed from these. | Creating a fake PO retroactively so the GRN "looks proper" — the receipt date won't match the PO date and audit picks it up. |
| CASH_PURCHASE | Market run — Simran drives to Chowk Mehta, buys parts, comes back. No PO cycle upstream. | Skips 3-way match by design. Vendor performance score excludes these. Vendor picker offers "Ad-hoc / market" option so shops not in the vendor master still get logged. | Using this for a supplier you actually have a PO relationship with — that supplier's vendor score gets skewed low because their cash receipts don't count. |
| DIRECT_INVOICE | Vendor sent stock + invoice without a PO. You didn't authorize the shipment but you're accepting delivery. Rare — happens with informal running arrangements. | Same behaviour as CASH_PURCHASE for 3-way match; unlike cash, this one still gets a Vendor Invoice recorded downstream. | Coding actual cash purchases as DIRECT_INVOICE — CA will look for an invoice that doesn't exist. |
Cash-purchase payment mode
Shared enum used across cash-purchase GRN and Cash Register.
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| CASH | Physical currency handed over. | Subject to Section 269ST cap: ≥ ₹2,00,000 soft-blocks. | Coding UPI or wallet transfers as CASH just because "money left cash-in-hand" — the Section 269ST cap doesn't apply to digital. |
| UPI | UPI transfer (PhonePe, GPay, Paytm, BHIM). | Reference field takes the UPI transaction ID. | - |
| BANK_TRANSFER | RTGS, NEFT, IMPS. | Reference takes the UTR / txn ref. | - |
| CHEQUE | Physical cheque. Not settled until clearing. | Reference takes the cheque number. | Marking cheque as CASH — you'll double-count when the cheque clears. |
| CARD | Debit / credit card swipe. | Reference takes last 4 digits or txn ref. | - |
| PENDING | Not yet paid — receipt on credit, will settle later. | Shows on receivables (customer) or payables (vendor) side. | Using PENDING when you have actually paid — the AR / AP report gets wrong. |
QC decision (per GRN line)
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| PENDING | QC not yet done. Default until inspection. | Stock not yet available; sits in inspection area. | Bypassing this by marking ACCEPTED without inspection. |
| ACCEPTED | Passed inspection. Full qty enters usable stock. | StockMovement RECEIPT posted for the accepted quantity. | - |
| REJECTED | Failed inspection. Stock quarantined or returned. | No stock movement for the rejected qty. Vendor performance score docked. | Not filing an NCR alongside — you lose the root-cause trail. |
| REWORK | Failed but fixable. Sent to sub-assembly or vendor. | Sits in a separate WIP location until reworked. | - |
| CONCESSION | Failed but accepted anyway with a formal concession note (from QC head or plant manager). | Enters stock; flagged for downstream traceability. | Approving CONCESSION verbally without the note. Written concession every time. |
7.4Manufacturing
Stock Entry purpose
The most consequential enum in the system — each value posts differently to the stock ledger.
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| MATERIAL_TRANSFER_FOR_MANUFACTURE | Move raw material from the Plant / RM warehouse to WIP for a specific work order. | Stock reduces in From-WH, increases in To-WH. No cost impact yet. | Using generic MATERIAL_TRANSFER instead — this variant is what links the movement back to a WorkOrder for MRP. |
| MANUFACTURE | Finished goods coming out of WIP to FG warehouse. Also captures scrap generated. | Increases FG stock, decreases WIP raw material consumption, posts weighted cost. | Missing the scrap line — you'll have a phantom raw-material shortage later. |
| DISASSEMBLE | Undo a build. Send a finished pump back to component stock. Rare — usually only for prototypes or QC failures caught after packing. | FG decreases; components increase. | Using this for warranty returns — that's MATERIAL_RETURN from a customer's angle. |
| MATERIAL_RETURN | Return of raw material from WIP back to store — surplus, quality reject sent back, WO cancelled. | WIP decreases; Plant / RM warehouse increases. | Confusing with warranty-return (dispatch side) or PO-reject (procurement side). |
BOM status
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| DRAFT | Being designed. Changeable in place. | Cannot drive Work Orders. | Sitting in DRAFT for weeks — nothing produces until you release. |
| ACTIVE | Released. This version drives new Work Orders. | Immutable — any change starts a new revision. | Editing components after release — the system rejects it. Bump the revision instead. |
| OBSOLETE | Superseded by a newer revision or discontinued along with the product. | Existing WOs continue on this version; new WOs get the current version. | - |
Piece-rate operation kind
| Value | What / when |
|---|---|
| WINDING | Coil winding — stator, rotor. Highest skill; highest per-piece rate. |
| MACHINING | Turning, drilling, boring on lathe / CNC. |
| ASSEMBLY | Stack impellers, couple motor to pump body, wire connections. |
| TESTING | Hydro pressure, insulation resistance, no-load current, final QC. |
| PAINTING | Primer + finish coat on cast iron bodies. |
| PACKING | Corrugated / wooden crate + accessory pouch + label + serial etching. |
| OTHER | Anything that doesn't fit above. |
7.5Inventory
Warehouse type
Set once at warehouse creation. Governs which downstream flows can send stock in and out.
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| RAW_MATERIAL | Main stores. Receives GRN inflows; issues to WIP for manufacturing. | Reorder rules point here. | Using this as both RM and FG — split into two warehouses so counts stay honest. |
| FINISHED_GOODS | Where finished pumps sit before dispatch. | Only Manufacture-purpose Stock Entries land here; dispatch pulls from here. | - |
| WIP | Work-in-progress floor. Material lives here from issue-to-line until MANUFACTURE. | Value flows through this warehouse; cost accounting depends on accurate WIP tracking. | Skipping WIP by sending raw material directly to FG — breaks cost accounting. |
| SPARES | Consumable spares for machines, PPE, safety. | Not part of BOM roll-up. Usually cost centre = maintenance. | Mixing production raw materials into SPARES — they get treated as expense not asset. |
| SCRAP | Scrap generated in production. Sold to kabadi as scrap. | Feeds a special "scrap sale" flow that posts to other income. | Leaving scrap sitting forever — dispose regularly. |
| TRANSIT | Stock in transit between warehouses. Held here until the receiving warehouse acknowledges. | Auto-updated on inter-warehouse transfers. | Manually posting into TRANSIT — this is system-managed only. |
| DEALER_CONSIGNMENT | Stock physically at a dealer's location but still owned by Nickson. dealerId FK required. | Consignment sales flow: reduces this warehouse on the dealer's report + generates invoice. | Creating one without linking to Dealer — the consignment reports don't roll up. |
| RETURNS | Where customer / dealer returns land pending inspection. | NCR flows point here for the "returned item" queue. | Merging with SCRAP — you lose the ability to rework or resell. |
Reorder method
| Value | What / when | Mistake |
|---|---|---|
| REORDER_POINT | Trigger when on-hand drops below reorderPoint. Order reorderQty. | Setting reorder point too low — you'll stock out during vendor lead time. |
| MIN_MAX | Trigger at minQty, order up to maxQty (variable order size). | Not accounting for MOQ from the vendor — order sizes get rejected. |
| PERIODIC_REVIEW | Review every reviewPeriodDays and order to a target level, ignoring the point. | Using this for fast-moving items — you'll stock out between reviews. |
| FORECAST_BASED | Uses demand-forecast module (Phase 4). Reorder based on projected consumption, not current on-hand. | Turning on before the forecast has real history to fit — noisy signals. |
7.6HR & Payroll
Employment status
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| ACTIVE | Currently working. Default for a healthy hire. | Included in payroll, attendance, statutory dues. | - |
| ON_LEAVE | Long leave — maternity, extended medical, sabbatical. | Still on payroll (as configured). Attendance not expected. | Using this for a two-day leave. That's a Leave Application, not a status change. |
| RESIGNED | Employee has resigned. Notice period may be ongoing. | Payroll continues to last-working-day; F&F triggered on exit. | Flipping to TERMINATED when they resigned. Different exit reasons matter for statutory reporting. |
| TERMINATED | Company-initiated exit — cause or notice. | F&F process, statutory settlement. Blacklisting flag if for cause. | Terminating without HR sign-off — legal exposure. |
| SUSPENDED | Temporarily off duty — pending investigation, disciplinary. | Not on payroll during suspension (or half-pay per policy). | Leaving in SUSPENDED indefinitely. |
| RETIRED | Reached retirement age. Statutory payouts triggered. | PF, gratuity, superannuation settled. | - |
Employment type
| Value | What / when | Mistake |
|---|---|---|
| PERMANENT | Regular full-time salaried employee. Full statutory coverage (PF, ESI, gratuity). | - |
| CONTRACT | Fixed-term contract (usually 1-3 years). Same statutory treatment as PERMANENT for PF / ESI. | Not renewing on time — contract runs out silently and you're paying an unemployed person. |
| INTERN | Trainee or intern. Usually stipend, no PF. | Coding a full-timer as INTERN to skip PF — MSMEshould not go there. |
| CONSULTANT | Independent professional invoicing you. Not on payroll — pays via Vendor Invoice. | Coding a consultant on payroll — messes up TDS and PF. |
| PART_TIME | Formal part-time salaried role. | - |
Attendance punch type
| Value | What / when | Mistake |
|---|---|---|
| IN | Start of shift. First punch of the day. | - |
| OUT | End of shift. Last punch of the day. Day-record rollup computes hours from IN → OUT. | Forgetting the OUT punch — day counts as absent by policy. |
| BREAK_START | Optional. Long break (lunch, prayer) that shouldn't count as worked hours. | - |
| BREAK_END | Optional. Resume after break. | - |
7.7Finance & Cash Register
Cash Register direction
| Value | What / when |
|---|---|
| INFLOW | Money coming in — cash sale, advance received, owner capital in, refund from vendor. |
| OUTFLOW | Money going out — cash purchase, advance paid, kitty spend, owner drawing, reimbursement, refund to customer. |
Cash Register nature
The specific kind of movement. Scoped by direction — Money in options differ from Money out.
| Value | What / when | Common confusion |
|---|---|---|
| SALE_CASH | Walk-in customer paid cash, chose not to take a GST invoice. You still record income. | Confusing with Advance Received — sale is complete goods handed over, advance is pending future delivery. |
| PURCHASE_CASH | Paid cash for a below-threshold vendor purchase where a full cash-purchase GRN isn't warranted (e.g. printer paper). | For actual physical goods entering stock, use Cash-purchase GRN instead — it hits the stock ledger. |
| ADVANCE_RECEIVED | Customer paid an advance for a future order. | Coding as SALE_CASH — you'll over-report income before the goods ship. |
| ADVANCE_PAID | You paid a vendor advance against a future supply. | Coding as PURCHASE_CASH — advance is refundable, expense is not. |
| KITTY_TOPUP | Moving cash from bank / drawer into the office petty-cash imprest. | Coding as OWNER_DRAWING — this is internal, not owner-personal. |
| KITTY_SPEND | Spending from petty cash — tea, courier, printouts, small consumables. | Using for anything over ₹500 — that's usually PURCHASE_CASH. |
| OWNER_CAPITAL_IN | Owner injects personal money into the business. | Coding as SALE_CASH — this is capital, not income. |
| OWNER_DRAWING | Owner takes money out for personal use. | Coding as REIMBURSEMENT — reimbursement is for staff, drawing is for the owner. |
| REIMBURSEMENT | You paid back a staff member for a business expense they covered personally. | Coding as OWNER_DRAWING for owner reimbursement — owner reimbursement should be tagged as owner transaction with a reason note. |
| REFUND | Money returned — either you sending it back to a customer, or a vendor sending it back to you. | - |
| INTERNAL_TRANSFER | Moving money between your own accounts — bank to till, till to bank, one bank to another. | Marking as SALE / PURCHASE — this is not income or expense. |
| OTHER | Anything not covered above. Include a note. | Reaching for OTHER too easily — one of the specific options is usually right. |
Cash Register exemption reason · the deepest reference
The mandatory field. Every entry needs one. The year-end CA pack uses this to split records into ITR / GSTR / non-income buckets.
| Value | What it means | When to use | Pitfall |
|---|---|---|---|
| VENDOR_BELOW_GST_THRESHOLD | Vendor's annual turnover is below ₹40L (goods) or ₹20L (services), so they're not GST-registered and legally cannot issue GST invoices. | Hardware shops, tea stalls, small suppliers you regularly buy from without an invoice. | Using for a vendor who should be registered (over threshold) — the console will warn you when this vendor crosses ~₹35L annual. |
| COMPOSITION_DEALER | Vendor is on GST composition scheme (turnover under ₹1.5Cr). They can't issue a tax invoice — only a bill of supply with tax included. | Local job workers, small services, some traders. | Using for regular GST-registered vendors — different treatment. |
| B2C_NO_INVOICE_REQUESTED | Walk-in end-customer paid cash and chose not to take a GST invoice. You still owe income tax; you just don't have GST-invoice paperwork for this transaction. | Cash sales to consumers who prefer no invoice. | Using this for a dealer / business buyer — B2B always needs an invoice under GST. |
| PETTY_CASH_UNDER_LIMIT | Small purchase (typically < ₹500) where no bill was issued — tea, printouts, courier, minor repairs. | Everyday petty cash outflows from the office kitty. | Using for larger cash purchases — those need VENDOR_BELOW_GST_THRESHOLD or an actual cash-purchase GRN. |
| RCM_APPLICABLE | Reverse Charge Mechanism applies — you (buyer) are liable to pay GST directly to the government instead of the vendor charging it. | Purchase from unregistered supplier of a notified category, scrap dealer, GTA transport, security services from non-body-corporate. | Forgetting to file the corresponding RCM entry in GSTR-3B — this exemption doesn't skip that filing. |
| EXEMPT_OR_NIL_RATED | Items exempt or 0-rated under GST law. Fresh fruits, milk, certain agriculture items, salt, jaggery. | Rare in a pump manufacturer's ledger. Occasionally food supplies for employees. | Using for taxable items you just don't want to invoice — the CA will spot it. |
| EMPLOYEE_ADVANCE_OR_REIMBURSEMENT | Money flow with a staff member — advance for work, reimbursement of business expenses, salary advance. | Salary advance, travel reimbursement, expense claim payout. | Coding purchase-from-a-vendor as this because the staff member handed cash — the underlying purchase reason still applies. |
| OWNER_TRANSACTION | Owner's capital injection or drawing. Not income, not expense — it's on the owner's capital account. | Owner puts personal money in; owner takes money out for personal use. | Using for the owner's business travel expense reimbursement — that's EMPLOYEE_ADVANCE_OR_REIMBURSEMENT even for the owner. |
| INTERNAL_TRANSFER | Cash moving between your own accounts. Not income or expense. | Till-to-bank, bank-to-bank, imprest top-up. | - |
| DEPOSIT_OR_SECURITY | Refundable security deposit — held against future performance, gets returned. Not income at receipt. | Customer advance held as security, dealer security deposit, tender EMD. | Treating a non-refundable advance as deposit. If it will be applied to a future sale, it's ADVANCE_RECEIVED. |
| OTHER_LEGAL | Any other legitimate exemption not covered above. Requires the note field to be filled with a one-line reason. | Unusual one-off situations you can defend. | Using OTHER_LEGAL as a lazy default — pick the specific option if one fits. |
7.8Warranty
Warranty claim status
| Value | What / when | Downstream | Mistake |
|---|---|---|---|
| OPEN | Customer just filed. Not yet triaged. | Sits on the warranty rep's queue. SLA clock ticking. | Sitting on this longer than 24 hours — customer trust erodes fast. |
| TECHNICIAN_ASSIGNED | Warranty rep has picked a technician and scheduled the visit. | Customer notified. Visit shows on tech's queue. | - |
| IN_SERVICE | Technician has visited or is on-site. | Time-on-site tracked from visit check-in. | - |
| REPLACEMENT_APPROVED | Diagnosis says replace, not repair. Approver signed off. | Dispatch new unit against this claim. | Auto-approving without diagnosis — replacements are expensive. |
| CLOSED | Resolved. Fixed on site, replaced, or out-of-warranty. | Feeds MTTR chart on quality dashboard. | Closing without a resolution note — audit trail is thin. |
| REJECTED | Out of warranty (misuse, tampering, past date). | Customer notified. Optional paid-service quote generated. | Rejecting without written reason — customer disputes are hard to defend. |
Claim issue type
| Value | What / when |
|---|---|
| MOTOR_FAILURE | Motor won't start, burns, trips repeatedly. |
| IMPELLER_WEAR | Discharge dropped, unit still running. |
| SEAL_LEAK | Water leaking from mechanical seal. |
| NOISE_VIBRATION | Rough running, high noise — usually bearing or alignment. |
| ELECTRICAL_FAULT | Cable damage, insulation breakdown, capacitor issue. |
| CONTROL_PANEL | Panel-side fault — not the pump. |
| OTHER | Anything else. Description mandatory. |
7.9Notifications
Announcement audience
| Value | What / when | Mistake |
|---|---|---|
| ALL_STAFF | Every internal user. General policy rollout, festival greeting, holiday announcement. | Using for a manufacturing-only notice — noise for sales / accounts. |
| ALL_DEALERS | Every dealer with an active portal login. Price revision, scheme launch, new SKU. | Sending confidential internal info via this — dealers see it. |
| ROLE | Targeted at one role — HR only, dispatch only. | Combining with a department filter for a role that spans departments — filter narrows too far. |
| DEPARTMENT | Everyone in a department — Production only, Quality only. | - |
| REGION | Everyone in a geography — North team, Punjab dealers only. | - |
| CUSTOM_LIST | Specific users / dealers by ID. | Hand-picking a list that should really be role-based — you'll miss new hires. |
Notification channel
| Value | What / when |
|---|---|
| IN_APP | In-app banner + notification bell. Default and cheapest. |
| Formal / long content, receipts, invoice PDFs. Ends up in Rahul's inbox for forever. | |
| SMS | Short, urgent, delivery-guaranteed even without smartphone. OTP, delivery arrival, dispatch reminder. |
| Rich messages with buttons, photos, PDFs. Most common in India. Uses Meta Cloud API. | |
| PUSH | PWA push notification. Requires user to have installed the app and granted permission. |
Notification priority
| Value | What / when |
|---|---|
| LOW | Informational. Aggregated in a daily digest. |
| NORMAL | Standard. Shows in the inbox; no push interrupt. |
| HIGH | Push notification fires. Sales lead assignment, approval waiting. |
| CRITICAL | Persistent banner + all channels. Server outage, statutory breach imminent, safety incident. |
Every workflow & how it grows the business
The console isn't just a place to store records. Every workflow it runs is a lever — to grow revenue, reduce cost, speed operations, retain customers, protect against statutory risk, empower the team, or give the owner clarity. Here's the full inventory. For the important ones: what the old way looks like, what the console actually does, the impact, how to get the most out of it, and why this stack is worth bragging about.
8.1Grow revenue
Top-of-funnel to booked order. Every workflow here is about turning inquiries into rupees faster than the competition can.
Automatic lead capture from every channel
Sales · runs 24 × 7
The old way
IndiaMART leads sit unread in Rahul's email over the weekend. Walk-ins get scribbled on a notepad. Phone leads live in reps' heads. Half never enter the pipeline; the other half enter late.
The Nickson way
IndiaMART webhook lands every lead in /leads within seconds. Walk-ins go into a 30-second form on the rep's phone. Phone leads get typed while the call is happening. Every lead carries source, UTM, timestamp, and an auto-assigned owner.
ImpactZero lost leads. First-response SLA measurable instead of guessed. Rahul's team competes on speed, not on being first to check email.
Get the best out of it
- Set up WhatsApp reply templates so first-touch happens in under 4 hours.
- Turn on round-robin auto-assignment so leads get owned within seconds.
- Review the kanban at /leads/kanban for 5 minutes every morning — that's your standup.
Kanban pipeline — the whole sales team on one page
Sales · daily
The old way
Sunday-night Excel scramble. Rep stage tracking in reps' heads. Manager finds out about a stalled deal three weeks late.
The Nickson way
Drag-and-drop kanban at /leads/kanban. Aging alerts on stalled cards. Rep leaderboard live. Any stage or rep is one filter away.
ImpactThe 45-minute weekly review becomes a 5-minute daily glance. Deals that were rotting come back into focus. Rep coaching moves from monthly to daily.
Get the best out of it
- Filter to unassigned leads first (?assignedToId=) — route them before anything else.
- Sort by "days in stage" — anything over 7 days needs a nudge.
- Use it as your morning standup screen.
Quote → Order → Invoice — end-to-end in one system
Sales + Accounts · every deal
The old way
Quote drafted in Word. GST computed on a calculator. Emailed as PDF. Customer confirms; then someone re-types everything into an order sheet, then again into an invoice. Three days of re-entry, mistakes multiply.
The Nickson way
Quote built from the catalog with GST auto-computed and correct CGST/SGST/IGST decided by state codes. One-click Convert to Order. On dispatch, one-click Generate Invoice with IRN + e-way bill pulled from NIC.
ImpactQuote-to-invoice cycle from 3-4 days to under 24 hours. Impulse buyers close before they shop the market. IRN + e-way bill automated — no NIC portal juggling.
Get the best out of it
- Pre-build T&C templates per product line and per dealer tier.
- WhatsApp the quote PDF instead of emailing — 3x higher response rate in India.
- Use dealer tier auto-pricing so reps can't underquote by mistake.
Dealer credit & tier management
Sales + Accounts · foundational
The old way
Credit limits in a notebook. Tier badges informal ("Balbir is a good dealer, give him 45 days"). Sales rep quotes a price and finds out later it was wrong for the tier.
The Nickson way
Credit days set per dealer. Tier (Silver / Gold / Platinum) drives auto-pricing tiers on quotes. AR-aging report bucketed by dealer. MSME gate warns before invoices go stale.
ImpactRep quotes the right price on the first try. Owner knows exact credit exposure per dealer. Slow-paying dealers are visible before they become collection problems.
And also, powering revenue growth
- Command palette (⌘K / Ctrl+K) — jump to any record in two keystrokes. Reps save 15-20 minutes a day.
- QR scanner in the top bar — scan a pump serial or dealer QR to jump straight to that record.
- Quick capture bar — new lead, task, or note in one tap without leaving the current page.
- WhatsApp Cloud API integration — send quotes, invoices, dispatch alerts as WhatsApp messages with buttons and PDFs.
- Beat planning — pre-set dealer visit routes so field reps don't waste time deciding.
- Referral tracking — dealer-to-dealer referrals earn credit; visible on the referring dealer's account.
- Multi-language dealer portal (EN / हिन्दी / ਪੰਜਾਬੀ) — dealers see the console in their preferred script.
8.2Reduce cost
Every rupee saved on procurement or inventory is a rupee that hits the bottom line without needing a new sale.
Vendor–Part directory — price memory that never forgets
Procurement · check before every PO
The old way
"I think Sharma gave us a better rate for bearings last quarter." Nobody has the receipt. Every PO starts a negotiation from zero.
The Nickson way
At /procurement/vendor-parts — every (product × vendor) pair with last unit price, average price, GRN count, cash-vs-PO split, last received date. Derived automatically from GRN history.
ImpactSystematically buy from the cheapest historical supplier. Typical savings: 3-5 % of raw material spend — pure margin, no extra sales needed.
Get the best out of it
- Consult before raising every PO — 30 seconds saves 3 %.
- Watch the "cash count" pill — vendors heavy on cash purchases may not be the cheapest.
- Use it in vendor negotiations: "Last time you gave us ₹1,580; today's rate?"
Three-way match — catch vendor overbilling automatically
Accounts · every vendor invoice
The old way
Accountant manually checks each invoice against the PO in an Excel file. Catches maybe half the mismatches. The other half quietly ship out as overpayments.
The Nickson way
Every vendor invoice runs an automated match: PO ↔ GRN ↔ Invoice, line by line. Mismatches — price, quantity, tax — land on the review queue at /procurement/three-way-match.
ImpactCatch 100 % of overbilling. Typical SME loses 1-2 % of purchase spend to vendor invoice errors nobody spotted. That's real money.
Get the best out of it
- Set tolerance thresholds per vendor — new vendors zero tolerance, trusted ones a small % variance allowed.
- Track repeated mismatch offenders — that's a vendor conversation.
Reorder rule automation — never stock out, never over-order
Procurement · continuous
The old way
Reordering by memory or panic. Stock-outs during rush season halt production for two days. Over-ordering after ties up working capital.
The Nickson way
Reorder point + reorder qty + safety stock + lead time set per SKU. The moment on-hand drops below the reorder point, an alert fires on the Owner Brief and procurement dashboard.
ImpactZero unplanned stock-outs. Working capital tied up in inventory reduces 15-20 % — that money is now available for anything else.
Get the best out of it
- Review reorder points quarterly — tighten as vendor reliability improves.
- Set preferred supplier per rule — one-click PO from the alert.
- Use the forecast-based method for seasonal items once you have a year of data.
And also, keeping costs down
- Landed cost distribution — freight, duty, and clearing costs get spread across received items in the stock ledger, so item costs reflect reality.
- MSME 45-day gate — protects against Section 43B disallowance (details in Compliance Shield).
- Cash-purchase GRN — market runs turn into audit-clean records with catalog-auto-fill on line items.
- Vendor performance scoring — on-time delivery rate, QC pass rate, invoice accuracy, per vendor.
- Cycle counts — physical stock audit with variance tracking.
- Batch expiry monitoring — for items that go bad (varnishes, adhesives).
- Purchase approval workflow — above-threshold POs blocked until approved.
8.3Speed up operations
Making pumps faster, with fewer disputes, with better traceability — every hour saved on the floor is an hour of extra capacity.
BOM → Work Order → Job Cards → Piece-rate — the whole shop-floor chain
Manufacturing + HR · every production cycle
The old way
Foreman's memory + paper job cards + Sunday-night wage calculation from a tally book. Disputes about who did how many pieces. One person off sick means the shift can't be reconciled.
The Nickson way
BOM defines the components + operations. Work Order releases material to WIP. Job Cards assign workstations. Workers log piece-rate on their phone. HR approves next morning. Payroll accrues live.
ImpactTwo days per month saved on payroll cycle alone. Foreman freed for actual supervision instead of tally-book bookkeeping. Payroll disputes drop to near-zero.
Get the best out of it
- Set piece-rate per operation and per HP class — winding a 20HP stator is worth 3× a 3HP.
- Use per-worker rate overrides for skilled hands who consistently deliver quality.
- Cross-train workers on multiple operations — the console shows their operation mix per week.
Serial number lifetime tracking
Manufacturing → Dispatch → Warranty · every pump
The old way
Serial number etched on the pump and on the invoice. After dispatch: nothing. Warranty claim comes in — nobody can tie the pump back to the batch, the raw material lot, or the operator.
The Nickson way
Every serial is linked to: production batch → raw material lots → operator who did each stage → dispatch → dealer → customer → warranty registration → every service call.
ImpactWarranty disputes resolved in minutes with proof. Product quality issues traceable to the exact shift and batch — so root cause is real, not guessed.
And also, speeding operations
- Stock Entry with FIFO valuation — cost of goods sold reflects the actual oldest-lot cost, not a moving average that hides margin drift.
- Batch traceability — which copper wire batch went into which pump, forever.
- Workstation utilization tracking — machine hours by workstation, spot idle capacity.
- Job card time tracking — target vs actual per operation.
- Serial etching capture — one operation logs the etch; serials are never lost.
- NCR + CAPA loop — quality defects trigger root-cause + corrective action + effectiveness verification.
8.4Retain customers
A pump lasts 5-10 years; a customer relationship should last longer. Retention starts with knowing every pump you've shipped and every service call it's been on.
Public warranty QR + self-registration
Warranty · every pump, every customer
The old way
Warranty card in a drawer. Customer loses it. Six months later they call about a leak; you have to first figure out if they even bought from you.
The Nickson way
QR sticker on every pump → customer scans → registers online with WhatsApp OTP → serial ↔ customer ↔ phone number, permanent link. Every claim they raise later ties back to that record.
ImpactWarranty capture rate goes from ~30 % to 90 %+. Your customer database expands with every pump shipped — even the ones sold through dealers you never meet.
Get the best out of it
- Train dealers to walk customers through registration at delivery — 30 seconds, unlocks warranty.
- Follow up on unregistered serials 30 days after dispatch with an SMS reminder.
Warranty claim triage → technician dispatch → close
Warranty + Field Service · every claim
The old way
Customer calls the office. Gets bounced to Rahul. Rahul rings a technician. Technician goes when he can. Two weeks of back-and-forth. Customer feels ignored.
The Nickson way
Customer files via QR. Warranty rep triages same-day. Technician sees the visit on their phone. Customer gets WhatsApp updates at every stage.
ImpactMean-time-to-close warranty claims drops from ~2 weeks to 3-5 days. Customer perception moves from "small local vendor" to "professional brand".
And also, growing customer lifetime value
- Helpdesk ticket flow — unified inbox for customer / dealer / internal tickets.
- Field visit logging with GPS + selfie — proof of every service call.
- Beat coverage tracking — how often each dealer is visited, by whom.
- Daily Call Reports — field reps summarise the day; manager reviews next morning.
- Cross-sell suggestions from order history — a customer who bought a V4 5HP is a prime target for a control panel.
8.5Compliance shield
This is where a well-designed CRM saves you money you don't even know you're at risk of losing. Every one of the workflows below has a specific penalty attached — the console makes sure you don't step on any of them.
Cash Register with 11 legal exemption categories
Accounts + Admin · every cash movement
The old way
Cash movements happen "off books" — nothing recorded, or thrown into a spreadsheet at year-end. Audit-triggered scramble. CA has to reverse-engineer categories from bank statements.
The Nickson way
Every cash movement recorded live with a mandatory legal exemption tag (11 categories from below-threshold vendor to owner drawing). Year-end CA pack auto-splits records into GSTR / ITR / non-income buckets.
ImpactZero audit anxiety. Books look complete and defensible. CA's year-end effort drops from weeks to hours. The story to any officer is: "Every row has a legal reason; look at column B for ITR, column C for GSTR."
Get the best out of it
- Train every cashier and store keeper on the 11 categories — the doc has the full table in Part VII.
- Don't reach for OTHER_LEGAL as a default — pick the specific option.
- Review last month's entries with the accountant on the first of each month.
Section 269ST cash cap — the invisible ₹2-lakh landmine
Accounts · every cash entry
The old way
Cashier accepts ₹5 lakh cash from a big dealer. Somebody eventually notices. Section 271DA penalty = ₹5 lakh — 100 % of the transacted amount. Owner has to explain to the IT officer.
The Nickson way
Live warning appears the moment cash amount crosses ₹1.5 lakh. Soft-blocks the save at ₹2 lakh in cash mode. Bank / UPI / cheque modes are unaffected — no penalty risk there.
ImpactZero risk of accidental Section 271DA penalty. Saves ₹2 lakh+ per mistake avoided.
MSME 45-day gate — protect against Section 43B disallowance
Procurement + Accounts · every MSME vendor invoice
The old way
MSME vendor's invoice sits unpaid for 90 days. Section 43B disallows the entire amount as an expense for that year. Direct hit to taxable profit.
The Nickson way
Every MSME-classified vendor invoice tracks days-to-45-day-deadline. Alerts fire on the finance dashboard when any invoice is approaching breach. MSMED Act 2006 compliance built into the workflow.
ImpactZero Section 43B disallowance. Depending on your MSME purchase volume, saves 10-15 % of tax on those payments — plain profit.
And also, protecting against risk
- Vendor threshold advisory — warns when a below-threshold vendor's annual purchases from you cross ~₹35 lakh (87 % of ₹40 lakh registration threshold).
- Back-dating locks — no cash-register entries older than 90 days without admin re-opening the accounting period.
- Ledger integrity — stock entry item quantities are immutable once posted; corrections require reversal + redo entries. Zero silent restatement.
- Three-way match audit trail — every mismatch resolution logged with reviewer + timestamp + reason.
- ISO 9001 evidence chain — NCR + CAPA + calibration records auditor-ready.
- Row-level security — sales rep only sees their team's leads; workers only see their own payslip.
- PII protection — Aadhaar last-4 + hash (never full number stored in plaintext).
- Audit log on every mutation — who changed what, when, and to what value.
8.6Empower workers
Retention beats hiring. Shop-floor staff who feel seen — who can check their own attendance and earnings on their phone — stay longer and work better.
Phone-OTP login — nobody left out
Every worker · lifetime
The old way
Email-and-password login. Half the shop-floor doesn't have an email. Result: whatever workflows the system supports, only the salaried desk-staff use them.
The Nickson way
10-digit phone number → 6-digit OTP on WhatsApp → in. Works with any smartphone. HR onboards a new hire with just a phone; the User account materializes on first successful login.
Impact100 % shop-floor participation. Zero IT tickets about lost passwords. Every worker uses the system, so every workflow it powers actually happens.
PWA on personal phone — your Nickson, always on
Every worker · everyday
The old way
Worker waits till Monday to know how much they earned last week. No visibility into their own ledger. HR is the only source of truth; disputes are common.
The Nickson way
Nickson installs as an app on their phone. Punch attendance, log work, see today's earnings, month-to-date total, running balance — all in a mobile-first UI. Works offline on the login shell.
ImpactRetention up because workers feel valued and informed. HR queries about salary drop 60 %+. Trust between shop-floor and management climbs.
And also, empowering the team
- Own ledger visibility (/e/balance) — advances, recoveries, cash payments received, running net. No opacity.
- Attendance regularization requests — worker files a "fix missed punch" request; manager approves.
- Multi-language interface — Hindi and Punjabi in addition to English for workers who prefer mother tongue.
- Daily piece-rate submission loop — worker submits, HR approves, worker sees the outcome. Complete feedback loop.
- Attendance auto-computes overtime + half-day markers — no manual bookkeeping.
- Push notifications on payslip generation — worker knows the moment their pay is ready.
8.7Owner clarity
Rahul walking into the office Monday morning should know, in five minutes, everything that moved over the weekend. Every workflow below buys back time and attention.
Owner Brief dashboard — one page, every morning
Admin · daily first-thing
The old way
Sunday-night Excel scramble. Weekly review meetings that take an hour. Owner finds out about problems days after they became urgent.
The Nickson way
Log in Monday morning: one page shows yesterday's leads, orders booked, cash in/out, WIP work orders, dispatches, pending approvals, reorder alerts. Anything red gets drilled into; the rest is delegated.
Impact3-5 hours per week saved. Decisions made on live data instead of week-old numbers. Problems caught early — before they become expensive.
Notification bell — signal-to-noise, done right
Admin · continuous
The old way
WhatsApp groups exploding with unrelated messages. Important stuff missed. Owner's phone buzzes 100 times a day; the two that matter get lost.
The Nickson way
In-app inbox surfaces only what needs the owner's decision — approvals, statutory breaches approaching, high-severity items. Priority levels (LOW → NORMAL → HIGH → CRITICAL) filter the rest.
ImpactSignal-to-noise 10x. Owner responds to real requests in minutes, not days. WhatsApp goes back to being for personal messages.
And also, giving the owner clarity
- Command palette (⌘K / Ctrl+K) — jump to any record, page, or dealer in two keystrokes.
- QR scanner in the top bar — scan a pump, a package label, a vendor code, and land on that record.
- Quick capture — new lead / task / note in one tap from any page.
- Announcements — broadcast to any role, department, or region with fan-out to email / SMS / WhatsApp / push.
- Language switch — Hindi or Punjabi if that's how the owner thinks.
- Multi-role tour — logged in as ADMIN, jump into any other role's view via ⌘K to see exactly what they see.
- Year-end CA pack composition — one export session, three CSV files, done.
The whole point, on one line
The Nickson console gives a small pump manufacturer in Amritsar the same operational sophistication a ₹500 crore enterprise buyer would expect from SAP or Oracle, at a fraction of the cost, in a UI shop-floor staff actually use, with statutory guardrails specific to the Indian tax code, in three languages, on any phone. That's the pitch. Everything above is proof.
Every form, field by field
The exhaustive form guide. Every field on every form gets a line — what it is, whether it's required, what to type, and the mistake to avoid. Read it end-to-end once as an admin; return to it as a lookup when a specific field is confusing. Legend: req mandatory · opt optional · italic-highlighted indicates a specific value or default.
New Lead /leads/new
Every buyer inquiry starts here. Fill the buyer name + phone + one product-interest tag and you're done — every other field is optional. Result: lead saved with stage NEW, auto-assigned if round-robin is on, and immediately visible on the kanban.
- Buyer name text · 200 chars req
- Full name of the person or business inquiring. If it's a business, put the company name in Company below and the contact person's name here.
- Phone E.164 · +91 prefix expected req
- 10-digit Indian mobile. WhatsApp templates and OTP flows will use this number. Format: +91 9877269207.Mistake: pasting with spaces / hyphens that break WhatsApp send. Strip formatting first.
- Email email · 200 chars opt
- For long-form follow-ups (proposals, invoices). Most Indian retail buyers don't use email — leave blank if unavailable.
- Company text · 200 chars opt
- Business name if the buyer represents a firm. Fill when the buyer is a dealer, a farmhouse owner corp, or a purchase-department contact — leave blank for individual consumers.
- City text · 100 chars opt
- Buyer's city. Drives beat-planning routing and dealer-territory reports. Fill even if approximate.
- Product interest array · SKUs or category slugs opt
- Pick from the catalog picker — SKU (NIC-V4-5HP) or category (submersible-v4). Multiple values allowed for buyers evaluating a set.
- Source enum req
- Where the lead came from — see Part VII § 7.1 for the six options and when each applies.IndiaMART leads should never be manually created with source=INDIAMART — that value is reserved for the webhook auto-ingest.
- Query text · long opt
- What they're asking for, in their own words. Auto-fills from IndiaMART payload if source is INDIAMART. Type into it for phone / walk-in leads.
- Estimated quantity int opt
- Total units they're looking at. Used for pipeline value roll-up.
- Estimated budget paise · int opt
- Their budget in paise (₹1 lakh = 10000000). Used for lead scoring and pipeline value.
- Assigned rep User picker opt
- Pick the sales rep who'll own this lead. Leave blank to let round-robin auto-assign.
- UTM campaign / medium / source / content text opt
- Auto-populated from marketing links. Manual leads: leave blank.
New Dealer /dealers/new
The master record for every business that stocks Nickson pumps. Dealer code + legal name + primary phone are the only truly required fields; everything else can be added later.
- Dealer code text · unique req
- Free-form. Use DLR-STATE-### (e.g. DLR-PB-001) for readability. Cannot be changed after save — pick well.
- Legal name text · 200 req
- Full registered business name — matches what appears on the GST certificate. Appears on invoices.
- Display name text · 100 req
- Short version for the sidebar and pickers. E.g. Balbir Singh Pump House is displayName; Balbir Singh Pump House Pvt Ltd is legalName.
- GSTIN 15 chars opt
- Registered GST number. Format-validated. Populate to get inter-state / intra-state tax computed correctly on invoices.Skip if the dealer isn't GST-registered — the invoice will fall back to unregistered treatment.
- PAN 10 chars opt
- Permanent Account Number. Required for above-₹50k transactions (Section 206AB).
- Primary phone E.164 req
- Main contact number. Used for OTP, WhatsApp, delivery notifications.
- Email email opt
- For invoice PDFs and formal communication.
- WhatsApp number E.164 opt
- If different from primary phone. Otherwise leave blank — templates fall back to primary phone.
- Address line 1 & 2 text opt
- Physical delivery + billing address. Line 1 = building / street; Line 2 = area / colony / landmark.
- City text opt
- Drives beat planning + territory reports.
- State 2-char code · e.g. PB / HR / UP req
- Two-letter Indian state code. Critical: determines intra-state (CGST+SGST) vs inter-state (IGST) GST computation on every invoice.Mistake: leaving blank — invoices fail to compute tax correctly.
- Pincode 6 digits opt
- For delivery routing and courier integrations.
- Country 2-char · default IN opt
- Default India. Change only for export dealers.
- Tier text · free-form opt
- Silver / Gold / Platinum are conventional. Drives auto-pricing tiers and rebate calculations. Free-form to accommodate custom schemes.
- Credit days int · default 0 opt
- Payment window in days. Used by the AR-aging report and MSME gate. 0 = advance payment required.
- Status enum · default ACTIVE req
- ACTIVE / INACTIVE / SUSPENDED. Only ACTIVE dealers appear in pickers.
New Product /products/new
Every SKU — finished pump, raw material, spare, control panel. The catalog is shared across sales, procurement, and manufacturing, so what you enter here shows up in every quote picker, PO picker, BOM component picker, and stock report.
- SKU text · unique · uppercase convention req
- Stock keeping unit code. Use a consistent scheme: series-HP-phase or category-spec. E.g. NIC-V4-5HP, RM-CU-SWG22. Cannot change after save.
- Slug URL-friendly · unique opt
- For the marketing site URL nicksonpumps.com/products/[category]/[slug]. Auto-generates from name if left blank.
- Name text · 200 req
- Display name. Appears on quotes, invoices, and the marketing site.
- Category slug · picker req
- Product category — submersible-v4, monoblock, control-panel. Drives grouping in reports and marketing site.
- Brand text opt
- Nickson for own-brand pumps; Turbo / Jindal / component for OEM or raw material.
- Model code text opt
- Internal model number if different from SKU.
- HP text opt
- Horsepower rating. Free-form text (e.g. 5, 7.5, 10). Shown on the marketing site card.
- Voltage text opt
- e.g. 220V single-phase or 415V three-phase.
- Head text opt
- Discharge head, e.g. 90m.
- Flow rate text opt
- Discharge rate, e.g. 40 LPM.
- Base price (paise) int opt
- Internal operational price after discount. Multiply rupees by 100. E.g. ₹15,000 = 1500000.
- Price INR (MRP) int · rupees opt
- Catalog price shown on the marketing site. In whole rupees, not paise.
- MOQ int opt
- Minimum order quantity. Used in quote validation. Default 1.
- Warranty months int · default 12 opt
- Warranty duration for this SKU. Panels commonly 6 months; pumps 12; premium 18.
- Warranty start enum · default DISPATCH opt
- See Part VII § 7.2 for DISPATCH / DEALER_RECEIPT / INSTALLATION.
- Valuation method enum · default FIFO opt
- See Part VII § 7.2.
- Has batch tracking bool opt
- Turn on for items grouped by production batch (chemicals, adhesives, some raw materials).
- Has serial tracking bool opt
- Turn on for finished pumps that get a unique serial etched. This unlocks the warranty lifetime chain.
- Batch / serial number series text opt
- Number-series pattern for auto-generation. E.g. NKSN-V4-.####. generates NKSN-V4-0001 onwards.
- Stock UoM text · default Nos opt
- Unit of measure. Nos, Kg, Mtr, EACH.
- Tagline / summary / long description text opt
- Marketing site copy. Skip if the product isn't listed publicly.
- Applications array opt
- Use cases — Tubewell, Overhead tank filling, Farm irrigation.
- Locale variants (nameHi / namePa / etc) text opt
- Hindi / Punjabi translations. Only needed if the marketing site is used bilingual.
- Status enum · default ACTIVE req
- See Part VII § 7.2 for ACTIVE / DISCONTINUED / BUILT_TO_ORDER.Keep as DRAFT (via SDK) until images + description are final; then flip to ACTIVE.
- Has variants bool opt
- Turn on for parent SKUs where child variants (HP × phase × voltage combinations) exist.
New Vendor /procurement/vendors/new
Vendor onboarding. Code + legal name + type is enough to save; GST / bank / MSME come later. Status starts PROSPECT until docs are verified.
- Code unique · auto req
- Auto-generated V-000001 style. Or use a scheme: V-STEEL-01, V-BRG-02.
- Legal name text · 200 req
- Full registered name on the GST certificate.
- Trade name text opt
- Short display name.
- Vendor type enum req
- See Part VII § 7.3 for RAW_MATERIAL / CONSUMABLE / SERVICE / CAPEX / SUBCONTRACTOR.
- GSTIN 15 chars opt
- Skip for below-threshold vendors — they legally can't have one.
- GST registration type enum · default REGULAR opt
- REGULAR / COMPOSITION / UNREGISTERED / SEZ / OVERSEAS. Composition + unregistered affect input tax credit.
- PAN 10 chars opt
- Required for TDS applicability at above-threshold payments.
- CIN 21 chars opt
- Company Identification Number. Fill only for private / public limited companies.
- Udyam number text opt
- MSME registration number. Format: UDYAM-XX-##-#######. Populate this to enable MSME 45-day protection.
- MSME category enum · default NONE opt
- NONE / MICRO / SMALL / MEDIUM. Drives the 45-day gate and vendor threshold advisory. Not MSME = leave NONE.
- TDS section text opt
- The Income Tax section to apply. 194C for contractors, 194J for professionals, etc.
- TDS rate (bp) int · basis points opt
- Rate in basis points (1 % = 100 bp). E.g. 194C default = 100.
- Lower deduction cert no + expiry text + date opt
- If the vendor has a Section 197 lower-TDS certificate. Number + expiry date required together.
- Status enum · default PROSPECT req
- See Part VII § 7.3.
- Onboarding stage enum · default REGISTERED req
- Independent from status — see Part VII § 7.3.
New Warehouse /inventory/warehouses/new
A physical stock location. Split your inventory into warehouses by function — Main / FG / WIP / Spares / Returns — rather than one giant bucket. Once created, warehouses can't easily be merged.
- Code text · unique req
- Short identifier. Convention: PLANT-MAIN, WH-FG, WH-WIP. Cannot change after save.
- Name text · 200 req
- Full name for reports. E.g. Jagdish Industries — Main Plant.
- Type enum req
- See Part VII § 7.5 for the eight kinds. Type governs which flows can post to this warehouse.Cannot change after save. Pick carefully.
- Status enum · default ACTIVE req
- ACTIVE / INACTIVE. Only ACTIVE warehouses appear in pickers.
- Address line 1 text req
- Building + street.
- Address line 2 text opt
- Area + landmark.
- City text req
- -
- State code 2-char req
- Critical: this is your state for GST computation on outbound invoices from this warehouse.
- Pincode 6 digits req
- -
- GSTIN 15 chars opt
- Warehouse-specific GSTIN if you have multiple GST registrations.
- Contact phone / email text opt
- Warehouse manager's contact.
- Dealer ID Dealer picker opt
- Fill only for type DEALER_CONSIGNMENT. Links this warehouse to a specific dealer.
- Manager user User picker opt
- Store keeper / warehouse in-charge.
- Is default bool opt
- Pre-selects this warehouse in pickers. Exactly one warehouse should be default per type.
- Allow negative bool · default false opt
- Allow stock to go negative (over-sell during rush). Use sparingly — clean books need reconciliation later.
New Quote / Sales Order /commerce/quotes/new · /commerce/orders/new
Same form shape for both — quote becomes order on Convert to Order. Header + line items + totals. GST auto-computes from your warehouse state code vs the dealer state code.
- Quote / Order number auto req
- Auto-generated. Quote: QT-YYYY-#####. Order: SO-YYYY-#####.
- Customer / dealer Dealer picker req
- Pick from the dealer master. Fills in tier for auto-pricing, credit days for aging, state for GST.
- Delivery address text · auto opt
- Auto-fills from dealer address. Override if ship-to is different from billing.
- Order date / delivery date date opt
- Order-book date; expected delivery date. Drives production planning.
- Validity (quote) date · default +30 days opt
- Quote expiry. After this, prices need re-quoting.
- Payment terms text opt
- Free text — 30 days from invoice, 50% advance, balance on dispatch.
- T&C template dropdown opt
- Pre-built terms & conditions template. Manage at /settings.
- Product catalog picker req
- Pick from the product catalog. Description, UoM, base price auto-fill.
- Description text · auto opt
- Auto-fills from product name. Edit if customer wants specific language.
- Quantity int req
- Units of this SKU.
- UoM text · auto opt
- Unit of measure from product master.
- Unit price (paise) int req
- Per-unit price. Multiply rupees by 100. Auto-fills from dealer tier if configured.
- Discount % decimal opt
- Line-level discount. Header-level discount is a separate field.
- GST rate enum · 0/5/12/18/28 req
- GST % for this line. Pumps and motors are typically 18%. Panels 18%. Some agricultural equipment 12%.Wrong GST = wrong invoice = customer refuses to pay until corrected.
- CGST / SGST / IGST auto · computed opt
- Auto-computed. Intra-state: half in CGST + half in SGST. Inter-state: all in IGST.
- Subtotal / Tax / Grand total auto opt
- All computed. Grand total = sum(line total) - header discount + rounding.
- Notes text opt
- Free-text notes for the customer.
New Purchase Order /procurement/purchase-orders/new
The formal vendor order. Header + line items. Above the approval threshold, save enters PENDING_APPROVAL instead of DRAFT.
- PO number auto · PO-YY-###### req
- Auto-generated.
- Vendor Vendor picker req
- Must be ACTIVE + APPROVED-stage vendor. Fills in payment terms, MSME status, GSTIN.
- PO date date · default today req
- When the PO is being raised.
- Expected delivery date date opt
- When you expect the goods. Used for lead-time analytics and delivery-SLA tracking.
- Delivery warehouse Warehouse picker req
- Where the goods should be received. Usually PLANT-MAIN.
- Payment terms (days) int · from vendor opt
- Auto-fills from vendor default; override per PO if needed.
- Currency text · default INR opt
- Foreign vendors: USD / EUR / etc.
- Item Product picker or free text req
- Product from the catalog (auto-fills SKU) or free-text description for uncatalogued spot buys.
- Description text req
- Full description as you want it on the printed PO.
- Quantity int req
- Units to order.
- UoM text req
- -
- Unit price (paise) int req
- Negotiated rate. Consult vendor–part directory for last-price memory.
- GST rate enum req
- 0 / 5 / 12 / 18 / 28. Auto-computes CGST/SGST or IGST from state codes.
- HSN code text opt
- HSN classification. Required on the printed PO for above-₹5cr turnover vendors.
Cash-purchase GRN /procurement/grns/new
Log a market run — bearings from Chowk Mehta, wire from a local shop. Two vendor modes: Existing (pick from master) or Ad-hoc / market (type shop name). See Walkthrough 02 for the end-to-end flow.
- Vendor mode toggle · EXISTING / ADHOC req
- EXISTING: pick from vendor master. ADHOC: free-text shop name (routes to CASH-VENDOR placeholder).
- Vendor Vendor picker req · if EXISTING
- Only shown in EXISTING mode.
- Shop / supplier name text · 120 req · if ADHOC
- Full shop identity, e.g. Guru Nanak Hardware, Chowk Mehta.
- Phone text opt
- Shop's contact.
- GSTIN 15 chars opt
- Only if the shop is GST-registered.
- Warehouse picker · default PLANT-MAIN req
- Where the goods land.
- Received at datetime · default now req
- When the goods arrived.
- Vehicle number text · 20 opt
- Vehicle that brought the goods. Useful for tally with e-way bill checkpoints later.
- Bill / challan number text opt
- If the shop gave any bill or challan — even a hand-written slip.
- Item name datalist · catalog + free-text req
- Start typing to filter the catalog. Selecting a catalog item auto-fills SKU. Free-text works for uncatalogued consumables — but those don't hit the stock ledger.
- SKU auto or manual opt
- Auto-fills from item name selection. Blank = consumable line (no stock impact).
- UoM text · default EACH req
- Unit — EACH / Kg / Mtr / Ltr.
- Quantity int req
- -
- Unit price (₹) rupees · decimal req
- Per-unit rate in rupees. Line total auto-computes.
- GST % enum · 0/5/12/18/28 req
- GST on this line. For no-bill purchases, use 0.
- Mode enum · default CASH req
- Cash / UPI / Bank / Cheque / Card / Pending. See Part VII § 7.3.
- Amount paid (₹) rupees opt
- What you actually paid. Auto-fills from grand total but can be partial.
- Reference text · 60 opt
- UPI txn ref, cheque number, or voucher number.
New BOM /manufacturing/boms/new
Bill of Materials — components + operations to build one output product. Save enters status DRAFT. Release to ACTIVE before it can drive Work Orders.
- BOM code auto · convention BOM-V4-5HP req
- Human-readable identifier shown on the shop floor.
- Name text · 200 req
- Descriptive name. E.g. V4 5HP 3-Stage Standard Build.
- Output product Product picker opt
- The pump this BOM produces. Nullable so sub-assembly BOMs (rotor, stator) can exist without a top-level SKU.
- Assembly code text opt
- Fill when this BOM makes a sub-assembly instead of a finished product. E.g. STATOR-4IN-3HP.
- Standard batch qty int · default 1 req
- Reference batch size — components scale from this. Almost always 1.
- UoM text · default NOS opt
- Output unit of measure.
- Status enum · default DRAFT req
- DRAFT / ACTIVE / OBSOLETE. See Part VII § 7.4.
- Line number auto opt
- Sequence in printouts.
- Kind enum req
- COMPONENT (raw material) / SUB_ASSEMBLY (pre-built input) / OPERATION (labour cost).
- Item name datalist · catalog picker req
- Auto-fills SKU when a catalog item is selected. Free-text works for uncatalogued components.
- Item code (SKU) text · auto opt
- Fills from picker.
- UoM text req
- How the component is measured. Copper wire in Kg, bearings in EACH, cable in Mtr.
- Quantity per unit decimal req
- Component qty needed per one output unit. E.g. 2 bearings per pump; 0.35 kg of copper.
- Scrap % decimal opt
- Expected wastage. 3-5% common for copper, 1-2% for bearings.
- CTQ flag bool opt
- Critical-to-Quality. QC pays special attention on receipt.
- Sub-contracted bool opt
- Turn on if this component is made by a subcontractor (Chawla Winding, Singh Machining).
- Sub-BOM link BOM picker opt
- For sub-assemblies with their own BOM — links downstream.
- Allow alternative bool opt
- Can be substituted if primary is out of stock.
- Sequence int req
- Order in which operations happen.
- Operation code Piece-rate op picker req
- Pick from the piece-rate operations master (e.g. OP-WIND-V4-5HP).
- Workstation Workstation picker req
- Which machine / bench. WIND-1, ASSY-1, TEST-1.
- Cycle time (min) decimal opt
- How long one unit takes.
- Setup time (min) decimal opt
- One-off changeover time per batch.
- Rate per piece (paise) int opt
- Override the operation's default rate for this BOM. Blank = use master rate.
New Work Order /manufacturing/work-orders/new
Kicks off a batch of production. Auto-computes required material from the BOM × quantity. Statuses: PLANNED → RELEASED → IN_PROGRESS → HOLD → COMPLETED / CANCELLED.
- WO number auto · WO-YYYY-##### req
- Auto-generated.
- BOM BOM picker · ACTIVE only req
- Only ACTIVE BOMs are pickable.
- Product auto from BOM opt
- Auto-fills from the selected BOM.
- Quantity to produce int req
- Batch size. Required material auto-computes.
- Planned start date req
- When production starts.
- Planned end date req
- Target completion.
- Priority enum · default NORMAL opt
- LOW / NORMAL / HIGH / URGENT. Drives scheduling order.
- Sales Order link SO picker opt
- If this WO fulfils a specific Sales Order.
- Source warehouse Warehouse picker req
- Where raw material comes from. Usually PLANT-MAIN.
- Target warehouse Warehouse picker · WIP req
- Where WIP is held during production. Usually WH-WIP.
- Notes text opt
- Special instructions for the floor.
New Job Card /manufacturing/job-cards/new
One workstation's chunk of a Work Order. "Stator winding for 20 impellers on Machine 3" is one job card.
- Job Card number auto · JC/YYYY/##### req
- Auto-generated.
- Work Order WO picker req
- Only WOs in PLANNED / RELEASED / IN_PROGRESS / HOLD are pickable.
- Stage enum req
- STATOR_WINDING / MACHINING / ROTOR_BALANCING / SUB_ASSEMBLY / MAIN_ASSEMBLY / TESTING / PACKING / DISPATCH_PREP.
- Allocated qty int req
- How many units this job card covers. Cannot exceed the WO's remaining.
- Workstation code text · uppercase opt
- Which machine or bench. Auto-uppercased. E.g. WIND-1.
- Primary operator User picker opt
- The lead worker on this card.
- Shift code text · uppercase opt
- A / B / C shift, or day / night. Free-form.
- Notes text opt
- Special instructions.
New Stock Entry /manufacturing/stock-entries/new
Material movements between warehouses. The Purpose field is the most consequential setting — each purpose posts differently to the stock ledger.
- Purpose enum req
- See Part VII § 7.4 for the four options.
- Work Order link WO picker opt
- Ties this entry back to a specific work order — enables cost roll-up.
- From warehouse Warehouse picker opt
- Where stock leaves from. Required for transfer / manufacture / return.
- To warehouse Warehouse picker opt
- Where stock arrives. Required for transfer / manufacture / return.
- Posting date date · default now req
- When this movement is recognized on the ledger.
- Is return bool opt
- Descriptive flag; doesn't change ledger posting direction (that's decided by purpose).
- Notes text opt
- Context for the audit trail.
- Item Product picker req
- What's moving.
- Direction enum · INWARD / OUTWARD req
- Per-line direction. Rare for the whole entry to be mixed.
- Quantity decimal req
- Units moving.
- UoM text opt
- Auto-fills from product.
- Warehouse (per line) Warehouse picker opt
- If the line's warehouse differs from the header — rare.
- Rate (₹ per unit) decimal opt
- Valuation rate. Blank = system computes from FIFO / MOVING_AVERAGE.
- Amount auto · qty × rate opt
- Line value.
- Is finished item bool opt
- Turn on for the finished pump line in a MANUFACTURE entry.
- Is scrap bool opt
- Turn on for the scrap line in a MANUFACTURE entry.
- Has tracking bool opt
- Turn on to open serial / batch pickers for tracked items.
- Serial numbers array opt · if tracked
- Specific serial numbers on this line — usually one per unit of qty.
- Batches array · batch + qty opt · if tracked
- Batch number + qty per batch. Manufacturing / expiry dates supported.
New Employee — salaried /hr/employees/new
Formal EmployeeV2 onboarding. Long form but only ~10 fields are truly required to save. Rest can be added later. Result: employee row + User account with role EMPLOYEE + welcome email with initial password.
- Employee number auto · EMP-YYYYMM-#### req
- Auto-generated.
- First name text req
- -
- Middle name text opt
- Rare in Punjabi families; common in Marathi / Bengali.
- Last name text req
- -
- Display name text req
- How the name shows across the console. Usually first + last.
- Email email · unique req
- Primary login. Company convention: first.last@nicksonpumps.com.
- Phone E.164 opt
- Enables phone-OTP fallback login.
- Gender enum req
- MALE / FEMALE / OTHER / PREFER_NOT_TO_SAY.
- DOB date req
- Date of birth. Used for retirement calculation and statutory forms.
- Marital status enum opt
- SINGLE / MARRIED / DIVORCED / WIDOWED / OTHER.
- Blood group enum · default UNKNOWN opt
- Useful in medical emergencies on the shop floor.
- Aadhaar last 4 4 digits opt
- Only the last 4 stored plaintext; the full number is hashed for privacy.
- PAN 10 chars opt
- Required for TDS on salary above threshold.
- PAN verified bool opt
- Turn on after actual verification against the IT portal.
- UAN number 12 digits opt
- Universal Account Number for PF. Employee's own UAN; carries across jobs.
- PF account number text opt
- Nickson's PF establishment code + member ID. Format varies.
- ESI number 10 digits opt
- For employees under the ESI wage ceiling (~₹21k/month).
- Department Department picker req
- Pick from the 8 seeded departments (Production, Quality, Dispatch, Sales, Accounts, HR, Procurement, Maintenance).
- Designation Designation picker req
- Pick from the 12 seeded designations.
- Reporting manager Employee picker opt
- Their immediate boss. Drives approval routing.
- Location text opt
- Physical office / plant. E.g. Amritsar HQ, Amritsar plant.
- Join date date req
- Date of joining. Drives leave balance accrual and probation clock.
- Confirmation due date date opt
- End of probation. Default: join date + 6 months.
- Employment type enum · default PERMANENT req
- See Part VII § 7.6.
- Status enum · default ACTIVE req
- See Part VII § 7.6.
- Notes text opt
- Confidential HR notes.
New Wage Worker /hr/wage-workers/new
Temp / piece-rate worker onboarding. Simple form — name + phone is enough to save. Phone enables OTP login.
- Code auto · TMP-YYYY-#### req
- Distinct prefix from EMP codes.
- Name text req
- Full name.
- Phone E.164 req
- Required for phone-OTP login. WhatsApp templates fire on this number.
- Email email · unique opt
- Optional. If set, HR can hand out email + temp password too.
- Photo URL upload opt
- Worker's photo. For attendance selfie comparison later.
- ID proof type enum opt
- AADHAAR / PAN / VOTER_ID / DRIVING_LICENCE.
- ID proof number text opt
- The number on the chosen ID. Some workers refuse to share — the foreman still needs to pay them.
- Join date date req
- When they started.
- Active bool · default true req
- false = no longer working with us. Inactive workers don't appear in piece-rate pickers.
- Notes text opt
- Confidential notes.
New Cash Register entry /finance/cash-register/new
Every cash movement outside GST-invoiced flow. See Part VII § 7.7 for exhaustive enum coverage; this section is field-by-field.
- Direction toggle · INFLOW / OUTFLOW req
- Money in vs money out. Nature options change based on this.
- Nature enum req
- See Part VII § 7.7 for the 12 nature values.
- Amount (₹) decimal · rupees req
- In whole rupees, up to 2 decimal places. Server converts to paise.Section 269ST: cash-mode entries ≥ ₹2,00,000 soft-block.
- Entry date date · default today req
- Cannot be older than 90 days without admin period re-open.
- Payment mode enum · default CASH req
- CASH / UPI / BANK_TRANSFER / CHEQUE / CARD / PENDING.
- Payment ref text · 60 opt
- UPI txn ref, cheque number, voucher number.
- Counterparty name text · 120 req
- Shop, customer, vendor, employee, or "Owner" for OWNER_TRANSACTION.
- Counterparty phone text opt
- If relevant.
- Dealer link Dealer picker opt
- Optional soft link — helps per-counterparty history reports.
- Vendor link Vendor picker opt
- Same.
- Exemption reason enum · 11 values req
- See Part VII § 7.7 — the deepest reference on this doc.
- Exemption note text · 500 req · if OTHER_LEGAL
- One-line reason. Only required (and shown) when reason = OTHER_LEGAL.
- Description text · 2000 opt
- Free-form context — what was bought / received / paid.
New Payment /finance/payments/new
Record money received from a customer or paid to a vendor. Allocation against invoices decides which specific bills are settled.
- Payment number auto · VPAY / SPAY prefix req
- Auto-generated.
- Type enum · RECEIVED / MADE req
- Money direction.
- Counterparty Dealer / Vendor picker req
- Who you received from or paid to.
- Amount (paise) int req
- Total payment amount.
- Payment date date · default today req
- -
- Payment mode enum req
- CASH / UPI / BANK / CHEQUE / RTGS / NEFT.
- Reference text opt
- UTR, cheque no, txn ref.
- Bank account Bank picker opt
- Which of your bank accounts the money moved through.
- Allocation table invoice list + amount opt
- Pick specific invoices being settled. Total allocated must match the payment amount, or the excess sits as an advance.
- Notes text opt
- Context — Reconciled against bank statement 15 Jul.
Warranty registration + claim (public customer) /w/[serial]/register · /w/[serial]
The customer-facing screens. No login required — WhatsApp OTP verifies the phone.
- Serial auto · from URL req
- Pre-filled from the QR scan.
- Customer name text req
- End customer's name.
- Customer phone E.164 req
- WhatsApp OTP verifies this. Becomes the customer's identity forever.
- Address text req
- Installation address.
- Installation date date req
- When the pump was installed. Warranty starts from here if the product's warrantyStart = INSTALLATION.
- Installer name text opt
- Who installed — dealer, plumber, in-house.
- Location coordinates lat/lng · auto opt
- Captured if the customer grants location permission.
- Issue type enum req
- See Part VII § 7.8.
- Description text req
- What's wrong, in customer's words.
- Photos image upload · up to 5 opt
- Photos of the issue — leak, error display, damaged part.
- Preferred visit slot date + time opt
- When the customer would like the technician to visit.
Admin setup checklist
You just got your admin credentials. This is what to do in order — from the first thirty minutes to the year-end pack. No thinking required; follow the checkboxes.
10.1Your first 30 minutes
- Sign in at https://crm.nicksonpumps.com/login with the credentials you were given. 2 min
- Change your password immediately — top-right avatar → Profile → change password. Don't leave the default. 2 min
- Install the PWA on your phone (Chrome / Edge → Install app) and your desktop. See Part I § 1.2. 3 min
- Take the interface tour — read Part I § 1.3 and click through the sidebar sections your role shows. 5 min
- Try the command palette — press CtrlK (or ⌘K on Mac). Type "dealers", "leads", "cash register" — jump around. 3 min
- Open the Owner Brief at /dashboards/owner. Read yesterday's tiles. This is your Monday-morning ritual. 5 min
- Read Part VIII (Every workflow & how it grows the business) to understand what the CRM is actually for. 10 min
10.2Week 1 goals
By end of week 1, you want: real users onboarded, real master data verified, and one real end-to-end order flowing through.
Day 1 · master-data audit ~2 hours
- Open /hr/departments — verify the 8 seeded departments match Nickson's org (Production, Quality, Dispatch, Sales, Accounts, HR, Procurement, Maintenance).
- Open /hr/designations — verify the 12 seeded designations. Add / rename as needed.
- Open /inventory/warehouses — verify 7 seeded warehouses exist (PLANT-MAIN, WH-FG, WH-WIP, WH-SPARES, WH-RTN, WH-TRANSIT, WH-SCRAP). Correct the addresses if the seed used placeholders.
- Open /procurement/vendors — 18 industry-real vendors are seeded. Update GSTINs with the real numbers on file. Add any Nickson-specific vendors missing.
- Open /products — 24 products seeded (12 finished pumps + 12 raw materials). Update prices, images, and specs where the seed used placeholders.
Day 2 · onboard real employees ~2 hours
- Delete or archive the 9 test users (admin@test, sales@test etc.) once you have real replacements ready — or keep them for training.
- Onboard the first real salaried employee at /hr/employees/new. See Part IX § 9.13 for every field. Result: employee row + User account + welcome email.
- Onboard the first real wage worker at /hr/wage-workers/new. Phone number is enough — they log in via OTP.
- Verify the new user can log in — send them the credentials, watch them log in successfully.
- Onboard the rest of the team following the same pattern.
Day 3 · first real transactions ~2 hours
- Log the first real lead at /leads/new (Walkthrough 01 in Part IV shows the flow with real values).
- Handle the first real cash purchase using /procurement/grns/new — this proves the market-run flow works (Walkthrough 02).
- Post the first real cash-register entry at /finance/cash-register/new to prove the exemption tagging (Walkthrough 03).
- Convert the first real lead to a quote → sales order (Walkthrough 01 continued).
Day 4-5 · reorder rules + integrations ~4 hours
- Set reorder rules at /inventory/reorder-rules for the 15-20 most critical raw materials. See Part IX § 9.5 for field reference.
- Configure integrations — IndiaMART webhook, WhatsApp Cloud API, GST GSP. See Part XII.
- Set up notification templates for the events that matter to you (Part XVI).
- Test each integration end-to-end — send a test IndiaMART lead, send a test WhatsApp, generate a test IRN.
10.3Weekly admin rhythm
Rinse and repeat. Small daily habits keep the console healthy.
Monday morning
- Open the Owner Brief — read every tile.
- Clear the notification bell — decide, delegate, or defer each item.
- Review /workflows-admin/approvals — clear pending approvals.
- Check /inventory/reorder-rules for stockout alerts fired over the weekend.
Middle of the week
- Handle exceptions as they surface — cash-register entries flagged, MSME breaches approaching, warranty claims escalating.
- Read Daily Call Reports from field reps at end of each day.
- Review /hr/approvals/daily-work — approve piece-rate submissions.
Friday close
- Reconcile the week's cash-register entries with till + bank statement.
- Confirm no MSME invoices are breaching the 45-day gate over the weekend.
- Skim the sales dashboard for weekly conversion trends.
10.4Monthly tasks
- Payroll close · run /hr/payroll/payslips → Generate for period. Spot-check outliers. Trigger bulk payment via /finance/payments.
- MSME 45-day review · check /finance/msme for any invoices approaching or breaching. Prioritise these in the next payment run.
- AR aging review · /finance/ar-aging — identify collection calls for anything over 60 days.
- Vendor performance · review /procurement/vendors scoring — anyone consistently late or QC-failing gets a conversation.
- Cash Register month-close · review last month's entries with the accountant on the first of each month. Any wrongly-tagged entries get corrected before month-close hardens.
- Reorder rule review · adjust reorder points based on last month's consumption vs stock-out incidents.
- Statutory compliance · PF, ESI, TDS payments must be made by prescribed deadlines. Confirm each is done and evidenced.
10.5Quarterly reviews
- Dealer tier review · promote / demote dealers based on YTD performance. Tier drives auto-pricing.
- Employee performance reviews · /hr/performance/reviews.
- Vendor threshold audit · any below-threshold vendor whose cumulative purchases are approaching ₹40 lakh — the console warns, but review proactively.
- QMS calibration schedules · verify all measuring instruments due for calibration have current certificates.
- Reorder rule + safety stock rebalance · adjust based on quarterly consumption patterns.
- Marketing content refresh · product pages, banners, FAQs on /content/*.
10.6Year-end pack for the CA
End of financial year (typically 31 March). Hand your Chartered Accountant these exports:
- /commerce/invoices?fromDate=&toDate= — GST-invoiced sales (CSV).
- /procurement/vendor-invoices?fromDate=&toDate= — GST-invoiced purchases (CSV).
- /finance/cash-register?from=&to= — non-GST cash movements, tagged by legal reason.
- /finance/payments?fromDate=&toDate= — all payments received + paid.
- /finance/msme — MSME 45-day compliance report.
- /hr/payroll/payslips?year= — annual payroll summary.
- /inventory/stock-balances — closing stock valuation.
- /assets/depreciation — depreciation schedule for the year.
Troubleshooting & FAQ
When something's off — an error message, a permissions puzzle, a page that seems empty when it shouldn't be. Look here first before pinging the developer.
11.1Common error messages
Fix: either change the email or find the existing user at /hr/employees?email=... and edit that record instead.
Fix: reactivate at /procurement/vendors/[id] → change Status to ACTIVE, or use a different vendor.
Fix: just click submit again. Second attempt allocates the next number.
Fix: split into multiple smaller entries under ₹2 lakh, or switch payment mode to Bank / UPI / Cheque — those aren't capped.
Fix: either write a one-line reason, or pick a specific exemption category that fits (see Part VII § 7.7).
Fix: ask an admin to re-open the accounting period, or use today's date and add a note explaining the actual event date.
Fix: open the BOM at /manufacturing/boms/[id] and change status to ACTIVE. Only ACTIVE BOMs can drive production.
Fix: reduce the job card qty, or close prior job cards on this WO to free allocation.
Fix: reactivate at /inventory/warehouses/[id], or pick a different warehouse.
Fix: prioritise this in the next payment run at /finance/payments/new. Breach = the whole amount disallowed as an expense for the year.
11.2Login & access issues
- My phone-OTP isn't arriving.
- Check the phone number is in E.164 format (+91 prefix). Confirm WhatsApp is installed and can receive messages on that number. If it's still not arriving, try email login instead — HR can set a temporary password.
- I know my password is right but login fails.
- Check the User row's active flag. HR can toggle it back on. Also confirm no one accidentally reset the password.
- I get redirected in a loop after logging in.
- Your role is EMPLOYEE but your User isn't linked to an EmployeeV2 / TemporaryWorker record. Ask HR to link you at /hr/employees/[id] or /hr/wage-workers/[id] (userId field).
- Command palette (⌘K) doesn't open.
- Some browsers reserve CtrlK — the console-provided combination is CtrlK on Windows / ⌘K on Mac. If it's still not opening, hard-refresh (CtrlShiftR) — service worker might be caching a stale version.
11.3"I know it exists but I can't see it"
- I'm looking for a specific lead / order / dealer and it's not in the list.
- Row-level security is filtering you. Sales sees their team's leads, not other teams'. Employees see only their own records. Admins see everything. Ask an admin to look up the record, or switch to the ADMIN role temporarily.
- The vendor / dealer / customer isn't in the picker.
- Status. Only ACTIVE records show in pickers by default. Check /procurement/vendors or /dealers — if it's PROSPECT / INACTIVE / BLACKLISTED, that's why.
- My payslip isn't showing at /e/salary.
- Payslip hasn't been generated yet for this period, or the daily-work submission hasn't been HR-approved. Check /hr/approvals/daily-work for approval status.
- The BOM won't accept item X in the components table.
- Item's status is DISCONTINUED or not ACTIVE. Reactivate at /products/[id], or pick an equivalent.
11.4PWA / mobile issues
- Install prompt doesn't appear on my phone.
- You're already installed (open the app icon), OR the browser cached a "not installable" verdict. Try: hard-refresh, or open in a fresh tab. Some browsers require the site to have been visited for 30 seconds before offering install.
- Attendance selfie camera won't open.
- Camera permission was denied at some point. Fix: phone Settings → Site permissions → crm.nicksonpumps.com → allow camera. Reload the page.
- GPS location not captured on attendance.
- Location permission denied. Same fix as camera. Also verify you're outside a heavily shielded factory area where GPS won't lock.
- App feels slow on 3G.
- The console is a full app — it's designed to work offline for the login shell but heavy pages need data. On 3G, expect 5-10 second load. Once loaded, subsequent navigation is instant (the SW caches the shell).
11.5GST / invoicing issues
- My invoice shows IGST instead of CGST+SGST (or vice-versa).
- The tax type is decided from state codes: your warehouse state vs the customer's state. Check both. Intra-state → CGST + SGST. Inter-state → IGST. Fix the state code on the record where it's wrong.
- IRN / QR code didn't generate on the invoice.
- NIC GSP integration isn't configured or has an expired credential. See Part XII § 12.3.
- E-way bill number missing on inter-state dispatch.
- Same NIC GSP issue, or the dispatch is under the ₹50k threshold where EWB isn't required.
- Customer says they never got the invoice email.
- Check /notifications/log — filter to that customer + last N days. See if the email was sent, delivered, bounced, or failed. Common cause: their email is wrong on the dealer record.
11.6Stock ledger issues
- Stock balance shows a negative number.
- Someone dispatched or issued more than was in stock. If the warehouse allows negative (see Part IX § 9.5), this is expected. If not, physical stock and ledger are out of sync — run a cycle count at /inventory/cycle-counts/new and adjust.
- Item X is missing from stock reports.
- The product's status is DISCONTINUED, or valuation method changed mid-year. Check /products/[id].
- Cost of Goods Sold looks wrong on the invoice.
- Valuation method (FIFO / LIFO / MOVING_AVERAGE) determines this. FIFO uses oldest cost lot; MOVING_AVERAGE uses running average. If it looks off, check what method the product uses.
- I can't edit a posted Stock Entry.
- Correct — item quantities and warehouses are immutable once posted. For corrections, raise a reversal + redo entry. Only header metadata (notes, posting date within 14 days) is editable. See Part II § 2.6.
11.7Frequently asked questions
- How do I reset a user's password?
- HR opens the User row at /hr/employees/[id] and clicks Reset Password. An email with a fresh temporary password goes to the user. For phone-OTP-only workers, no password reset needed — they always use OTP.
- Can I delete a lead / dealer / order / invoice permanently?
- No. All entities use soft delete (deletedAt) which hides but preserves audit history. Deletion is by policy — records must remain for tax audits (usually 8 years).
- How do I fix a typo on an already-posted invoice?
- You can't edit a posted invoice. Options: (a) issue a credit note at /finance/credit-notes/new to cancel it, then raise a new correct invoice; (b) for minor cosmetic fixes (spelling), edit metadata fields only (notes, descriptions).
- How do I change a dealer's tier?
- Edit the dealer at /dealers/[id] → Tier field. Change takes effect on the next quote generated for that dealer.
- How do I add Hindi / Punjabi content for a product?
- Edit the product at /products/[id] → fill nameHi, taglineHi, summaryHi, namePa, etc. The marketing site + dealer portal auto-pick based on the visitor's locale.
- Can I bulk-import 500 dealers from an Excel file?
- Yes — see Part XIV. Prepare the CSV to the specified schema, then run scripts/import-dealers.ts on the server. Ask the developer if it's your first time.
- How does row-level security work?
- Sales role sees leads assigned to their team (via hierarchy). Employees see only their own payslip / attendance. Admins see everything. It's enforced at the database query layer, not the UI — even a URL trick won't reveal restricted data.
- Where are backups?
- Automated nightly to the VPS backup partition. Off-site sync is manual for now. Recovery procedure in Part XVIII.
- Is there a public API for external integrations?
- Not a general-purpose one. Specific integration endpoints exist for IndiaMART (webhook), WhatsApp (Cloud API), and warranty registration (public routes). For anything else, ask the developer.
- What timezone does the console use?
- Asia/Kolkata (IST, UTC+5:30). All timestamps in the database are stored as UTC; the UI renders in IST. Reports respect IST for day boundaries.
- Why does an amount show in paise instead of rupees?
- Internal storage is in paise (integer) to avoid floating-point errors on money. UI usually converts to rupees for display. If you see 1500000 where you expected 15000, that's paise — multiply by 100 for rupees representation, divide by 100 to convert back.
11.8When to call the developer (Tarun)
Most things you can fix yourself with this manual. Reach out to Tarun Bhardwaj (itarunbhardwaj@gmail.com) when:
- The console is down — https://crm.nicksonpumps.com returns 5xx or won't load at all.
- An error message you can't find in Part XI § 11.1.
- You need a bulk data import that doesn't have a documented importer.
- You need a new integration configured (a new external system).
- Backup restoration is required.
- You suspect a bug — something silently wrong, not a misuse issue.
- You want to change something that's structural — a new role, a new field, a workflow change.
Integrations setup
Third-party systems the console talks to. Each has a specific configuration path. Get these right on day-one setup and the whole team runs at automation-speed instead of manual-copy-paste speed.
12.1IndiaMART lead ingest webhook
Auto-ingests every lead delivered by IndiaMART's leads platform into /leads with source = INDIAMART.
- Log into IndiaMART Seller Panel → Leads Platform → Integrations.
- Add a new webhook endpoint pointing at https://crm.nicksonpumps.com/api/leads/indiamart.
- Copy the auth token IndiaMART generates. Set it in Settings → Integrations → IndiaMART Auth Token (or environment variable INDIAMART_WEBHOOK_TOKEN).
- Test — trigger a fresh IndiaMART lead. It should land in /leads within seconds with the full raw payload preserved.
12.2WhatsApp Cloud API
Powers OTP delivery, invoice PDF share, dispatch alerts, warranty notifications. Uses Meta's WhatsApp Cloud API directly.
- Register a WhatsApp Business Account at business.facebook.com.
- Add a phone number and get it verified (the number your customers will see).
- In the app dashboard → WhatsApp → Getting Started, copy Phone Number ID and permanent Access Token.
- Set in Settings → Integrations → WhatsApp:
- WHATSAPP_PHONE_NUMBER_ID — your registered number ID
- WHATSAPP_ACCESS_TOKEN — permanent token
- WHATSAPP_APP_SECRET — for webhook verification
- WHATSAPP_VERIFY_TOKEN — arbitrary string you pick
- Get message templates approved in the Meta Business Manager. Template names must match the template keys in /notifications.
- Test — trigger an OTP flow. If it doesn't arrive, check /notifications/log for the delivery status.
12.3GST GSP · IRN + e-way bill
Automates IRN generation on B2B invoices and e-way bill for inter-state dispatches over ₹50k. Uses a GST Suvidha Provider (GSP) — Cleartax, Masters India, or ClearTax are common.
- Sign up with a GSP. Cleartax is the most SME-friendly; others exist.
- Get GSP API credentials — client ID, client secret, endpoint URL.
- Register your GSTIN with the GSP for e-invoicing (IRN) if turnover ≥ ₹5 crore.
- Set in Settings → Integrations → GST GSP:
- GSP_ENDPOINT — the GSP's API base URL
- GSP_CLIENT_ID / GSP_CLIENT_SECRET
- GST_USERNAME / GST_PASSWORD — your GST portal credentials for e-way bill
- GSTIN — the GSTIN under which invoices are raised
- Test — generate a small invoice. IRN + QR should appear. Generate an inter-state dispatch over ₹50k — e-way bill number should populate.
12.4SMTP · outbound email
Powers invoice emails, welcome emails to new users, password resets, notification digests. Uses local Postfix on the VPS by default.
- SMTP credentials live in /opt/nicksonpumps-crm/.env.local on the VPS.
- To use an external provider (SendGrid, SES, Mailgun): set SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS.
- Verify SPF, DKIM, DMARC DNS records are set for nicksonpumps.com — otherwise Gmail marks your emails as spam.
- Test — trigger a welcome email by onboarding a test employee. Confirm it arrives in inbox (not spam).
12.5PostHog · product analytics
Anonymous product analytics — which pages get used, where users get stuck, session recordings for UX debugging. Not user tracking; product analytics.
- Sign up at posthog.com (free tier is generous).
- Get project API key from PostHog settings.
- Set NEXT_PUBLIC_POSTHOG_KEY and NEXT_PUBLIC_POSTHOG_HOST in .env.local.
- Redeploy. Events start flowing.
12.6Sentry · error tracking
Captures errors from client and server so Tarun can fix them proactively — without waiting for user reports.
- Sign up at sentry.io.
- Create a Next.js project. Get the DSN.
- Set SENTRY_DSN in .env.local. Set SENTRY_AUTH_TOKEN for release tagging.
- Redeploy. Any 5xx errors, JS exceptions, or slow requests will appear in Sentry with the exact stack trace.
Keyboard shortcuts & power-user tips
A few small habits that make everything twice as fast. Once you internalise these, sidebar-clicking feels slow.
Command palette · CtrlK / ⌘K
The fastest way to jump anywhere. Type any of:
- A record identifier — DLR-PB-001, SO-2026-00042, a serial number, a pump SKU
- A page name — "leads", "cash register", "warehouse", "invoices"
- A customer / dealer / vendor name — Balbir, Sharma Steel
- An employee name — Ramesh, Simran
Fuzzy matching. Enter to jump. Escape to close.
Global shortcuts
| Key | Action |
|---|---|
| CtrlK / ⌘K | Open command palette |
| ? | Show keyboard shortcuts help overlay |
| Esc | Close modal / palette / dropdown |
| g l | Go to Leads |
| g d | Go to Dealers |
| g o | Go to Orders |
| g i | Go to Invoices |
| g c | Go to Cash Register |
| g h | Go to home / owner brief |
| n | Focus quick capture bar |
Form shortcuts
- Tab — next field. ShiftTab — previous.
- Enter in a text field — submits form (except textareas — those need CtrlEnter).
- Esc — cancel / close without saving.
- On line-item tables, Tab from the last cell auto-adds a new row.
QR scanner in the top bar
Camera icon (📷) opens the scanner. Point at any of:
- Pump serial sticker — jumps to serial detail + warranty history
- Package label QR — jumps to dispatch order
- Vendor code QR (some vendor invoices carry one) — jumps to vendor detail
- Dealer QR — jumps to dealer profile
First use asks for camera permission. Grant once, never asks again.
Quick capture bar
The + button top-right (or press n) opens a three-tab picker: New Lead / New Task / New Note. One-tap add without leaving the page you're on.
Power-user tips
- URL as command line. Deep-link to filtered views: /leads?stage=NEW, /leads?assignedToId=<user>, /procurement/grns?status=DRAFT. Bookmark these.
- Middle-click to open in a new tab. Every navigation link supports it. Useful for cross-referencing without losing your place.
- Right-click a record row for a context menu (edit, duplicate, archive).
- The CtrlP (print) layout hides the sidebar and paginates cleanly. Use it to generate PDFs of any list or detail page.
Bulk operations · export, import, bulk actions
Moving a lot of records at once. Everything list-page has export. Imports are file-based and per-entity. Bulk actions live on the list pages themselves.
Exporting from any list
- Every list page has an Export CSV button in the top-right area (near filters).
- Applied filters carry into the export — export exactly the rows you're seeing.
- For very large exports (over 5000 rows), the export runs as a background job; you'll get a download link in the notification bell when it's ready.
- Reports (AR aging, dashboards) export as CSV or PDF via the same button.
Bulk actions on list pages
Check-boxes on the left of each row allow bulk selection. Once one or more rows selected, a bar appears with actions:
- Assign — reassign selected records to a specific user (Leads, Tasks, Warranty Claims).
- Tag — add or remove tags.
- Change status — bulk stage advance (Leads only).
- Soft delete — hide from all views (requires admin role).
- Export — CSV of the selection.
Importing existing data
Bulk import scripts live in /opt/nicksonpumps-crm/scripts/. Each takes a CSV in a specific schema and upserts. Documented in the script header. Run over SSH:
| Entity | Script | CSV columns |
|---|---|---|
| Dealers | scripts/import-dealers.ts | code, legalName, displayName, phone, city, state, pincode, tier, creditDays |
| Products | scripts/import-products.ts | sku, name, category, brand, hp, voltage, head, flowRate, priceInr, moq |
| Vendors | scripts/import-vendors.ts | code, legalName, tradeName, vendorType, gstin, city, state |
| Employees | scripts/import-employees.ts | empNo, firstName, lastName, email, phone, gender, dob, joinDate, deptCode, desigCode |
| Opening stock | scripts/seed-day-one-data.ts | Modify the openingStock array inline for a specific list |
All import scripts are idempotent — safe to re-run. They upsert by unique key.
Permissions matrix · who can do what
Detailed role × action grid. Legend: ● full access · ◐ own records only · — no access.
| Action | ADMIN | SALES | DISPATCH | ACCOUNTS | WARRANTY | HR | EMPLOYEE | DEALER |
|---|---|---|---|---|---|---|---|---|
| Sales | ||||||||
| Read leads | ● | ◐ | — | — | — | — | — | — |
| Create lead | ● | ● | — | — | — | — | — | — |
| Read dealers | ● | ● | ● | ● | ● | — | — | ◐ |
| Create quote / order | ● | ● | — | — | — | — | — | — |
| Read invoices | ● | ● | ● | ● | — | — | — | ◐ |
| Procurement | ||||||||
| Read vendors | ● | — | — | ● | — | — | — | — |
| Create PO | ● | — | — | ● | — | — | — | — |
| Post GRN (cash) | ● | — | ● | ● | — | — | — | — |
| Three-way match | ● | — | — | ● | — | — | — | — |
| Manufacturing | ||||||||
| Read BOMs | ● | — | — | — | — | — | — | — |
| Create Work Order | ● | — | — | — | — | — | — | — |
| Post Stock Entry | ● | — | ● | — | — | — | — | — |
| HR & Payroll | ||||||||
| Read employee roster | ● | — | — | — | — | ● | ◐ | — |
| Onboard employee | ● | — | — | — | — | ● | — | — |
| Approve daily work | ● | — | — | — | — | ● | — | — |
| Run payroll | ● | — | — | — | — | ● | — | — |
| Read own payslip | ● | ● | ● | ● | ● | ● | ◐ | — |
| Finance | ||||||||
| Record payment | ● | — | — | ● | — | — | — | — |
| Cash Register entry | ● | — | — | ● | — | — | — | — |
| Read AR aging | ● | — | — | ● | — | — | — | — |
| Issue credit note | ● | — | — | ● | — | — | — | — |
| Dispatch & Warranty | ||||||||
| Prepare dispatch | ● | — | ● | — | — | — | — | — |
| Triage warranty claim | ● | — | — | — | ● | — | — | — |
| Admin | ||||||||
| Approve above-threshold PO | ● | — | — | — | — | — | — | — |
| Change any record's status | ● | — | — | — | — | — | — | — |
| Configure integrations | ● | — | — | — | — | — | — | — |
Notification templates catalog
Every automated message the system can send — when it fires, who gets it, on which channel. Full template bodies live in lib/notifications/email-templates.ts; customise via /settings/integrations.
Sales
| Event | Recipient | Channel(s) |
|---|---|---|
| New lead assigned to me | Sales rep | In-app, WhatsApp |
| Lead stalled > 7 days in one stage | Sales rep + manager | In-app, Email |
| Quote sent to customer | Customer | Email, WhatsApp (with PDF) |
| Quote about to expire | Sales rep | In-app |
| Order confirmed | Customer, dispatch team | Email, WhatsApp, In-app |
Procurement
| Event | Recipient | Channel(s) |
|---|---|---|
| PO awaiting approval | Approver (admin) | In-app, Email |
| PO sent to vendor | Vendor | Email, WhatsApp (with PDF) |
| Reorder point breached | Procurement, admin | In-app |
| MSME 45-day deadline approaching | Accounts, admin | In-app, Email |
| Vendor threshold advisory (₹40 L) | Accounts | In-app |
Manufacturing & Dispatch
| Event | Recipient | Channel(s) |
|---|---|---|
| WO released to floor | Production supervisor | In-app |
| Dispatch ready for pickup | Dispatch team | In-app |
| Delivery challan issued | Customer | WhatsApp (with PDF) |
| E-way bill validity expiring | Dispatch | In-app, SMS |
HR & Payroll
| Event | Recipient | Channel(s) |
|---|---|---|
| Welcome / onboarding | New employee | Email (with initial password) |
| Daily work submission received | HR | In-app |
| Work submission approved / rejected | Worker | In-app, WhatsApp |
| Payslip ready | Employee / worker | WhatsApp, In-app, Push |
| Leave application requires approval | Manager | In-app |
| Leave decision | Applicant | In-app, WhatsApp |
| Missing punch (attendance regularization) | Employee, manager | In-app |
Finance
| Event | Recipient | Channel(s) |
|---|---|---|
| Invoice sent | Customer | Email (with PDF), WhatsApp |
| Payment received | Customer, sales rep | Email, In-app |
| Payment overdue | Customer, sales rep, admin | Email, WhatsApp |
| Section 269ST warning | Cash-register submitter | In-app (live in form) |
Warranty & Service
| Event | Recipient | Channel(s) |
|---|---|---|
| Warranty registered | Customer | WhatsApp (confirmation) |
| Claim filed | Warranty team | In-app |
| Technician assigned + scheduled | Customer | SMS, WhatsApp |
| Technician arrival reminder | Customer | SMS (2h before) |
| Claim closed | Customer |
Audit trail lookup · who changed what
Every mutation is logged. Two systems: Activity Timeline (record-facing, user-friendly) and Audit Log (system-facing, forensic). Use the first for daily questions; the second for disputes and compliance audits.
Activity Timeline (record-facing)
Every detail page — lead, order, invoice, employee, GRN, etc. — has an Activity section at the bottom that shows:
- Every user-driven action on the record (created, edited, status changed, note added)
- Automated system events (invoice generated, IRN received, notification sent)
- Free-form notes / comments logged by users
- Each entry has timestamp, actor, and (where applicable) a before / after diff
This answers ~90% of "who changed X" questions without needing developer access.
Audit Log (system-facing)
Deeper log at /audit (admin only). Every mutation on every table, immutable, with:
- Actor user ID
- Timestamp (millisecond precision)
- Table + record ID affected
- Operation (INSERT / UPDATE / DELETE)
- Complete before/after JSON snapshot
- IP address + user agent
Filter by user, date range, table, or operation. Export as CSV for audit response.
Common lookups
| Question | Where to look |
|---|---|
| Who last edited this invoice? | Invoice detail → Activity Timeline (last entry) |
| Who changed dealer XYZ's credit days? | Dealer detail → Activity Timeline → filter to "field: creditDays" |
| All actions user Ramesh took last month | /audit?userId=<id>&from=&to= |
| Every mutation on Sales Order SO-2026-00042 | /audit?table=SalesOrder&recordId=<id> |
| Who deleted anything today? | /audit?op=DELETE&from=today |
Backup & disaster recovery
Data safety — what's backed up, how often, where it lives, and how to restore. Owner should know this at least conceptually; developer executes the recovery.
What's backed up
- PostgreSQL database — the whole thing, including all schemas, tables, indexes, and audit history. Nightly compressed dump.
- Uploaded files — attendance selfies, warranty photos, claim photos, product images, invoice PDFs. Nightly incremental to backup partition.
- Configuration — /opt/nicksonpumps-crm/.env.local (SMTP creds, GSP creds, VAPID keys) — backed up encrypted; separate from the main backup partition.
- Application code — GitHub is the source of truth; not backed up separately.
Backup schedule
- Nightly — full PostgreSQL dump + incremental file backup, both to the VPS's local backup partition /var/backups/nickson/.
- Weekly — off-site sync to a separate storage location (currently manual; Rahul's local drive).
- Retention — 30 days of nightlies on the VPS; 3 months of weekly off-site.
Recovery procedure
If something bad happens — data corruption, accidental bulk delete, ransomware — this is the sequence:
- Stop the app: pm2 stop nicksonpumps-crm on the VPS.
- Rename the current database: psql -c "ALTER DATABASE nickson_crm RENAME TO nickson_crm_corrupted"
- Create a fresh database with the same name.
- Restore the latest good nightly dump: pg_restore -d nickson_crm /var/backups/nickson/latest.dump
- Restore uploaded files: rsync -a /var/backups/nickson/uploads/ /opt/nicksonpumps-crm/uploads/
- Start the app: pm2 start nicksonpumps-crm
- Verify — log in, check /dashboards/owner, spot-check a few records.
- Communicate — send a notice to all users about what data is now current (up to which timestamp).
Recovery time objectives
- RPO (Recovery Point Objective) — up to 24 hours of data loss in the worst case. Nightly backups mean transactions during the day since the last backup are lost.
- RTO (Recovery Time Objective) — ~1 hour from disaster to app running again, assuming backups are intact.
Getting comfortable — module by module
A guided tour of every module, framed for adaptation. Not what a module is (that's Part II) — but why it matters to you, what your first task is, how it connects to everything else, and the moment you'll know you've mastered it. Read in order the first time; return to any single lesson later.
19.1How to use this section
Set aside about two hours total. Do the seventeen lessons in order — each 5-10 minutes of reading plus a small hands-on task you can literally do on prod using the seeded data. By the end, you'll have touched every corner of the console at least once and understand where each module fits in the whole.
Every lesson has the same four-block structure:
- Why this matters to you — the business reason to care about this module today, not "one day" or "in theory".
- Your first task — a concrete 5-minute action to try right now. Uses the seeded data so nothing breaks.
- How it connects — the adjacent modules this one feeds into or draws from. Once you see the graph, the whole console clicks.
- Mastery signal — the specific thing you'll be able to do without checking the manual.
19.2The learning path
Suggested reading order. Follow it and each lesson builds on the previous.
19.3Patterns that carry across every module
Five patterns that show up everywhere. Learn them once, apply them everywhere.
- List → Detail → Edit. Every module has a list page, a detail page per record, and an edit form. Sidebar → list → click row → detail. Simple everywhere.
- Sidebar filter by role. What you see depends on your role. If a section is missing, that's by design — you can still ⌘K to jump if allowed.
- Status enums drive workflow. Every record has a status; changing it advances the workflow. Part VII explains every enum in the system.
- Every mutation logs to Activity. Detail page bottom always has an activity timeline — who, when, what changed.
- Numbers stored as paise or integers. Money is paise (₹1 = 100). Percentages are usually 0-100. Time as ISO strings.
Leads — the top of your revenue funnel
5 minWhy this matters to you
Every customer that will ever buy from Nickson enters through here. If a lead isn't logged, it can't be followed up; if it isn't followed up, it becomes a sale for a competitor. This module is the first defence against lost revenue.
Your first task · 5 min
Open /leads/kanban. Look at the seeded Balbir Singh lead in the NEW column. Click it. Read the detail page. Now click + New Lead and log a fake practice lead — Ravi Kumar, phone +919999111222, city Amritsar, source PHONE. Save. Move it through NEW → CONTACTED → QUALIFIED just by dragging on the kanban. Now delete it (soft) so it's off the list.
How it connects
Feeds → Dealers Commerce (quote) Field visits
You've mastered this when
Someone tells you about a customer inquiry over the phone, and by the time you hang up, the lead exists in the console with all context captured — without you thinking about which fields to fill.
Dealers — your distribution network, mapped
5 minWhy this matters to you
Nickson doesn't sell direct to end-consumers — dealers do. Every one of them has credit terms, a tier, an address, a preferred contact. When those live in your head, only you can quote correctly. When they live here, the whole team can.
Your first task · 5 min
Open /dealers. Notice 15 seeded dealers across PB / HR / UP / RJ / MP / UK. Click Balbir Singh Pump House. Read the detail — tier is Gold, credit 45 days, primary phone visible. This is what a rep sees when quoting. Now click + New Dealer and try filling in the state code field — try PB vs DL to see the address form. Cancel out — you don't need to save a test dealer.
How it connects
Drawn from → Leads · Feeds → Commerce Warranty claims Cash Register AR aging
You've mastered this when
A rep asks you what price to quote Balbir Singh and you know without looking — Gold tier, 45 days, standard schedule with x% margin.
Products & Catalog — one SKU, one truth
10 minWhy this matters to you
The catalog is the shared language between sales, procurement, and manufacturing. When SKU NIC-V4-5HP shows up on a quote, on a BOM, on a stock report, and on a warranty claim, they're all pointing at the exact same thing. Get the catalog right and the whole system speaks the same language.
Your first task · 10 min
Open /products. Note 24 seeded products — 12 pumps + 12 raw materials. Filter by category to see submersibles only. Click NIC-V4-5HP. Read every field. Now go to /products/new and start filling in a hypothetical NIC-V4-3HP-EXPORT. Notice how many fields exist (see Part IX § 9.3). Cancel out.
How it connects
Feeds → Commerce (quote lines) Procurement (PO lines) Manufacturing (BOM components) Inventory (stock rows) Warranty (serial lookup)
You've mastered this when
When a new SKU launches, you know exactly which fields to fill in what order — pricing, specs, warranty, valuation method, tracking flags — without a checklist.
Commerce — turning inquiries into money
15 minWhy this matters to you
This is where a lead becomes revenue. Quote → Order → Invoice → Payment is the single most important workflow in the whole system. Every rupee that hits your bank passes through here. Master this and you understand the revenue engine.
Your first task · 15 min
Follow Walkthrough 01 (Part IV § 01) end-to-end. Log the Balbir Singh lead, convert to quote, convert to order, confirm order. At each step, look at where the record now lives in the sidebar — Leads → Commerce/Quotes → Commerce/Orders. Notice the status pill change on each transition.
How it connects
Drawn from → Leads Dealers Products · Feeds → Manufacturing (WO) Dispatch Finance (invoice, payment)
You've mastered this when
You can start with a phone call and finish with an invoice number in under 15 minutes, GST computed correctly, and the whole chain visible in one detail page.
Procurement — raw material in the door
15 minWhy this matters to you
You can't manufacture without raw material. This module makes the difference between "we ran out of bearings and lost a day" and "everything we need is on the shelf, at the best historical price". Also where the biggest cost-saving levers live.
Your first task · 15 min
Open /procurement hub. Click through — Vendors, Purchase Orders, Goods Receipts, Vendor–Part directory. Now follow Walkthrough 02 (Part IV § 02) — log a cash-purchase GRN for 5 bearings from Guru Nanak Hardware. Watch stock go up.
How it connects
Drawn from → Manufacturing (reorder alerts) · Feeds → Inventory Finance (vendor invoice, payment) Vendor-Part directory
You've mastered this when
You never place a PO without first checking the vendor–part directory for the last price. Every reorder alert gets converted to a PO within 24 hours.
Manufacturing — actually making the pumps
15 minWhy this matters to you
This is where value is created. BOM → Work Order → Job Cards → Piece-rate — every step has a name and a screen. Managing this from the office instead of the shop floor is the difference between being a scale business and being a shop.
Your first task · 15 min
Open /manufacturing hub. Click through BOMs, Work Orders, Job Cards, Workstations, Stock Entries. Try creating a fake BOM at /manufacturing/boms/new for a made-up product — use the datalist to pick real raw materials as components. Don't save.
How it connects
Drawn from → Products (BOM output + components) Procurement (raw material) Commerce (WO from SO) · Feeds → Inventory (stock entries) HR (piece-rate logs) Dispatch
You've mastered this when
Given a new pump model, you can build its BOM, release a Work Order, allocate Job Cards, and predict piece-rate payroll within a 5% margin.
Inventory — know exactly what you have, where
10 minWhy this matters to you
The single most expensive thing in a manufacturing business is not knowing your own stock. This module gives you real-time answers to "do we have 20 V4 5HP ready to ship" without walking to the FG warehouse.
Your first task · 10 min
Open /inventory/stock-balances. Filter to NIC-V4-5HP. See where it sits across warehouses. Now open /inventory/reorder-rules. See which raw materials have reorder alerts armed. Try tightening one reorder point by 20% and see if the alert fires — then revert.
How it connects
Fed by → Procurement (GRN) Manufacturing (stock entry) · Feeds → Dispatch (available FG) Owner Brief (alerts)
You've mastered this when
Anyone asks "do we have X in stock?" and you answer in under 30 seconds, with warehouse-level breakdown.
HR & Payroll — the whole team, one view
15 minWhy this matters to you
Payroll disputes are the #1 source of shop-floor friction. This module puts every worker's attendance, piece-rate, and pay in one place — so disputes become impossible instead of expensive. Also handles statutory compliance (PF / ESI / TDS) automatically.
Your first task · 15 min
Open /hr/employees. See 12 seeded employees. Click Rahul Singh — see his full profile. Now open /hr/approvals/daily-work — this is where you'd approve piece-rate submissions. Try Walkthrough 04 (Part IV § 04) if you want to see the approval flow end-to-end.
How it connects
Fed by → Manufacturing (piece-rate logs) Attendance · Feeds → Finance (payslip payment) Employee self-service
You've mastered this when
Monthly payroll close takes 30 minutes end-to-end. Every worker's balance is visible on demand. Zero disputes.
My Nickson — the shop-floor worker's own view
5 minWhy this matters to you
When workers can see their own earnings, attendance, and balance on their own phone, retention improves dramatically. This is the module that transforms them from "employees waiting to be paid" into "people who own their own numbers".
Your first task · 5 min
Sign out. Sign in as worker@test.nicksonpumps.com (or phone-OTP +91 9999-999-902). See the "My Nickson" section in the sidebar — that's what a shop-floor worker sees. Click Attendance, Work, Salary, Balance. This is their whole world.
How it connects
Fed by → HR (roster) Manufacturing (piece-rate ops) · Feeds → HR approvals Attendance dashboard
You've mastered this when
A worker walks up asking about a missing payment — you can pull up their /e/balance from your own admin view and resolve it in under 2 minutes.
Dispatch — getting product out the door
10 minWhy this matters to you
A finished pump sitting in FG is not revenue. Dispatch is where value crystallises into shipped product — with e-way bill, delivery challan, and the serial-to-customer link that unlocks warranty later.
Your first task · 10 min
Open /dispatch hub. See today's queue. Click through Serial Numbers — this is your product lifetime registry. Every pump ever built has a row here. Try /dispatch/new to see the form fields (from Part IX). Cancel out.
How it connects
Drawn from → Commerce (orders) Manufacturing (FG stock) · Feeds → Warranty (serial-to-customer) Commerce (invoice trigger)
You've mastered this when
You can prep a dispatch for a 20-unit order end-to-end in under 20 minutes — including serial allocation, e-way bill, and delivery challan.
Finance — money in, money out, books clean
15 minWhy this matters to you
This is where the CRM turns from an operational tool into a business you can defend on audit. Invoices, payments, credit notes, AR aging, MSME 45-day gate, and the Cash Register with legal exemption tagging. Everything the CA needs, generated automatically from actual events.
Your first task · 15 min
Open /finance hub. Note KPI tiles. Click Cash Register. See the 8 seeded sample entries — one for every legal exemption reason. Follow Walkthrough 03 (Part IV § 03) to log a ₹340 petty cash tea purchase. This is the module you should re-read most — Part VII § 7.7 has the deepest treatment of exemption reasons.
How it connects
Drawn from → Commerce (invoices) Procurement (vendor invoices) HR (payroll) · Feeds → Owner Brief CA year-end pack
You've mastered this when
For any cash movement in the business, you know instantly whether it belongs in Cash Register or as a full invoice / GRN — and which legal exemption category applies.
Field & Service — the outside team
5 minWhy this matters to you
Field reps and service technicians are the highest-cost, hardest-to-observe part of the team. This module makes their day-to-day visible — visits, beats, DCRs, expenses — so you can coach and optimise from the office.
Your first task · 5 min
Open /field hub. Look at visits, beats, DCRs. Notice how each visit has GPS + timestamp + notes — this is the "proof of work" for people you can't sit next to. Skim recent DCRs to see what a good end-of-day summary looks like.
How it connects
Drawn from → Dealers (beat targets) Warranty (technician visits) · Feeds → Sales dashboard Warranty claims
You've mastered this when
You know your top three field reps' beat coverage percentages off the top of your head and can spot when someone's slipping.
Quality (QMS) — audit-ready without audit stress
5 minWhy this matters to you
ISO 9001:2015 requires a documented evidence chain — NCRs, CAPAs, calibrations, effectiveness verifications. This module builds that chain automatically from your day-to-day quality decisions. When the ISO auditor visits, the evidence is already there.
Your first task · 5 min
Open /qms hub. Look at NCRs (Non-Conformance Reports) and CAPAs (Corrective / Preventive Actions). Even if empty right now, understand the flow: something fails QC → NCR raised → root cause → CAPA action items with owners + due dates → effectiveness verification → closure.
How it connects
Drawn from → Procurement (GRN QC decision) Manufacturing (Job Card quality) Warranty claims (root cause) · Feeds → Quality dashboard
You've mastered this when
Every QC failure automatically raises an NCR without prompting. Every recurring quality issue has a CAPA with a clear owner and due date.
Assets — machines, vehicles, and their upkeep
5 minWhy this matters to you
Depreciation, AMC contracts, preventive maintenance schedules — these are the things that quietly cost you money when neglected. Log them here once and get automated alerts before renewal deadlines or maintenance due dates.
Your first task · 5 min
Open /assets hub. Look at AMC contracts, depreciation schedule, maintenance calendar. If the register is empty, that's your first admin task — add every machine + vehicle you own with purchase cost + salvage value + useful life.
How it connects
Feeds → Finance (depreciation) Maintenance schedules
You've mastered this when
You know every fixed asset's next AMC renewal date and preventive maintenance due date — visible on the dashboard, no digging required.
Warranty — the customer relationship after the sale
5 minWhy this matters to you
Warranty capture rate is the leading indicator of brand strength. Every pump the customer registers is a lifetime relationship you own. This module makes registration nearly frictionless (QR scan → OTP) so capture rate goes from ~30% to 90%+.
Your first task · 5 min
Open a browser to /w/[any-serial-from-dispatch] as if you were a customer. See what they'd see when scanning the QR sticker on a pump. Now log in as warranty@test.nicksonpumps.com and look at /dispatch/warranty-claims — the triage queue.
How it connects
Drawn from → Dispatch (serial-to-customer) · Feeds → Helpdesk tickets Field visits NCR (recurring failures)
You've mastered this when
Every dispatched pump has warranty registered within 30 days of delivery. Every claim gets triaged and assigned to a technician within one business day.
Notifications — signal through the noise
5 minWhy this matters to you
Every automated message the system sends and every announcement you broadcast lives here. When someone asks "did the customer get the invoice?" — this is your answer log.
Your first task · 5 min
Open /notifications/log. See the last week's messages. Filter to a specific recipient (any test user's email). Now try creating an announcement at /notifications/announcements/new — pick audience ALL_STAFF, mark pinned, publish. See how it appears in the sidebar bell.
How it connects
Fed by → Every module · Configured via → Settings
You've mastered this when
You can answer "did the customer get X" in under 30 seconds using the notification log. You use announcements sparingly enough that people still read them.
Settings — the control panel
5 minWhy this matters to you
Every integration credential, every configurable behaviour, every branding value lives here. Get this right once and everything else works. Get it wrong and small paper cuts multiply across every workflow.
Your first task · 5 min
Open /settings. Click through Integrations. If Part XII (Integrations setup) had gaps in your config, this is where you fix them. Verify each integration has fresh credentials and test each end-to-end.
How it connects
Configures → Every integration Notification templates Auto-numbering
You've mastered this when
All integrations green. All templates active. You know where each credential lives without hunting.
19.4Mastery signal — you know the CRM when…
You've absorbed the system when — without checking this manual — you can:
- Take a phone inquiry from a farmer's cousin and get it into the system with all context captured, in under 2 minutes.
- Approve a batch of daily-work submissions before your morning tea.
- Post a market-run cash purchase for bearings on your phone, walking back from Chowk Mehta.
- Answer any staff question by pulling up their role's view via CtrlK — you know what they see because you've been in their shoes here.
- Explain to your CA at year-end why the Cash Register books are cleaner than any competitor's.
- Walk the ISO auditor through the QMS evidence chain from a warranty claim back to the batch and shift.
- Feel calm on Monday morning because the Owner Brief tells you what to attend to first.
Once you have that pattern, teach it to two other people in the team. That's when you know it's yours.
Closing coverage & appendices
The last modules that weren't given their own section elsewhere, plus the reference appendices — number-series patterns, glossary, changelog. After this the manual is genuinely complete.
20.1Content Management (CMS)
The console doubles as the CMS for the public marketing site at nicksonpumps.com. Update copy, banners, and industry pages without touching code.
| Screen | What it is | Common actions |
|---|---|---|
| /content/banners | Announcement strips + hero-below carousel banners | Publish a new campaign banner, schedule active dates, sort order |
| /content/faqs | FAQ entries grouped by category | Add a Q&A, edit answer, mark featured |
| /content/industries | Industry-vertical pages (agriculture, real estate, hospitality) | Add a new industry, upload hero image, edit copy in EN/HI/PA |
| /content/pages | Free-form marketing site pages (about, careers, certifications) | Edit sections, hero images, CTAs, contact info |
Every content edit auto-triggers ISR revalidation on the marketing site — changes appear live within ~5 seconds. Locale-aware fields (*Hi, *Pa) allow Hindi and Punjabi variants that dealers and end-customers see based on their language switcher choice.
20.2Tasks
A lightweight task system that runs alongside every module. Tasks can be personal (yours only) or assigned to another user. Common uses:
- Follow-up reminders on leads and quotes
- Approval delegation ("Rahul, review this PO before Friday")
- Recurring maintenance reminders
- Personal to-dos that don't fit another module
| Screen | Purpose |
|---|---|
| /tasks | All tasks — filter by assignee, status, due date, related record |
| /tasks/new | Create a task — title, description, due date, priority, assignee, optional subject linkage (Lead, Order, Warranty Claim, etc.) |
Fields on the task form:
- Title text req
- Short description of the task.
- Description text · long opt
- Full context.
- Assignee User picker req
- Blank = yourself.
- Due date date + time opt
- Overdue tasks bubble to the top of the assignee's inbox.
- Priority LOW / NORMAL / HIGH / URGENT opt
- URGENT surfaces in the notification bell.
- Related record picker opt
- Optional link to a Lead, Order, Claim, etc. — creates a back-link on that record's activity timeline.
Tasks respect authority scope — via the canAssign() helper, users can only assign to their reports or peers, not to anyone across the org.
20.3Recruitment — full flow
The hiring pipeline. Publish → source candidates → interview rounds → offer → convert to Employee. Everything under /hr/recruitment.
Stages
- Job opening — /hr/recruitment/openings/new. Title, department, designation, grade, job description, hiring manager, target close date. Publish when ready.
- Candidate applications — either applied via public careers page or hand-entered by HR. Each has resume upload, source, current CTC, expected CTC.
- Interview rounds — configurable per opening (screening call, technical, HR round, final). Each round has an interviewer, a scheduled date, notes, and a rating.
- Offer letter — auto-generated from a template using the candidate's negotiated compensation. Emailed as PDF.
- Convert to Employee — one click on the accepted candidate creates the EmployeeV2 record with everything pre-filled.
Screens
| Screen | Who | Purpose |
|---|---|---|
| /hr/recruitment/openings | HR + hiring manager | All openings, filter by status / department |
| /hr/recruitment/openings/new | HR | Post a new opening |
| /hr/recruitment/openings/[id] | HR + hiring manager | Applicants, interview rounds, decision log |
| /hr/recruitment/candidates/[id] | HR + interviewers | Candidate profile, rounds, notes |
| /hr/onboarding/invitations | HR | Send a self-onboarding link to a candidate after offer acceptance — they fill personal + statutory details before day 1 |
20.4Salary structures & piece-rate overrides
Two separate payroll systems — structured salary for EmployeeV2 and per-worker piece-rate overrides for TemporaryWorker.
Salary structures (salaried employees)
/hr/salary-structures — templates per grade. A structure defines the earnings + deductions formula:
- Earnings — Basic (usually 40% of gross), HRA (usually 40-50% of basic), Conveyance (fixed), Special allowance (balancer)
- Statutory deductions — PF (12% of Basic, capped at ₹1,800/month), ESI (0.75% of gross for wages ≤ ₹21k/month), Professional Tax (state-specific slab, PB = ₹200/month), TDS (per Income Tax slab)
- Custom deductions — advance recovery, loan EMI, uniform allowance recovery
Attach a structure to an employee via their profile → Compensation Revision. Structures can be revised for salary hikes — the history is preserved.
Piece-rate overrides (temp workers)
/hr/piece-rate-overrides — per-worker rate adjustments to the operation's default rate. Use when a specific worker has consistently higher quality or speed and deserves a bonus rate:
- Pick worker + operation
- Override rate in paise (must be within a reasonable multiplier of default)
- Effective from / to dates
- Approver + reason
20.5Dealer portal — external view
What a dealer sees when they log in with role DEALER_PORTAL. Constrained, self-service, focused on their own account.
| Screen | What the dealer can do |
|---|---|
| /dealers | Their own dealer profile — contacts, addresses, credit terms (read-only) |
| /commerce/orders | Only their own orders. Track status, download invoices. |
| /commerce/quotes | Pending quotes they can accept / decline |
| /dispatch | In-transit shipments to their location with delivery ETA |
| /dispatch/warranty-claims | Warranty claims filed by their end-customers |
| /finance/invoices | Only their own invoices with payment status + AR aging |
| /onboard | First-time onboarding for new dealer accounts — accept T&C, upload GST cert |
Dealer portal login flow:
- Sales creates the dealer at /dealers/new and marks portal access.
- Dealer receives a welcome email with a self-registration link.
- Dealer sets a password, uploads GST + PAN, accepts T&C at /onboard.
- Sales approves; dealer can now log in at /login.
20.6Approval workflow admin
Not every action goes through immediately. Some require an approval step from an authorised user. This module manages the routing.
| Screen | Purpose |
|---|---|
| /workflows-admin/approvals | All approval requests — pending, approved, rejected. Filter by kind, requester, approver. |
| /workflows-admin/approvals/[id] | Detail of a specific approval — full context, before/after diff, approve or reject with note |
| /workflows-admin/rules | Approval routing rules — "any PO above ₹1 lakh needs admin approval", "expense claims > ₹5k need manager", etc. |
Approval kinds
- PO above threshold — set threshold in Settings; higher POs enter PENDING_APPROVAL until approved.
- Expense claims above threshold — usually ₹5k for manager, higher for finance.
- Leave applications — auto-route to reporting manager.
- Vendor payments above threshold — require admin sign-off on the outbound.
- Credit note issuance — accounts-authorised only.
- Salary revision — HR + admin joint approval.
Each approval carries a full audit trail: requester, timestamp, before/after diff, approver's decision, reason note. Everything visible in the record's activity timeline.
20.7Beat planning & lead source configuration
Beat plans
Pre-defined dealer visit routes for the field team. Instead of reps deciding where to go each day, beats structure the week.
- /field/beats — list of all beats
- /field/beats/new — create a beat
Each beat has: name (Amritsar Zone A), day of week, assigned rep, list of dealers to visit that day, expected duration. Reps see today's beat as the top card on /field.
Lead source configuration
/sources — configure the sources that appear in the Lead form's source dropdown. Each source has:
- Code — INDIAMART, WALK_IN, PHONE
- Display name
- Active flag
- Webhook URL (if automated) — for IndiaMART, Facebook Lead Ads, etc.
- Auth token — for verifying webhook payloads
- Default assignee / round-robin group — who owns leads from this source by default
- SLA target — first-response deadline (in hours)
20.8Number series & sequence patterns
Every entity has an auto-generated identifier. Learn these patterns and you can recognise records at a glance.
| Entity | Pattern | Example | Reset frequency |
|---|---|---|---|
| Lead | internal cuid | — | never (opaque) |
| Dealer | DLR-STATE-### | DLR-PB-001 | never (manual scheme) |
| Vendor | V-###### | V-000042 | never (system-wide) |
| Product | custom SKU | NIC-V4-5HP | never (manual scheme) |
| Employee | EMP-YYYYMM-#### | EMP-202607-0001 | per month |
| Temp worker | TMP-YYYY-#### | TMP-2026-0042 | per year |
| Quote | QT-YYYY-##### | QT-2026-00042 | per year |
| Sales Order | SO-YYYY-##### | SO-2026-00042 | per year |
| Invoice | INV-YYYY-##### | INV-2026-00042 | per year |
| Purchase Order | PO-YY-###### | PO-26-000042 | per year |
| GRN (from PO) | GRN-YY-###### | GRN-26-000042 | per year |
| GRN (cash purchase) | GRN-YY-###### | GRN-26-000123 | per year |
| Vendor Invoice | VINV-YY-###### | VINV-26-000042 | per year |
| Vendor Payment | VPAY-YY-###### | VPAY-26-000042 | per year |
| Stock Movement | SM-YY-######## | SM-26-00000042 | per year |
| Stock Entry | SE-YYYY-##### | SE-2026-00042 | per year |
| Work Order | WO-YYYY-##### | WO-2026-00042 | per year |
| Job Card | JC/YYYY/##### | JC/2026/00042 | per year |
| BOM | custom | BOM-V4-5HP | never (manual scheme) |
| Dispatch Order | DO-YYYY-##### | DO-2026-00042 | per year |
| Cash Register | CR-YYYYMMDD-#### | CR-20260712-0042 | per day |
| Daily Work Submission | DWS-YYYYMMDD-###### | DWS-20260712-000042 | per day |
| NCR | NCR-YY-#### | NCR-26-0042 | per year |
| CAPA | CAPA-YY-#### | CAPA-26-0042 | per year |
20.9Glossary of terms
Industry acronyms and Nickson-specific vocabulary used throughout the console. Alphabetical.
- AR (aging)
- Accounts Receivable. AR aging = how long each customer invoice has been unpaid, bucketed by 0-30 / 31-60 / 61-90 / 90+ days.
- BOM
- Bill of Materials. The recipe for how to build one output product — components + operations + scrap allowances.
- CAPA
- Corrective and Preventive Action. Formal quality response to an NCR — root cause + action items + effectiveness verification.
- CGST / SGST / IGST
- Central / State / Integrated GST. CGST + SGST charged on intra-state supplies (half each); IGST on inter-state (full).
- CTQ
- Critical-to-Quality. A BOM component flagged as CTQ gets extra QC attention at incoming and in-process stages.
- DCR
- Daily Call Report. End-of-day summary from field reps.
- EWB · e-way bill
- Electronic Waybill. Mandatory for inter-state dispatches over ₹50,000 (some states also for intra-state above thresholds). Generated via NIC GSP.
- FG
- Finished Goods. Warehouse type where completed pumps live before dispatch.
- FIFO / LIFO / MOVING_AVERAGE
- Inventory valuation methods. See Part VII § 7.2.
- GRN
- Goods Receipt Note. Formal record that inbound stock has been received.
- GSP
- GST Suvidha Provider. A licensed intermediary that connects to the government's GST portal for IRN + e-way bill.
- GSTIN
- GST Identification Number. 15-character format: 2-digit state + 10-char PAN + 1 entity number + 1 check + Z default.
- HSN
- Harmonised System of Nomenclature. GST commodity classification code. Required on invoices above certain turnovers.
- IRN
- Invoice Reference Number. Unique NIC-issued code that certifies an invoice under e-invoicing. Mandatory for B2B invoices from businesses with turnover ≥ ₹5 crore.
- MOQ
- Minimum Order Quantity.
- MSME
- Micro, Small & Medium Enterprise. Registered via Udyam portal. MSME vendors must be paid within 45 days (MSMED Act 2006 + Section 43B).
- NCR
- Non-Conformance Report. Quality defect record.
- PAN
- Permanent Account Number. 10-character tax identity for individuals and businesses.
- PF / ESI / TDS
- Provident Fund / Employees State Insurance / Tax Deducted at Source. Statutory salary deductions.
- POLine / GRNLine / BOMComponent
- The individual line items on a Purchase Order, Goods Receipt Note, or Bill of Materials. Each represents one item on the parent document.
- Piece-rate
- Payment model where a worker is paid per unit completed (not per hour). Common on the shop floor for winding, assembly, testing.
- PWA
- Progressive Web App. A website that behaves like a native app — installable to home screen, offline-capable, push notifications.
- RCM
- Reverse Charge Mechanism. Under GST, some transactions require the buyer (not the seller) to pay the tax. Common for purchases from unregistered dealers, scrap traders, some transport.
- RFQ
- Request For Quotation. A formal price inquiry sent to vendors before raising a PO.
- RPO / RTO
- Recovery Point Objective / Recovery Time Objective. Backup-and-recovery targets. See Part XVIII.
- Section 269ST
- Income Tax Act section that caps cash transactions at ₹2 lakh. Cross it and Section 271DA imposes a 100% penalty.
- Section 43B
- Income Tax Act section that disallows expenses (like MSME payments beyond 45 days) as deductions if unpaid.
- SLE
- Stock Ledger Entry. The immutable per-item cost queue that drives FIFO / LIFO valuation.
- SO / PO
- Sales Order (customer) / Purchase Order (vendor). Same shape, opposite direction.
- SKU
- Stock Keeping Unit. Unique identifier for a product variant.
- SWG
- Standard Wire Gauge. Copper-wire thickness system used in stator winding. Lower SWG number = thicker wire.
- TDS
- Tax Deducted at Source. Buyer withholds a percentage of vendor payment and remits to government.
- UAN
- Universal Account Number. Employee's PF portable identity across employers.
- Udyam
- The current MSME registration portal (replaced the older Udyog Aadhaar).
- UoM
- Unit of Measure. Nos / Kg / Mtr / Ltr / EACH.
- UTM
- URL parameters (utm_campaign, utm_medium, utm_source, utm_content) used to attribute web traffic to specific marketing campaigns.
- V3 / V4 / V6
- Nickson's submersible pump form factors — V3 (3-inch dia), V4 (4-inch), V6 (6-inch). Larger = higher discharge, deeper wells.
- WIP
- Work-in-Progress. Warehouse type where partially-built products live between raw material issue and finished output.
- WO / Work Order
- A production batch instruction. Turns a BOM into actual output.
20.10Version history · how the CRM got here
The console has evolved through several distinct phases. This is what shipped in each — useful when someone asks "when did we get X".
Foundation Q3 2025
- Core Leads, Dealers, Products, Commerce (quotes + orders), Procurement, Manufacturing, Inventory, HR + Payroll
- PWA install, mobile shell, ⌘K command palette, QR resolver
- Quick-capture bar, Owner Daily Brief
Retention & approvals Q4 2025
- Activity thread on every record
- Approval inbox at /workflows-admin/approvals
- Dealer portal (external self-service)
- Web push notifications (VAPID)
- Bulk lead actions + CSV export
- Offline queue (IndexedDB)
- Dark mode
Integrations foundation Q1 2026
- Pluggable adapter framework — WhatsApp (Gupshup / Meta), GST (Cleartax), transcription (Whisper / Sarvam), weather (IMD)
- Mock adapter as default; env flag switches to real
- Schema audit: every transactional model has dealerId — dealer portal live-data-ready
Voice, e-invoicing, dispatch, forecasting Q2 2026
- Voice STT wired into captures (Whisper / Sarvam)
- IRN + e-way bill via GspAdapter
- Dealer portal warranty / order / dispatch forms
- AR aging report
- Owner Daily Brief + demand-forecast dashboard widget
- WhatsApp inbound webhook
Self-build providers Q2-Q3 2026
- WhatsApp direct to Meta Cloud API (no GSP dependency)
- e-Way Bill direct to NIC
- IndicWhisper + PaddleOCR Python sidecars for local transcription and photo-OCR
- Open-Meteo weather (no key)
- IndiaMART + Justdial direct integrations
- Photo captures auto-OCR; voice auto-transcribed
Design system Q3 2026
- Linear-grade OKLCH design tokens with dark-mode inverted brand
- 5 UI primitives (PageHeader, EmptyState, Pill, KpiTile, DataTable)
- Linear-tight AppShell
- 127-file retroactive polish across the whole console
- 68/68 pages green post-deploy
Procurement + Cash Register Q3 2026
- Cash-purchase GRN flow — ad-hoc vendor mode, no-PO receipts
- Vendor–Part directory (derived from GRN history)
- Stock Entry metadata edit (safe, header-only)
- Owner dashboard (already shipped in Phase 4)
- Cash Register with 11 legal exemption categories, Section 269ST guardrail, vendor threshold advisory
Adoption & documentation Q3 2026
- Test users for every role + demo workflow seed + master data seed + day-one data seed
- Employee model unified under one AppShell (retired the separate /e mobile shell)
- Nickson CRM operations manual v1.0 → v1.6 — this document
- Real vendor / product / operation seed data for immediate usability
Every phase's commits, decisions, and gotchas are logged in the git history. When you need to trace "why is X the way it is", git blame + the commit message is the source of truth.