Personal
Pharmacy System — Retail Dispensing and POS
A pharmacy management system for a retail counter: catalogue, suppliers, purchases, per-batch stock, and a point-of-sale screen that dispenses against the right expiry lot.
Stock is tracked per batch and expiry rather than as a single quantity, so the point of sale dispenses the lot that expires first and expiring stock is visible before it has to be written off.

Overview
A layered Domain-Driven Design solution on the ABP Framework (.NET 10) with an Angular 20 front end. Nine modules sit on one domain model, and a StockManager domain service holds the rule everything else depends on: every purchase item increases a batch, every sale item deducts a specific medicine, batch and expiry lot. Access is governed by ABP permissions, and the migrator seeds three working roles — Manager, Pharmacist and Cashier — rather than leaving one admin account to stand in for a real counter.
- Medicine catalogue with generic name, unit, barcode, purchase and sale price, and reorder level
- Suppliers, customers and categories as master data
- Purchases that increase per-batch stock, sales that deduct a specific expiry lot
- Point of sale with FEFO batch selection, cart, discount and an 80 mm thermal receipt
- Per-lot stock on hand, with low-stock and expiring-stock views
- Dashboard: sales and purchase trends, top sellers, stock by category, expiry timeline
- Role-based access — Manager, Pharmacist and Cashier, seeded by the migrator