# Features — buddyfinance (Buddy Finance)

Evidence date: 2026-10-19. Revision: `master` `8d0ae20` (2022-10-05, "setup").

No feature list existed in the source repository or in Silicon Ark. Status below is from `master`. `origin/RenierDEV` (`b144142`, 14 commits ahead) is listed separately and is not the default branch.

Planned features written as a roadmap: **none found**.

## Current features (master)

| Feature | What it does | Evidence | Status |
|---|---|---|---|
| Public website | Home, about, contact, register, login, password reset, email confirm | `BuddyFinance.Admin` `HomeController`, `AccountController` | Implemented |
| Lender and borrower registration | Creates a pending profile, lender or borrower row, optional documents and addresses | `RegistrationIntegrator.Register` | Implemented |
| OTP | SMS OTP for a phone number | `api/registration/sendotp`, `validateotp` | Implemented |
| Email verification and re-apply | Verify token; resend an application by profile number | `api/registration/verify`, `reapply` | Implemented |
| Login and OAuth token | Resource-owner password at `/Token`, 14-day access token; website cookie | `Startup.Auth.cs`, `AccountController.ApiLogin` | Implemented |
| Role landing | Buddy users see the account page. Admin and Super Admin see the Admin area. Unapproved profiles see profile details | `HomeController.Index`, `ApiLogin` | Implemented |
| Profile maintenance | Details, addresses, banking, employment, tax, next of kin, FICA, documents | `api/profiles/*` | Implemented |
| Profile approval | Approve, reject, review, suspend, activate | `ProfilesIntegrator.ApproveProfile`, Admin `ProfilesController` | Implemented |
| Lender deposit instructions | Approval email names Thorough Capital and Standard Bank deposit details | `ApproveProfile` | Implemented. Account number not repeated in this file |
| Cash deposit | Staff credit available funds and write transactions | `ManageCashIntergrator.SaveFundsToProfile` | Implemented |
| First-deposit application fee | Debits R150 on the first deposit when identification type id equals 1 | `SaveFundsToProfile`, `FeeType` id 1 | Implemented. The id comparison needs confirmation |
| Loan offers | Create, list, render, delete, claim balance | `LoanOffersIntergrator`, `api/loanoffers` | Implemented |
| Offer search by amount | Borrower sees offers limited by income and term brackets | `GetLoanOffersByAmount` | Implemented. Commented alternatives remain in the method |
| Loan requests | Create, list for borrower and lender, accept, reject | `LoanRequestIntegrator`, `LoansController` | Implemented |
| Loan pricing | Instalment, interest, service fee, initiation fee, first payment date | `BaseIntegrator.LoanCulculator` | Implemented |
| Loans | Pending loan on acceptance; separate activate; decline; deactivate; schedule; repayments; payout; statement | `LoansIntegrator`, Admin `LoansController` | Implemented |
| Credit scoring | TransUnion enquiry, stored score, derived score, robot colour bands | `ScoringIntegrator`, `RobotScore` seed | Implemented |
| Cash withdrawal | Request, validate, history, staff accept or reject, cancel | `ManageCashIntergrator`, Admin `CashWithdrawalsController` | Implemented |
| Manual deductions | Staff record a manual deduction | `SaveManualDeduction`, Admin `ManageCashController` | Implemented |
| Monthly service fee | Console debits approved lenders on their billing day and credits the platform | `BuddyFinance.Billing/Program.cs` | Implemented. Not in the solution file. Scheduler unknown |
| Arrears email | Console emails approved lenders with a negative balance | `BuddyFianance.BillingArrears/Program.cs` | Implemented. Scheduler unknown |
| Expire loan requests | Console expires New requests after 30 days | `BuddyFinanceExpireLoanRequests/Program.cs` | Implemented. Scheduler unknown |
| Statements and PDF | Profile and loan statements, reporting API | `StatementIntegrator`, `ReportServiceIntergrator`, `api/reporting/statement` | Implemented |
| SSRS reports | Statement and transactions | `BuddyFinance.Reports` | Implemented as report definitions |
| Lookup data | Provinces, genders, employment, ethnicity, fees, statuses, identification types | `api/master/*`, post-deployment script | Implemented |
| Notifications | SMTP email templates and SMS | `Notifications/*.txt`, `NotificationsIntegrator` | Implemented |
| Activity log | Login and admin activity | `ActivityLog`, `api/administration/activitlog` | Implemented. Route name is spelled `activitlog` |
| Terms file | Get and update a terms file | `DocumentsIntegrator.Terms`, Admin `StaticDataController` | Implemented |
| Contact us | Sends a contact email | `ProfilesIntegrator.ContactUs` | Implemented |
| User administration | List, create, and update staff accounts. Super Admin may assign Super Admin | Admin `AccountsController` | Implemented |
| Android wrapper | WebView of `https://buddyfinance.co.za/qa`, offline error page, file download | `BuddyFinance.Mobile` `MainActivity` | Implemented |
| API help page | ASP.NET Web API help page | `Areas/HelpPage` | Implemented |
| Application Insights | Telemetry packages and config on the API | `ApplicationInsights.config` | Present. Instrumentation in production is unknown |

## Completed features

Git history on `master` does not mark features complete over time. The three commits are "Initial commit", "first commit", and "setup". Treat the table above as the shipped snapshot. Provenance: **Implemented**.

## In development

Nothing on `master` is marked in progress. `origin/RenierDEV` is the only other remote branch and contains unfinished-looking work relative to `master` (it is simply unmerged). Provenance: **Unknown / Requires Confirmation** whether anyone is still developing it.

## Unmerged on `origin/RenierDEV`

These are not current features of `master`.

| Change described by commits or the diff | Evidence |
|---|---|
| Lender creates an offer without an interest control. Borrower requests it. Admin approves or declines | Commit `8f3ed12` |
| Landing page drops the interest bar and uses 5 percent, described as a maximum | Commits `aae5f13`, `34337c3` |
| Interest rate loaded from the database | Commit `c0fdd0e` |
| Repayment formula changed | Commits `fdd8f66`, `63b24c6` |
| ID documents are photos. Other documents are PDF. Validation on register and on images | Commits `7f20c5f`, `c0e2d73`, `926fbbd` |
| SendGrid email path adjusted, including a change away from an async send | Commits `c0fdd0e`, `66d055b` |
| Stitch tokens and `StitchController` | Diff adds `StitchIntegrator.cs`, `StitchController.cs` |
| Cron jobs for payment success, failure, and records to process | Diff adds `CronJobIntegrator.cs`, `CronJobController.cs` |

## Recently changed

On `master`, the latest commit is the 2022-10-05 snapshot. No later change exists on that branch.

## Deprecated or removed

| Item | Evidence | Status |
|---|---|---|
| Commented interest formula in `LoanCulculator` | Block comment above the current loop | Not executed |
| Commented third-party login (Microsoft, Twitter, Facebook, Google) | `Startup.Auth.cs` | Not executed |
| Commented `BillingDate` assignment during registration | `RegistrationIntegrator` | Not executed |
| Digital contract document type | Commented in `DocumentTypeEnum` | Not seeded |
| `BuddyFinance.Integration/Notifications - Back` | Second templates folder | Present. Whether it is unused is **Inferred** from the name |

## Not in the solution

`BuddyFinance.Mobile` and `BuddyFinance.Billing` exist on disk and are not `Project` entries in `BuddyFinace.sln`.
