# Harbor Mutual Bank — Product Requirements (v5.0)

Harbor Mutual Online Banking lets retail customers register, sign in and manage their accounts: see balances and activity, open accounts, move money between their own accounts, pay bills, search transactions, request loans and keep contact details current.

**Problem.** Customers need to self-serve everyday banking without visiting a branch, and must be able to trust that every figure on screen reconciles to the cent.

## Users
- **Retail customer** — Check balances, move money and pay bills quickly, with clear confirmation of what happened.
- **New customer** — Open an online profile and a funded first account in one step.
- **Support agent** — Point customers to self-service recovery when they forget their login.

## Goals
- Every money movement records a matching debit and credit; no money is created or lost.
- Totals always equal the sum of the parts they summarise.
- Invalid input is rejected per field, before any money moves.

## Registration (REG)

Self-service sign-up that creates the profile and a first checking account.

- **FR-REG-01** (Must) The registration form requires every field and reports each missing one separately.
  - Submitting an empty form shows "<Field> is required." for each of the 11 fields
  - Values already entered are kept when the form is shown again
- **FR-REG-02** (Must) Password and Confirm must match.
  - A mismatch shows "Passwords did not match." and no profile is created
- **FR-REG-03** (Must) Usernames are unique, compared case-insensitively.
  - An existing username in any letter case shows "This username already exists."
- **FR-REG-04** (Must) A successful registration signs the customer in and opens a checking account with the $515.50 welcome balance.
  - Confirmation "Your account was created successfully. You are now logged in."
  - Accounts Overview lists exactly one account with Balance, Available and Total $515.50

## Sign-in and login recovery (LOG)

Customer login, logout and lookup of forgotten credentials.

- **FR-LOG-01** (Must) Failed sign-ins show a distinct error for missing input and for unknown credentials.
  - Empty fields: "Please enter a username and password."
  - Wrong credentials: "The username and password could not be verified."
- **FR-LOG-02** (Must) Signed-in customers see a welcome with their full name and the Account Services menu; Log Out returns to the public home page.
  - Menu items: Open New Account, Accounts Overview, Transfer Funds, Bill Pay, Find Transactions, Update Contact Info, Request Loan, Log Out
- **FR-LOG-03** (Should) Customer Lookup returns the username and password when name, address, zip and SSN all match, and signs the customer in.
  - This plain-text reveal is accepted behaviour for this product version

## Accounts overview and activity (ACC)

Balances across all accounts and per-account transaction history.

- **FR-ACC-01** (Must) Accounts Overview lists every account with Balance and Available amount, and a Total row equal to the sum of all balances, including negative ones.
  - Available is lower than Balance when funds are on hold
  - An overdrawn account shows a negative Balance and Available $0.00
- **FR-ACC-02** (Should) Account Details shows number, type, balance and available, and the activity list can be filtered by month and by Credit/Debit.
  - A filter with no matches shows "No transactions found."
- **FR-ACC-03** (Could) Each activity row links to a Transaction Details page with ID, date, description, type and amount.

## Open new account (OPN)

Open a CHECKING or SAVINGS account funded from an existing one.

- **FR-OPN-01** (Must) A new account of the chosen type is opened with a $100.00 minimum deposit and its number is shown as a link.
- **FR-OPN-02** (Must) The deposit is debited from the funding account and credited to the new one, so the Total is unchanged.
  - The new account shows one Credit "Funds Transfer Received" $100.00 dated today
- **FR-OPN-03** (Must) Opening is refused when the funding account cannot cover $100.00.
  - Message "Account could not be opened: account <n> does not have the $100.00 minimum deposit."
  - No account is created and balances do not change

## Transfer funds (TRF)

Move money between the customer’s own accounts.

- **FR-TRF-01** (Must) The amount must be a positive number with at most two decimals.
  - Empty, non-numeric, negative, zero or 3-decimal amounts show "Please enter a valid amount." and move nothing
- **FR-TRF-02** (Must) A transfer debits the source and credits the target by the same amount and records both sides in activity.
  - Confirmation "$<amount> has been transferred from account #<from> to account #<to>."
  - Source gains Debit "Funds Transfer Sent", target gains Credit "Funds Transfer Received", both dated today
  - The Total is unchanged
- **FR-TRF-03** (Should) Transfers may exceed the source balance (overdraft is allowed); Available then shows $0.00.
- **FR-TRF-04** (Could) A transfer to the same account is accepted and records a matching debit and credit with net zero.

## Bill pay (PAY)

Pay an external payee from one of the customer’s accounts.

- **FR-PAY-01** (Must) Payee name, address, city, state, zip, phone, account, verify account and amount are required; account numbers must be numeric and the amount valid.
  - Each failing field shows its own message
- **FR-PAY-02** (Must) Account # and Verify Account # must match before anything is paid.
  - A mismatch shows "The account numbers do not match." and no debit occurs
- **FR-PAY-03** (Must) A valid payment debits the chosen account and records "Bill Payment to <payee>".
  - Confirmation "Bill Payment to <payee> in the amount of $<amount> from account <n> was successful."

## Find transactions (FND)

Search one account’s history by ID, date, date range or amount.

- **FR-FND-01** (Should) Each criterion has its own Find button and searches only the selected account.
  - A transaction of another account is never returned
- **FR-FND-02** (Should) Dates use MM-DD-YYYY and amounts must be valid numbers; invalid criteria show a message instead of results.
  - "Please enter a valid date." / "Please enter a valid amount."
  - No match shows "No transactions found."

## Request loan (LON)

Instant loan decision funded into a new loan account.

- **FR-LON-01** (Must) A loan is approved only when the down payment is at least 10% of the loan amount and covered by the chosen account’s balance.
- **FR-LON-02** (Must) An approved loan opens a new account holding the loan amount and debits the down payment from the chosen account.
- **FR-LON-03** (Must) A denied loan shows Status Denied with the reason and changes no balances.

## Contact info (UPD)

Keep the customer’s address and phone current.

- **FR-UPD-01** (Could) Update Contact Info is pre-filled with the current profile, requires every field and confirms a successful save.

## Non-functional requirements

- **NFR-01** (Must) Money is shown with a $ sign, thousands separators and exactly two decimals; negative amounts are prefixed with "-".
- **ERR-01** (Must) Account Services pages require a signed-in session; signed-out visits return to the home page with the login form.
- **ERR-03** (Should) Unknown or malformed account and transaction ids show the generic error page "An internal error has occurred and has been logged."

## Glossary and rules

- **Available** — Balance minus holds; never below $0.00.
- **Hold** — A pending deposit that counts toward Balance but not Available.

## Out of scope

- Payments to real networks
- Branch or admin consoles
- Performance under load
