# Platform Portal — Staging QA Handoff

**Staging website:** [https://mxfml.com/platform/login](https://mxfml.com/platform/login)

**Purpose:** This document tells QA what the Platform Portal must do, why each area exists, how users should work with it, and what results should be observed.

**Scope:** Platform Portal only. Financial modelling, financial statements, model inputs, reports, and calculations are outside this testing scope.

## 1. Platform purpose

The Platform Portal is the administration area for managing customer companies, consulting relationships, licenses, user capacity, and privileged access.

It must provide:

1. **Central control:** System Owners can manage every company from one place.
2. **Company separation:** One company must never see or manage an unrelated company.
3. **Consulting management:** A consulting firm can manage only its own client companies.
4. **License control:** Company access, user capacity, and client limits follow the configured license.
5. **Secure delegation:** Privileged users receive only the access required for their responsibilities.

## 2. People and company types

### System Owner

A System Owner has global platform responsibility. This person can manage every company, license, consulting relationship, and System Owner account.

### Consulting administrator

A consulting administrator belongs to a consulting firm and has been granted access to its management portal. This person can see the consulting firm and its own managed clients only.

### Company user

A company user belongs to one company. The user does not automatically receive access to a consulting partner, parent company, or client company.

### Standalone company

A customer company with no consulting partner. It has its own users, roles, license, and branding.

### Consulting firm

A company that may manage a limited number of client companies. It has its own users and may authorize consulting administrators.

### Consulting-managed client

A client company connected to one consulting firm. It retains its own users, roles, license, and branding.

## 3. Access summary

| Capability | System Owner | Consulting administrator |
|---|:---:|:---:|
| View all companies | Yes | No |
| View own consulting firm | Yes | Yes |
| View own managed clients | Yes | Yes |
| View unrelated companies | Yes | Never |
| Create standalone companies | Yes | No |
| Create consulting firms | Yes | No |
| Create managed clients | Yes | Only under own firm |
| Manage all licenses | Yes | No |
| Manage System Owner accounts | Yes | No |
| Manage consulting portal users | Yes | Own firm only |
| Manage client users | Yes | Own managed clients only |
| Open consulting firm's main workspace | Not required | Yes |

## 4. QA preparation

The release coordinator should provide credentials securely and separately from this document.

QA should receive access to:

- One System Owner.
- Two consulting firms with one consulting administrator each.
- At least one managed client under each consulting firm.
- One standalone company.
- One expired company.
- One suspended company.
- One disabled company.
- One company close to its license end date.
- One company close to its user-capacity limit.

Never place passwords in this document, screenshots, defect descriptions, or shared chat messages.

## 5. Sign-in and session requirements

### PLAT-AUTH-001 — Platform sign-in page

**Test:** Open the staging Platform Portal.

**Expected:** The page clearly asks for company, email, and password. It explains that System Owners may leave Company blank and consulting administrators must enter their consulting company.

### PLAT-AUTH-002 — System Owner sign-in

**Test:** Leave Company blank and use valid System Owner credentials.

**Expected:** Sign-in succeeds and opens **Companies & licenses** with access to all companies.

### PLAT-AUTH-003 — Consulting administrator sign-in

**Test:** Enter the consulting firm's company name and valid consulting administrator credentials.

**Expected:** Sign-in succeeds. Only the consulting firm and its own managed clients are visible.

### PLAT-AUTH-004 — Invalid sign-in

Test an incorrect company name, email, password, inactive user, user without portal access, expired consulting firm, suspended consulting firm, and disabled consulting firm.

**Expected:** Sign-in is refused with a clear but non-revealing message. The message must not identify which credential was wrong.

### PLAT-AUTH-005 — Repeated failed attempts

**Test:** Repeatedly submit invalid credentials.

**Expected:** Further attempts are temporarily restricted. The page remains stable and does not expose account details.

### PLAT-AUTH-006 — Sign out

**Test:** Sign out and attempt to return to a previously opened protected page.

**Expected:** Protected information is no longer visible and the user is asked to sign in again.

## 6. Company separation

### PLAT-SCOPE-001 — System Owner visibility

**Expected:** A System Owner can find consulting firms, managed clients, standalone companies, and companies requiring attention.

### PLAT-SCOPE-002 — Consulting visibility

**Test:** Sign in as consulting administrator A.

**Expected:** Only consulting firm A and clients managed by firm A are visible. Firm B, clients of firm B, and standalone companies are not visible.

### PLAT-SCOPE-003 — Cross-company protection

**Test:** Use normal navigation, saved links, and browser history to try to reach a company outside the signed-in consulting administrator's responsibility.

**Expected:** Unrelated company information is never displayed or changed.

### PLAT-SCOPE-004 — System Owner account page

**Expected:** Only System Owners see **System Owner users**. Consulting administrators cannot open it even through a saved link.

## 7. Companies and licenses screen

### PLAT-COMP-001 — Company information

Each company should display:

- Company name and type.
- Company logo or initials.
- Consulting partner for a managed client.
- License status and end date.
- Active users and maximum users.
- Remaining user capacity.
- Industry, where available.
- Appropriate management actions.

### PLAT-COMP-002 — Search

**Test:** Search by complete and partial company name and industry.

**Expected:** Matching companies appear and unrelated companies disappear. Clearing the search restores the permitted list.

### PLAT-COMP-003 — Company-type filters

**Test:** Select Standalone, Consulting firm, and Consulting-managed.

**Expected:** Every displayed company matches the selected type.

### PLAT-COMP-004 — Account-state filters

**Test:** Select Active, Suspended, and Disabled.

**Expected:** Every displayed company matches the selected account state.

### PLAT-COMP-005 — Summary figures

**Expected:** Company count, active-user count, managed-client count, and attention count match the companies currently displayed.

### PLAT-COMP-006 — Loading, empty, and error states

**Expected:** The screen communicates when it is loading, when no companies match, and when information cannot be loaded. Existing information must not disappear because a form validation failed.

## 8. Creating companies

### PLAT-CREATE-001 — System Owner company choices

**Test:** Select **Add company** as a System Owner.

**Expected:** Standalone, Consulting firm, and Consulting-managed client are available.

### PLAT-CREATE-002 — Consulting administrator choice

**Test:** Select **Add managed client** as a consulting administrator.

**Expected:** Consulting-managed client is the only available type and the new company is automatically connected to the signed-in consulting firm.

### PLAT-CREATE-003 — Managed client requires a consulting partner

**Test:** As a System Owner, attempt to create a managed client without choosing a valid consulting partner.

**Expected:** Creation is refused with a helpful message.

### PLAT-CREATE-004 — New-company roles

**Expected:** A new company receives the standard roles: Super administrator, Administrator, Model manager, Analyst (read-only), and Board / outputs only.

### PLAT-CREATE-005 — Validation

Test missing company name, invalid user limits, incomplete license dates, and conflicting company relationships.

**Expected:** The form explains what must be corrected and does not create an incomplete company.

## 9. Editing companies

### PLAT-EDIT-001 — Company details

Test changing company name, industry, account state, license dates, user capacity, and valid consulting relationship information.

**Expected:** Saved information remains correct after refreshing the page.

### PLAT-EDIT-002 — Consulting administrator editing

**Expected:** A consulting administrator can edit its managed clients but cannot edit unrelated clients, another consulting firm, or a standalone company.

### PLAT-EDIT-003 — Dialog behavior

**Expected:** Cancel, close, Escape, and supported backdrop closing leave stored information unchanged. Saving shows a busy state and should not create duplicate records.

## 10. License rules

### PLAT-LIC-001 — License status

| Condition | Expected status |
|---|---|
| No license end date and active account | Active |
| End date more than 30 days away | Active |
| End date today through 30 days away | Expiring soon |
| End date before today | Expired |
| Suspended account | Suspended regardless of dates |
| Disabled account | Disabled regardless of dates |

### PLAT-LIC-002 — Managed-client dates

**Test:** Give a managed client a start date before its consulting firm's start date or an end date after the consulting firm's end date.

**Expected:** The change is refused and the message explains the permitted boundary.

### PLAT-LIC-003 — Parent date protection

**Test:** Shorten a consulting firm's license so an existing client's license would fall outside it.

**Expected:** The change is refused and existing license information remains unchanged.

### PLAT-LIC-004 — Maximum managed clients

**Test:** Reach the consulting firm's managed-client allowance and attempt to create another client.

**Expected:** Creation is refused. Editing an existing client must not be counted as creating an additional client.

### PLAT-LIC-005 — Maximum active users

**Test:** Reach a company's active-user allowance and attempt to create or reactivate another user.

**Expected:** The action is refused. Deactivating a user releases one available seat. Remaining capacity never appears below zero.

### PLAT-LIC-006 — Restricted companies

**Expected:** Users cannot enter an expired, suspended, or disabled company workspace. A System Owner can still use the Platform Portal to correct the company.

## 11. Branding

### PLAT-BRAND-001 — Valid logo

Test common supported image formats with square, wide, and tall artwork.

**Expected:** Logo saves, previews clearly, preserves its proportions, and does not stretch or overflow the company configuration dialog.

### PLAT-BRAND-002 — Invalid logo

Test unsupported files and files larger than the displayed limit.

**Expected:** Upload is refused with a clear message and the existing logo remains unchanged.

### PLAT-BRAND-003 — Remove logo

**Expected:** The logo is removed and a clean initials fallback appears.

### PLAT-BRAND-004 — Managed-client branding

**Expected:** A managed client displays its own logo as the primary brand and its consulting firm's logo as the consulting mark.

### PLAT-BRAND-005 — Standalone branding

**Expected:** A standalone company shows no empty consulting-logo placeholder.

## 12. System Owner accounts

### PLAT-OWNER-001 — Page visibility

**Expected:** **System Owner users** is visible only to System Owners.

### PLAT-OWNER-002 — Create System Owner

**Test:** Create an owner using a full name, unique valid email, and a password meeting the displayed length requirement.

**Expected:** The account appears as active and can sign in with Company left blank.

### PLAT-OWNER-003 — Invalid owner information

Test blank name, invalid email, duplicate email, and a short password.

**Expected:** Creation is refused without creating a partial account.

### PLAT-OWNER-004 — Manage owner

Test changing name, email, password, and active state.

**Expected:** Leaving replacement password blank keeps the existing password. Supplying a valid replacement makes the old password unusable.

### PLAT-OWNER-005 — Final active owner

**Test:** Attempt to deactivate the only active System Owner.

**Expected:** The action is refused. After another active owner exists, deactivation succeeds.

## 13. Consulting portal users

### PLAT-PORTALUSER-001 — Create portal administrator

**Test:** Open a consulting firm's **Portal users** and create an administrator.

**Expected:** The account belongs to the selected consulting firm and is shown as active with portal access.

### PLAT-PORTALUSER-002 — New administrator sign-in

**Expected:** The new administrator can sign in using the consulting firm's company name and sees only that firm's permitted portfolio.

### PLAT-PORTALUSER-003 — Manage portal account

Test password replacement, activation/deactivation, and granting/removing portal access.

**Expected:** Each action completes without a page error, and the new state remains after refreshing.

### PLAT-PORTALUSER-004 — Final portal administrator

**Test:** As a consulting administrator, attempt to deactivate or remove portal access from the last active portal administrator.

**Expected:** The action is refused to prevent accidental lockout. A System Owner may intentionally remove all portal access for the firm.

### PLAT-PORTALUSER-005 — User counts

**Expected:** Counts shown on the company row and inside user management are understandable and consistent with active and total accounts.

## 14. Company users

### PLAT-COMPUSER-001 — Create company user

**Test:** Open **Company users** for a standalone or managed-client company and create a user.

**Expected:** The user belongs only to the selected company and consumes one active-user seat.

### PLAT-COMPUSER-002 — Role choices

**Expected:** The role list contains active standard and custom roles belonging to that company. It must not contain another company's roles.

### PLAT-COMPUSER-003 — Manage company user

Test role change, activation/deactivation, and password replacement.

**Expected:** The updated state remains after refreshing and the selected role controls what the user may access.

### PLAT-COMPUSER-004 — Company isolation

**Expected:** A consulting administrator cannot view or manage users belonging to another consulting firm, an unrelated client, or a standalone company.

## 15. Roles and permissions

### PLAT-ROLE-001 — Role matrix

**Expected:** Roles are displayed clearly, permissions are grouped by area and action, granted permissions are visually distinct, and assignment counts are correct.

### PLAT-ROLE-002 — Search

**Expected:** Searching by role name, description, or permission narrows the role list. Clearing the search restores it.

### PLAT-ROLE-003 — Create role

**Test:** Create a role from an empty permission set.

**Expected:** The role appears immediately and begins without permissions.

### PLAT-ROLE-004 — Duplicate role

**Test:** Create a role using an existing role as the starting point.

**Expected:** The new role starts with the same permissions but remains independently editable.

### PLAT-ROLE-005 — Change permissions

**Test:** Grant and remove permissions, save, refresh, and sign in as a user assigned to the role.

**Expected:** Saved choices remain and the user's visible pages and permitted actions match the role.

### PLAT-ROLE-006 — User visibility permission

Assign a role without user-view or user-administration permission.

**Expected:** The user cannot see **People with access**, cannot see user-management navigation, and cannot open user management through a saved link.

### PLAT-ROLE-007 — View roles without managing

Assign role-view permission without role-administration permission.

**Expected:** The role matrix may be viewed, but create, delete, and permission-changing actions are unavailable or refused.

### PLAT-ROLE-008 — Company scope

**Expected:** Consulting administrators manage roles belonging to their consulting firm only. Company roles do not appear in unrelated companies.

### PLAT-ROLE-009 — Protected roles

**Expected:** Standard system roles cannot be renamed or deleted. A custom role assigned to a user cannot be deleted until the user is reassigned.

### PLAT-ROLE-010 — Custom role authority

**Expected:** When a custom role is assigned, only that custom role's permissions apply. Previous compatibility information must not grant additional access.

## 16. Activity history and security behavior

### PLAT-SEC-001 — Hidden controls are not security

**Test:** Try saved links and normal browser navigation after permissions are removed.

**Expected:** Removing a button from view is not the only protection; unauthorized pages and actions remain unavailable.

### PLAT-SEC-002 — Password privacy

**Expected:** Existing passwords are never shown or recoverable. Password replacement is allowed, but no screen, message, screenshot, or activity history reveals a stored password.

### PLAT-SEC-003 — Unsafe input

Enter punctuation, markup-like text, and unusually long values in searchable and editable fields.

**Expected:** The platform remains stable, displays text safely, and provides controlled validation messages.

### PLAT-SEC-004 — Activity history

Confirm that important platform actions are recorded, including sign-in/sign-out, company updates, role changes, owner changes, branding changes, and user administration.

**Expected:** Records identify the action, responsible person where applicable, affected item, and time without containing passwords.

### PLAT-SEC-005 — Access removed during a session

**Test:** Remove or deactivate a user's access while that user is already signed in, then have the user continue navigating.

**Expected:** The user cannot continue performing actions that are no longer permitted.

## 17. Usability, accessibility, and responsive behavior

- Every input has a clear label.
- Status is communicated using text, not color alone.
- Dialogs have clear titles and close controls.
- Keyboard users can reach controls in a logical order.
- Escape closes supported dialogs without saving.
- Focus moves into a dialog and returns sensibly after closing.
- Busy buttons prevent accidental duplicate submissions.
- Error messages are visible, understandable, and do not expose internal details.
- Loading and empty states explain what is happening.
- Company lists remain usable on common desktop and tablet sizes.
- Wide role matrices scroll without hiding role names or permission meaning.
- Logos preserve their proportions at all supported sizes.
- Text remains readable at browser zoom levels commonly used for accessibility testing.

## 18. Staging regression checks

### PLAT-REG-001 — Existing data remains

**Expected:** Companies, users, relationships, branding, roles, and license values present before the staging release remain available afterward.

### PLAT-REG-002 — Existing users still sign in

Test representative System Owner, consulting administrator, standalone-company user, and managed-client user accounts.

**Expected:** Valid existing accounts continue to work with the correct scope.

### PLAT-REG-003 — Custom roles remain authoritative

**Expected:** Existing custom roles and assignments remain unchanged and do not receive additional permissions unexpectedly.

### PLAT-REG-004 — Refresh consistency

After each create or update operation, refresh the browser and sign out/in when appropriate.

**Expected:** The same saved information and permissions remain in effect.

## 19. Recommended QA order

1. System Owner sign-in and sign-out.
2. Company list, search, filters, metrics, and status badges.
3. Company creation and editing.
4. License boundaries and capacity.
5. System Owner accounts.
6. Consulting portal users.
7. Company users.
8. Roles and permission enforcement.
9. Consulting-company separation and negative tests.
10. Branding.
11. Activity history, accessibility, and responsive checks.
12. Existing-data and existing-user regression.

## 20. Defect report template

```text
Title:
Requirement ID:
Staging date and browser:
Signed-in user type:
Company involved (never include passwords):
Preconditions:
Steps to reproduce:
Expected result:
Actual result:
Screenshot or recording:
Severity:
How often it happens:
```

### Severity guide

| Severity | Meaning |
|---|---|
| Critical | Unauthorized cross-company access, exposed credentials, or complete platform outage |
| High | Core administration, license enforcement, or sign-in is broken with no practical workaround |
| Medium | A feature is incorrect but a safe workaround exists |
| Low | Visual, wording, or minor usability issue with no security or data impact |

## 21. Release acceptance checklist

- [ ] System Owner sign-in, sign-out, and protected-page behavior pass.
- [ ] Consulting administrator sign-in and portfolio scope pass.
- [ ] Ordinary or unauthorized users cannot enter the Platform Portal.
- [ ] Consulting administrators cannot see or change unrelated companies.
- [ ] System Owner account management works and protects the final active owner.
- [ ] All three company types follow the correct creation rules.
- [ ] Managed-client licenses remain within consulting-firm licenses.
- [ ] Consulting client limits are enforced.
- [ ] Active-user capacity is enforced.
- [ ] Portal users and company users can be managed safely.
- [ ] Roles are company-scoped and permissions control both visibility and actions.
- [ ] A user without user-view permission cannot see people or user management.
- [ ] Protected roles and assigned custom roles behave correctly.
- [ ] Logo validation and dual-branding behavior pass.
- [ ] Important actions appear in activity history without secrets.
- [ ] Dialog, keyboard, error, loading, and responsive behavior pass.
- [ ] Existing staging data and representative sign-ins remain correct.
- [ ] All Critical and High defects are closed or formally rejected by the product owner.

## 22. QA sign-off

| Item | Value |
|---|---|
| Staging test period | |
| QA owner | |
| Browsers/devices tested | |
| Total tests passed | |
| Total tests failed | |
| Open Critical defects | |
| Open High defects | |
| Accepted known issues | |
| QA recommendation | Approve / Approve with conditions / Reject |
| QA signature and date | |
| Product owner decision and date | |

