Index: docs/P3-UseCaseModel/wiki/UseCase0002.md
===================================================================
--- docs/P3-UseCaseModel/wiki/UseCase0002.md	(revision ef1c1c725137d93fa85292f43440214aaddcdf05)
+++ docs/P3-UseCaseModel/wiki/UseCase0002.md	(revision ef1c1c725137d93fa85292f43440214aaddcdf05)
@@ -0,0 +1,35 @@
+= Use-case 0002 — Log in =
+
+'''Initiating actor:''' Visitor
+
+'''Other actors:''' —
+
+A registered user authenticates so the system can treat subsequent actions as a Trader.
+
+== Scenario ==
+
+ 1. Visitor chooses "Login" from the anonymous menu.
+ 2. System prompts for username and password.
+ 3. Visitor enters values.
+ 4. System looks up the user:
+
+{{{
+SELECT id, password_hash
+  FROM project.users
+ WHERE username = $1;
+}}}
+
+ 5. If no row is returned, system responds "Invalid credentials." and scenario ends.
+ 6. If a row is returned, system compares the stored hash against sha256 of the entered password. On mismatch it responds "Invalid credentials." and ends.
+ 7. On match, system records the returned `id` and username in the session and displays the authenticated menu.
+
+=== Alternate flow 4a — authenticated lookup with live balance ===
+
+The system may combine identity lookup with live balance in a single query, for use cases that need both:
+
+{{{
+SELECT id, available_balance, invested_balance
+  FROM project.users
+ WHERE username = $1
+   AND password_hash = encode(digest($2, 'sha256'), 'hex');
+}}}
