SHUDDHAM MILK

Saksham ERP

v1.4.0
Shuddham Logo

SHUDDHAM

SAKSHAM ERP

v1.4.0 Offline
Dashboard Diversions & Returns
FAVORITES
Star any service to pin it here
Milk Dispatch
New Challan Import Orders Dispatch Register Receipt Entry Shift Close
Product Dispatch
Product Challan Import Product Orders
Milk Collection
MCC Collection PMC Collection Digitize Shift Shift Reviews Sour Milk MPI Staff Farmers Differences Centers (MCC/PMC) Purchase Rates Rate Issues Dock Factors Dock Approvals
Orders
Portal order list Add order Subscriptions Order History Order Export Log
Accounting & Billing
Billing & Invoices Receipts & Ledgers Outstanding / Aging Payment Terms & Due Bank & General Ledger Bank Import Rates & Formulas PMC Ledgers Payment Register Busy Comparison Combined Ledger Pay Register — Test & Debug
Reports
Assets Ledger Current Rates Busy Rates Tanker Capacity Alerts Milk Sales Report Manual Entries Report OCR Audit Report OTP Audit Report Milk Stock Report Attendance
Administration
Master Data User Settings User Rights & Access Login History Activity Log Currently Logged In Users Receiving OCR Audit Test as user Problem Reports
A

Admin

Administrator

Offline Mode (Read-Only) - Changes cannot be saved until connection to server is restored.

Milk Dispatch Module

Monitor daily dispatches, manage serial numbers, and update receivings.

Insights

Ask a question about your dispatches, orders, parties, or rates —
then ask follow-ups like “just the top 5” or “compare to last month”.

Today's Dispatches

0 L

Yesterday's Dispatches

0 L

With Phone / Active Farmers

0 / 0

With Portal Access / Active PMCs

0 / 0

Busy — data reaches

—

Documents — expiring in 30 days

0

Subscriptions — on hold by a block

0

Pachama — Milk Balance

— L

Ashta — Milk Balance

— L

Top 5 debtors

Loading…

Product sales — last 5 days with data

Loading…

Last 2 Shifts — Digitization

Loading…

Receipt Entry

Sequential list of generated dispatch notes. Showing today's challans by default — adjust the dates or click "Show All" to widen the range.

Download detailed receipt report:
0 selected
Note No. Party Name (To) Date Total Qty Status Actions

Dispatch Register

Every milk dispatch challan — party dispatches and stock transfers — newest first. Use the printer button to print or download any challan. (Plant Heads see challans from all plants.)

Note No. Type Party / Destination Origin Plant Date Total Qty Status Print

Milk Dispatch

Create dispatch challans and import consolidated orders for raw/processed milk. Billing is handled in the shared Accounting & Billing module.

New Challan Generate a new milk dispatch note
Import Orders Pre-fill drafts from a consolidated sheet

Milk Challans

0 selected
Note No.Party Name (To)DateTotal QtyStatusPrint

Product Dispatch

Create product dispatch challans for finished milk products (paneer, ghee, etc.) using the product master & SKUs.

Product Challan Generate a new product dispatch note
Import Product Orders Bulk-import orders from Excel as drafts

Recent Product Challans

Note No.Party Name (To)DateItemsTotalStatus

Create Dispatch Challan

Only registered tankers of the selected ownership appear here. Each carries its own number of compartments.
Dispatch Milk and Quality Parameters (At least one milk type is compulsory)

Buffalo Milk (BM)

Cow Milk (CM)

Skimmed Milk (SM)

Mixed Milk (MM)

Compartment — Milk Type Assignment

Assign each compartment's milk type (overrides per-type selection above for PDF display)

Mixed Milk (MM) Dispatched: 0 L

Shift Close — Milk Stock Book

Enter tank-wise physical readings at handover and close the shift. A closed shift is locked — corrections need an admin adjustment.

Pick a location, date, and shift, then click "Load Shift".

Diversions & Returns

Location: —

Acknowledge milk diverted to production with your own final figures — once acknowledged, YOUR figures (not the dairy accountant's entry) are what count.

Loading…

Production Returns

Skim and cream returning to stock re-enter the shift's balance; butter is balancing-only and does not re-enter stock.

Pick a date and shift, then click "Load Shift".

Milk Stock Report

Shift-wise mass-balance for one location: opening, collection, diversions, dispatches, closing, and loss/gain.

Pick a location and date range, then click "Load Report".

New Product Dispatch Challan

Product SKU / Pack Qty (packs) Rate Amount
Total ₹0.00

Product Challans

Generated product dispatch notes, most recent first.

Note No. Party Name (To) Date Items Total Status Actions

Pre-fill Orders from Consolidated Sheet

Choose a standard consolidated Excel file (`.xlsx`, `.xls` or `.csv`). The app will dynamically match columns, filter out non-milk items, extract quantities for BM, CM, and Skim Milk, and queue them for instant challan generation.

Drag & Drop Order Sheet Here

Supported Formats: Excel (.xlsx, .xls), CSV

Analyzing sheet structure and extracting milk orders...

Instructions for Consolidated Sheet Layout:

  • Ensure you have columns with headers containing "BM lit" (Buffalo Milk) and "CM lit" (Cow Milk).
  • Columns containing "Skim Milk" or "SM" will also be captured automatically.
  • Rows with no quantities or non-milk dairy columns (Paneer, Ghee, Dahi) are filtered out to keep your dispatch process simple.

Pending Drafts Queue

Batch imported orders from Excel sheet are queued here as drafts. Use Edit & Finalize to fill quality metrics individually, or tick parties and Finalize Selected to assign serial numbers in one click.

0 selected
Draft ID Party Name Date Milk Quantities Vehicle Actions

Import Product Orders from Excel

Upload a product order sheet (`.xlsx`, `.xls` or `.csv`). The app matches each row against the party master and product master, then queues the recognised rows as product challan drafts — grouped one draft per party. Review and finalize each draft to assign its challan number.

Drag & Drop Product Order Sheet Here

Supported Formats: Excel (.xlsx, .xls), CSV

Analyzing sheet and matching products...

Expected Sheet Layout:

  • One row per order line, with header columns for Party, Product and Qty.
  • Optional columns: SKU / Pack (matched against the product's SKUs) and Rate (blank uses the SKU's base or per-party rate).
  • Rows whose party or product can't be matched to the master are flagged and cannot be selected.

Prefixed Parties List

Manage the master list of client party names. These will be pre-filled inside the form's autocomplete dropdown.

Party Name Hindi Name Alias / Search Print Name Phone Portal Actions
Inactive Party Ledger

Edit Party Master Details

Click the edit icon next to a party in the list above to modify its Hindi translation, English Address, and Hindi Address.

The official name used in your accounting software. Use Rename… to change it — the new name cascades to all existing challans, invoices and rates.
Comma-separated. Dispatch staff can type any of these to find this party.
What gets printed on the challan. Defaults to the accounting name if left blank.
A compact label shown in the Customer Orders grid to save space. Defaults to the full name if left blank. Keep it short but recognisable.
Hindi version printed below the print name on the challan.
For a second staff member ordering on this party's behalf. Either number logs into the order portal as this same party.
The executive who manages this party — they get a phone notification when the party places a portal order.
Milk Type Formula Fixed Ratio
Buffalo Milk
Cow Milk
Skimmed Milk
Mixed Milk

On a challan, once Fat and CLR are entered the SNF is auto-filled from these coefficients (only when SNF is blank — the operator can still type/override it). Leave a row blank for no auto-fill.

Milk Type A (× Fat) B (× CLR) C (const)
Buffalo Milk
Cow Milk
Skimmed Milk
Mixed Milk

Lets this party log into the self-service order page. Login ID = the registered mobile number above (the additional phone, if set, works too — both resolve to this same party); the default password for each number is its own last 4 digits. Orders arrive as drafts for staff to review — they never see the ERP. The party is prompted to change the default password on login (they may skip it). Once logged in, they stay logged in on their device/app indefinitely until they log out themselves or you use Force logout below.

⚠ Add a valid 10-digit Indian mobile number in Contact Mobile Number above and Save Master Details first — that number becomes the party's login ID.

Stop this party from placing new self-service orders — their own portal orders and the orders their subscriptions would generate. Your staff can still enter an order for them at the sales desk, and an order that has already been accepted is never cancelled. You can hand back a few days at a time; the block returns by itself when the days run out. Every block, unblock and lift is recorded with who did it and why.

Group a head-office party with its branch ledgers so a receipt taken at the parent can later be assigned across children, and so you can see a consolidated outstanding. Each child keeps its own separate ledger, challans and invoices — only receipt assignment and the consolidated total are shared. Debit/credit acceptance toggles and receipt assignment stay on the parent's Ledger screen — use the button below to jump there.

Bulk Formula Update

Apply the same SNF auto-fill and/or Kg→Litre conversion formula to many parties at once. Only the milk types you fill in below are written; each party's other milk types are left untouched.

MilkABC
BM
CM
SM
MM
MilkFormulaRatio
BM
CM
SM
MM

Blocked Parties per Milk Type

A blocked party can never be shown or dispatched that milk type — customer app, order matrix, subscriptions and challans alike. There is no override: to make an exception, remove the party here first. Saves as soon as you change it.

Product Master

Milk products sold to parties. Each product has one or more SKUs (pack variants) with a base rate; you can set per-party rate overrides.

Product Category HSN GST % SKUs Actions

Inactive Products

Approved Vehicles Fleet

Manage the database of registered transport vehicles. For milk tankers, specify number of compartments.

Add a vehicle
Vehicle No. Type Compartments Ownership Optimum (kg) Documents Actions
Inactive Vehicles

Drivers Master Registry

Manage the approved list of drivers and their contact phone numbers.

Driver Name Mobile Actions

Plants Master Registry

Manage physical plant dispatch locations, addresses and plant-head contacts. The FSSAI licence — number, expiry and the scanned copy — is recorded per plant through the badge button on each row.

Plant Name Plant ID Address Head Phone Documents Actions

Milk Tank / Silo Master

Tanks/silos per location for the Shift-wise Milk Stock Book. Stock entries reference tanks from this list.

PMC Centers

Primary Milk Collection centers. Each has a unique code and a portal login (the operator's mobile; default password = last 4 digits) for milk.shuddhamdairy.com — digitizing shift summaries and viewing farmer data.

Code PMC Name Operator Mobile Assigned MCC Portal Commission Adv. Scan Documents Actions

Security Guards

Both sign in on the milk portal with their mobile number and an OTP — there is no username and no password. A guard marks rounds at one plant; set a duty window to give them their own checkpoints, or leave it blank to use the plant's checkpoint list above. A supervisor marks nothing — they review rounds across one or more plants on their phone.

Plants this supervisor reviews (tick one or more)
Duty window (optional) — may cross midnight

Attendance Checkpoints

Location and checkpoint times per plant. Security staff mark attendance on the milk portal with a live selfie + surroundings photo; the server judges GPS distance and accuracy against these.

Checkpoint times (24-hour) & grace minutes

Serial Number Settings

Adjust where the sequential dispatch counter will start to ease transition from your physical legacy system.

Stock Transfer Numbering

Invoice & Proforma Prefixes

to
Any PI/Invoice line whose computed per-unit rate falls outside this band is blocked and flagged for manual review instead of being generated — catches a rate/quantity computation gone wrong (e.g. a decimal-shift digitization bug) before it reaches a party's ledger.

Customer Order Portal

Parties that order milk in full cans must order multiples of this. Parties with "Allow partial milk" can order any litres.
Parties can place morning-shift orders until this time (IST).
Afternoon-shift orders accepted until this time (IST).
After both cut-offs pass, new orders default to the next day's morning shift.
Unchecked milk types are hidden from the customer order app and cannot be ordered. (Staff can still dispatch them normally.)

Msg91 SMS Gateway Settings

Configure parameters for the Msg91 SMS integration used for high-volume dispatch notifications and stock transfer receipt confirmation alerts.

Which alerts use this template

Both are off by default. Switching either off stops that SMS only — OTP login is unaffected.

OTP Login (order + milk portals)

When enabled, everyone who logs in by mobile number (customers, PMC operators, MPIs, farmers) gets an SMS OTP instead of a password. Needs a DLT-approved OTP template on MSG91 whose variable is ##otp##. Logins stay active until logged out; each account can be signed in on 2 devices — a 3rd login signs out the oldest.

Send Test SMS Message

Google Maps API Key

Powers the attendance map replay (Reports → Attendance) and the field supervisor's day map. Create a key in the GCP Console → APIs & Services → Credentials, enable the Maps JavaScript API, and restrict it to HTTP referrers app.shuddhamdairy.com/* and milk.shuddhamdairy.com/*. Leave blank to keep those maps off — everything else on both screens keeps working.

User Accounts

Add multiple operator profiles with unique passwords to securely track action history user-wise.

Database Portability

Download a restorable SQL backup of the live database (gzipped pg_dump; shift-summary photos are left out — large, and already covered by disk snapshots). Keep regular copies so challan counters, operator profiles, and logs are never lost.

Telegram Access

Pull read-only reports (outstanding, ledger, trial balance, and natural-language queries) from the Telegram bot. Generate a one-time code, then open the bot and send /link CODE.

The Telegram bot is not configured on this server.

Linked Accounts

MCC Email Import

Automatically imports the daily MCC dock-report Excel attachments instead of a manual upload. Strict validation — anything ambiguous or unrecognized is rejected, never guessed, and shows up in the activity log as such.

OCR Shadow Pilot

A logging-only, 7-day trial that runs parallel flag-detection methods on live shift-summary uploads and records how they compare — operators see nothing change, and nothing saved to any record is affected. Auto-stops on the end date; a daily line appears in the Sentinel digest, with midpoint and final reports on Telegram.


          

Sentinel — AI Watchdog SHADOW MODE — rule alerts held (reports still send)

A resident agent that watches data entry against rules and records findings below. It is read-only on ERP data — it can never change any record. With Shadow mode OFF, new findings are messaged to linked admin Telegram accounts (critical ones even during quiet hours), with 👍/👎/snooze buttons right in the chat.
Shadow mode holds RULE ALERTS only. The scheduled reports below (daily digest, GCP cost, VM health, backup health, the 16:00 receipts report and the 15:00 Busy chase) each follow their own switch and are sent whether Shadow mode is on or off. To silence one noisy rule without silencing anything else, use its Mute messages box under Watch Rules — a muted rule keeps running and keeps recording findings here; only the Telegram message stops. Agent ON is the one switch that stops everything.

Sentinel needs the PostgreSQL insights database — it is idle on this server.

Findings

Watch Rules

Daily digest sections

Unticked sections are still measured and recorded — only the 07:00 message stops. When every ticked section has nothing to report, no message is sent at all.

GCP Cost Digest

VM Health Digest

CPU, memory and disk usage on this server — read directly off the OS, no setup required.

🧮 Digests are deterministic — computed numbers only, no AI narration and no AI cost. New sections are code changes.

Android app (TWA) asset links

Served, without any login, at https://milk.shuddhamdairy.com/.well-known/assetlinks.json — and on the milk host only. Chrome fetches it when the Android app starts: if the app's signing fingerprint is not listed here the app still opens, but with the browser address bar showing. Add one row per signing key (a sideloaded build and a Play build have different keys); rows sharing a package name are merged into one statement carrying both fingerprints.

From keytool -list -v -keystore <your.keystore> (the SHA256 line), or from the Play Console under Setup → App integrity → App signing. 32 pairs, uppercase.

What the endpoint serves right now


            

Audit Activity Logs

Securely tracks all operational activities user-wise, including logins, modifications, challan generations, and settings updates.

Login History Report

Successful and failed sign-in attempts captured per user, with the originating IP address and device. Use this to spot logins from unexpected locations.

Date & Time User Role Status IP Address Device / Browser
Click "Run Report" to load login history.

Currently Logged In Users

Live sessions active right now — one row per signed-in device, with login time, originating IP and browser. Sessions clear on logout or server restart.

User Role Logged In At IP Address Device / Browser
Click "Refresh" to load active sessions.

Test as user

Open a milk or order portal account exactly as that user sees it. The user's phone is never touched — no OTP is requested and no SMS is sent. You confirm with your own PIN on the portal, and every write you make while testing is recorded against your name.

You have not set your impersonation PIN yet. Set it below before starting a test session.
AccountDetailsAction
Pick a surface and search.
Test link ready —

Opens in a new tab. You will be asked for your PIN to activate. The link is single-use and expires in .

Open the portal

Live test sessions

AdminAccountSurfaceStartedEndsWrites
None.

Audit trail — append-only; these records cannot be edited or deleted from the app

WhenEventAdminAccountDetail
Loading…

Your impersonation PIN

This PIN is yours alone — it activates a test session and is accepted nowhere else in the system. It will never log anyone in on a public login page. You cannot see or set another admin's PIN.

Attendance

Checkpoint attendance for security staff. Each check is two live photographs taken in-app plus a GPS reading; the server computed the distance and judged it against this plant's geofence. Refused attempts are recorded too and shown on the cell they were aimed at.

Map Replay

Replays a guard's (or a plant's) attendance checks in the order they happened. Rejected attempts plot too — they are often the ones worth looking at. Click any marker for that check's full detail.

Leave requests

An approved day is excluded from that guard's compliance denominator — it counts as neither present nor missed. Decisions are recorded permanently against the request.

Compliance report

One row per attendance day. For a duty that crosses midnight the whole night reports under the date it started. Click a row to see every checkpoint of that day and what happened to it.

Problem Reports

Bug reports, error reports and feature requests sent from the staff desk, the milk field portal and the customer order portal. Voice notes play inline; the diagnostic bundle downloads as JSON and can be handed straight to a Claude Code session.

Auto-transcribe voice notes Transcribes each voice note server-side so it can be read and searched. The audio always stays the authoritative record — a transcript is a convenience, never evidence. Roughly ₹0.37 per 2-minute note.

Loading…

Receiving OCR Audit

Every challan received via the photo-first OCR-assisted entry flow: what the camera read off the slip vs. what the operator actually typed, for each audited field. The entered value is shown; a flagged field also shows the OCR reading in red next to it.

Date Challan # Party Product Qty Fat CLR SNF Flags
Click "Run Report" to load.

Manual Entries Report

Milk-collection entries in two categories: Hand-keyed — no photo/OCR evidence trail at all, either a whole shift keyed in with no photo, or extra rows hand-added into an otherwise photographed shift (tracked reliably from 5 Jul 2026 on; earlier entries are excluded and shown as a count, not guessed) — and DPU manual (*) — a row on the photographed shift-summary the printer itself marked with an asterisk, meaning the PMC operator rejected the milk-analyzer's automatic reading and keyed FAT/SNF in by hand at the machine (tracked since digitization launched, 29 Jun 2026). Occasional DPU-manual use is legitimate (analyzer faults); the point of this report is to surface PATTERNS of overuse, not single rows.

DPU Manual (*) — by PMC

Every PMC with at least one digitized (photographed) row in the filtered period — sort by % or count to surface chronic overusers, not just today's biggest number.

PMC / Operator DPU manual (*) rows Total digitized rows % manual
DateShiftPMCFarmerMPI MilkQty (L)FatSNFAmount Entry pathEntered byEntered at
Click "Run Report" to load.

OCR Audit Report

Every Nth saved shift summary is silently re-read in the background with a second model (Gemini Flash); a disagreement escalates all photos to Gemini Pro as arbiter and alerts admins on Telegram. Detection only — saved collection data is never changed. Use the match rate below to decide whether to sample more (lower N) or less (raise N) often. The report starts from the day this feature shipped — there is no backfill.

Sampling rate (admin only)
Audit every th saved summary
Date / ShiftPMCUploaded by VerdictDisagreementsPro sided with Models runAlertReviewedBundle
Click "Run Report" to load.

OTP Audit Report

Every OTP request and verify attempt, across the Order and Milk portals — measurement only, this never changes OTP or login behavior. Use it to see SMS cost drivers (per-user counts, repeat requests) and whether MSG91 accepted or rejected each send.

Click "Run Report" to load.

Current Rates

Active rates per party. Rows (parties) and columns (milk type / product) are ordered by sale value over the 30 days ending on the chosen date — biggest first. Pick a past date to see the rates that were active then.

Milk Rates

Product Rates

Tanker Capacity Alerts

Milk-tanker dispatches where one or more compartments were filled beyond ±80 kg of the optimum capacity recorded for that tanker at the time of dispatch. Each row is one off-optimum compartment.

Milk Sales Report

Party-wise milk billed for the selected period — quantity, quality-weighted FAT/SNF, blended rate, and total amount. Based on billed challans (final invoice, else Proforma) within the date range; challans not yet billed aren't included.

Party Qty Amount (Rs)
Click "Run Report" to load.

Busy Rates

What we actually charged each party for each milk product, read out of the Busy invoice lines. Each cell is the rate on the most recent date that party bought that item; the column header carries the min / median / max across every party, so a cell reads against its own column.

Loading…

Product Sales

Everything sold, item by item, from the Busy voucher store. Saksham does not record these sales yet, so Busy is the only source. Sale returns net off.

Click “Run Report” to load.

Type quantities directly into the grid to add or edit an order — changes save when you leave the box. Milk columns: BM Buffalo · CM Cow · SM Skimmed · MM Mixed.

Loading orders…
Phone notifications
Usual items
This shift's orders
Loading…
Pick a range and press Show.
Downloaded at (IST)UserRoleKindWhat was exportedFormatRows
Loading…

Recurring delivery plans for parties. Active subscriptions auto-create the daily order into the Customer Orders queue (also runs on a timer). Customers can manage these from their portal.

PartyScheduleShiftItemsStatusNext deliveryActions
Loading…

New subscription

MCC Collection — Dock Sample Report

Upload one or more chilling-center dock-wise sample reports — they may be from different MCCs, dates and shifts. The MCC, date and shift are read from each report. Review the queue and remove any you don't want, then import them all together (up to 62 files at once).

Recorded MCC Collections

What each chilling center received, summarised per shift. Pick All plants (combined) to see every center together, or click a shift for the PMC-wise detail.

PMC Collection — Collection Summary

Upload the PMC collection summary export (may contain many dates / both shifts). The system auto-creates or updates each PMC found and tags it to the detected MCC — you'll see how many PMCs will be added vs updated before saving.

Recorded PMC Collections

What each primary center reported, summarised per shift. Pick All plants (combined) to see every center together, or click a shift for the PMC-wise detail.

Sour Milk — New Dock Entry

Milk found sour or adulterated at the dock is recorded here — the legacy dock software does not capture it. It stays out of the main collection figures. The PMC operator sees the quantity and milk type (and, if returned, that it was returned) — never the grade or end use.

Import Past Data (Excel)

Columns expected: Date, PMC Code, PMC Name, Quantity (L), Milk, Grade, Use. Milk accepts Cow/Buffalo (or C/B, case-insensitive) and is required on every row — anything else is a per-row error, never guessed. PMCs are matched by code first, then by exact name. Download the sample to see the expected format.

Recorded Sour Milk

MPI Staff

MPIs (Milk Procurement In-charges) are organisation field staff. An MPI logs into the milk portal with their mobile number (default password: last 4 digits) and can work as any PMC currently allotted to them — upload, farmers, dock, reports, account. Attendance, leave and salary come in a later HR release.

Allot PMCs

Pick an MPI, then tick the PMCs that should be with them. Ticking a PMC that is with another MPI reassigns it; unticking one of this MPI's PMCs leaves it unallotted. Records are date-ranged as before — nothing is rewritten for untouched PMCs, so the full history stays for incentive calculations.

Tip: press Enter to tick when one PMC matches · Esc clears the search.

Allot Rate Cards

Pick an MPI or Sr MPI, then tick the purchase rate cards they may apply from the MPI portal (only on PMCs in their scope). Unticking revokes a card from today — rates they already applied stay untouched. A card allotted to a Sr MPI does not pass down to the MPIs under them; allot it to each MPI separately. Records are date-ranged, so past holdings stay answerable.

Allotment History

Reporting Changes

Every change to who an MPI reports to, newest first — kept permanently because incentive calculations depend on this history.

Farmers

Correct a farmer's phone number, delete a wrongly-created farmer (only once they have zero collection/payment records), or shift a farmer's purchase records to the correct farmer — e.g. when a shift-summary OCR misread a farmer code. Every change here is permanently logged: who, when, and what changed.

Select a PMC to load its farmers.

Farmer

Created —

The farmer logs in to their own portal with this mobile number + an SMS OTP — there is no password or PIN to manage.

No edit limit here (office/admin) — the PMC operator/MPI portal caps their own edits at 3 and does not reset when you edit here.

Deleting a farmer does not reserve their code — if this PMC ever assigns code to a genuinely new/different farmer, future digitized shifts will attach to this same record (invisible in farmer lists once deleted). If that happens: Reactivate + rename this record if the new collections really are a new farmer who should keep this identity, or use Shift Purchases with this farmer as the source if they actually belong to some other existing farmer. A watchdog alert flags this automatically.

OCR digitization safeguards

New farmer codes OCR encountered during digitization (approved as a new farmer, or corrected as a misread of an existing code — a retaken photo never reaches this list), and every case where a re-read name disagreed with the name already on file (the stored name is never overwritten by OCR).

New-code decisions
Pick a range and click Load.
Name mismatches
Pick a range and click Load.

Collection vs Receipt Differences

Compares each PMC's reported collection against what the MCC received — one row per PMC per shift, sorted by PMC code, split into cow, buffalo and combined. Toggle between this page's own calculation and the one the MPI/operator reads on the milk portal; the rows are the same either way. Use Show calculation on a row to trace every figure back to the PMC sheet and the dock report.

Milk Chilling Centers (MCC)

Chilling centers are your plants — the same locations used for milk & product dispatch. Add or edit them under Masters → Plants; every plant is automatically an MCC here.

PMC Centers

PMCs are created automatically from uploads. Reassign a PMC to a different MCC or disable it here.

Data Issues — implausible shift dates

Digitized shifts dated more than 60 days in the past, or dated in the future — usually an OCR misread of the printed date, not a real transaction. Review each row against its farmer-row count before deleting; this is a genuine, irreversible hard-delete. Admin/DB-admin only.

Digitize a shift summary

Upload the photos of a PMC shift-summary printout, one at a time. Photograph the top first — the center, date and shift are read from it — then add each following section one photo at a time, ending with a clear photo of the totals block at the bottom. Check the readings, review the rows, then save. Not tied to any one PMC, so you can digitize any center's sheet here.

CodeTypeFatSNFQty (L)RateAmountM

Confirm & Save

Shift review queue

Shifts a PMC operator couldn't import (out-of-range FAT/SNF, hand-added rows, totals mismatch) and escalated. Open one to see the photos and the grid as the operator left it — you can correct any cell, then approve (imports it) or reject with a note the operator sees.

CodeTypeFatSNFQty (L)RateAmountM

Upload a rate card

Upload a fat×SNF rate file (.xlsx). Pick the milk type and give it a short name you'll recognise later (e.g. 324 for cow, 860 for buffalo). Cow milk is fat 2.2–5.3; buffalo is 5.4–15.

Apply a rate to PMCs

Choose a saved rate card, the date it becomes applicable (leave the end date blank for open-ended), and the PMCs it applies to. Cow and buffalo are applied separately, so each can change on its own date.

Select all · Clear

Saved rate cards

NameMilkFat rangeSNF rangeCellsUploadedStatusActions

List only — nothing is deleted here. Removing rows changes rate history, so any cleanup needs a manual decision per row.

Stale-rate issues

Shifts where the printed rates look like an older rate card than the one currently applied. Approve re-rates the shift to the current card (amount = rate × litres) and notifies the operator & farmers. Dismiss leaves the data untouched.

PMCDateShiftCurrentLooks likeRows₹ impactActions

PMC dock factors

Additive cow/buffalo FAT/SNF corrections applied to the dock reading before the MPI-visible comparison, per PMC — persists until changed. Steps of 0.05, range −1.0 to +1.0. Composes with the per-shift factor set from the Dock Approvals screen. Unrelated to the Milk Stock Book's shift-closing-sheet Cow/Buff Fat/SNF Adj.

PMCCow FatCow SNFBuff FatBuff SNF
Loading…

Dock factor approvals

Needs approval — the default — is every shift with at least one PMC still undecided, whether none have been approved yet or only some have. It is the same test the daily digest counts with, so this list and that number never disagree. One item per plant+shift dock upload, but each PMC is approved individually. A PMC becomes approvable once its shift summary is digitized — until then there is nothing to compare against and it stays in "awaiting digitization". Approving a PMC releases that PMC's comparison to its MPI and freezes its factors; the rest of the shift is unaffected.

StatePMCTypeSuppliedDock (raw) PMC FatPMC SNFBuff FatBuff SNF AdjustedΔ Fat/SNFSuggested ₹

Invoice Registry & Billing Panel

Filter dispatches, generate Proforma Invoices based on dispatch specs, correct receiving data, or finalize Tax Invoices.

0 selected
Download:
Challan No. Date Party Name Total Qty Amount Receipt Status Actions

Update Party Rates

Select a party to view its active rates and add a new rate per milk type — applicable from a chosen date, with an optional end date. The party's full rate history appears below, where you can update or delete any individual rate. Each rate is per Litre or Kg and is specific to its milk type and date range.

This Party's Rates (history)

FAT x SNF Pricing Matrices

Upload Excel-compatible CSV rate grids containing FAT (rows) and SNF (columns) pricing intersections.

Follow the matrix format: Row headers represent FAT values, and column headers represent SNF values.

Download Sample Matrix CSV

Uploaded Rate Grids

PMC Ledger — Milk Payable

What the MCC owes each PMC. Milk received (field-collected farmer total) plus the PMC's commission builds up the payable; payments to the PMC draw it down. Milk values come straight from the digitized shift summaries.

Record Payment to PMC

Pays the PMC selected above. The payment reduces the PMC's running payable.

All PMC Payables

Every PMC's balance from the same engine as the Trial Balance's PMC Payables (Control) line — the total here always ties to that control account.

Loading…

Select a PMC to view its milk-payable ledger.

Dock Verification & Shortfall Penalties

Field-supplied (portal) vs received at the MCC dock, per shift. Where the dock is short, a penalty is suggested from the rule — review and approve (or adjust) to deduct it from the PMC.

Select a PMC above.

Payment Register — Test & Debug

Run the real Payment Register pipeline against any PMC and cycle without touching what operators and MPIs see. A test run is computed by the same code an operator hits — same OCR, same photo stitching, same header and completeness gates, same reconciliation — but no register and no reconciliation run are written, so nothing appears on the Payment Register screen, the operator portal, or the office notification bell.

Every run below — real operator uploads and admin tests alike — can be downloaded as a self-contained debug bundle.

Test upload TEST ONLY — never visible to operators

Pick several pages at once, or add them one by one.

Test result

Run history

Every commit attempt since v2.150.0 — successes and failures, operator uploads and admin tests. A blocked attempt used to leave no trace at all; each row now carries its outcome and reason codes.

Payment Register Reconciliation

The DPU's own end-of-cycle PAYMENT REGISTER receipt (uploaded by the PMC operator), reconciled against Saksham's digitized shift data for the same PMC and cycle — to catch a payment posted to the wrong farmer when OCR misread a code. Read-only; corrections stay manual accountant work.

Uploaded Registers

Loading…

Record Payment / Credit Note

Party Ledger

Import Legacy Challans

Bulk-import a historical milk-sale register (Excel). Multi-line challans (BM/CM/SM rows) are grouped by Invoice No. + Date + Party and summed; serials are namespaced LEG/<FY>/<no> so they never touch the live counter. Pick a sheet, resolve any unmatched parties, then Dry-run to verify totals before importing.

Import Opening Balances

Bulk-load party opening balances from a Busy Group Opening Balances export (CSV). Sign = Debit − Credit (a credit balance becomes negative). Each name is matched to your party master; unmatched rows are skipped & listed (nothing is created), and matched parties have any existing opening balance overwritten. Dry-run first to verify before applying.

Import Bank Receipts

Post customer payments into party ledgers from a Busy Account Ledger export (one bank account's CSV). Only Receipt (Rcpt) rows are read — contra transfers and outgoing payments are ignored. Each receipt is matched to your party master by name/alias; unmatched rows are skipped & listed (nothing is created). Receipts post as mode Bank with the Busy voucher no as reference. Dedup is by bank account + voucher no, so re-running the same statement never double-posts. Dry-run first.

Import Busy Opening Balances (chart of accounts)

Load opening balances from a Busy Opening Trial Balance export (CSV). Re-runnable: import it again after every audit revision. Sign = Debit − Credit. Group subtotal rows are detected and skipped, and the file's own Total line is used as a checksum — if the kept rows don't tie to it, the import stops. An account linked to a party or a PMC mirrors its balance onto that record and does not post its own (posting both would count the same money twice in the trial balance). Accounts absent from the file are never zeroed; a row that looks like an existing account is listed, never auto-created. Dry-run first.

PMC links for Busy accounts

Two separate jobs on the three per-PMC account groups. Link fills in accounts imported before their PMC existed in Saksham — the chart import derived every link against the centres that existed that day, and left no record of the ones it could not resolve. Unlink mismatched clears links pointing at the wrong village: PMC numbers are recycled when a centre retires, Busy marks the retired one with an x/xx prefix, and that marker is missing from Security Deposit accounts — so a clean code can resolve to whoever holds the number today. No money moves on either job: opening balances are untouched, and the figures only move on the next Opening Balances import above. Nothing is written until you press a button — the dry run runs first and shows exactly what would happen.

Busy voucher store (legacy book)

Load one Busy voucher export (.ZIP or bare .DAT) per calendar month. Re-importing is normal — Busy keeps revising a month after it ends (July grew 5,149 → 5,948 vouchers under the same filename on 3 Aug), so run it again whenever a fresh export arrives. A re-import replaces the whole calendar month: vouchers Busy no longer has are marked superseded, never deleted, so a renumbering stays explainable. If the new file's data ends earlier than what is already stored, the import stops and asks rather than quietly dropping the difference. Nothing here posts to the trial balance. An account name the reviewed map does not cover halts the whole run and is named — it is never skipped. When that happens — a new customer or a new collection centre added in Busy — you can decide it right there on the halt and import again without re-picking the file. New accounts open at ₹0; no Saksham party and no PMC centre is ever created for you.

Busy comparison

Busy is the book of record until 31 March 2027; both systems run in parallel until then. This is where a ledger is decided one counterparty at a time — Busy's figure, Saksham's, and the difference. Most of Busy has no Saksham counterpart yet, and that is expected, not an error rate: Saksham does not hold most of what Busy does. Nothing here posts, and setting a cutover date moves no money — it changes only which book this screen expects to be right.

Combined ledger

One ledger — a party, a PMC or a plain GL account — with Busy on one side and Saksham on the other. Set a cutover date and the two splice into a single running statement: Busy's entries up to the day before it, Saksham's from it onward. Nothing here posts. Setting a cutover moves no money — it changes only which book this screen treats as authoritative.

Bank Import

Upload the bank's own statement and match every transaction to a ledger. Rows you don't match stay in Suspense (so the bank ledger still ties to the bank's closing balance) and wait in the queue. Each choice is remembered, so the next statement fills itself in.

Kotak — CSV and PDF e-statements are both supported; a scanned/photographed PDF (no text layer) will be rejected with a clear message to upload the CSV instead.
Axis — the “Smart Statement Report” .xlsx export only. It carries both sides of every transfer, which the PDF does not, so the PDF is deliberately not accepted. The file is read by the server, never in this browser.

Everything still waiting to be matched, across all statements. These are already posted to the Suspense ledger, so nothing is lost — they just need an account.

What the system has learned. A mapping is keyed on the counterparty extracted from the description (never the whole line, which carries a per-transaction reference), plus the direction. Deactivating one stops it auto-filling future imports; nothing already posted changes.

Does each bank ledger's closing balance equal what the bank's own statement says? This is the one check that catches a transfer between two of our own accounts being posted twice — a double like that moves the bank ledger and Suspense by equal and opposite amounts, so the trial balance stays exactly level and never reports it.
A bare difference would be useless: receipts and PMC payments post to a bank ledger too, and legitimately make it differ from the statement by crores. So every ledger is broken down by source and the number that must be zero is the residual — what is left once the statement, the receipts and the PMC payments are taken out. Anything there is a row from another bank's statement posted into this ledger that is not a suppressed contra mirror.

The per-leg detail behind every bulk payment debit on the statement — who each batch actually paid, how much, and whether it went through. Uploaded from the Axis Transaction Analysis Report (same Upload tab as a statement; the server tells the two documents apart by their content). Each tranche's tie against the statement's debit is stated as a pass/fail — the debit includes the failed and rejected legs, because the bank takes the whole tranche up front and returns the failures later. Nothing on this tab posts to any ledger.

One row per distinct bank account we have paid, built from the payment legs on the tab beside this one — the only place in Saksham that holds a beneficiary's account number at all. Say who each account belongs to; the numbers are already stored, so you never type one. An account is identified here by its last 4 and its character count, because the last 4 alone is not unique — 433 accounts share only 418 last-4 endings. Nothing on this tab posts to any ledger, and no beneficiary code is ever generated (whether that field is ours to write is still an open question with Axis).

Outstanding & Aging

Net amount owed by each party, bucketed by age (oldest first). Open a party's ledger to see the line-by-line breakdown.

Payment Terms & Due

Every account that owes money, read through that party’s own payment terms. Set terms on a party in Master Data → Party Master; an account with no terms, or with no Saksham party at all, is still listed here with its balance and its age — it just gets no due date.

Container Stock by Party

Returnable containers held by a party. Milk-can movements come automatically from finalized challans (cans dispatched) and receipts (empty cans returned). Outstanding = opening balance + dispatched − returned.

Outstanding Overview

Container Types

Manage the kinds of returnable containers you track. New types start with no automatic movements — record their dispatches/returns manually from a party's stock statement.

Bank & General Ledger

Bank, cash and other ledger accounts, their running statements, and a trial balance. Receipts you record post here automatically (Dr Bank / Cr Party); sales post Dr Party / Cr Sales. Parties' own ledgers stay under Receipts & Ledgers.

Add account

User Rights & Access

See who has which rights and grant or revoke them per user: editing locks, audit-log visibility, draft deletion, back-date limits, and which parts of the system each account can reach (Milk Dispatch, Product Dispatch, Accounting & Billing, Receipt Entry, Reports). Admin and Database Admin only.

Username User Role Rate & Formula Editing Receipt Parameters Editing Can Grant Executive Rights Can View Edit Logs Can Delete Drafts Milk Dispatch Product Dispatch Accounting & Billing Receipt Entry Reports Milk Collection Back-date Limit (days)

Dispatch Note Print & Download Preview

Consolidated Morning Orders Stack

The following milk orders were extracted from your sheet. Check the recognized parties you wish to import, then click Import Selected as Drafts.

0 Selected

Notifications

Send Notification

Shown to customers who've set their order-portal language to Hindi. Leave blank to send them the English text instead.
Leave unchecked for a normal notification (marked read on open).

Sent Notifications & Read Receipts

Order Reminders

Global schedule

Evening before, about tomorrow's morning shift
Same day, about today's afternoon shift
If the server was down past this, the slot is recorded MISSED instead of firing late.

Today's digest

Loading…

Per-party overrides

Loading…

Import Product Orders

These order lines were extracted and matched against your masters. Check the recognised rows to import, then click Import Selected as Drafts. Selected rows are grouped one draft per party.

0 Selected

Add Product

SKUs / Pack Variants

Per-Party Rate Overrides (optional)

Blocked Parties

These parties can never be shown or dispatched this product — every SKU under it. Applies to the customer app, the order matrix, subscriptions and both challan types. There is no override.

Select Order Tab / Shift

This spreadsheet contains multiple tabs. Please select the shift or sheet you wish to import orders from:

Modify Challan Details (Admin Authorization Required)

Edit Milk Quantities & Quality Metrics

Buffalo Milk (BM)

Cow Milk (CM)

Skimmed Milk (SM)

Mixed Milk (MM)

Invoice / Proforma Builder Wizard

Matrix Parameter Interpolation Required

The Quality parameters (FAT: 4.25%, SNF: 8.53%) do not land on exact matrix steps. Select resolution method below:

Invoice Item Details & Rate Computations

Milk Type Billable Qty FAT % SNF% / CLR Calculation Rule Calculated Rate Subtotal (Rs)
Subtotal: Rs 0.00
Tax / GST (%):
Tax Amount: Rs 0.00
Round Off: 0.00
Grand Total: Rs 0.00

Digitize Buyer Material Receiving

Enter Quantity & Quality Parameters as per signed Receipt copy

Buffalo Milk (BM) Dispatched: 0 L

Cow Milk (CM) Dispatched: 0 L

Skimmed Milk (SM) Dispatched: 0 L

Mixed Milk (MM) Dispatched: 0 L

No photos attached. You can add up to 5 proof photographs.

Add Receiving Proof Photo

Photograph the signed physical receiving slip. We'll read the Party, Product, Quantity, Challan Number, FAT, CLR and SNF from it for our records — please still enter these values yourself on the next screen; we'll compare the two afterward.

No photos attached yet. You can add up to 5.
A photo is required for this party.

Record Rejection / Return

The actual link to the new delivery is made when that dispatch challan is created, via "Linked to Return/Rejection #" on the New Challan form.
This does not adjust billing/invoicing for this challan — that's handled separately.

Link Redispatch Challan

Find the challan that already carried this redispatch — created independently, before it was linked to this rejection.

Compliance Documents

Documents Expiring Soon

Edit Vehicle

Changing these does not affect dispatches already created — each dispatch keeps the optimum recorded at the time it was made.

Edit Driver

Change Password

Edit History

Complete change trail for this record — who did what, when, and the exact before → after of each edit.

Related Challans

Internal-only rejection/return/redispatch trail — never shown on the printed challan.

Attendance check

Ledger Entry

Edit Receipt

Receipt ·

Edit Credit Note

Credit Note ·

Shift Purchases

—
Working…

Uses the exact production lookup (same 0.1-grid rounding, band checks and out-of-range errors as digitization & review).

Edit account

The account number is how an imported statement finds this ledger. Two ledgers may not share one.

Apply shift factors forward

Report a problem

0:00

Report