GasMitra
Gas Agency Operations System
Cylinder logistics, empty returns, billing and outstanding for a gas distribution agency.
- TYPE
- GAS AGENCY ERP
- STATUS
- LIVE
- YEAR
- 2026
- ROLE
- System design, full-stack implementation
- PLATFORM
- Flutter (Android + Web), Node.js API
- STACK
- Flutter · Node.js · MySQL · REST
PROBLEM
A gas agency does not sell a product, it circulates an asset. Every full cylinder that goes out is expected to come back empty, and the gap between what went out, what came back and what was paid for is the entire business.
Run on registers this fails in a specific way: deliveries get recorded but empties are never reconciled, customer deposits drift out of sync, and outstanding balances are believed rather than known.
SYSTEM
GasMitra tracks cylinders as a two-way movement. An order produces a delivery, the delivery expects an empty return, and the return, the bill and the payment together settle the customer position.
Each stage posts its own consequence — stock movement, customer outstanding, deposit liability and the accounting entry — so the register, the ledger and the physical yard agree with each other.
CORE FLOW
How the operation moves through the system.
- Domestic or commercial connection with deposit, quota and rate class
- Booked by phone, counter or route plan, then queued to a delivery round
- Full cylinder issued against the order; stock and route load updated
- Empty received back and reconciled; a shortfall becomes a tracked liability
- Rate class applied, taxes computed, document numbered and printed
- Cash, transfer or credit; partial receipts allocated against bills
- Sale, tax, stock and receipt posted as one balanced transaction
- Cylinder position, route performance, ageing outstanding, tax summary
Business flow running from customer to order, cylinder delivery, empty return, bill, payment, accounting and finally reporting.
KEY MODULES
- M01Customer master
- Connection details, deposit held, rate class and delivery address.
- M02Order booking
- Counter, phone and route-based booking with duplicate detection.
- M03Delivery & route
- Round-wise load out, delivery confirmation and returns against the round.
- M04Cylinder ledger
- Full, empty, defective and with-customer positions reconciled daily.
- M05Billing
- Rate class, tax and document series, with reprintable historical bills.
- M06Receipts
- Partial and bulk receipts allocated against outstanding invoices.
- M07Reports
- Cylinder position, ageing outstanding, route summary and tax register.
ARCHITECTURE
- Client
- Flutter app for counter and delivery staff; web for office and reporting.
- API
- Node.js REST; each posting is one transaction across stock, ledger and accounts.
- Data
- MySQL with a movement table as the single source of cylinder truth.
- Accounting
- Posts into the shared accounting engine rather than a private ledger.
ENGINEERING
The parts that were not obvious, and what the system does about them.
- 01 / 03
Cylinders are a balance, not a stock figure
A single quantity column cannot express full in godown, empty in godown, full with customer and defective. Modelling every movement as a typed transfer between positions is what makes the daily cylinder reconciliation actually close.
- 02 / 03
Deposits are a liability, not income
Connection deposits look like received cash and are frequently accounted as revenue. They are posted as a liability against the customer, so a refund on surrender is a settlement rather than a loss.
- 03 / 03
Partial payment allocation
Customers pay round numbers against several bills. Receipts allocate oldest-first by default but stay manually re-allocatable, and the ageing report reads the allocation rather than a running balance.
SCREENS
- SCREEN_01Delivery round — load out and returns
- SCREEN_02Billing — rate class and tax
- SCREEN_03Cylinder position report
RESULT
The agency closes its cylinder position daily and knows its real outstanding, per customer and per route.
Deposits, empties and credit stop being three separate sources of disagreement.