A multi-domain Enterprise Resource Planning (ERP) platform built for hardware importers and distributors, featuring real-time POS billing, inventory/GRN management, credit control, automated financial ledgering, and role-based access control.
About this Project
Background & Goals
Hardware importers and distributors manage complex, high-volume supply chains featuring multiple Units of Measure (UoM), fluctuating import costs, post-dated supplier cheques, customer credit limits, and fast-paced POS operations. This ERP was designed to replace legacy manual processes with a centralized, modular digital architecture tailored for Sri Lankan hardware distribution workflows (operating natively in LKR with custom tax, discount, and credit management rules).
Key Features & User Flows
POS & Point-of-Sale Billing: Fast barcode scanner interface supporting cash, card, and credit payments, real-time invoice calculation, tax handling, and instant stock deduction.
Import & Goods Received Note (GRN) Management: Seamless bulk Excel importing of overseas shipment invoices, automated landed-cost allocation, margin calculation, and automated stock level increments.
Inventory & UoM Conversion: Real-time stock tracking with unit conversions (e.g., boxes to individual units, meters to rolls), low-stock thresholds, and multi-location adjustments.
Customer Credit & End-Of-Month (EOM) Reminders: Credit limit enforcement on billing, automated email notification dispatch for overdue balances via Artisan scheduled commands, and payment history tracking.
Supplier & Post-Dated Cheque State Machine: Complete payables ledger with state-machine tracking for issued, pending, cleared, and bounced post-dated cheques.
Domain-Driven Architecture: Structured using single-action domain modules (app/Domains/*) separating business logic into dedicated domains (Products, Pos, Import, Inventory, Customers, Finance, Suppliers, Hr, Warranty, Reports, Users, Settings).
Modern Reactive Stack: Leveraging Laravel 13, Livewire 3 / Volt, and Tailwind CSS for SPA-like responsiveness without API overhead.
Strict Monetary Conventions: Formatted all financial fields using decimal(15,2) database columns to avoid floating-point rounding inaccuracies.
Concurrent Worker Pipelines: Configured background queue listeners (php artisan queue:listen) and tailing logs via Pail for asynchronous report rendering and email dispatches.
Challenges Solved
Dynamic Cost-per-Unit Calculations during Import: Resolved landed-cost tracking by distributing freight, customs, and clearing costs proportionally across GRN line items before committing items to active inventory.
High-Concurrency POS Stock Locks: Prevented race conditions and stock overselling during peak cashier operations using atomic database transactions and row locks.
Complex Cheque Lifecycle Management: Engineered a status-driven cheque workflow preventing unauthorized balance updates until post-dated cheques transition to cleared status.