F-POS cashier screen with three scanned items, subtotal, tax and total

F-POS

Academic prototype · Partially implemented

October to December 2025Team of 4 · 6 of 56 commits

What it was

F-POS is an academic point-of-sale MVP built in Java with JavaFX by a four-person team. The prototype covers product management, cart creation, tax calculation, simulated cash and card payments, receipts, and basic sales administration.

What I owned

My contribution focused on the Produit, Panier and ElementPanier domain models, their unit tests, the cashier interface, and the administrative product-management interface.

The hard part

One of the main challenges was keeping monetary calculations consistent without any persistent storage. Each cart item keeps a reference to its product while capturing the unit price at the moment it is added, so a quantity can change without altering that cart line's original price. Monetary values use BigDecimal, and taxable and non-taxable products are handled separately.

Application state lives in a MockDB singleton, with controllers going through services and DAOs rather than touching it directly. Screens rebuild their services as the user navigates, so there is no reactive synchronisation between two open screens.

What I would do differently

The project remains an incomplete MVP. A production-oriented version would replace the in-memory database with SQLite, centralise tax configuration, validate stock before accepting payment, and complete the refund, register-session and sales-search workflows.

F-POS product management table, with a Taxable column marking orange juice as non-taxable
The admin table marks orange juice non-taxable, so the cashier screen taxes only $12.93 of the $16.43 subtotal: $1.94 at 14.975%.
F-POS payment screen: amount due of $18.37 with cash and card buttons
Payment carries the $18.37 computed on the cashier screen through to the cash and card paths, which are simulated rather than wired to a terminal.
← All projects