# AFINET Customer Portal - User Acceptance Testing (UAT) Document

**Document Version:** 1.0  
**Date:** February 27, 2026  
**System:** AFINET Customer Portal with Odoo ERP Integration  
**Environment:** Production/Staging

---

## Table of Contents

1. [Introduction](#introduction)
2. [User Types & Roles](#user-types--roles)
3. [Testing Approach](#testing-approach)
4. [UAT Test Cases by User Journey](#uat-test-cases-by-user-journey)
5. [Odoo Integration Verification](#odoo-integration-verification)
6. [Data Flow Verification](#data-flow-verification)
7. [Sign-off Sheet](#sign-off-sheet)

---

## 1. Introduction

### 1.1 Purpose
This document provides comprehensive User Acceptance Testing scenarios for the AFINET Customer Portal. It covers all user journeys, system functionality, and integration points with Odoo ERP.

### 1.2 Scope
- Customer registration and authentication
- Service discovery and ordering
- Payment processing
- Installation management
- Subscription management
- Support ticket system
- Odoo ERP integration and data synchronization

### 1.3 Testing Objectives
- Verify all user journeys work end-to-end
- Confirm Odoo integration and data synchronization
- Validate business rules and workflows
- Ensure data integrity across systems
- Verify email notifications
- Test payment gateway integration

---

## 2. User Types & Roles

### 2.1 Business Customer
- Small to medium businesses
- Can order fixed-price packages
- Requires KYC verification
- Can have multiple service addresses

### 2.2 Wholesale Customer
- ISPs, resellers, large enterprises
- Requires manual approval for registration
- Can request custom quotations
- Higher credit limits
- Dedicated account management

### 2.3 System Roles
- **Customer:** Portal user (Business or Wholesale)
- **Odoo User:** Back-office staff managing orders, installations, billing
- **System:** Automated processes and integrations

---

## 3. Testing Approach

### 3.1 Test Environment
- **Frontend URL:** [Production URL]
- **Backend API:** [API URL]
- **Odoo Instance:** [Odoo URL]
- **Payment Gateway:** Pesepay (Test/Live mode)

### 3.2 Test Data Requirements
- Valid email addresses for notifications
- Test payment cards (if in test mode)
- Valid physical addresses in Zimbabwe
- Test KYC documents

### 3.3 Testing Modes
- **Simulation Mode:** `SIMULATE_ORDERS=true` - Orders don't sync to Odoo, auto-complete
- **Production Mode:** `SIMULATE_ORDERS=false` - Full Odoo integration

---

## 4. UAT Test Cases by User Journey

## JOURNEY 1: NEW BUSINESS CUSTOMER REGISTRATION & FIRST ORDER

### Test Case 1.1: Customer Registration (Business)
**Objective:** Verify business customer can register successfully

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to `/register` | Registration page loads | ☐ | |
| 2 | Select "Business" customer type | Business registration form displays | ☐ | |
| 3 | Fill in company details:<br>- Company Name<br>- Registration Number<br>- Email<br>- Phone<br>- Password | All fields accept input | ☐ | |
| 4 | Click "Register" button | Registration processes | ☐ | |
| 5 | Check email inbox | Welcome email received | ☐ | |
| 6 | Verify Odoo sync | Customer created in Odoo with:<br>- Correct customer type<br>- Contact details<br>- Account number assigned | ☐ | Check Odoo Partners |
| 7 | Login with credentials | Successfully logged in, redirected to dashboard | ☐ | |

**Odoo Verification:**
- [ ] Customer exists in Odoo `res.partner` model
- [ ] `x_customer_type` = "business"
- [ ] `x_account_number` generated (format: ACC-XXXXXX)
- [ ] Email and phone synced correctly

---

### Test Case 1.2: First-Time Setup
**Objective:** Complete profile and add service address

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | After login, redirected to first-time setup | Setup wizard displays | ☐ | |
| 2 | Complete profile information:<br>- Physical address<br>- Postal address<br>- Contact person | Form accepts input | ☐ | |
| 3 | Add service address:<br>- Address name<br>- Full address<br>- Contact details | Service address form displays | ☐ | |
| 4 | Click "Complete Setup" | Profile saved, redirected to dashboard | ☐ | |
| 5 | Verify Odoo sync | Customer profile updated in Odoo | ☐ | |

**Odoo Verification:**
- [ ] Customer address updated in Odoo
- [ ] Service address created as child contact

---

### Test Case 1.3: Coverage Check (High Feasibility)
**Objective:** Check service availability at customer location

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to "Coverage Check" | Coverage check page loads | ☐ | |
| 2 | Enter service address or use map | Address input/map displays | ☐ | |
| 3 | Click "Check Coverage" | System processes request | ☐ | |
| 4 | View feasibility result | Shows "High Feasibility" with:<br>- Distance to nearest POP<br>- Available packages<br>- Estimated installation time | ☐ | |
| 5 | Select a package | Package details display | ☐ | |
| 6 | Click "Add to Cart" | Item added to cart | ☐ | |
| 7 | Verify database | Feasibility check record created with:<br>- Status: "high"<br>- Distance calculated<br>- Customer ID linked | ☐ | Check `feasibility_checks` table |

**System Verification:**
- [ ] Feasibility check record created in database
- [ ] Distance calculation accurate (using road distance API)
- [ ] Correct feasibility status assigned based on distance thresholds

---

### Test Case 1.4: Shopping Cart & Checkout
**Objective:** Review cart and proceed to checkout

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to Cart | Cart page shows selected package with:<br>- Package name<br>- Monthly price<br>- Installation fee<br>- Total | ☐ | |
| 2 | Review pricing | Prices match package configuration | ☐ | |
| 3 | Click "Proceed to Checkout" | Checkout page loads | ☐ | |
| 4 | Select service address | Address dropdown populated | ☐ | |
| 5 | Select installation date | Date picker shows available dates | ☐ | |
| 6 | Add special instructions | Text area accepts input | ☐ | |
| 7 | Click "Submit Order" | System checks MSA requirement | ☐ | |

---

### Test Case 1.5: MSA Signing (First-Time Customer)
**Objective:** Sign Master Service Agreement before payment

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | MSA modal opens automatically | Modal displays with 3 steps | ☐ | Only for first-time customers |
| 2 | Step 1: Review MSA terms | Terms and conditions display | ☐ | |
| 3 | Click "Next" | Proceeds to Step 2 | ☐ | |
| 4 | Step 2: Fill company information:<br>- Company name<br>- Registration number<br>- Physical address<br>- Contact details | Form pre-filled with profile data | ☐ | |
| 5 | Click "Next" | Data saved, proceeds to Step 3 | ☐ | |
| 6 | Step 3: Draw signature | Signature pad displays | ☐ | |
| 7 | Draw signature | Signature captured | ☐ | |
| 8 | Check "Accept terms" checkbox | Checkbox enabled | ☐ | |
| 9 | Click "Sign Agreement" | MSA signed successfully | ☐ | |
| 10 | Verify database | MSA record created with:<br>- Status: "completed"<br>- Signature saved<br>- Customer data stored<br>- Document number generated | ☐ | Check `msa_documents` table |

**Database Verification:**
- [ ] MSA document created with status "completed"
- [ ] Signature image saved to storage
- [ ] Document number format: MSA-YYYY-NNNN
- [ ] Linked to feasibility check

---

### Test Case 1.6: Order Creation
**Objective:** Create sales order after MSA signing

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | After MSA signing | Order creation proceeds automatically | ☐ | |
| 2 | Verify order created | Order confirmation displays with:<br>- Order number<br>- Package details<br>- Pricing breakdown<br>- Payment instructions | ☐ | |
| 3 | Check database | Sales order created with:<br>- Status: "pending_payment"<br>- Correct pricing<br>- MSA linked<br>- Feasibility check linked | ☐ | Check `sales_orders` table |
| 4 | Verify Odoo sync (Production mode) | Order created in Odoo with:<br>- Customer linked<br>- Product line items<br>- Correct pricing<br>- Status: "draft" | ☐ | Check Odoo `sale.order` |

**Odoo Verification (Production Mode):**
- [ ] Sales order exists in Odoo
- [ ] Order lines created with correct products
- [ ] Pricing matches portal order
- [ ] Customer reference includes order number
- [ ] `x_portal_order_id` field populated

---

### Test Case 1.7: Payment Processing (Pesepay)
**Objective:** Complete payment via Pesepay gateway

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Click "Pay Now" on order | Payment interface loads | ☐ | |
| 2 | Select payment method | Pesepay option available | ☐ | |
| 3 | Click "Proceed to Payment" | Redirected to Pesepay gateway | ☐ | Test mode auto-completes |
| 4 | Complete payment (or auto-complete in test mode) | Payment processed | ☐ | |
| 5 | Redirected back to portal | Payment success page displays | ☐ | |
| 6 | Check payment record | Payment created with:<br>- Status: "completed"<br>- Pesepay reference<br>- Amount matches order | ☐ | Check `payments` table |
| 7 | Check order status | Order status updated to "paid" | ☐ | |
| 8 | Check email | Payment confirmation email received | ☐ | |
| 9 | Verify Odoo sync (Production) | Payment recorded in Odoo invoice | ☐ | |

**Odoo Verification (Production Mode):**
- [ ] Invoice created and marked as paid
- [ ] Payment journal entry created
- [ ] Sales order status updated to "sale"

---

### Test Case 1.8: Installation Scheduling (Simulation Mode)
**Objective:** Verify installation auto-creation after payment

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | After payment completion | Installation automatically created | ☐ | Simulation mode only |
| 2 | Navigate to "Installations" | Installation record displays with:<br>- Status: "completed"<br>- Scheduled date<br>- Service address<br>- Package details | ☐ | |
| 3 | Check database | Installation record created with:<br>- Status: "completed" (simulation)<br>- Linked to sales order<br>- Customer ID<br>- Installation notes | ☐ | Check `installations` table |
| 4 | Verify Odoo sync (Production) | Installation task created in Odoo:<br>- Project: "Installations"<br>- Assigned to installation team<br>- Due date set<br>- Customer linked | ☐ | Check Odoo `project.task` |

**Odoo Verification (Production Mode):**
- [ ] Installation task created in Odoo project
- [ ] Task description includes order details
- [ ] Deadline matches preferred installation date
- [ ] Task linked to customer partner

---

### Test Case 1.9: Subscription Activation (Simulation Mode)
**Objective:** Verify subscription auto-creation after installation

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | After installation completion | Subscription automatically created | ☐ | Via InstallationObserver |
| 2 | Navigate to "Subscriptions" | Active subscription displays with:<br>- Package name<br>- Monthly amount<br>- Start date<br>- Next billing date<br>- Status: "active" | ☐ | |
| 3 | Check database | Subscription record created with:<br>- Status: "active"<br>- Correct pricing<br>- Billing cycle set<br>- Linked to order and installation | ☐ | Check `subscriptions` table |
| 4 | Verify Odoo sync (Production) | Subscription created in Odoo:<br>- Recurring invoice template<br>- Monthly billing schedule<br>- Customer linked | ☐ | Check Odoo subscriptions |

**Database Verification:**
- [ ] Subscription status = "active"
- [ ] `next_billing_date` = start_date + 1 month
- [ ] `monthly_amount` matches package price
- [ ] Linked to sales_order_id and installation_id

---

## JOURNEY 2: RETURNING CUSTOMER - ADDITIONAL SERVICE ORDER

### Test Case 2.1: Login & Dashboard
**Objective:** Returning customer logs in and views dashboard

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to `/login` | Login page loads | ☐ | |
| 2 | Enter email and password | Credentials accepted | ☐ | |
| 3 | Click "Login" | Redirected to dashboard | ☐ | |
| 4 | View dashboard widgets | Dashboard shows:<br>- Active subscriptions<br>- Recent orders<br>- Outstanding balance<br>- Active installations<br>- Recent payments | ☐ | |
| 5 | Verify data accuracy | All data matches database records | ☐ | |

---

### Test Case 2.2: Order Additional Service (No MSA Required)
**Objective:** Customer with existing installation orders additional service

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Perform coverage check | High feasibility result | ☐ | |
| 2 | Add package to cart | Item added | ☐ | |
| 3 | Proceed to checkout | Checkout page loads | ☐ | |
| 4 | Submit order | MSA modal does NOT appear | ☐ | Customer has completed installation |
| 5 | Order created directly | Order confirmation displays | ☐ | |
| 6 | Proceed to payment | Payment interface loads | ☐ | |
| 7 | Complete payment | Payment successful | ☐ | |
| 8 | Verify subscription created | New subscription appears in list | ☐ | Renewal/additional service |

**Business Rule Verification:**
- [ ] MSA not required (customer has completed installation)
- [ ] Order proceeds directly to payment
- [ ] Subscription created immediately after payment (no installation needed)

---

## JOURNEY 3: WHOLESALE CUSTOMER REGISTRATION & QUOTATION REQUEST

### Test Case 3.1: Wholesale Customer Registration
**Objective:** Wholesale customer registers and awaits approval

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to `/register` | Registration page loads | ☐ | |
| 2 | Select "Wholesale" customer type | Wholesale registration form displays with partner type tabs | ☐ | |
| 3 | Select partner type:<br>- ISP<br>- Reseller<br>- Enterprise | Partner type selected | ☐ | |
| 4 | Fill in company details | Form accepts input | ☐ | |
| 5 | Upload required documents:<br>- Company registration<br>- Tax clearance<br>- Bank details | Documents uploaded successfully | ☐ | |
| 6 | Click "Register" | Registration submitted | ☐ | |
| 7 | Check status | Message displays: "Pending approval" | ☐ | |
| 8 | Check email | Registration confirmation email received | ☐ | |
| 9 | Verify Odoo sync | Customer created in Odoo with:<br>- Status: "pending_approval"<br>- Customer type: "wholesale"<br>- Partner type set<br>- Documents attached | ☐ | |
| 10 | Check admin notification | Admin receives approval request email | ☐ | |

**Odoo Verification:**
- [ ] Customer exists with `x_approval_status` = "pending"
- [ ] `x_customer_type` = "wholesale"
- [ ] `x_partner_type` = selected type (isp/reseller/enterprise)
- [ ] Documents attached to partner record

---

### Test Case 3.2: Admin Approval (Odoo)
**Objective:** Admin approves wholesale customer in Odoo

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Admin logs into Odoo | Odoo dashboard loads | ☐ | |
| 2 | Navigate to Contacts | Customer list displays | ☐ | |
| 3 | Find pending wholesale customer | Customer record shows "Pending Approval" | ☐ | |
| 4 | Review customer details and documents | All information visible | ☐ | |
| 5 | Click "Approve" button | Approval dialog appears | ☐ | |
| 6 | Confirm approval | Customer status updated to "approved" | ☐ | |
| 7 | Verify portal sync | Customer can now login to portal | ☐ | |
| 8 | Check customer email | Approval notification email received | ☐ | |

**Odoo Verification:**
- [ ] `x_approval_status` changed to "approved"
- [ ] Customer can authenticate in portal
- [ ] Approval timestamp recorded

---

### Test Case 3.3: Quotation Request (Custom Pricing)
**Objective:** Wholesale customer requests custom quotation

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Login as wholesale customer | Dashboard loads | ☐ | |
| 2 | Navigate to "Products" | Products page shows packages | ☐ | |
| 3 | View custom pricing package (e.g., DIA, IPT) | Package shows "Request Quote" button | ☐ | |
| 4 | Click "Request Quote" | Quotation request form opens | ☐ | |
| 5 | Fill in requirements:<br>- Bandwidth needed<br>- Service location<br>- Contract term<br>- Special requirements | Form accepts input | ☐ | |
| 6 | Submit request | Quotation request submitted | ☐ | |
| 7 | Check database | Quotation record created with:<br>- Status: "pending"<br>- Customer details<br>- Requirements | ☐ | Check `quotations` table |
| 8 | Verify Odoo sync | Quotation created in Odoo:<br>- Status: "draft"<br>- Customer linked<br>- Notes include requirements | ☐ | Check Odoo `sale.order` |
| 9 | Check customer email | Quotation request confirmation sent | ☐ | |
| 10 | Check admin notification | Sales team notified of new quotation request | ☐ | |

**Odoo Verification:**
- [ ] Quotation exists in Odoo as draft sale order
- [ ] Customer requirements in order notes
- [ ] Assigned to sales team

---

### Test Case 3.4: Quotation Preparation (Odoo)
**Objective:** Sales team prepares and sends quotation

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Sales team opens quotation in Odoo | Quotation details display | ☐ | |
| 2 | Add product lines with custom pricing | Products added | ☐ | |
| 3 | Set pricing and terms | Pricing configured | ☐ | |
| 4 | Add notes and validity period | Details added | ☐ | |
| 5 | Click "Send by Email" | Quotation sent to customer | ☐ | |
| 6 | Verify portal sync | Quotation appears in customer portal with:<br>- Status: "sent"<br>- Pricing details<br>- Validity date<br>- PDF download option | ☐ | |

**Portal Verification:**
- [ ] Quotation visible in customer's "Quotations" page
- [ ] Status = "sent"
- [ ] Pricing and terms display correctly
- [ ] PDF downloadable

---

### Test Case 3.5: Quotation Acceptance
**Objective:** Customer accepts quotation and proceeds to order

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Customer views quotation in portal | Quotation details display | ☐ | |
| 2 | Review pricing and terms | All details visible | ☐ | |
| 3 | Click "Accept Quotation" | Acceptance confirmation dialog | ☐ | |
| 4 | Confirm acceptance | Quotation accepted | ☐ | |
| 5 | Sign MSA (if required) | MSA signing flow completes | ☐ | |
| 6 | Order created | Order confirmation displays | ☐ | |
| 7 | Verify Odoo sync | Quotation converted to sales order in Odoo | ☐ | |
| 8 | Proceed to payment | Payment flow begins | ☐ | |

**Odoo Verification:**
- [ ] Quotation status changed to "sale"
- [ ] Sales order confirmed in Odoo
- [ ] Order lines match quotation

---

## JOURNEY 4: INVOICE & PAYMENT MANAGEMENT

### Test Case 4.1: Invoice Generation (Odoo)
**Objective:** System generates invoice after order confirmation

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Order confirmed in Odoo | Invoice automatically generated | ☐ | Production mode |
| 2 | Verify invoice details | Invoice includes:<br>- Order line items<br>- Correct pricing<br>- Tax calculations<br>- Payment terms | ☐ | |
| 3 | Verify portal sync | Invoice appears in customer portal | ☐ | |
| 4 | Check customer email | Invoice notification sent | ☐ | |

**Portal Verification:**
- [ ] Invoice visible in "Invoices" page
- [ ] Status = "unpaid"
- [ ] Amount matches order total
- [ ] PDF downloadable

---

### Test Case 4.2: Invoice Payment
**Objective:** Customer pays invoice via portal

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to "Invoices" | Invoice list displays | ☐ | |
| 2 | Click on unpaid invoice | Invoice details display | ☐ | |
| 3 | Click "Pay Now" | Payment interface loads | ☐ | |
| 4 | Complete payment | Payment processed | ☐ | |
| 5 | Verify invoice status | Invoice marked as "paid" | ☐ | |
| 6 | Verify Odoo sync | Invoice marked as paid in Odoo:<br>- Payment recorded<br>- Journal entry created<br>- Account receivable updated | ☐ | |
| 7 | Download receipt | Receipt PDF downloads | ☐ | |

**Odoo Verification:**
- [ ] Invoice state = "posted" and "paid"
- [ ] Payment journal entry exists
- [ ] Customer account balance updated

---

### Test Case 4.3: Bank Transfer Payment (Alternative)
**Objective:** Customer pays via bank transfer with proof of payment

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | View invoice | Invoice details display | ☐ | |
| 2 | Click "Bank Transfer" option | Bank details display | ☐ | |
| 3 | Upload proof of payment | File upload successful | ☐ | |
| 4 | Submit proof | Proof submitted for verification | ☐ | |
| 5 | Check payment status | Status: "pending_verification" | ☐ | |
| 6 | Admin verifies in Odoo | Payment approved | ☐ | |
| 7 | Verify portal sync | Invoice marked as paid | ☐ | |

---

## JOURNEY 5: SUBSCRIPTION MANAGEMENT

### Test Case 5.1: View Active Subscriptions
**Objective:** Customer views and manages subscriptions

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to "Subscriptions" | Subscription list displays | ☐ | |
| 2 | View subscription details | Details show:<br>- Package name<br>- Monthly amount<br>- Start date<br>- Next billing date<br>- Status<br>- Auto-renew setting | ☐ | |
| 3 | Check billing history | Past invoices listed | ☐ | |

---

### Test Case 5.2: Subscription Renewal (Automatic)
**Objective:** System automatically renews subscription and generates invoice

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Subscription reaches billing date | System processes renewal | ☐ | Via scheduled job |
| 2 | Verify invoice created | New invoice generated with:<br>- Subscription period<br>- Monthly amount<br>- Due date | ☐ | |
| 3 | Check customer notification | Renewal invoice email sent | ☐ | |
| 4 | Verify Odoo sync | Invoice created in Odoo | ☐ | |
| 5 | Verify next billing date | Updated to next month | ☐ | |

**Database Verification:**
- [ ] New invoice created
- [ ] `next_billing_date` incremented by 1 month
- [ ] Subscription status remains "active"

---

### Test Case 5.3: Subscription Cancellation
**Objective:** Customer requests subscription cancellation

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | View subscription details | Details display | ☐ | |
| 2 | Click "Cancel Subscription" | Cancellation confirmation dialog | ☐ | |
| 3 | Confirm cancellation | Cancellation request submitted | ☐ | |
| 4 | Verify status | Status: "pending_cancellation" | ☐ | Remains active until period end |
| 5 | Check notification | Cancellation confirmation email sent | ☐ | |
| 6 | Verify Odoo sync | Cancellation noted in Odoo | ☐ | |

---

## JOURNEY 6: INSTALLATION MANAGEMENT

### Test Case 6.1: Installation Scheduling (Production Mode)
**Objective:** Installation team schedules and completes installation

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Installation task created in Odoo | Task appears in project | ☐ | After payment |
| 2 | Team assigns technician | Task assigned | ☐ | |
| 3 | Technician schedules installation | Date confirmed | ☐ | |
| 4 | Customer receives notification | Installation scheduled email sent | ☐ | |
| 5 | Verify portal sync | Installation appears in portal with:<br>- Status: "scheduled"<br>- Scheduled date<br>- Technician details | ☐ | |

---

### Test Case 6.2: Installation Completion
**Objective:** Technician completes installation and activates service

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Technician completes installation | Updates task in Odoo | ☐ | |
| 2 | Mark task as "Done" | Task status updated | ☐ | |
| 3 | Add completion notes | Notes saved | ☐ | |
| 4 | Verify portal sync | Installation status: "completed" | ☐ | |
| 5 | Verify subscription activation | Subscription automatically created/activated | ☐ | Via InstallationObserver |
| 6 | Check customer notification | Installation completion email sent | ☐ | |

**System Verification:**
- [ ] Installation status = "completed"
- [ ] Subscription created with status "active"
- [ ] Service activation date recorded

---

## JOURNEY 7: SUPPORT TICKET SYSTEM

### Test Case 7.1: Create Support Ticket
**Objective:** Customer creates support ticket

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to "Support" | Support page loads | ☐ | |
| 2 | Click "New Ticket" | Ticket creation form displays | ☐ | |
| 3 | Fill in ticket details:<br>- Subject<br>- Category<br>- Priority<br>- Description<br>- Attachments | Form accepts input | ☐ | |
| 4 | Submit ticket | Ticket created successfully | ☐ | |
| 5 | Verify ticket number | Ticket number generated (format: TKT-XXXXXX) | ☐ | |
| 6 | Check email | Ticket confirmation email received | ☐ | |
| 7 | Verify Odoo sync | Ticket created in Odoo helpdesk:<br>- Customer linked<br>- Priority set<br>- Description included<br>- Attachments uploaded | ☐ | Check Odoo `helpdesk.ticket` |

**Odoo Verification:**
- [ ] Ticket exists in Odoo helpdesk
- [ ] Assigned to appropriate team based on category
- [ ] Customer partner linked
- [ ] Portal ticket ID in reference field

---

### Test Case 7.2: Ticket Response & Resolution
**Objective:** Support team responds and resolves ticket

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Support team views ticket in Odoo | Ticket details display | ☐ | |
| 2 | Add internal note | Note saved | ☐ | Not visible to customer |
| 3 | Add customer response | Response saved | ☐ | |
| 4 | Verify portal sync | Response appears in portal ticket thread | ☐ | |
| 5 | Customer receives notification | Response notification email sent | ☐ | |
| 6 | Customer replies in portal | Reply synced to Odoo | ☐ | |
| 7 | Support resolves ticket | Ticket marked as "solved" | ☐ | |
| 8 | Verify portal sync | Ticket status: "resolved" in portal | ☐ | |
| 9 | Check customer notification | Resolution email sent | ☐ | |

**Bidirectional Sync Verification:**
- [ ] Portal messages sync to Odoo
- [ ] Odoo responses sync to portal
- [ ] Status changes sync both ways
- [ ] Attachments sync correctly

---

## JOURNEY 8: PROFILE & ACCOUNT MANAGEMENT

### Test Case 8.1: Profile Management
**Objective:** Customer updates profile information

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to "Profile" | Profile page displays | ☐ | |
| 2 | View current information | All fields populated | ☐ | |
| 3 | Update company details | Changes saved | ☐ | |
| 4 | Update contact information | Changes saved | ☐ | |
| 5 | Verify Odoo sync | Customer record updated in Odoo | ☐ | |

---

### Test Case 8.2: Service Address Management
**Objective:** Customer manages service addresses

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to service addresses | Address list displays | ☐ | |
| 2 | Add new service address | Address form displays | ☐ | |
| 3 | Fill in address details | Form accepts input | ☐ | |
| 4 | Save address | Address saved successfully | ☐ | |
| 5 | Verify Odoo sync | Address created as child contact in Odoo | ☐ | |
| 6 | Edit existing address | Changes saved | ☐ | |
| 7 | Delete address | Address removed (if no active services) | ☐ | |

---

### Test Case 8.3: KYC Document Upload
**Objective:** Customer uploads KYC documents

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to KYC section | KYC status displays | ☐ | |
| 2 | Click "Upload Document" | Upload modal opens | ☐ | |
| 3 | Select document type | Type dropdown populated | ☐ | |
| 4 | Upload file (PDF/Image) | File uploaded successfully | ☐ | |
| 5 | Submit document | Document submitted for verification | ☐ | |
| 6 | Check database | Document record created with:<br>- Document type<br>- File path<br>- Status: "pending" | ☐ | Check `customer_documents` table |
| 7 | Verify Odoo sync | Document attached to customer in Odoo | ☐ | |

---

### Test Case 8.4: Password Change
**Objective:** Customer changes password

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to "Settings" | Settings page displays | ☐ | |
| 2 | Click "Change Password" | Password form displays | ☐ | |
| 3 | Enter current password | Field accepts input | ☐ | |
| 4 | Enter new password | Password strength indicator shows | ☐ | |
| 5 | Confirm new password | Passwords match | ☐ | |
| 6 | Submit change | Password updated successfully | ☐ | |
| 7 | Logout and login with new password | Login successful | ☐ | |

---

## JOURNEY 9: ORDER TRACKING & HISTORY

### Test Case 9.1: View Order History
**Objective:** Customer views all past orders

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | Navigate to "Orders" | Order list displays | ☐ | |
| 2 | View order filters | Filters available:<br>- Status<br>- Date range<br>- Package type | ☐ | |
| 3 | Apply filters | Results filtered correctly | ☐ | |
| 4 | Click on order | Order details display | ☐ | |

---

### Test Case 9.2: Order Tracking
**Objective:** Customer tracks order progress

| Step | Action | Expected Result | Pass/Fail | Notes |
|------|--------|----------------|-----------|-------|
| 1 | View order details | Order information displays | ☐ | |
| 2 | View order timeline | Timeline shows:<br>- Order placed<br>- Payment received<br>- Installation scheduled<br>- Installation completed<br>- Service activated | ☐ | |
| 3 | Check status updates | Status matches Odoo | ☐ | |
| 4 | View related documents | Links to:<br>- Invoice<br>- Receipt<br>- MSA (if applicable) | ☐ | |

---

## 5. Odoo Integration Verification

### 5.1 Customer Synchronization

| Integration Point | Verification Steps | Expected Behavior | Pass/Fail |
|-------------------|-------------------|-------------------|-----------|
| **Registration Sync** | 1. Register new customer in portal<br>2. Check Odoo Partners | Customer created in Odoo with:<br>- Correct customer type<br>- Account number<br>- Contact details<br>- Approval status (wholesale) | ☐ |
| **Profile Updates** | 1. Update customer profile in portal<br>2. Check Odoo partner record | Changes reflected in Odoo:<br>- Name<br>- Email<br>- Phone<br>- Address | ☐ |
| **Bidirectional Sync** | 1. Update customer in Odoo<br>2. Check portal profile | Changes from Odoo appear in portal | ☐ |

---

### 5.2 Order & Quotation Synchronization

| Integration Point | Verification Steps | Expected Behavior | Pass/Fail |
|-------------------|-------------------|-------------------|-----------|
| **Order Creation** | 1. Create order in portal<br>2. Check Odoo sale orders | Order created with:<br>- Customer linked<br>- Product lines<br>- Correct pricing<br>- Portal reference | ☐ |
| **Quotation Request** | 1. Request quotation in portal<br>2. Check Odoo quotations | Draft quotation created with:<br>- Customer requirements<br>- Status: draft | ☐ |
| **Quotation Acceptance** | 1. Accept quotation in portal<br>2. Check Odoo | Quotation confirmed to sale order | ☐ |
| **Status Updates** | 1. Update order status in Odoo<br>2. Check portal | Status synced to portal | ☐ |

---

### 5.3 Payment & Invoice Synchronization

| Integration Point | Verification Steps | Expected Behavior | Pass/Fail |
|-------------------|-------------------|-------------------|-----------|
| **Invoice Creation** | 1. Confirm order in Odoo<br>2. Check portal invoices | Invoice appears in portal with:<br>- Correct amount<br>- Line items<br>- Due date | ☐ |
| **Payment Recording** | 1. Pay invoice in portal<br>2. Check Odoo invoice | Invoice marked as paid:<br>- Payment journal entry<br>- Account receivable updated | ☐ |
| **Payment Sync** | 1. Record payment in Odoo<br>2. Check portal | Payment appears in portal payment history | ☐ |

---

### 5.4 Installation & Service Activation

| Integration Point | Verification Steps | Expected Behavior | Pass/Fail |
|-------------------|-------------------|-------------------|-----------|
| **Installation Task** | 1. Complete payment in portal<br>2. Check Odoo projects | Installation task created with:<br>- Customer details<br>- Service address<br>- Scheduled date<br>- Order reference | ☐ |
| **Installation Completion** | 1. Complete task in Odoo<br>2. Check portal | Installation status updated:<br>- Status: completed<br>- Completion date<br>- Technician notes | ☐ |
| **Service Activation** | 1. Complete installation<br>2. Check subscription | Subscription activated automatically | ☐ |

---

### 5.5 Support Ticket Synchronization

| Integration Point | Verification Steps | Expected Behavior | Pass/Fail |
|-------------------|-------------------|-------------------|-----------|
| **Ticket Creation** | 1. Create ticket in portal<br>2. Check Odoo helpdesk | Ticket created with:<br>- Customer linked<br>- Priority<br>- Description<br>- Attachments | ☐ |
| **Ticket Responses** | 1. Reply in Odoo<br>2. Check portal | Response appears in portal thread | ☐ |
| **Customer Replies** | 1. Reply in portal<br>2. Check Odoo | Reply synced to Odoo ticket | ☐ |
| **Status Updates** | 1. Update status in Odoo<br>2. Check portal | Status synced to portal | ☐ |

---

## 6. Data Flow Verification

### 6.1 End-to-End Data Flow (New Customer Order)

```
PORTAL                          DATABASE                        ODOO
------                          --------                        ----
1. Customer registers     →     Customer record created   →     Partner created
2. Coverage check         →     Feasibility check saved   →     (Portal only)
3. Add to cart           →     Cart item stored          →     (Portal only)
4. Checkout              →     Sales order created       →     Sale order created
5. Sign MSA              →     MSA document saved        →     MSA attached to partner
6. Payment               →     Payment record created    →     Invoice marked paid
7. Installation          →     Installation record       →     Project task created
8. Service activation    →     Subscription created      →     Recurring invoice template
```

**Verification Checklist:**
- [ ] Each step creates/updates correct database records
- [ ] Data syncs to Odoo at appropriate points
- [ ] No data loss or corruption
- [ ] Timestamps accurate
- [ ] Foreign key relationships maintained

---

### 6.2 Data Consistency Checks

| Check | Verification Method | Expected Result | Pass/Fail |
|-------|-------------------|-----------------|-----------|
| **Customer Count** | Compare portal customers vs Odoo partners | Counts match (excluding Odoo-only partners) | ☐ |
| **Order Count** | Compare portal orders vs Odoo sale orders | All portal orders exist in Odoo | ☐ |
| **Invoice Count** | Compare portal invoices vs Odoo invoices | All Odoo invoices synced to portal | ☐ |
| **Payment Amounts** | Compare payment totals | Amounts match exactly | ☐ |
| **Subscription Status** | Compare active subscriptions | Status consistent across systems | ☐ |

---

### 6.3 Real-time Sync Verification

| Event | Portal Action | Expected Odoo Update | Sync Time | Pass/Fail |
|-------|--------------|---------------------|-----------|-----------|
| Order creation | Submit order | Sale order created | < 5 seconds | ☐ |
| Payment completion | Pay invoice | Invoice marked paid | < 10 seconds | ☐ |
| Profile update | Save profile | Partner updated | < 5 seconds | ☐ |
| Ticket creation | Submit ticket | Helpdesk ticket created | < 5 seconds | ☐ |

---

## 7. Email Notification Verification

### 7.1 Customer Email Notifications

| Trigger | Email Type | Recipient | Content Verification | Pass/Fail |
|---------|-----------|-----------|---------------------|-----------|
| Registration (Business) | Welcome email | Customer | Contains login link, account details | ☐ |
| Registration (Wholesale) | Pending approval | Customer | Explains approval process | ☐ |
| Wholesale approval | Approval notification | Customer | Login credentials, next steps | ☐ |
| Order creation | Order confirmation | Customer | Order number, items, total | ☐ |
| Payment success | Payment receipt | Customer | Payment details, receipt link | ☐ |
| Invoice generation | Invoice notification | Customer | Invoice number, amount, due date | ☐ |
| Installation scheduled | Installation notice | Customer | Date, time, technician details | ☐ |
| Installation completed | Completion notice | Customer | Service activation details | ☐ |
| Ticket created | Ticket confirmation | Customer | Ticket number, expected response time | ☐ |
| Ticket response | Response notification | Customer | Response preview, link to ticket | ☐ |
| Subscription renewal | Renewal invoice | Customer | New invoice, payment link | ☐ |

---

### 7.2 Admin Email Notifications

| Trigger | Email Type | Recipient | Content Verification | Pass/Fail |
|---------|-----------|-----------|---------------------|-----------|
| Wholesale registration | Approval request | Admin/Sales | Customer details, documents | ☐ |
| Quotation request | New quotation | Sales team | Customer requirements | ☐ |
| Payment received | Payment notification | Finance | Payment details, order reference | ☐ |
| Ticket created | New ticket alert | Support team | Ticket details, priority | ☐ |

---

## 8. Performance & Load Testing

### 8.1 Page Load Times

| Page | Expected Load Time | Actual Load Time | Pass/Fail |
|------|-------------------|------------------|-----------|
| Dashboard | < 2 seconds | | ☐ |
| Products listing | < 3 seconds | | ☐ |
| Order details | < 2 seconds | | ☐ |
| Coverage check | < 5 seconds | | ☐ |
| Payment processing | < 3 seconds | | ☐ |

---

### 8.2 API Response Times

| Endpoint | Expected Response | Actual Response | Pass/Fail |
|----------|------------------|-----------------|-----------|
| GET /api/dashboard | < 1 second | | ☐ |
| POST /api/orders | < 2 seconds | | ☐ |
| POST /api/payments/initiate | < 3 seconds | | ☐ |
| GET /api/subscriptions | < 1 second | | ☐ |

---

## 9. Security Testing

### 9.1 Authentication & Authorization

| Test | Steps | Expected Result | Pass/Fail |
|------|-------|----------------|-----------|
| **Unauthorized access** | Access protected route without login | Redirected to login | ☐ |
| **Session timeout** | Wait for session expiry | Logged out, redirected to login | ☐ |
| **Password strength** | Try weak password | Rejected with requirements | ☐ |
| **SQL injection** | Enter SQL in form fields | Input sanitized, no error | ☐ |
| **XSS prevention** | Enter script tags | Escaped, not executed | ☐ |
| **CSRF protection** | Submit form without token | Request rejected | ☐ |
| **Data isolation** | Try accessing another customer's data | Access denied | ☐ |

---

### 9.2 Payment Security

| Test | Steps | Expected Result | Pass/Fail |
|------|-------|----------------|-----------|
| **SSL/TLS** | Check payment page | HTTPS enabled, valid certificate | ☐ |
| **PCI compliance** | Verify payment flow | No card data stored in portal | ☐ |
| **Gateway integration** | Test payment | Redirects to secure gateway | ☐ |
| **Webhook validation** | Send fake webhook | Rejected, signature validation | ☐ |

---

## 10. Mobile Responsiveness

### 10.1 Mobile Device Testing

| Page | Device | Layout | Functionality | Pass/Fail |
|------|--------|--------|---------------|-----------|
| Dashboard | iPhone | Responsive | All features work | ☐ |
| Dashboard | Android | Responsive | All features work | ☐ |
| Products | iPhone | Responsive | Filters, cart work | ☐ |
| Checkout | Android | Responsive | Forms, payment work | ☐ |
| Support | Tablet | Responsive | Ticket creation works | ☐ |

---

## 11. Browser Compatibility

### 11.1 Cross-Browser Testing

| Browser | Version | Dashboard | Orders | Payments | Pass/Fail |
|---------|---------|-----------|--------|----------|-----------|
| Chrome | Latest | | | | ☐ |
| Firefox | Latest | | | | ☐ |
| Safari | Latest | | | | ☐ |
| Edge | Latest | | | | ☐ |

---

## 12. Error Handling & Edge Cases

### 12.1 Error Scenarios

| Scenario | Expected Behavior | Pass/Fail |
|----------|------------------|-----------|
| **Network timeout** | Graceful error message, retry option | ☐ |
| **Odoo unavailable** | Portal continues, queues sync | ☐ |
| **Payment gateway down** | Clear error, alternative payment options | ☐ |
| **Invalid input** | Validation errors, helpful messages | ☐ |
| **Duplicate order** | Prevention or warning | ☐ |
| **Expired session** | Redirect to login, preserve form data | ☐ |

---

### 12.2 Edge Cases

| Scenario | Expected Behavior | Pass/Fail |
|----------|------------------|-----------|
| **Zero-amount invoice** | Handled correctly, no payment required | ☐ |
| **Negative pricing** | Validation prevents negative values | ☐ |
| **Very long address** | Text truncated or wrapped properly | ☐ |
| **Special characters in name** | Accepted and displayed correctly | ☐ |
| **Multiple simultaneous orders** | All processed correctly | ☐ |
| **Rapid form submissions** | Duplicate prevention works | ☐ |

---

## 13. Simulation vs Production Mode

### 13.1 Simulation Mode Testing (`SIMULATE_ORDERS=true`)

| Feature | Expected Behavior | Pass/Fail |
|---------|------------------|-----------|
| **Order creation** | Order created in portal only, not Odoo | ☐ |
| **Payment** | Auto-completes in test mode | ☐ |
| **Installation** | Auto-created and auto-completed | ☐ |
| **Subscription** | Auto-activated after installation | ☐ |
| **Emails** | All notifications sent | ☐ |

---

### 13.2 Production Mode Testing (`SIMULATE_ORDERS=false`)

| Feature | Expected Behavior | Pass/Fail |
|---------|------------------|-----------|
| **Order creation** | Synced to Odoo immediately | ☐ |
| **Payment** | Real payment processing | ☐ |
| **Installation** | Task created in Odoo, manual completion | ☐ |
| **Subscription** | Created after installation completion | ☐ |
| **Odoo workflow** | Full integration active | ☐ |

---

## 14. Regression Testing

### 14.1 Critical Path Verification

After any system updates, verify these critical paths:

| Path | Steps | Pass/Fail |
|------|-------|-----------|
| **Happy path - Business** | Register → Coverage → Order → Pay → Install → Subscribe | ☐ |
| **Happy path - Wholesale** | Register → Approve → Quote → Accept → Pay → Install | ☐ |
| **Renewal path** | Existing customer → New order → Pay → Activate | ☐ |
| **Support path** | Create ticket → Response → Resolution | ☐ |

---

## 15. Sign-off Sheet

### 15.1 Test Summary

| Category | Total Tests | Passed | Failed | Pass Rate |
|----------|------------|--------|--------|-----------|
| Authentication & Registration | | | | |
| Coverage & Ordering | | | | |
| Payment Processing | | | | |
| Installation Management | | | | |
| Subscription Management | | | | |
| Support Tickets | | | | |
| Odoo Integration | | | | |
| Email Notifications | | | | |
| Security | | | | |
| Performance | | | | |
| **TOTAL** | | | | |

---

### 15.2 Known Issues & Limitations

| Issue # | Description | Severity | Workaround | Target Fix Date |
|---------|-------------|----------|------------|-----------------|
| | | | | |
| | | | | |
| | | | | |

---

### 15.3 Approval Sign-off

| Role | Name | Signature | Date |
|------|------|-----------|------|
| **Business Owner** | | | |
| **Project Manager** | | | |
| **QA Lead** | | | |
| **Technical Lead** | | | |
| **Customer Representative** | | | |

---

### 15.4 Testing Environment Details

| Component | Version/Details |
|-----------|----------------|
| **Portal Frontend** | Next.js 14.x |
| **Backend API** | Laravel 11.x |
| **Database** | MySQL 8.0 |
| **Odoo Version** | Odoo 17 |
| **Payment Gateway** | Pesepay (Test/Live) |
| **Testing Period** | [Start Date] to [End Date] |
| **Test Environment URL** | [URL] |
| **Odoo Test Instance** | [URL] |

---

### 15.5 Post-UAT Actions

- [ ] Address all critical and high-priority issues
- [ ] Update documentation based on findings
- [ ] Conduct user training sessions
- [ ] Prepare production deployment plan
- [ ] Schedule go-live date
- [ ] Plan post-launch monitoring
- [ ] Establish support procedures

---

## 16. Appendices

### Appendix A: Test Data

**Business Customer Test Account:**
- Email: test.business@example.com
- Password: [Test Password]
- Company: Test Business Ltd
- Registration: 123/2026

**Wholesale Customer Test Account:**
- Email: test.wholesale@example.com
- Password: [Test Password]
- Company: Test ISP Ltd
- Partner Type: ISP

---

### Appendix B: Odoo Access Details

**Odoo URL:** [Odoo Instance URL]
**Test User:** [Username]
**Password:** [Password]

**Key Odoo Menus:**
- Contacts → Customers
- Sales → Orders
- Sales → Quotations
- Accounting → Invoices
- Projects → Installations
- Helpdesk → Tickets

---

### Appendix C: API Endpoints Reference

**Authentication:**
- POST /api/register
- POST /api/login
- POST /api/logout

**Orders:**
- GET /api/orders
- POST /api/orders
- GET /api/orders/{id}

**Payments:**
- POST /api/payments/initiate
- GET /api/payments/{id}/status
- POST /api/payments/webhook

**Subscriptions:**
- GET /api/subscriptions
- GET /api/subscriptions/{id}
- POST /api/subscriptions/{id}/cancel

**Support:**
- GET /api/support/tickets
- POST /api/support/tickets
- POST /api/support/tickets/{id}/reply

---

### Appendix D: Database Tables Reference

**Core Tables:**
- `customers` - Customer accounts
- `sales_orders` - Customer orders
- `payments` - Payment records
- `invoices` - Invoice records
- `subscriptions` - Active subscriptions
- `installations` - Installation records
- `support_tickets` - Support tickets
- `feasibility_checks` - Coverage checks
- `msa_documents` - MSA agreements
- `customer_documents` - KYC documents

---

### Appendix E: Configuration Settings

**Environment Variables:**
```env
# Simulation Mode
SIMULATE_ORDERS=true/false

# Payment Gateway
PAYMENT_MODE=test/live
PESEPAY_INTEGRATION_KEY=[key]

# Odoo Integration
ODOO_URL=[url]
ODOO_DATABASE=[database]
ODOO_USERNAME=[username]
ODOO_PASSWORD=[password]

# Email
MAIL_MAILER=smtp
MAIL_HOST=[host]
MAIL_FROM_ADDRESS=[email]
```

---

### Appendix F: Troubleshooting Guide

**Common Issues:**

1. **Order not syncing to Odoo**
   - Check `SIMULATE_ORDERS` setting
   - Verify Odoo credentials
   - Check Laravel logs: `storage/logs/laravel.log`
   - Verify Odoo API connectivity

2. **Payment not completing**
   - Check `PAYMENT_MODE` setting
   - Verify Pesepay credentials
   - Check payment gateway logs
   - Verify webhook URL accessible

3. **Email not sending**
   - Check SMTP configuration
   - Verify email credentials
   - Check mail queue: `php artisan queue:work`
   - Review email logs

4. **Installation not creating**
   - Verify payment completed
   - Check `SIMULATE_ORDERS` mode
   - Review installation observer logs
   - Check Odoo project configuration

---

## Document Control

**Version History:**

| Version | Date | Author | Changes |
|---------|------|--------|---------|
| 1.0 | 2026-02-27 | System | Initial UAT document |

**Distribution List:**
- Project Stakeholders
- QA Team
- Development Team
- Business Owners
- Customer Representatives

---

**END OF DOCUMENT**
