{"ns":"bank","title":"Harbor Mutual Bank","version":"5.0","summary":"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.","personas":[{"name":"Retail customer","need":"Check balances, move money and pay bills quickly, with clear confirmation of what happened."},{"name":"New customer","need":"Open an online profile and a funded first account in one step."},{"name":"Support agent","need":"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."],"features":[{"id":"REG","title":"Registration","summary":"Self-service sign-up that creates the profile and a first checking account.","reqs":[{"id":"FR-REG-01","weight":"Must","text":"The registration form requires every field and reports each missing one separately.","accept":["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"]},{"id":"FR-REG-02","weight":"Must","text":"Password and Confirm must match.","accept":["A mismatch shows \"Passwords did not match.\" and no profile is created"]},{"id":"FR-REG-03","weight":"Must","text":"Usernames are unique, compared case-insensitively.","accept":["An existing username in any letter case shows \"This username already exists.\""]},{"id":"FR-REG-04","weight":"Must","text":"A successful registration signs the customer in and opens a checking account with the $515.50 welcome balance.","accept":["Confirmation \"Your account was created successfully. You are now logged in.\"","Accounts Overview lists exactly one account with Balance, Available and Total $515.50"]}]},{"id":"LOG","title":"Sign-in and login recovery","summary":"Customer login, logout and lookup of forgotten credentials.","reqs":[{"id":"FR-LOG-01","weight":"Must","text":"Failed sign-ins show a distinct error for missing input and for unknown credentials.","accept":["Empty fields: \"Please enter a username and password.\"","Wrong credentials: \"The username and password could not be verified.\""]},{"id":"FR-LOG-02","weight":"Must","text":"Signed-in customers see a welcome with their full name and the Account Services menu; Log Out returns to the public home page.","accept":["Menu items: Open New Account, Accounts Overview, Transfer Funds, Bill Pay, Find Transactions, Update Contact Info, Request Loan, Log Out"]},{"id":"FR-LOG-03","weight":"Should","text":"Customer Lookup returns the username and password when name, address, zip and SSN all match, and signs the customer in.","accept":["This plain-text reveal is accepted behaviour for this product version"]}]},{"id":"ACC","title":"Accounts overview and activity","summary":"Balances across all accounts and per-account transaction history.","reqs":[{"id":"FR-ACC-01","weight":"Must","text":"Accounts Overview lists every account with Balance and Available amount, and a Total row equal to the sum of all balances, including negative ones.","accept":["Available is lower than Balance when funds are on hold","An overdrawn account shows a negative Balance and Available $0.00"]},{"id":"FR-ACC-02","weight":"Should","text":"Account Details shows number, type, balance and available, and the activity list can be filtered by month and by Credit/Debit.","accept":["A filter with no matches shows \"No transactions found.\""]},{"id":"FR-ACC-03","weight":"Could","text":"Each activity row links to a Transaction Details page with ID, date, description, type and amount."}]},{"id":"OPN","title":"Open new account","summary":"Open a CHECKING or SAVINGS account funded from an existing one.","reqs":[{"id":"FR-OPN-01","weight":"Must","text":"A new account of the chosen type is opened with a $100.00 minimum deposit and its number is shown as a link."},{"id":"FR-OPN-02","weight":"Must","text":"The deposit is debited from the funding account and credited to the new one, so the Total is unchanged.","accept":["The new account shows one Credit \"Funds Transfer Received\" $100.00 dated today"]},{"id":"FR-OPN-03","weight":"Must","text":"Opening is refused when the funding account cannot cover $100.00.","accept":["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"]}]},{"id":"TRF","title":"Transfer funds","summary":"Move money between the customer’s own accounts.","reqs":[{"id":"FR-TRF-01","weight":"Must","text":"The amount must be a positive number with at most two decimals.","accept":["Empty, non-numeric, negative, zero or 3-decimal amounts show \"Please enter a valid amount.\" and move nothing"]},{"id":"FR-TRF-02","weight":"Must","text":"A transfer debits the source and credits the target by the same amount and records both sides in activity.","accept":["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"]},{"id":"FR-TRF-03","weight":"Should","text":"Transfers may exceed the source balance (overdraft is allowed); Available then shows $0.00."},{"id":"FR-TRF-04","weight":"Could","text":"A transfer to the same account is accepted and records a matching debit and credit with net zero."}]},{"id":"PAY","title":"Bill pay","summary":"Pay an external payee from one of the customer’s accounts.","reqs":[{"id":"FR-PAY-01","weight":"Must","text":"Payee name, address, city, state, zip, phone, account, verify account and amount are required; account numbers must be numeric and the amount valid.","accept":["Each failing field shows its own message"]},{"id":"FR-PAY-02","weight":"Must","text":"Account # and Verify Account # must match before anything is paid.","accept":["A mismatch shows \"The account numbers do not match.\" and no debit occurs"]},{"id":"FR-PAY-03","weight":"Must","text":"A valid payment debits the chosen account and records \"Bill Payment to <payee>\".","accept":["Confirmation \"Bill Payment to <payee> in the amount of $<amount> from account <n> was successful.\""]}]},{"id":"FND","title":"Find transactions","summary":"Search one account’s history by ID, date, date range or amount.","reqs":[{"id":"FR-FND-01","weight":"Should","text":"Each criterion has its own Find button and searches only the selected account.","accept":["A transaction of another account is never returned"]},{"id":"FR-FND-02","weight":"Should","text":"Dates use MM-DD-YYYY and amounts must be valid numbers; invalid criteria show a message instead of results.","accept":["\"Please enter a valid date.\" / \"Please enter a valid amount.\"","No match shows \"No transactions found.\""]}]},{"id":"LON","title":"Request loan","summary":"Instant loan decision funded into a new loan account.","reqs":[{"id":"FR-LON-01","weight":"Must","text":"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."},{"id":"FR-LON-02","weight":"Must","text":"An approved loan opens a new account holding the loan amount and debits the down payment from the chosen account."},{"id":"FR-LON-03","weight":"Must","text":"A denied loan shows Status Denied with the reason and changes no balances."}]},{"id":"UPD","title":"Contact info","summary":"Keep the customer’s address and phone current.","reqs":[{"id":"FR-UPD-01","weight":"Could","text":"Update Contact Info is pre-filled with the current profile, requires every field and confirms a successful save."}]}],"nfr":[{"id":"NFR-01","weight":"Must","text":"Money is shown with a $ sign, thousands separators and exactly two decimals; negative amounts are prefixed with \"-\"."},{"id":"ERR-01","weight":"Must","text":"Account Services pages require a signed-in session; signed-out visits return to the home page with the login form."},{"id":"ERR-03","weight":"Should","text":"Unknown or malformed account and transaction ids show the generic error page \"An internal error has occurred and has been logged.\""}],"glossary":[{"term":"Available","meaning":"Balance minus holds; never below $0.00."},{"term":"Hold","meaning":"A pending deposit that counts toward Balance but not Available."}],"outOfScope":["Payments to real networks","Branch or admin consoles","Performance under load"]}