← 18. Lead & Client Management

Chunks — 18. Lead & Client Management

The FRD markdown is the source of truth; these chunks are the derived retrieval index used to give the test-case generator only the relevant slices. Rebuilt automatically when the FRD is saved.

626 chunks · ~54,757 tokens

#1
(intro)
~6 tok
Lead & Client Management
#2
(intro)
~1 tok
#
#3
(intro)
~1 tok
#
#4
(intro)
~1 tok
#
#5
(intro)
~1 tok
#
#6
(intro)
~1 tok
#
#7
**Lead & Client Management**
~49 tok
# **Lead & Client Management**

**Functional Requirement Document**

**BA & Ideation: Deval Chauhan**

**Reviewed By: Keval Gajjar**

**Updated Date:16 December 2025  
Status:**

**Version: 1.0**
#8
**Lead & Client Management Module - FRD Summary**
~39 tok
# **Lead & Client Management Module - FRD Summary**

**Module:** Lead & Client Management | **FRDs:** 15 | **Test Cases:** 352 | **Date:** December 17, 2025
#9
**Lead & Client Management Module - FRD Summary** > **FRD #1: Create Client / Company**
~257 tok
## **FRD #1: Create Client / Company**

*   Entry points: Client Listing → "+ New Client/Company" button OR Project/Company profiles
*   Create Client Modal: Full Name\*, Email\*, Phone\*, Company (optional), Address fields, Internal Note
*   Create Company Modal: Company Name\*, Industry, Contact fields (Email, Phone, Address)
*   Client-Company association: One company per client; multiple clients per company
*   Project association during creation: Select project + mandatory Client Role dropdown
*   Client Role categories vary by event type (Wedding, Corporate, Birthday, etc.)
*   Status determination: No project = Lead; Project with signed proposal OR payment = Booked Client
*   Email uniqueness validation within agency (case-insensitive)
*   Phone: 7-15 digits only; auto-prepend +1 if not specified
*   Country/State cascading dropdowns
*   Duplicate detection: Email only (not phone)
*   Company can be created inline during client creation
*   Client automatically associates with company if created together
#10
**Lead & Client Management Module - FRD Summary** > **FRD #2: Import Lead**
~240 tok
## **FRD #2: Import Lead**

*   Access: Client Listing → "Import Data" button
*   Modal with 2 tabs: Import (active) and History
*   File requirements: CSV/XLS/XLSX; 15MB max; 500 rows max
*   Template download: "lead\_import\_template.csv" with headers + 2 sample rows
*   Required fields: Full Name, Email, Phone Number
*   Optional fields: Street Address, Country, State, City, Zip, Internal Note
*   Column mapping: Auto-detection + manual adjustment; preview 3-5 rows
*   Duplicate handling: Email match (case-insensitive) UPDATES existing record
*   Status preservation: Booked Client remains Booked Client during override
*   Processing: Sequential; 2-5 minutes for 500 rows; continues if modal closed
*   Results: All Success / Partial Success / All Failed screens
*   Failure report: Download CSV with failed rows + error column
*   History tab: Shows past imports with date, status, counts
*   Import creates Leads only (never Booked Clients directly)
#11
**Lead & Client Management Module - FRD Summary** > **FRD #3: Client / Lead / Company Listing**
~255 tok
## **FRD #3: Client / Lead / Company Listing**

*   Tab structure: Booked Clients (default), Leads, Companies
*   Badge counts: Real-time totals per tab
*   Booked Clients: Clients with signed proposal OR payment on ANY project
*   Leads: Clients without signed proposal AND without payment
*   Table columns vary by tab; multi-value fields show "2 items +X" overflow
*   Search: 300ms debounce; case-insensitive partial match; searches Name/Email/Phone/Company
*   Filters: Primary Client Only toggle; multi-select Brands/Projects/Company/Industry
*   Filter logic: OR within same filter; AND across different filters
*   Sorting: Click header for ASC/DESC; default = Last Updated DESC
*   Pagination: 25 (default)/50/100 per page
*   Row actions: Edit, Archive, Delete (3-dot menu)
*   Archive restrictions: Cannot archive if sole contact on active project
*   Download: CSV export of filtered results + address fields
*   Create dropdown: Client/Lead OR Company options
*   View Archive: Navigate to archived listing
#12
**Lead & Client Management Module - FRD Summary** > **FRD #4: Archived Client / Lead / Company Listing**
~201 tok
## **FRD #4: Archived Client / Lead / Company Listing**

*   Access: "View Archive" button from active listing
*   Visual: Gray background (#F5F5F5); muted text (#666666); "Archived" label
*   Same tab structure: Shows archived records only
*   Edit action NOT available (must unarchive first)
*   Unarchive: Immediate, no confirmation; restores all associations
*   Portal access restored on unarchive; original status preserved
*   Delete: Permanent with confirmation; cannot be undone
*   Search/filter: Works on archived records only; separate from active state
*   Archive restrictions enforced: Sole contact / active project checks
*   Company restriction: Cannot archive if clients have active projects
*   Download includes archive date column
*   "View Active" button returns to active listing
#13
**Lead & Client Management Module - FRD Summary** > **FRD #5: Client Profile > Overview Tab**
~213 tok
## **FRD #5: Client Profile > Overview Tab**

*   Header: Name, Status badge (Lead/Booked), Edit/Archive/More actions
*   Status: System-determined; Lead (yellow) or Booked Client (green)
*   Contact Info card: Email (mailto), Phone (copy), Address, Internal Note
*   Company card: Shows association or empty state; Change/Remove options
*   Projects card: List with role, status, brand; "+ Add to Project" button
*   Financial Summary: Total Invoiced/Paid, Outstanding, Last Payment Date
*   Activity Timeline: Chronological communications, notes, system events
*   Portal Settings: Magic links per brand; copy/regenerate functions
*   Archive checks for sole contact restriction
*   Edit modal: Pre-populated; same validations as Create
*   Company management: Add/Change/Remove inline
*   Project association: Updates status to Booked if qualified
#14
**Lead & Client Management Module - FRD Summary** > **FRD #6: Client Profile > Communications Tab**
~187 tok
## **FRD #6: Client Profile > Communications Tab**

*   Email threads grouped by subject
*   Compose email: To/CC/BCC, subject, rich text editor, attachments (25MB)
*   Templates: Insert from library (filtered by brand)
*   Smart fields: Client name, project details, dynamic content
*   Attachments: Upload multiple; preview before send
*   Send options: Immediate or scheduled
*   Email tracking: Sent, Delivered, Opened, Clicked timestamps
*   Thread view: Collapsible conversations; newest first
*   Reply/Forward within thread context
*   Search emails by subject, content, date range
*   Filter: Sent/Received, Read/Unread, Has Attachments
*   Bulk actions: Mark read/unread, archive threads
*   Integration with project emails (if applicable)
#15
**Lead & Client Management Module - FRD Summary** > **FRD #7: Client Profile > Meetings**
~195 tok
## **FRD #7: Client Profile > Meetings**

*   Calendar view: Month/Week/Day toggle
*   Create meeting: Title, Date/Time, Duration, Location/Virtual link
*   Meeting types: In-person, Video Call, Phone Call
*   Attendees: Add multiple clients, team members
*   Recurring meetings: Daily/Weekly/Monthly patterns
*   Reminders: Email/SMS options; customizable timing
*   Meeting notes: Rich text; attach files
*   Integration with Google Calendar/Outlook (if configured)
*   Join button for video meetings (Zoom/Meet/Teams)
*   Reschedule: Drag-drop or edit form
*   Cancel meeting: With notification to attendees
*   Meeting history: Past meetings with notes/recordings
*   Timezone handling: Agency default with conversion display
*   Availability checking (if calendar integrated)
#16
**Lead & Client Management Module - FRD Summary** > **FRD #8: Client Profile > Payments Tab**
~178 tok
## **FRD #8: Client Profile > Payments Tab**

*   Payment list: All transactions across projects
*   Columns: Date, Amount, Method, Invoice #, Project, Status
*   Payment methods: Credit Card, ACH, Check, Cash, Other
*   Status indicators: Paid, Pending, Failed, Refunded
*   Quick filters: By project, date range, payment method
*   Total summary: Paid to date, Outstanding balance
*   Payment details modal: Full transaction info, receipt download
*   Refund capability: Partial or full with reason
*   Export: CSV/PDF of payment history
*   Integration with Stripe/payment gateway
*   Failed payment retry options
*   Payment receipts: Auto-generated PDFs
*   Payment notes: Internal comments on transactions
#17
**Lead & Client Management Module - FRD Summary** > **FRD #9: Client Profile > Notes Tab**
~164 tok
## **FRD #9: Client Profile > Notes Tab**

*   Note types: General, Call, Meeting, Follow-up, Other
*   Create note: Title, type selector, rich text content
*   Timestamp: Auto-captured with user attribution
*   Pin important notes to top
*   Search notes by content, type, date
*   Filter: By type, date range, created by
*   Edit own notes; view-only for others' notes
*   Delete with soft-delete (admin recovery)
*   Note templates for common scenarios
*   Attach files to notes (10MB limit)
*   @mention team members for notification
*   Activity feed integration
*   Private notes: Visible to creator + specified users only
*   Bulk export notes to PDF
#18
**Lead & Client Management Module - FRD Summary** > **FRD #10: Leads Profile**
~159 tok
## **FRD #10: Leads Profile**

*   Simplified version of Client Profile
*   No financial summary (no invoices/payments)
*   Lead-specific fields: Source, Interest Level, Follow-up Date
*   Lead score/rating system (1-5 stars)
*   Conversion tracking: Lead → Booked Client history
*   Quick convert: One-click to create project + convert
*   Lead pipeline stages: New, Contacted, Qualified, Proposal Sent, Lost
*   Lead source tracking: Website, Referral, Social Media, etc.
*   Competitor tracking if lost
*   Follow-up reminders and tasks
*   Bulk lead actions: Email, assign, tag
*   Lead analytics: Conversion rate, time to convert
#19
**Lead & Client Management Module - FRD Summary** > **FRD #11: Company Profile**
~169 tok
## **FRD #11: Company Profile**

*   Header: Company name, industry, website, social links
*   Contact Info card: Main office address, phone, general email
*   Clients card: List of associated clients with roles
*   Projects summary: Active, completed, total value
*   Brands association: Which brands work with company
*   Documents: Contracts, agreements, NDAs
*   Company notes: Shared across all clients
*   Billing preferences: NET terms, tax exempt status
*   Add client: Inline create or associate existing
*   Remove client: With confirmation if has projects
*   Archive restrictions: No clients with active projects
*   Duplicate check: Company name (case-insensitive)
#20
**Lead & Client Management Module - FRD Summary** > **FRD #12: Edit Client**
~149 tok
## **FRD #12: Edit Client**

*   Access: Edit button on listing or profile
*   Pre-populated modal with all current data
*   Cannot edit: Status (system-determined), direct project associations
*   Email change: Uniqueness check excluding current client
*   Address updates cascade to tax calculations
*   Company change: Via separate Company card action
*   Save validates all fields same as Create
*   Update triggers: Activity log, last modified timestamp
*   Concurrent edit: Last save wins
*   Cancel with unsaved changes: Confirmation prompt
*   Success toast: "Client updated successfully"
#21
**Lead & Client Management Module - FRD Summary** > **FRD #13: Edit Company**
~99 tok
## **FRD #13: Edit Company**

*   Access: Edit button on listing or company profile
*   Fields: All editable except client associations
*   Industry: Dropdown + custom option
*   Name uniqueness within agency
*   Address change affects all client tax calculations
*   Cannot change client associations here
*   Validation same as Create Company
*   Updates reflected immediately in client profiles
#22
**Lead & Client Management Module - FRD Summary** > **FRD #14: Client Delete**
~120 tok
## **FRD #14: Client Delete**

*   Soft delete (archive) vs hard delete options
*   Restrictions: Cannot delete if sole contact on project
*   Cannot delete with unpaid invoices
*   Confirmation modal: "This cannot be undone"
*   Cascade behavior: Remove from company, preserve in history
*   Audit trail: Who deleted, when, reason field
*   Recovery: Admin-only within 30 days
*   Email notification to client (optional)
*   Bulk delete: Multiple selection with same restrictions
#23
**Lead & Client Management Module - FRD Summary** > **FRD #15: Company Delete**
~94 tok
## **FRD #15: Company Delete**

*   Restrictions: No clients attached
*   Cannot delete with active project references
*   Two-step confirmation for permanent delete
*   Option to archive instead of delete
*   Historical data shows "Deleted Company" placeholder
*   Cannot recover once deleted
*   Audit log entry maintained
*   Check for financial transactions before delete
#24
**Lead & Client Management Module - FRD Summary** > **TBD Items (Requiring Future Clarification)**
~188 tok
## **TBD Items (Requiring Future Clarification)**

*   Portal access rules for leads vs clients
*   Character limits for all text fields
*   Duplicate client merge functionality
*   Bulk import error recovery process
*   International phone number formatting
*   Custom field definitions
*   API integration for client sync
*   Client portal self-registration
*   GDPR compliance for data deletion
*   Multi-currency support for companies
*   Client communication preferences
*   Automated lead scoring algorithm
*   Social media integration for profiles
*   Document storage limits per client
*   Two-factor authentication for portal access

**Total:** 15 FRDs | 12 Sections Each | 352 Test Cases | 263 Acceptance Criteria

1\. Create Client / Company
#25
**FRD #1: Create Client / Company**
~45 tok
# **FRD #1: Create Client / Company**

**Document Version:** 1.0 **Created Date:** December 16, 2025 **Module:** Create Client / Company **Platform:** Pixally CRM - Agency Portal
#26
**FRD #1: Create Client / Company** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#27
**FRD #1: Create Client / Company** > **1\. Module Overview** > 1.1 Purpose
~92 tok
### 1.1 Purpose

This document defines the functional requirements for creating new Clients (including Leads) and Companies within the Pixally CRM system. The Create Client/Company functionality allows agency users to manually add new contacts and organizations to the system, establishing the foundation for project management, communication, and financial tracking.
#28
**FRD #1: Create Client / Company** > **1\. Module Overview** > 1.2 Scope
~70 tok
### 1.2 Scope

This FRD covers:

*   Create New Client/Lead flow
*   Create New Company flow
*   Client-Company association during creation
*   Client-Project association during creation
*   Form validations and business rules
*   Status assignment logic (Lead vs Booked Client)
#29
**FRD #1: Create Client / Company** > **1\. Module Overview** > 1.3 Key Business Rules
~166 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

A newly created client without any project attachment defaults to **Lead** status

BR-002

A client attached to a project with a signed proposal OR payment made becomes a **Booked Client**

BR-003

A client attached to a Lead project (no signed proposal, no payment) remains a **Lead**

BR-004

Client Role is mandatory when attaching a client to a project

BR-005

A client can be associated with only **one company** at a time

BR-006

A company can have **multiple clients** associated with it

BR-007

Companies cannot be directly linked to projects; projects always associate with clients
#30
**FRD #1: Create Client / Company** > **2\. User Roles & Permissions**
~123 tok
## **2\. User Roles & Permissions**

**Role**

**Create Client**

**Create Company**

**Attach to Project**

**Attach to Company**

**View**

Agency Owner (AO)

✅

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

✅

✅

Team Member

✅

✅

✅

✅

✅

Contractor

❌

❌

❌

❌

Limited

Client

❌

❌

❌

❌

❌

**Note:** Permission matrix is subject to confirmation based on the Roles & Permissions module. \[TBD: PM to confirm role-based access for client/company creation\]
#31
**FRD #1: Create Client / Company** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#32
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.1 Access Points
~124 tok
### 3.1 Access Points

**Access Point**

**Navigation Path**

**Available Options**

Client Listing Header

Clients & Contractors → Clients → "+ New Client/Company" button

Client/Lead, Company

Client Profile (Add Company)

Client Profile → Company Section → "+ Add Company"

New Company, Existing Company

Company Profile (Add Client)

Company Profile → Client(s) Section → "+" button

New Client, Existing Client

Project Module

Project → Clients Tab → Add Client

New Client, Existing Client
#33
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.2 Create Client/Lead Flow
~62 tok
### 3.2 Create Client/Lead Flow

User clicks "+ New Client/Company" button in the client listing header. System displays dropdown with two options: "Client/Lead" and "Company". User selects "Client/Lead". System opens the Create New Client modal.
#34
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.3 Filling Client Information
~148 tok
### 3.3 Filling Client Information

User enters Full Name (mandatory). User enters Email Address (mandatory). User enters Phone Number with country code (mandatory). User optionally selects a Company from the dropdown. User optionally fills address fields (Street, Country, State, City, Zip). User optionally adds Internal Note (max 1000 characters).

**Field Display Order:**

*   Full Name\*
*   Email Address\*
*   Phone Number\* (Country Code dropdown + Number input)
*   Company (dropdown)
*   Street Address
*   Country
*   State
*   City
*   Zip/Postal Code
*   Internal Note (textarea)
#35
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.4 Adding Client to Project (Optional)
~90 tok
### 3.4 Adding Client to Project (Optional)

User checks "Add client to existing project" checkbox. System displays two additional dropdowns: Project and Client Role. User selects a Project from the dropdown. System populates Client Role dropdown based on project's event type. User selects a Client Role. Both fields become mandatory when checkbox is checked.
#36
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.5 Status Warning Display
~58 tok
### 3.5 Status Warning Display

System displays a yellow alert box (always visible) with status behavior:

*   Attached to Booked project → Booked Client
*   Attached to Lead project → Lead
*   No project attached → Defaults to Lead
#37
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.6 Submitting Client Form
~84 tok
### 3.6 Submitting Client Form

User clicks "Create Client" button. System validates all mandatory fields. If validation fails, system displays inline errors below each failed field. If validation passes, system creates client record. System displays success toast notification. System closes modal. System refreshes the client listing.
#38
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.7 Cancel Client Creation
~45 tok
### 3.7 Cancel Client Creation

User clicks "Cancel" button. If form has data, system displays confirmation prompt: "Discard changes?" User confirms to close modal without saving.
#39
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.8 Create Client from Company Profile
~60 tok
### 3.8 Create Client from Company Profile

User navigates to Company Profile → Client(s) Section → "+" button → "New Client". System opens Create Client modal with Company pre-selected and disabled. User fills remaining fields and submits.
#40
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.9 Create Client from Project Module
~76 tok
### 3.9 Create Client from Project Module

User navigates to Project → Clients Tab → Add Client → "New Client". System opens Create Client modal with "Add to project" checkbox pre-checked. System pre-selects the current Project in dropdown. User fills remaining fields, selects Client Role, and submits.
#41
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.10 Create Company Flow
~53 tok
### 3.10 Create Company Flow

User clicks "+ New Client/Company" button in the client listing header. System displays dropdown with two options. User selects "Company". System opens the Create New Company modal.
#42
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.11 Filling Company Information
~101 tok
### 3.11 Filling Company Information

User enters Company Name (mandatory). User selects Industry from dropdown (mandatory). If "Other" selected, system displays "Please specify industry" text field (mandatory). User optionally fills Email Address, Phone Number, Website. User optionally fills address fields (Street, Country, State, City, Zip). User optionally adds Internal Note (max 1000 characters).
#43
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.12 Attaching Clients to Company
~148 tok
### 3.12 Attaching Clients to Company

**Option A: Attach New Client(s)** User clicks "Attach New Client" option. System displays inline client form with Full Name\*, Email\*, Phone\* fields. User fills client details. User clicks "+ Add Another" to add more clients. User clicks trash icon to remove a client row.

**Option B: Attach Existing Client(s)** User clicks "Attach Existing Client" option. System displays searchable list of existing clients. User searches and selects clients via checkboxes (multi-select). System shows warning indicator if client has existing company association.
#44
**FRD #1: Create Client / Company** > **3\. User Flow** > 3.13 Submitting Company Form
~107 tok
### 3.13 Submitting Company Form

User clicks "Create Company" button. System validates Company Name, Industry, and conditional fields. If validation fails, system displays inline errors. If validation passes, system creates company record. System creates new client records (if any). System creates/updates client-company associations. System displays success toast with client count. System closes modal and refreshes listing.
#45
**FRD #1: Create Client / Company** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#46
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.1 Create Client Modal - Empty State
~141 tok
### 4.1 Create Client Modal - Empty State

System opens modal with all text inputs empty (with placeholder text). System sets Phone Number country code to user's detected country or defaults to United States (+1). System loads Company dropdown with "Select Company" placeholder. System populates Company dropdown with all active companies. System loads Country dropdown with "Select Country" placeholder and all countries. System disables State dropdown (enabled only after Country selection). System displays "Add client to existing project" checkbox as unchecked.
#47
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.2 Field Dependencies and Data Loading
~261 tok
### 4.2 Field Dependencies and Data Loading

**Company Dropdown:** System fetches all active companies from database. System sorts companies alphabetically by name. System enables type-ahead search functionality.

**Country Dropdown:** System loads countries from master country list. System displays flag icons next to country names. System places common countries (USA, Canada, UK) at top of list.

**State Dropdown:** System keeps State dropdown disabled until Country is selected. When user selects Country, system populates State dropdown with matching states/provinces. If selected country has no states, system displays "N/A" and keeps dropdown disabled.

**Project Dropdown:** When user checks "Add to project" checkbox, system queries Active projects. System filters projects by user's access permissions. System sorts projects by most recently updated (newest first).

**Client Role Dropdown:** When user selects a Project, system reads project's event type. System populates Client Role dropdown with roles matching the event type.
#48
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.3 Client Role Categories by Event Type
~168 tok
### 4.3 Client Role Categories by Event Type

**Event Type**

**Available Roles**

Wedding

Bride, Groom, Bride's Parents, Groom's Parents, Wedding Planner, Maid of Honor, Best Man, Other Family Member, Vendor Contact

Corporate/Brand Shoot

Marketing Manager, Brand Manager, Project Coordinator, Creative Director, Product Owner, Stakeholder, Vendor Contact

Music Video

Artist/Performer, Manager, Label Representative, Creative Director, Producer, Choreographer

Real Estate

Property Owner, Real Estate Agent, Developer, Architect, Interior Designer, Property Manager

General

Primary Contact, Secondary Contact, Decision Maker, Budget Holder, Technical Contact, Other
#49
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.4 Client Status Assignment Logic
~144 tok
### 4.4 Client Status Assignment Logic

System automatically determines client status based on project association.

**Scenario 1: No Project Attached** System assigns "Lead" status to client.

**Scenario 2: Project Attached** System checks if project has signed proposal (proposal.status = "Signed" AND proposal.signature\_date IS NOT NULL). System checks if project has completed payment (payment.status = "Completed" for at least one payment). If EITHER condition is true → System assigns "Booked Client" status. If NEITHER condition is true → System assigns "Lead" status.
#50
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.5 Create Client - Validation Rules
~151 tok
### 4.5 Create Client - Validation Rules

**Full Name Validation:** System checks field is not empty. System validates minimum 2 characters. System validates maximum 100 characters.

**Email Validation:** System checks field is not empty. System validates email format (RFC 5322). System checks email is unique within agency (excluding archived clients).

**Phone Validation:** System checks country code is selected. System validates phone number is 7-15 digits.

**Conditional Validation (when "Add to project" checked):** System validates Project is selected. System validates Client Role is selected.
#51
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.6 Create Client - Record Processing
~192 tok
### 4.6 Create Client - Record Processing

**Step 1: Create Client Record** System creates client record with all provided field values. System assigns determined status (Lead or Booked Client). System sets created\_at and updated\_at timestamps. System sets created\_by to current user ID.

**Step 2: Create Company Association (if applicable)** If Company is selected, system creates client\_company record. System sets company\_id and client\_id.

**Step 3: Create Project Association (if applicable)** If Project is selected, system creates client\_project record. System sets project\_id, client\_id, and role\_id.

**Step 4: Post-Creation Actions** System generates success toast message. System closes modal. System refreshes client listing to show new record.
#52
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.7 Create Company - Empty State
~70 tok
### 4.7 Create Company - Empty State

System opens modal with all text inputs empty. System loads Industry dropdown with predefined categories. System disables State dropdown until Country selected. System hides "Please specify industry" field (shown only when "Other" selected).
#53
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.8 Industry Selection with "Other" Handling
~62 tok
### 4.8 Industry Selection with "Other" Handling

User selects "Other" from Industry dropdown. System displays "Please specify industry" text input. System marks text input as mandatory. System stores custom value in industry\_other database field.
#54
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.9 Client Attachment Logic
~330 tok
### 4.9 Client Attachment Logic

**Attach New Clients:** User clicks "Attach New Client" option. System displays inline form with Full Name\*, Email\*, Phone\* fields. System applies same validation rules as Create Client form. User clicks "+ Add Another" to add additional client rows. User clicks trash icon to remove a client row. System supports unlimited new client additions.

**Attach Existing Clients:** User clicks "Attach Existing Client" option. System displays searchable list of all active clients. System enables multi-select via checkboxes. System shows warning icon next to clients with existing company associations. Warning text: "This client will be moved from \[Current Company Name\]"

**Attach New Client:**

*   User clicks "Attach New Client" option.
*   System displays inline form with Full Name\*, Email\*, Phone\* fields.
*   System applies same validation rules as Create Client form.
*   User can attach only one new client at a time.

**Attach Existing Client:**

*   User clicks "Attach Existing Client" option.
*   System displays searchable list of all active clients.
*   User can select only one client from the list at a time.
*   System shows warning icon next to clients with existing company associations.
*   Warning text: "This client will be moved from \[Current Company Name\]"
#55
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.10 Create Company - Record Processing
~232 tok
### 4.10 Create Company - Record Processing

**Step 1: Validate Input** System validates Company Name is not empty (min 2 chars). System validates Industry is selected. If Industry = "Other", system validates custom industry field is not empty.

**Step 2: Create Company Record** System creates company record with all provided field values. System sets created\_at and updated\_at timestamps.

**Step 3: Process New Clients** For each new client, system creates client record. System assigns "Lead" status to new clients. System creates client\_company association.

**Step 4: Process Existing Clients** For each existing client, system updates client\_company association. If client had previous company, system removes old association. System creates new client\_company association.

**Step 5: Post-Creation Actions** System generates success message with client count. System closes modal. System refreshes company listing.
#56
**FRD #1: Create Client / Company** > **4\. Functional Logic** > 4.11 Impact on Other Modules
~196 tok
### 4.11 Impact on Other Modules

**Module**

**Impact Description**

Project Module

New clients appear in project client selection. Project client list updates immediately when client attached.

Financial Module

Clients on booked projects become eligible for invoicing. Invoice recipient populated from client email.

Email Module

Client email used as recipient for all communications. Email templates can use client Smart Fields.

Client Portal

Portal access granted when client attached to project. Magic link generated per brand. Portal URL sent via email.

Reports Module

Client/Lead counts updated in real-time dashboards. New clients appear in client reports.

Company Module

Company-client relationships visible in Company Profile. Client count updated on company cards.
#57
**FRD #1: Create Client / Company** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#58
**FRD #1: Create Client / Company** > **5\. Field Details & Validations** > 5.1 Create Client Fields
~303 tok
### 5.1 Create Client Fields

**Field Name**

**Field Type**

**Mandatory**

**Max Length**

**Validation Rules**

**Default Value**

Full Name

Text Input

Yes

100 chars

Not empty; Min 2 chars; Alphanumeric + spaces

Empty

Email Address

Email Input

Yes

255 chars

Valid format (RFC 5322); Unique within agency

Empty

Phone (Country Code)

Dropdown

Yes

N/A

Must select valid code

User's country or +1

Phone Number

Text Input

Yes

20 chars

Numeric only; 7-15 digits

Empty

Company

Dropdown

No

N/A

Must be existing company or empty

Empty

Street Address

Text Input

No

255 chars

Alphanumeric + special chars

Empty

Country

Text Input

No

N/A

Valid country from list

Empty

State

Text Input

No

N/A

Based on Country; Disabled if no Country

Empty

City

Text Input

No

100 chars

Alphanumeric + spaces

Empty

Zip/Postal Code

Text Input

No

20 chars

Alphanumeric

Empty

Internal Note

Textarea

No

1000 chars

Free text; Team-only visibility

Empty

Add to Project

Checkbox

No

N/A

Checked/Unchecked

Unchecked

Project

Dropdown

Conditional

N/A

Must select when checkbox checked

Empty

Client Role

Dropdown

Conditional

N/A

Must select when project selected

Empty
#59
**FRD #1: Create Client / Company** > **5\. Field Details & Validations** > 5.2 Create Company Fields
~262 tok
### 5.2 Create Company Fields

**Field Name**

**Field Type**

**Mandatory**

**Max Length**

**Validation Rules**

**Default Value**

Company Name

Text Input

Yes

150 chars

Not empty; Min 2 chars

Empty

Industry

Dropdown

Yes

N/A

Must select valid industry

Empty

Other Industry

Text Input

Conditional

100 chars

Not empty if Industry = Other

Empty

Email Address

Email Input

No

255 chars

Valid format if provided; Unique

Empty

Phone (Country Code)

Dropdown

No

N/A

Valid code if phone provided

+1

Phone Number

Text Input

No

20 chars

7-15 digits if provided

Empty

Website

URL Input

No

500 chars

Valid URL format (http/https)

Empty

Street Address

Text Input

No

255 chars

Alphanumeric + special chars

Empty

Country

Text Input

No

N/A

Valid country from list

Empty

State

Text Input

No

N/A

Based on Country

Empty

City

Text Input

No

100 chars

Alphanumeric + spaces

Empty

Zip/Postal Code

Text Input

No

20 chars

Alphanumeric

Empty

Internal Note

Textarea

No

1000 chars

Free text

Empty
#60
**FRD #1: Create Client / Company** > **6\. Success Message Handling**
~9 tok
## **6\. Success Message Handling**
#61
**FRD #1: Create Client / Company** > **6\. Success Message Handling** > 6.1 Create Client Success Messages
~151 tok
### 6.1 Create Client Success Messages

**Action**

**Success Message**

**Display Type**

**Duration**

Client created without project

"Client created successfully"

Toast Notification

3 seconds

Client created with project

"\[Client Name\] created and added to \[Project Name\]"

Toast Notification

3 seconds

Client created with company

"\[Client Name\] created and associated with \[Company Name\]"

Toast Notification

3 seconds

Client created with project and company

"\[Client Name\] created, added to \[Project Name\], and associated with \[Company Name\]"

Toast Notification

4 seconds
#62
**FRD #1: Create Client / Company** > **6\. Success Message Handling** > 6.2 Create Company Success Messages
~147 tok
### 6.2 Create Company Success Messages

**Action**

**Success Message**

**Display Type**

**Duration**

Company created without clients

"Company created successfully"

Toast Notification

3 seconds

Company created with new clients

"\[Company Name\] created with \[X\] new client(s)"

Toast Notification

3 seconds

Company created with existing clients

"\[Company Name\] created and \[X\] client(s) associated"

Toast Notification

3 seconds

Company created with mixed clients

"\[Company Name\] created with \[X\] new and \[Y\] existing client(s)"

Toast Notification

4 seconds
#63
**FRD #1: Create Client / Company** > **6\. Success Message Handling** > 6.3 Success Message Behavior
~80 tok
### 6.3 Success Message Behavior

**Aspect**

**Behavior**

Position

Top-right corner of screen

Animation

Slide in from right, fade out

Auto-dismiss

Yes, after specified duration

Manual dismiss

Click X icon to close immediately

Stacking

Multiple toasts stack vertically

Color

Green background with white text
#64
**FRD #1: Create Client / Company** > **7\. Error Message Handling**
~8 tok
## **7\. Error Message Handling**
#65
**FRD #1: Create Client / Company** > **7\. Error Message Handling** > 7.1 Validation Errors
~367 tok
### 7.1 Validation Errors

**Field**

**Error Condition**

**Error Message**

**Display Location**

Full Name

Empty

"Full name is required"

Below field

Full Name

< 2 characters

"Full name must be at least 2 characters"

Below field

Full Name

\> 100 characters

"Full name cannot exceed 100 characters"

Below field

Email Address

Empty

"Email address is required"

Below field

Email Address

Invalid format

"Please enter a valid email address"

Below field

Email Address

Duplicate exists

"A client with this email address already exists"

Below field

Phone Number

Empty

"Phone number is required"

Below field

Phone Number

Invalid format

"Please enter a valid phone number"

Below field

Phone Number

< 7 digits

"Phone number must be at least 7 digits"

Below field

Phone Number

\> 15 digits

"Phone number cannot exceed 15 digits"

Below field

Project

Not selected (when checkbox checked)

"Please select a project"

Below field

Client Role

Not selected (when project selected)

"Please select a client role"

Below field

Company Name

Empty

"Company name is required"

Below field

Industry

Not selected

"Please select an industry"

Below field

Other Industry

Empty (when Industry = Other)

"Please specify the industry"

Below field

Website

Invalid URL

"Please enter a valid website URL (include http:// or https://)"

Below field

Company Email

Duplicate exists

"A company with this email address already exists"

Below field
#66
**FRD #1: Create Client / Company** > **7\. Error Message Handling** > 7.2 System Errors
~126 tok
### 7.2 System Errors

**Error Type**

**Error Message**

**Display Type**

**User Action**

Network Error

"Unable to save. Please check your connection and try again."

Toast Notification

Retry

Server Error

"Something went wrong. Please try again later."

Toast Notification

Retry or contact support

Session Expired

"Your session has expired. Please log in again."

Modal

Redirect to login

Permission Denied

"You don't have permission to perform this action."

Toast Notification

Contact admin
#67
**FRD #1: Create Client / Company** > **8\. Edge Cases**
~337 tok
## **8\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

User creates client with email existing in archived records

Allow creation — archived separate from active

Medium

EC-002

User selects project, then unchecks checkbox

Project and Role fields clear and hide

High

EC-003

User changes Country after State selected

State dropdown resets and repopulates

High

EC-004

Client selected for company already has company

Warning: "Selected client(s) will be moved from current company"

High

EC-005

User attaches same client to company twice

Error: "Client already associated with this company"

Medium

EC-006

Network disconnects during submission

Form data preserved; error shown; retry available

High

EC-007

User closes modal without saving

Confirmation prompt: "Discard changes?"

Medium

EC-008

Internal note at character limit

Character counter shown; input blocked at limit

Low

EC-009

Special characters in name (é, ñ, 中文)

System accepts and stores Unicode correctly

Medium

EC-010

Formatted text pasted into internal note

Formatting stripped; plain text stored

Low

EC-011

Company deleted before form submission

Error: "Selected company no longer exists"

Medium

EC-012

Same email submitted from multiple tabs

First succeeds; second receives duplicate error

Medium
#68
**FRD #1: Create Client / Company** > **9\. Acceptance Criteria**
~8 tok
## **9\. Acceptance Criteria**
#69
**FRD #1: Create Client / Company** > **9\. Acceptance Criteria** > 9.1 Create Client
~240 tok
### 9.1 Create Client

**AC ID**

**Criteria**

AC-001

User can access Create Client modal from client listing header

AC-002

All mandatory fields (Full Name, Email, Phone) must be filled

AC-003

System validates email format and displays error for invalid

AC-004

System checks for duplicate email and prevents creation

AC-005

Phone number accepts country code and validates format

AC-006

Optional fields can be left empty without blocking submission

AC-007

Checking "Add to project" reveals Project and Role dropdowns

AC-008

Project and Role become mandatory when checkbox checked

AC-009

Client created with "Lead" status when no project attached

AC-010

Client created with correct status based on project state

AC-011

Success message displays upon successful creation

AC-012

Modal closes and listing refreshes after creation

AC-013

Cancel button closes modal without saving

AC-014

Yellow alert box displays status behavior information
#70
**FRD #1: Create Client / Company** > **9\. Acceptance Criteria** > 9.2 Create Company
~187 tok
### 9.2 Create Company

**AC ID**

**Criteria**

AC-015

User can access Create Company modal from listing header

AC-016

All mandatory fields (Company Name, Industry) must be filled

AC-017

Selecting "Other" industry reveals and requires text field

AC-018

Optional fields can be left empty

AC-019

Website field validates URL format if provided

AC-020

"Attach New Clients" displays inline client form

AC-021

"Attach Existing Clients" displays searchable list

AC-022

Multiple existing clients can be selected

AC-023

New inline clients follow same validation rules

AC-024

Company created with all clients in single transaction

AC-025

Success message displays client count

AC-026

Previously associated clients moved to new company
#71
**FRD #1: Create Client / Company** > **10\. Manual Test Cases**
~227 tok
## **10\. Manual Test Cases**

Manual test cases for this module are provided in a separate Excel file:

📎 **File:** [FRD\_01\_Create\_Client\_Company\_Test\_Cases.xlsx](https://docs.google.com/spreadsheets/d/1-3lBNagz2l8yxFeYOpPA4aF22JY8YHNo/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)

The test cases cover:

*   Create Client functionality (minimum fields, all fields, project attachment)
*   Create Company functionality (minimum fields, with clients)
*   Field validations (email, phone, URL, required fields)
*   Conditional field behavior (State dependency, project checkbox)
*   Client status logic (Lead vs Booked Client)
*   Alternative access points (Company Profile, Project Module)
*   Permission-based scenarios
*   Integration with Projects, Companies, and Client Portal
*   Edge case testing (duplicates, Unicode, network errors)
*   All acceptance criteria validation
#72
**FRD #1: Create Client / Company** > **11\. Dependencies**
~182 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Project Module

Data

Project list for client attachment

DEP-002

Company Module

Data

Company list for client association

DEP-003

Master Data - Countries

Data

Country dropdown values

DEP-004

Master Data - States

Data

State dropdown values (by country)

DEP-005

Master Data - Industries

Data

Industry dropdown values

DEP-006

User Authentication

Functional

User must be logged in

DEP-007

Role-Based Access Control

Functional

User must have create permissions

DEP-008

Client Portal Module

Functional

Portal link generation

DEP-009

Email Module

Functional

Magic link email on portal access
#73
**FRD #1: Create Client / Company** > **12\. References**
~6 tok
## **12\. References**
#74
**FRD #1: Create Client / Company** > **12\. References** > 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=34068-29574&t=r4NL4B1STgwBOH95-0), [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=34318-27961&t=r4NL4B1STgwBOH95-0)
~65 tok
### 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=34068-29574&t=r4NL4B1STgwBOH95-0), [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=34318-27961&t=r4NL4B1STgwBOH95-0)

2\. Import Lead
#75
**FRD #2: Import Lead**
~39 tok
# **FRD #2: Import Lead**

**Document Version:** 1.0 **Created Date:** December 16, 2025 **Module:** Import Lead **Platform:** Pixally CRM - Agency Portal
#76
**FRD #2: Import Lead** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#77
**FRD #2: Import Lead** > **1\. Module Overview** > 1.1 Purpose
~100 tok
### 1.1 Purpose

This document defines the functional requirements for the Import Lead functionality within the Pixally CRM system. The Import feature allows agency users to bulk import contacts from external spreadsheet files (CSV, Excel), automatically creating Lead records in the system. This eliminates manual data entry for large contact lists and facilitates migration from other CRM systems.
#78
**FRD #2: Import Lead** > **1\. Module Overview** > 1.2 Scope
~67 tok
### 1.2 Scope

This FRD covers:

*   Import file upload and validation
*   Column mapping interface
*   Import processing logic
*   Duplicate handling (override behavior)
*   Success and failure result handling
*   Import history tracking
*   Sample template download
#79
**FRD #2: Import Lead** > **1\. Module Overview** > 1.3 Key Business Rules
~148 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

All imported contacts are created as **Leads** (not Booked Clients)

BR-002

Duplicate detection uses **email address only** (not phone number)

BR-003

When a duplicate email is found, the existing record is **updated** with new data (override)

BR-004

Existing client status is **preserved** during override (Booked Client remains Booked Client)

BR-005

Maximum file size is **15 MB**

BR-006

Maximum rows per import is **500 items**

BR-007

Three mandatory fields are required: **Full Name, Email, Phone Number**
#80
**FRD #2: Import Lead** > **2\. User Roles & Permissions**
~72 tok
## **2\. User Roles & Permissions**

**Role**

**Import Leads**

**Download Template**

**View History**

**Download Failures**

Agency Owner (AO)

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

✅

Team Member

✅

✅

✅

✅

Contractor

❌

❌

❌

❌

Client

❌

❌

❌

❌
#81
**FRD #2: Import Lead** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#82
**FRD #2: Import Lead** > **3\. User Flow** > 3.1 Entry Point
~21 tok
### 3.1 Entry Point

User clicks "Import Data" button in the client listing header.
#83
**FRD #2: Import Lead** > **3\. User Flow** > 3.2 Upload File
~129 tok
### 3.2 Upload File

System opens import modal with two tabs - "Import" and "History". User sees upload area with text "Drag and drop file here, or Click here to import spreadsheet". User uploads file by dragging or clicking to browse. System validates file format must be CSV, XLS, or XLSX. System validates file size must be under 15 MB. System validates row count must be under 500 rows. If validation fails, show error and user must select different file. If validation passes, show file name and total row count.
#84
**FRD #2: Import Lead** > **3\. User Flow** > 3.3 Map Columns
~96 tok
### 3.3 Map Columns

System displays mapping table with two columns - "Your Spreadsheet Column" and "Pixally Field". System auto-detects columns based on header names. User can change mapping using dropdowns. User must map Full Name, Email Address, and Phone Number fields. System shows preview of first 3-5 rows. Import button remains disabled until all required fields are mapped.
#85
**FRD #2: Import Lead** > **3\. User Flow** > 3.4 Process Import
~75 tok
### 3.4 Process Import

User clicks "Import X Rows" button. System disables button to prevent double submission. System shows progress bar from 0 to 100 percent. System processes each row sequentially. Processing takes 2-5 minutes for 500 rows. User can close modal and import continues in background.
#86
**FRD #2: Import Lead** > **3\. User Flow** > 3.5 View Results
~100 tok
### 3.5 View Results

For all success - System shows green checkmark with success message and continue button. For partial success - System shows split display with imported count and failed count. For all failed - System shows red error icon with failure message. Failed rows display in table with row number, error type, field, and description. User can download failure CSV with failed rows only.
#87
**FRD #2: Import Lead** > **3\. User Flow** > 3.6 Download Template
~56 tok
### 3.6 Download Template

User clicks "Download Sample Template" link. System downloads CSV file named "lead\_import\_template.csv". File contains header row with all supported columns. File contains two sample data rows.
#88
**FRD #2: Import Lead** > **3\. User Flow** > 3.7 View History
~63 tok
### 3.7 View History

User clicks "History" tab. System shows list of previous imports. Each row shows date, file name, status, rows imported, rows failed. User can click row to view detailed results. User can download failure reports from past imports.
#89
**FRD #2: Import Lead** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#90
**FRD #2: Import Lead** > **4\. Functional Logic** > 4.1 File Processing
~47 tok
### 4.1 File Processing

System accepts CSV, XLS, and XLSX files only. File size limit is 15 MB. Row limit is 500 excluding header. First row must be header row. System uses UTF-8 encoding.
#91
**FRD #2: Import Lead** > **4\. Functional Logic** > 4.2 Column Detection
~85 tok
### 4.2 Column Detection

System checks header names for pattern matching. Name patterns map to Full Name field. Email patterns map to Email Address field. Phone patterns map to Phone Number field. Address patterns map to respective address fields. Note patterns map to Internal Note field. Unmatched columns show "Select Field" placeholder.
#92
**FRD #2: Import Lead** > **4\. Functional Logic** > 4.3 Data Validation
~91 tok
### 4.3 Data Validation

System validates each row before processing. Full Name cannot be empty and must be 2-100 characters. Email cannot be empty and must be valid format. Phone Number cannot be empty and must be 7-15 digits. Address fields have 255 character limit. Internal Note has 1000 character limit. Invalid rows are marked as failed with specific error.
#93
**FRD #2: Import Lead** > **4\. Functional Logic** > 4.4 Duplicate Handling
~80 tok
### 4.4 Duplicate Handling

System searches for existing email in database. Email comparison is case-insensitive. If email exists, system updates existing record. System preserves client ID and status. System preserves project and company associations. System updates modified timestamp. Row counts as successful import.
#94
**FRD #2: Import Lead** > **4\. Functional Logic** > 4.5 Record Creation
~49 tok
### 4.5 Record Creation

If email not found, system creates new lead. Status is set to Lead. Created timestamp is set to current time. All mapped fields are populated. Record is saved to database.
#95
**FRD #2: Import Lead** > **4\. Functional Logic** > 4.6 Import Session
~46 tok
### 4.6 Import Session

System records each import in history. Session stores file name, timestamp, and results. Failed row data is stored for download. History is retained for 90 days.
#96
**FRD #2: Import Lead** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#97
**FRD #2: Import Lead** > **5\. Field Details & Validations** > 5.1 Import File Fields
~112 tok
### 5.1 Import File Fields

**Field**

**Required**

**Max Length**

**Validation Rules**

Full Name

Yes

100

Min 2 characters, cannot be empty

Email Address

Yes

255

Valid email format (RFC 5322)

Phone Number

Yes

20

7-15 digits, numeric only

Street Address

No

255

None

Country

No

100

Should match master country list

State

No

100

None

City

No

100

None

Zip/Postal Code

No

20

Alphanumeric

Internal Note

No

1000

None
#98
**FRD #2: Import Lead** > **5\. Field Details & Validations** > 5.2 File Upload Validations
~66 tok
### 5.2 File Upload Validations

**Validation Type**

**Criteria**

**Limit**

File Format

Must be CSV, XLS, XLSX

\-

File Size

Maximum size

15 MB

Row Count

Maximum rows

500

Row Count

Minimum rows

1

Header Row

Required

Yes

Encoding

Recommended

UTF-8
#99
**FRD #2: Import Lead** > **6\. Success Message Handling**
~139 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

File Upload

"File uploaded successfully"

Inline

Column Mapping

"All required fields mapped"

Inline

All Rows Import

"All rows imported successfully!"

Modal with green checkmark

Partial Import

"X rows imported successfully"

Split display (green section)

Template Download

File downloads automatically

Browser download

History Load

History data displayed

Table view

Failure Report Download

"failed\_rows\_\[timestamp\].csv downloaded"

Browser download
#100
**FRD #2: Import Lead** > **7\. Error Message Handling**
~8 tok
## **7\. Error Message Handling**
#101
**FRD #2: Import Lead** > **7\. Error Message Handling** > 7.1 File Upload Errors
~148 tok
### 7.1 File Upload Errors

**Error Condition**

**Error Message**

**Display Type**

Unsupported format

"Unsupported file format. Please upload a .csv, .xls, or .xlsx file"

Upload area

File too large

"File size exceeds 15MB limit. Please reduce file size or split into multiple files"

Upload area

Too many rows

"File exceeds 500 row limit. Please split into multiple files"

Upload area

Empty file

"File contains no data rows"

Upload area

No header row

"No header row detected"

Upload area

Corrupt file

"Unable to read file. Please check file format and try again"

Upload area
#102
**FRD #2: Import Lead** > **7\. Error Message Handling** > 7.2 Row Validation Errors
~97 tok
### 7.2 Row Validation Errors

**Error Type**

**Error Message**

**Display Location**

Missing Required Field

"\[Field name\] is required in row X"

Failed rows table

Invalid Email

"Invalid email format in row X"

Failed rows table

Invalid Phone

"Invalid phone number in row X"

Failed rows table

Field Too Long

"\[Field name\] exceeds maximum length in row X"

Failed rows table
#103
**FRD #2: Import Lead** > **7\. Error Message Handling** > 7.3 System Errors
~75 tok
### 7.3 System Errors

**Error Type**

**Error Message**

**Display Type**

Network Error

"Import failed due to network error. Please try again."

Toast

Server Error

"Something went wrong. Please try again later."

Toast

Timeout

"Import timed out. Please try with a smaller file."

Results screen
#104
**FRD #2: Import Lead** > **8\. Edge Cases**
~258 tok
## **8\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

User uploads file with headers but no data rows

Show error "File contains no data rows"

High

EC-002

User uploads file with duplicate emails within same file

First occurrence creates record, subsequent update it

Medium

EC-003

Email in file matches archived client

Create new Lead (ignore archived)

Medium

EC-004

User closes modal during import

Import continues in background

High

EC-005

User uploads file with special UTF-8 characters

Characters preserved correctly

Medium

EC-006

User maps same field to multiple columns

Only first mapping used, show warning

Medium

EC-007

Phone number includes formatting

System strips formatting and stores normalized

Medium

EC-008

Country doesn't match master list

Store as provided

Low

EC-009

Import takes longer than 10 minutes

Timeout with error message

High

EC-010

User starts new import while one in progress

Show error "Import already in progress"

High
#105
**FRD #2: Import Lead** > **9\. Acceptance Criteria**
~242 tok
## **9\. Acceptance Criteria**

**AC ID**

**Criteria**

AC-001

User can access Import modal from client listing header

AC-002

User can download sample template in CSV format

AC-003

System accepts CSV, XLS, and XLSX file formats

AC-004

System rejects files exceeding 15 MB with error

AC-005

System rejects files with more than 500 rows with error

AC-006

System auto-detects and maps column headers

AC-007

User can manually adjust column mappings

AC-008

Import blocked until required fields mapped

AC-009

Progress indicator shows during processing

AC-010

Successfully validated rows create Lead records

AC-011

Duplicate emails update existing records

AC-012

Existing client status preserved during override

AC-013

Failed rows display with error details

AC-014

User can download failure report as CSV

AC-015

Client listing refreshes after import

AC-016

Import history shows previous sessions

AC-017

Import continues if user closes modal
#106
**FRD #2: Import Lead** > **10\. Manual Test Cases**
~72 tok
## **10\. Manual Test Cases**

Test cases for this module are documented separately in the Excel file: [**FRD\_02\_Import\_Lead\_Test\_Cases.xlsx**](https://docs.google.com/spreadsheets/d/1IADP3NoX8v4XcfHH68gJsNH2NAYbTpP1/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)
#107
**FRD #2: Import Lead** > **10\. Manual Test Cases** > Test Case Categories:
~50 tok
### Test Case Categories:

1.  File Upload Validation
2.  Column Mapping
3.  Data Validation
4.  Duplicate Handling
5.  Import Processing
6.  Results Display
7.  History Management
8.  Error Scenarios
#108
**FRD #2: Import Lead** > **11\. Dependencies**
~134 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Client Data Model

Data

Client record structure and required fields

DEP-002

Master Data - Countries

Data

Country list for validation

DEP-003

File Storage

Infrastructure

Temporary storage for uploaded files

DEP-004

User Authentication

Functional

User must be logged in

DEP-005

Role-Based Access Control

Functional

User must have import permissions

DEP-006

Client Listing

UI

Listing refresh after import
#109
**FRD #2: Import Lead** > **12\. References**
~6 tok
## **12\. References**
#110
**FRD #2: Import Lead** > **12\. References** > 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25586-27601&t=r4NL4B1STgwBOH95-0)
~43 tok
### 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25586-27601&t=r4NL4B1STgwBOH95-0)

3\. Client / Lead / Company Listing
#111
**FRD #3: Client / Lead / Company Listing**
~49 tok
# **FRD #3: Client / Lead / Company Listing**

**Document Version:** 1.0 **Created Date:** December 16, 2025 **Module:** Client / Lead / Company Listing **Platform:** Pixally CRM - Agency Portal
#112
**FRD #3: Client / Lead / Company Listing** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#113
**FRD #3: Client / Lead / Company Listing** > **1\. Module Overview** > 1.1 Purpose
~98 tok
### 1.1 Purpose

This document defines the functional requirements for the Client, Lead, and Company Listing pages within the Pixally CRM system. The listing provides a centralized view for managing all contacts and organizations, with tabbed navigation to switch between Booked Clients, Leads, and Companies. Users can search, filter, sort, and perform actions on records from this interface.
#114
**FRD #3: Client / Lead / Company Listing** > **1\. Module Overview** > 1.2 Scope
~92 tok
### 1.2 Scope

This FRD covers:

*   Tab structure (Booked Clients, Leads, Companies)
*   Listing table columns and data display
*   Search functionality
*   Filter options and logic
*   Sorting capabilities
*   Pagination
*   Row actions (Edit, Archive, Delete)
*   Header actions (Create, Import, Download, View Archive)
*   Overflow dropdowns for multi-value fields
#115
**FRD #3: Client / Lead / Company Listing** > **1\. Module Overview** > 1.3 Key Business Rules
~161 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

**Booked Clients** tab shows clients with signed proposal OR payment received on any project

BR-002

**Leads** tab shows clients without signed proposal AND without payment

BR-003

**Companies** tab shows all active companies

BR-004

Client status is **automatically determined** based on project state — not manually set

BR-005

Lead converts to Booked Client automatically when proposal is signed or payment is received

BR-006

Booked Client does NOT revert to Lead status

BR-007

All tabs share the same filter/sort/search mechanisms with field variations per tab
#116
**FRD #3: Client / Lead / Company Listing** > **2\. User Roles & Permissions**
~84 tok
## **2\. User Roles & Permissions**

**Role**

**View Listing**

**Search/Filter**

**Edit**

**Archive**

**Delete**

**Download**

Agency Owner (AO)

✅

✅

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

✅

✅

✅

Team Member

✅

✅

✅

✅

❌

✅

Contractor

✅ (Limited)

✅

❌

❌

❌

❌

Client

❌

❌

❌

❌

❌

❌
#117
**FRD #3: Client / Lead / Company Listing** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#118
**FRD #3: Client / Lead / Company Listing** > **3\. User Flow** > 3.1 Entry Point
~21 tok
### 3.1 Entry Point

User navigates to Clients & Contractors menu and clicks Clients.
#119
**FRD #3: Client / Lead / Company Listing** > **3\. User Flow** > 3.2 View Listing
~61 tok
### 3.2 View Listing

System loads listing page with Booked Clients tab active by default. Tab badge shows count of records in each category. Table displays clients sorted by most recently updated. Default pagination shows 25 records per page.
#120
**FRD #3: Client / Lead / Company Listing** > **3\. User Flow** > 3.3 Switch Tabs
~53 tok
### 3.3 Switch Tabs

User clicks Leads tab to view lead records. User clicks Companies tab to view company records. Tab content refreshes without page reload. Filters and search persist between tabs if applicable.
#121
**FRD #3: Client / Lead / Company Listing** > **3\. User Flow** > 3.4 Search Records
~69 tok
### 3.4 Search Records

User types in search box located above table. System waits 300ms after typing stops. System searches Name, Email, Phone, and Company fields. Results filter in real-time. No results shows "No results found" message. User clicks X icon to clear search.
#122
**FRD #3: Client / Lead / Company Listing** > **3\. User Flow** > 3.5 Apply Filters
~77 tok
### 3.5 Apply Filters

User clicks filter dropdown above table. System shows available filter options with checkboxes. User selects one or more options. User clicks outside dropdown to apply. Table refreshes with filtered results. Active filters show count badge. Clear All button appears when filters active.
#123
**FRD #3: Client / Lead / Company Listing** > **3\. User Flow** > 3.6 Sort Table
~46 tok
### 3.6 Sort Table

User clicks column header to sort. First click sorts ascending. Second click sorts descending. Sort arrow shows current direction. Only one column sorts at a time.
#124
**FRD #3: Client / Lead / Company Listing** > **3\. User Flow** > 3.7 Navigate Pages
~49 tok
### 3.7 Navigate Pages

User sees "Page 1 of 10" indicator. User clicks Next to go forward. User clicks Previous to go back. User changes records per page dropdown. Table refreshes with new page.
#125
**FRD #3: Client / Lead / Company Listing** > **3\. User Flow** > 3.8 Row Actions
~41 tok
### 3.8 Row Actions

User clicks 3-dot menu in Actions column. Dropdown shows Edit, Archive, Delete options. User selects action. System performs selected action.
#126
**FRD #3: Client / Lead / Company Listing** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#127
**FRD #3: Client / Lead / Company Listing** > **4\. Functional Logic** > 4.1 Tab Management
~62 tok
### 4.1 Tab Management

System displays three tabs - Booked Clients, Leads, Companies. Booked Clients tab is active by default. Each tab badge shows real-time count. Tab switching maintains search and filter state. URL updates to reflect active tab.
#128
**FRD #3: Client / Lead / Company Listing** > **4\. Functional Logic** > 4.2 Client Status Determination
~84 tok
### 4.2 Client Status Determination

System checks if client has any projects. For each project, check for signed proposal or payment. If any project has signed proposal, client is Booked Client. If any project has payment, client is Booked Client. If no project meets criteria, client is Lead. If client has no projects, client is Lead.
#129
**FRD #3: Client / Lead / Company Listing** > **4\. Functional Logic** > 4.3 Table Display
~83 tok
### 4.3 Table Display

Booked Clients shows Client Name, Contact, Projects, Company, Brands columns. Leads shows same columns as Booked Clients. Companies shows Company Name, Contact, Clients, Brands, Industry columns. Multi-value fields show first 2 items plus overflow count. Overflow dropdown activated by clicking +X indicator.
#130
**FRD #3: Client / Lead / Company Listing** > **4\. Functional Logic** > 4.4 Search Processing
~57 tok
### 4.4 Search Processing

Search activates after 300ms debounce. Search is case-insensitive partial match. Search checks multiple fields per record. Empty search shows all records. Badge counts remain unchanged during search.
#131
**FRD #3: Client / Lead / Company Listing** > **4\. Functional Logic** > 4.5 Filter Logic
~61 tok
### 4.5 Filter Logic

Multiple selections in same filter use OR logic. Different filters combine with AND logic. Primary Client Only toggle filters to primary contacts. Filters apply to current tab only. Clear All removes all filter selections.
#132
**FRD #3: Client / Lead / Company Listing** > **4\. Functional Logic** > 4.6 Sort Processing
~52 tok
### 4.6 Sort Processing

Default sort is Last Updated descending. Click header once for ascending sort. Click again for descending sort. Third click returns to default. Multi-value columns cannot be sorted.
#133
**FRD #3: Client / Lead / Company Listing** > **4\. Functional Logic** > 4.7 Pagination
~44 tok
### 4.7 Pagination

Default shows 25 records per page. Options are 25, 50, or 100 records. Navigation includes First, Previous, Next, Last. Status shows current range and total.
#134
**FRD #3: Client / Lead / Company Listing** > **4\. Functional Logic** > 4.8 Archive Restrictions
~68 tok
### 4.8 Archive Restrictions

System checks if client is sole contact on active project. If yes, archive is blocked with warning message. If no, confirmation modal appears. Company cannot archive if clients have active projects. Archive immediately revokes portal access.
#135
**FRD #3: Client / Lead / Company Listing** > **4\. Functional Logic** > 4.9 Download Export
~49 tok
### 4.9 Download Export

Download includes all filtered records. Export format is CSV with UTF-8 encoding. File includes visible columns plus address fields. File name includes tab name and date.
#136
**FRD #3: Client / Lead / Company Listing** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#137
**FRD #3: Client / Lead / Company Listing** > **5\. Field Details & Validations** > 5.1 Search Field
~29 tok
### 5.1 Search Field

**Field**

**Type**

**Max Length**

**Debounce**

Search Input

Text

100 characters

300ms
#138
**FRD #3: Client / Lead / Company Listing** > **5\. Field Details & Validations** > 5.2 Filter Options
~69 tok
### 5.2 Filter Options

**Filter**

**Type**

**Source**

Primary Client Only

Toggle

Boolean flag

Brands

Multi-select

All agency brands

Projects

Multi-select

All active projects

Company

Multi-select

All active companies

Industry

Multi-select

Master list + custom
#139
**FRD #3: Client / Lead / Company Listing** > **5\. Field Details & Validations** > 5.3 Table Columns
~82 tok
### 5.3 Table Columns

**Column**

**Sortable**

**Clickable**

**Action**

Client/Company Name

Yes

Yes

Navigate to profile

Contact

Yes (by email)

Yes

Email or copy phone

Projects/Clients

No

Partial

View in dropdown

Brands

No

Partial

View in dropdown

Industry

Yes

No

Display only

Actions

No

Yes

Open menu
#140
**FRD #3: Client / Lead / Company Listing** > **6\. Success Message Handling**
~117 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

Edit Save

"\[Name\] updated successfully"

Toast

Archive Complete

"\[Name\] has been archived"

Toast

Delete Complete

"\[Name\] has been permanently deleted"

Toast

Download Start

File downloads automatically

Browser

Filter Applied

Results updated

Table refresh

Search Applied

Results filtered

Table refresh

Import Complete

"Import completed successfully"

Toast
#141
**FRD #3: Client / Lead / Company Listing** > **7\. Error Message Handling**
~146 tok
## **7\. Error Message Handling**

**Scenario**

**Error Message**

**Display Type**

Search no results

"No results found for '\[search term\]'"

Inline

Filter no results

"No records match the selected filters"

Inline

Archive restricted

"Cannot archive \[Name\]. This client is the only contact on..."

Modal

Download failed

"Unable to download. Please try again."

Toast

Delete confirmation

"This action cannot be undone."

Modal

Network error

"Unable to load data. Please refresh the page."

Toast

Page load error

"Failed to load listing. Please try again."

Full page
#142
**FRD #3: Client / Lead / Company Listing** > **8\. Edge Cases**
~209 tok
## **8\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Client in both booked and non-booked project

Appears in Booked Clients tab

High

EC-002

All company clients archived

Company shows "0 clients"

Medium

EC-003

Search matches across multiple tabs

Each tab shows own count

Medium

EC-004

Filter has no matching records

Option shows but returns empty

Low

EC-005

Download with filters active

Export only filtered records

High

EC-006

Rapid tab switching

Cancel previous requests

Medium

EC-007

Very long name truncates

Show ellipsis with tooltip

Low

EC-008

Client with 20+ projects

Overflow shows "+18" scrollable

Medium

EC-009

Concurrent user archives record

Row disappears on refresh

Medium

EC-010

Browser back after tab switch

Returns to previous tab

Low
#143
**FRD #3: Client / Lead / Company Listing** > **9\. Acceptance Criteria**
~189 tok
## **9\. Acceptance Criteria**

**AC ID**

**Criteria**

AC-001

Listing loads with Booked Clients tab active

AC-002

Tab badges show accurate counts

AC-003

Tab switch occurs without page reload

AC-004

Search filters in real-time with debounce

AC-005

Search is case-insensitive partial match

AC-006

Filter logic applies correctly

AC-007

Primary toggle filters primary contacts

AC-008

Column sort toggles ascending/descending

AC-009

Pagination navigates correctly

AC-010

Records per page selector works

AC-011

Overflow shows remaining items

AC-012

Edit opens modal with data

AC-013

Archive shows restriction warning

AC-014

Delete requires confirmation

AC-015

Download exports filtered CSV

AC-016

View Archive navigates correctly
#144
**FRD #3: Client / Lead / Company Listing** > **10\. Manual Test Cases**
~77 tok
## **10\. Manual Test Cases**

Test cases for this module are documented separately in the Excel file: [**FRD\_03\_Client\_Lead\_Company\_Listing\_Test\_Cases.xlsx**](https://docs.google.com/spreadsheets/d/1EyCXZLGiGXjNpKaqNCei9MJSu3asupC_/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)
#145
**FRD #3: Client / Lead / Company Listing** > **10\. Manual Test Cases** > Test Case Categories:
~45 tok
### Test Case Categories:

1.  Tab Navigation
2.  Search Functionality
3.  Filter Application
4.  Sorting
5.  Pagination
6.  Row Actions
7.  Archive Restrictions
8.  Download Export
#146
**FRD #3: Client / Lead / Company Listing** > **11\. Dependencies**
~151 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

FRD\_01\_Create\_Client\_Company

Functional

Create modal functionality

DEP-002

FRD\_02\_Import\_Lead

Functional

Import modal functionality

DEP-003

Client Data Model

Data

Client records with status

DEP-004

Company Data Model

Data

Company records

DEP-005

Project Module

Data

Project associations

DEP-006

Brand Module

Data

Brand associations

DEP-007

Proposal Module

Data

Signed proposal status

DEP-008

Payment Module

Data

Payment received status

**12\. References**
#147
**FRD #3: Client / Lead / Company Listing** > **11\. Dependencies** > 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=24269-77468&t=r4NL4B1STgwBOH95-0)
~45 tok
### 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=24269-77468&t=r4NL4B1STgwBOH95-0)

4\. Archived Client / Lead / Company Listing
#148
**FRD #4: Archived Client / Lead / Company Listing**
~53 tok
# **FRD #4: Archived Client / Lead / Company Listing**

**Document Version:** 1.0 **Created Date:** December 16, 2025 **Module:** Archived Client / Lead / Company Listing **Platform:** Pixally CRM - Client Portal
#149
**FRD #4: Archived Client / Lead / Company Listing** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#150
**FRD #4: Archived Client / Lead / Company Listing** > **1\. Module Overview** > 1.1 Purpose
~88 tok
### 1.1 Purpose

This document defines the functional requirements for the Archived Client, Lead, and Company Listing page within the Pixally CRM system. The archived listing provides a view of all soft-deleted records, allowing users to review, unarchive, or permanently delete contacts and organizations that have been removed from the active listing.
#151
**FRD #4: Archived Client / Lead / Company Listing** > **1\. Module Overview** > 1.2 Scope
~70 tok
### 1.2 Scope

This FRD covers:

*   Archived listing view and visual styling
*   Tab structure (Booked Clients, Leads, Companies — archived only)
*   Unarchive functionality
*   Permanent delete functionality
*   Search, filter, and sort capabilities
*   Download archived records
#152
**FRD #4: Archived Client / Lead / Company Listing** > **1\. Module Overview** > 1.3 Key Business Rules
~191 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Archived records are **soft deleted** — data is retained but hidden from active views

BR-002

Archived clients have their **portal access revoked** immediately upon archiving

BR-003

Archived records **cannot be edited** — must unarchive first

BR-004

Client restrictions apply: cannot archive if client is sole contact on active project

BR-005

Company restrictions apply: cannot archive if company has clients on active projects

BR-006

Unarchiving **restores all associations** (projects, company, brands)

BR-007

Permanent delete **cannot be undone** — record is completely removed

BR-008

Original client status is **preserved** when unarchived (Booked Client stays Booked Client)
#153
**FRD #4: Archived Client / Lead / Company Listing** > **2\. User Roles & Permissions**
~69 tok
## **2\. User Roles & Permissions**

**Role**

**View Archive**

**Unarchive**

**Permanent Delete**

**Download**

Agency Owner (AO)

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

✅

Team Member

✅

✅

❌

✅

Contractor

❌

❌

❌

❌

Client

❌

❌

❌

❌
#154
**FRD #4: Archived Client / Lead / Company Listing** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#155
**FRD #4: Archived Client / Lead / Company Listing** > **3\. User Flow** > 3.1 Entry Point
~22 tok
### 3.1 Entry Point

User clicks "View Archive" button in active client listing header.
#156
**FRD #4: Archived Client / Lead / Company Listing** > **3\. User Flow** > 3.2 View Archived Listing
~69 tok
### 3.2 View Archived Listing

System navigates to Archived Listing page. Page shows "Archived" label in title. Visual styling uses gray tint to indicate archived status. Same tab structure displays with archived counts. View Active button appears to return to active listing.
#157
**FRD #4: Archived Client / Lead / Company Listing** > **3\. User Flow** > 3.3 Navigate Tabs
~51 tok
### 3.3 Navigate Tabs

User clicks Leads tab to view archived leads. User clicks Companies tab to view archived companies. Each tab shows only archived records. Badge counts reflect archived record totals.
#158
**FRD #4: Archived Client / Lead / Company Listing** > **3\. User Flow** > 3.4 Search Archived Records
~47 tok
### 3.4 Search Archived Records

User types in search box. System searches archived records only. Search uses same fields as active listing. Results filter archived records in real-time.
#159
**FRD #4: Archived Client / Lead / Company Listing** > **3\. User Flow** > 3.5 Filter Archived Records
~46 tok
### 3.5 Filter Archived Records

User applies filters from dropdowns. Filters apply to archived records only. Same filter options as active listing. Clear All removes filter selections.
#160
**FRD #4: Archived Client / Lead / Company Listing** > **3\. User Flow** > 3.6 Unarchive Record
~61 tok
### 3.6 Unarchive Record

User clicks 3-dot menu and selects Unarchive. System immediately unarchives without confirmation. Record moves to active listing. Portal access is restored for clients. Success toast shows "\[Name\] has been restored".
#161
**FRD #4: Archived Client / Lead / Company Listing** > **3\. User Flow** > 3.7 Delete Permanently
~62 tok
### 3.7 Delete Permanently

User clicks 3-dot menu and selects Delete. Confirmation modal appears with warning. User clicks Delete to confirm. Record is permanently removed from database. Success toast shows "\[Name\] has been permanently deleted".
#162
**FRD #4: Archived Client / Lead / Company Listing** > **3\. User Flow** > 3.8 Return to Active
~37 tok
### 3.8 Return to Active

User clicks "View Active" button. System navigates back to active client listing. Active listing shows with current data.
#163
**FRD #4: Archived Client / Lead / Company Listing** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#164
**FRD #4: Archived Client / Lead / Company Listing** > **4\. Functional Logic** > 4.1 Page Display
~53 tok
### 4.1 Page Display

Background uses light gray color (#F5F5F5). Row background has gray tint (#FAFAFA). Text color is muted (#666666). Archived label visible in header. Edit action is not available in row menu.
#165
**FRD #4: Archived Client / Lead / Company Listing** > **4\. Functional Logic** > 4.2 Tab Functionality
~57 tok
### 4.2 Tab Functionality

Three tabs show archived records only. Booked Clients tab shows archived booked clients. Leads tab shows archived leads. Companies tab shows archived companies. Badge counts update when records change.
#166
**FRD #4: Archived Client / Lead / Company Listing** > **4\. Functional Logic** > 4.3 Search Scope
~45 tok
### 4.3 Search Scope

Search queries archived records only. Search does not include active records. Search fields match active listing. Search state separate from active listing.
#167
**FRD #4: Archived Client / Lead / Company Listing** > **4\. Functional Logic** > 4.4 Filter Scope
~46 tok
### 4.4 Filter Scope

Filters apply to archived records only. Filter options same as active listing. Filter state separate from active listing. Clear All resets archived filters only.
#168
**FRD #4: Archived Client / Lead / Company Listing** > **4\. Functional Logic** > 4.5 Unarchive Process
~57 tok
### 4.5 Unarchive Process

Set archived flag to false. Clear archived timestamp. Restore portal access eligibility. Preserve all associations. Preserve original client status. Move record to active listing. Update badge counts.
#169
**FRD #4: Archived Client / Lead / Company Listing** > **4\. Functional Logic** > 4.6 Delete Process
~53 tok
### 4.6 Delete Process

Show confirmation modal first. Delete removes record permanently. Delete removes all associations. Delete cannot be undone. Historical references show placeholder text. Update badge counts.
#170
**FRD #4: Archived Client / Lead / Company Listing** > **4\. Functional Logic** > 4.7 Access Restoration
~42 tok
### 4.7 Access Restoration

Portal magic links become valid again. Client can use previous magic link. No new authentication required. No notification sent to client.
#171
**FRD #4: Archived Client / Lead / Company Listing** > **4\. Functional Logic** > 4.8 Visual Indicators
~42 tok
### 4.8 Visual Indicators

Gray background distinguishes from active. Muted text shows archived state. No Edit option in actions menu. Unarchive replaces Archive option.
#172
**FRD #4: Archived Client / Lead / Company Listing** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#173
**FRD #4: Archived Client / Lead / Company Listing** > **5\. Field Details & Validations** > 5.1 Display Fields
~82 tok
### 5.1 Display Fields

All fields are read-only in archived listing:

**Field**

**Type**

**Display**

Client/Company Name

Text

Clickable link

Contact

Email/Phone

View only

Projects

List

Dropdown

Company

Text

Link if active

Brands

List

Dropdown

Industry

Text

Display only

Archived Date

DateTime

Export only
#174
**FRD #4: Archived Client / Lead / Company Listing** > **5\. Field Details & Validations** > 5.2 Action Validations
~44 tok
### 5.2 Action Validations

**Action**

**Confirmation**

**Reversible**

Unarchive

No

Yes (can re-archive)

Delete

Yes (modal)

No

View Active

No

Yes

Download

No

N/A
#175
**FRD #4: Archived Client / Lead / Company Listing** > **6\. Success Message Handling**
~98 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

Unarchive

"\[Name\] has been restored"

Toast

Delete

"\[Name\] has been permanently deleted"

Toast

Download

File downloads automatically

Browser

Filter Applied

Results updated

Table refresh

Search Applied

Results filtered

Table refresh

Navigate to Active

Active listing loaded

Page load
#176
**FRD #4: Archived Client / Lead / Company Listing** > **7\. Error Message Handling**
~135 tok
## **7\. Error Message Handling**

**Scenario**

**Error Message**

**Display Type**

Delete confirmation

"This action cannot be undone. \[Name\] will be permanently removed."

Modal

Delete failed

"Unable to delete. Please try again."

Toast

Permission denied

"You don't have permission to permanently delete records."

Toast

No archived records

"No archived \[type\] found"

Inline empty state

Search no results

"No archived results found for '\[search term\]'"

Inline

Load error

"Unable to load archived records."

Full page
#177
**FRD #4: Archived Client / Lead / Company Listing** > **8\. Edge Cases**
~204 tok
## **8\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Unarchive client whose company archived

Client restored, shows "Archived Company"

Medium

EC-002

Unarchive client whose project deleted

Client restored, project association removed

Medium

EC-003

Delete client mentioned in communications

Communications show "Deleted Client"

High

EC-004

Unarchive then immediately re-archive

Both actions succeed

Low

EC-005

Multiple users unarchive same record

First succeeds, second gets error

Medium

EC-006

Delete company with archived clients

Company deleted, clients remain archived

Medium

EC-007

Unarchive lead with new booked project

Status updates to Booked Client

High

EC-008

Archive page with 1000+ records

Pagination handles large dataset

High
#178
**FRD #4: Archived Client / Lead / Company Listing** > **9\. Acceptance Criteria**
~170 tok
## **9\. Acceptance Criteria**

**AC ID**

**Criteria**

AC-001

Archive listing accessible from View Archive button

AC-002

Visual styling distinguishes archived listing

AC-003

Tabs show archived records only

AC-004

Edit action not available

AC-005

Unarchive restores record immediately

AC-006

Unarchive preserves associations

AC-007

Portal access restored on unarchive

AC-008

Delete requires confirmation

AC-009

Delete permanently removes record

AC-010

Search works on archived records

AC-011

Download exports with archive date

AC-012

View Active returns to active listing

AC-013

Badge counts reflect archived totals

AC-014

Archive restrictions enforced
#179
**FRD #4: Archived Client / Lead / Company Listing** > **10\. Manual Test Cases**
~73 tok
## **10\. Manual Test Cases**

Test cases for this module are documented separately in the Excel file: [**FRD\_04\_Archived\_Listing\_Test\_Cases.xlsx**](https://docs.google.com/spreadsheets/d/17jPGCJLO289-KVSQszdVKhn-8e2LmfIy/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)
#180
**FRD #4: Archived Client / Lead / Company Listing** > **10\. Manual Test Cases** > Test Case Categories:
~53 tok
### Test Case Categories:

1.  Navigation to Archive
2.  Visual Indicators
3.  Unarchive Process
4.  Delete Process
5.  Search and Filter
6.  Portal Access Restoration
7.  Return to Active
8.  Permission Checks
#181
**FRD #4: Archived Client / Lead / Company Listing** > **11\. Dependencies**
~111 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

FRD\_03\_Client\_Lead\_Company\_Listing

Functional

Active listing source

DEP-002

Client Portal Module

Functional

Access revocation/restoration

DEP-003

Project Module

Data

Active project status check

DEP-004

Client Data Model

Data

Archive flag and timestamp

DEP-005

Company Data Model

Data

Archive flag and timestamp
#182
**FRD #4: Archived Client / Lead / Company Listing** > **12\. References**
~6 tok
## **12\. References**
#183
**FRD #4: Archived Client / Lead / Company Listing** > **12\. References** > 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25934-24937&t=r4NL4B1STgwBOH95-0)
~42 tok
### 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25934-24937&t=r4NL4B1STgwBOH95-0)

5\. Client Profile > Overview Tab
#184
**FRD #5: Client Profile > Overview Tab**
~58 tok
# **FRD #5: Client Profile > Overview Tab**

**Document Version:** 2.0  
**Created Date:** December 16, 2025  
**Last Updated:** April 10, 2026  
**Module:** Client Profile > Overview Tab  
**Platform:** Pixally CRM - Agency Portal
#185
**FRD #5: Client Profile > Overview Tab** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#186
**FRD #5: Client Profile > Overview Tab** > **1\. Module Overview** > 1.1 Purpose
~95 tok
### 1.1 Purpose

This document defines the functional requirements for the Client Profile Overview page within the Pixally CRM system. The Client Profile serves as the central hub for viewing and managing all information related to a specific client or lead, including their contact details, associated projects, company affiliation, communication history, and financial summary.
#187
**FRD #5: Client Profile > Overview Tab** > **1\. Module Overview** > 1.2 Scope
~84 tok
### 1.2 Scope

This FRD covers:

*   Client profile header with status and actions
*   Contact information card
*   Company association card
*   Projects association card
*   Financial summary card
*   Activity timeline / communication history
*   Edit client functionality
*   Archive client functionality
*   Portal access management
#188
**FRD #5: Client Profile > Overview Tab** > **1\. Module Overview** > 1.3 Key Business Rules
~226 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Client status (Lead/Booked Client) is **displayed but not editable** — it is system-determined

BR-002

A client can belong to only **one company** at a time

BR-003

A client can be associated with **multiple projects**

BR-004

Portal access is **per-brand** — a client has separate magic links for each brand

BR-005

Financial summary shows **aggregated data** from all associated projects

BR-006

Activity timeline shows **all communications** across all projects

BR-007

Archiving a client **revokes portal access** immediately

BR-008

Removing the last project from a client **revokes portal access** immediately

BR-009

Client on **active projects** cannot be archived

BR-010

Client on **completed or archived projects only** can be archived

BR-011

Archived client must be **unarchived** before adding to a new project
#189
**FRD #5: Client Profile > Overview Tab** > **2\. User Roles & Permissions**
~80 tok
## **2\. User Roles & Permissions**

**Role**

**View Profile**

**Edit Client**

**Archive**

**Manage Portal**

**View Financials**

Agency Owner (AO)

✅

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

✅

✅

Team Member

✅

✅

✅

✅

✅

Contractor

✅ (Limited)

❌

❌

❌

❌

Client

❌

❌

❌

❌

❌
#190
**FRD #5: Client Profile > Overview Tab** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#191
**FRD #5: Client Profile > Overview Tab** > **3\. User Flow** > 3.1 Entry Points
~65 tok
### 3.1 Entry Points

*   User clicks client name from listing table
*   User clicks client name from company profile
*   User clicks client name from project details
*   User clicks client name from search results
*   User clicks client name from activity feed
#192
**FRD #5: Client Profile > Overview Tab** > **3\. User Flow** > 3.2 View Profile
~67 tok
### 3.2 View Profile

1.  System loads client profile page
2.  Header shows client name and status badge
3.  Left column displays Contact Info and Company cards
4.  Right column displays Projects and Financial Summary cards
5.  Bottom section shows Activity Timeline
#193
**FRD #5: Client Profile > Overview Tab** > **3\. User Flow** > 3.3 Edit Client
~75 tok
### 3.3 Edit Client

1.  User clicks Edit button in header
2.  System opens edit modal with current data
3.  User modifies fields as needed
4.  User clicks Save Changes
5.  System validates and updates record
6.  Modal closes and profile refreshes
7.  Success toast shows "Client updated successfully"
#194
**FRD #5: Client Profile > Overview Tab** > **3\. User Flow** > 3.4 Manage Company
~70 tok
### 3.4 Manage Company

1.  User clicks Add Company if no company exists
2.  User selects existing company or creates new
3.  Association saves immediately
4.  User clicks Change Company to switch
5.  User clicks Remove from Company to unlink
6.  Company card updates with changes
#195
**FRD #5: Client Profile > Overview Tab** > **3\. User Flow** > 3.5 Manage Projects
~68 tok
### 3.5 Manage Projects

1.  User clicks Add to Project button
2.  Modal shows project dropdown
3.  User selects project
4.  User selects client role
5.  User clicks Add to Project button
6.  Association saves and card updates
7.  Client status may change to Booked Client
#196
**FRD #5: Client Profile > Overview Tab** > **3\. User Flow** > 3.6 Remove Project from Client
~130 tok
### 3.6 Remove Project from Client

User clicks three-dot menu on project row. User selects "Remove" option. System checks if this is the client's only project:

**If client has multiple projects:**

*   System displays standard confirmation modal
*   On confirm: Remove the project association, show success toast, update card

**If this is the client's only project:**

*   System displays portal access warning modal
*   On confirm: Remove project, revoke portal access, invalidate magic links, update status to "Lead"
#197
**FRD #5: Client Profile > Overview Tab** > **3\. User Flow** > 3.7 Archive Client
~87 tok
### 3.7 Archive Client

1.  User clicks Archive button
2.  System checks for restrictions (see Section 4.11)
3.  If restricted, blocking modal appears with clickable project list
4.  If allowed, confirmation modal appears
5.  User confirms archive
6.  Portal access revokes immediately
7.  Success toast displayed
8.  User redirects to listing page
#198
**FRD #5: Client Profile > Overview Tab** > **3\. User Flow** > 3.8 View Portal Settings
~49 tok
### 3.8 View Portal Settings

*   Portal Link section displays portal access status for each brand
*   Each brand shows its magic link
*   User clicks Copy Link button
*   Link copies to clipboard
#199
**FRD #5: Client Profile > Overview Tab** > **3\. User Flow** > 3.9 View Activity
~55 tok
### 3.9 View Activity

*   Activity timeline loads at bottom
*   Shows all communications chronologically
*   Newest activities appear first
*   User can filter by activity type
*   Load more button shows additional items
#200
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#201
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.1 Page Layout
~196 tok
### 4.1 Page Layout

*   Header spans full width displaying client avatar, name, status badge, contact info (email + phone), "Compose Email" button, and a three-dot overflow menu.
*   Tab navigation bar sits below the header with five tabs: Overview, Communication (with unread count badge), Meetings, Payments, and Notes.
*   Below the tabs, content is split into two columns.
    *   Left column (~40% width): Contains the four summary stat cards (Client Worth, Due Payment, Total Projects, Upcoming Meetings), the Internal Note section, and the Project(s) card with Active/Archived tabs.
    *   Right column (~60% width): Contains Quick Actions grid, Portal Link card, Company card, and General Details card.
*   On mobile viewports, all cards stack vertically in a single column.
#202
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.2 Status Badge
~100 tok
### 4.2 Status Badge

*   A status badge appears next to the client's name in the header.
*   System evaluates all projects linked to this client:
    *   If any associated project has a signed proposal AND payment received → display green "Client" badge (Booked Client).
    *   If no project qualifies → display yellow "Lead" badge.
*   Badge updates automatically whenever project status changes.
#203
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.3 Header & Contact Info
~168 tok
### 4.3 Header & Contact Info

*   Displays client's profile avatar, full name, and status badge.
*   Email address shown as a clickable mailto link.
*   Phone number displayed with a copy-to-clipboard action on click.
*   "Compose Email" button on the right side opens the email composition flow.
*   Three-dot overflow menu provides the following actions:
    *   Edit — Opens the client edit modal.
    *   Archive — Archives the client (subject to archive restrictions, see 4.11).
    *   Add Company — Opens company association modal.
    *   Delete — Permanently deletes the client after confirmation.
*   Empty contact fields display an em dash (---) as placeholder.
#204
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.4 Summary Stat Cards
~182 tok
### 4.4 Summary Stat Cards

Four stat cards are displayed in a 2×2 grid at the top of the left column:

*   **Client Worth:** Shows the total monetary value associated with this client. Calculated from all invoiced amounts across projects. Formatted with currency symbol and abbreviation for large values.
*   **Due Payment:** Displays the count of outstanding payments. Includes a subtitle breakdown: "1 Ongoing · 2 Completed."
*   **Total Projects:** Shows total project count. Subtitle breakdown: "1 Ongoing · 2 Completed · 1 Archived."
*   **Upcoming Meetings:** Displays count of scheduled future meetings.

Each card has a corresponding icon and consistent styling. Values update in real-time as underlying data changes.
#205
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.5 Internal Note
~115 tok
### 4.5 Internal Note

*   Appears below the stat cards in the left column.
*   Header displays "Internal Note" title with a subtitle: "Note is only visible to you and your team."
*   Note text is displayed with a truncated preview; a "More" link expands to show the full content.
*   Note content supports rich text. The edit icon (pencil) opens an inline editor or modal to modify the note.
*   If no note exists, show an empty state with a prompt to add one.
#206
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.6 Projects Card
~161 tok
### 4.6 Projects Card

*   Header displays "Project(s)" with a "+" button to add the client to a new project.
*   Two tab filters: Active (default) and Archived.
*   Project list is displayed as a table with the following columns:
    *   **Project** — Project name as a clickable link (navigates to project detail). Subtitle shows the next event type with a colored status dot.
    *   **Next Event Date** — Date of the next upcoming event for that project.
    *   **Client Role** — The role this client holds on the project.
    *   **Action** — Three-dot menu per row with options: Remove (removes client from project) and Edit Client Role.
#207
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.6 Projects Card > **4.6.1 Remove Project Action**
~260 tok
#### **4.6.1 Remove Project Action**

When user clicks "Remove" from the three-dot action menu:

1.  **System checks project count** for the client  
    
2.  **If client has MORE than one project (multiple projects):  
    **
    *   Display standard confirmation modal
    *   On "Remove": Remove the project association, show success toast, update card
    *   On "Cancel": Close modal, no action taken
3.  **If client has ONLY one project (single/last project):  
    **
    *   Display portal access warning modal
    *   On "Remove":
        *   Remove the project association
        *   Immediately revoke all portal access for this client
        *   Invalidate all magic links
        *   Client status changes to "Lead"
        *   Show success toast with portal revocation notice
        *   Update Projects card and Portal Link card
    *   On "Cancel": Close modal, no action taken

*   Clicking "+" button opens an "Add Project" modal/dropdown listing available projects
*   Empty state displayed if no projects are associated
#208
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.7 Quick Actions
~66 tok
### 4.7 Quick Actions

A 3×2 icon-button grid in the right column provides fast access to common operations:

*   Row 1: Edit, Archive, Delete
*   Row 2: Add Project(s), Send Invoice, Schedule Meeting

Each action is represented by an icon with a label beneath it.
#209
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.8 Portal Link
~157 tok
### 4.8 Portal Link

*   Displays one row per brand/portal the client has access to.
*   Each row shows: brand avatar, brand name, and the portal URL with a "Copy Link" button.
*   Portal URL format: https://app.pixally.com/u/rando... (truncated for display).
*   Each row has an action menu with options: Edit and Delete.
*   Each client has a unique token per brand. Magic link format includes agency subdomain.
*   **Portal access is automatically revoked when:**
    *   The client is archived.
    *   The client's last project is removed.
*   Unarchiving restores portal links. No notification is sent on access changes.
#210
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.9 Company Card
~92 tok
### 4.9 Company Card

*   If a company is associated, the card displays:
    *   Company name as a clickable link — navigates to the company profile.
    *   Industry/role label.
    *   Joined date.
*   Three-dot action menu with a "Remove" option to disassociate the company from the client.
*   If no company is linked, shows an empty state with a prompt to add one.
#211
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.10 General Details
~76 tok
### 4.10 General Details

*   Displays the following client metadata:
    *   Email Address
    *   Phone Number
    *   Created On — Date when the client record was created.
*   This card serves as a read-only reference panel for key contact and record details.
*   Empty fields display an em dash (---).
#212
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.11 Archive Restrictions
~7 tok
### 4.11 Archive Restrictions
#213
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.11 Archive Restrictions > **4.11.1 Project Status Determination**
~171 tok
#### **4.11.1 Project Status Determination**

Project status is determined based on the pipeline stages of **all events** within the project:

**Pipeline Stage**

**Maps To**

New Leads

**Active**

Booked

**Active**

Post Event

**Active**

Completed

**Completed**

Archived

**Archived**

**Precedence Order:** Active > Completed > Archived

**Event Scenarios**

**Project Status**

All events in Active stages (New Leads/Booked/Post Event)

**Active**

All events in Completed stage

**Completed**

All events in Archived stage

**Archived**

Mix: Active + Completed events

**Active**

Mix: Active + Archived events

**Active**

Mix: Completed + Archived events

**Completed**
#214
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.11 Archive Restrictions > **4.11.2 Client Archive Logic**
~129 tok
#### **4.11.2 Client Archive Logic**

**Scenario**

**Can Archive?**

**Behavior**

On **Active** project(s)

❌ Blocked

Blocking modal with clickable project list

On **Completed** project(s) only

✅ Allowed

Confirmation modal → Archive

On **Archived** project(s) only

✅ Allowed

Confirmation modal → Archive

Mix: Active + Completed/Archived

❌ Blocked

Active takes precedence

Mix: Completed + Archived

✅ Allowed

Confirmation modal → Archive

No project associations

✅ Allowed

Confirmation modal → Archive
#215
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.11 Archive Restrictions > **4.11.3 Archive Eligibility Check**
~107 tok
#### **4.11.3 Archive Eligibility Check**

System retrieves all projects associated with client\_id

FOR each project:

Determine project\_status using Project Status Logic (4.11.1)

IF project\_status = "Active":

Add project to blocked\_projects list

IF blocked\_projects.count > 0:

Return NOT\_ALLOWED

Display blocking modal with blocked\_projects list (clickable links)

ELSE:

Return ALLOWED

Display confirmation modal
#216
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.11 Archive Restrictions > **4.11.4 Archive Implementation**
~86 tok
#### **4.11.4 Archive Implementation**

System sets client.archived\_at = current\_timestamp

System sets client.archived\_by = current\_user\_id

System sets client.status = "archived"

System revokes portal access for client\_id

System invalidates all magic links

System logs activity "client\_archived" with client\_id and current\_user\_id
#217
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.12 Unarchive Logic
~62 tok
### 4.12 Unarchive Logic

*   Archived clients can be manually unarchived
*   Unarchiving restores the client to active status
*   Portal access is restored upon unarchive
*   **Archived clients must be unarchived before adding to a new project**
#218
**FRD #5: Client Profile > Overview Tab** > **4\. Functional Logic** > 4.13 Tab Navigation
~93 tok
### 4.13 Tab Navigation

*   Five tabs are available: Overview, Communication, Meetings, Payments, Notes.
*   The Communication tab displays an unread count badge when there are unread messages or emails.
*   Active tab is visually highlighted.
*   Clicking a tab loads its corresponding content panel without a full page reload.
*   Tab state persists during the session.
#219
**FRD #5: Client Profile > Overview Tab** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#220
**FRD #5: Client Profile > Overview Tab** > **5\. Field Details & Validations** > 5.1 Profile Display Fields
~106 tok
### 5.1 Profile Display Fields

**Field**

**Source**

**Format**

**Editable**

Full Name

client.name

Text

Yes (modal)

Email

client.email

Email link

Yes (modal)

Phone

client.phone

Formatted

Yes (modal)

Address

client.address

Multi-line

Yes (modal)

Internal Note

client.note

Expandable

Yes (modal)

Status

Calculated

Badge

No

Company

Relation

Link

Yes (card)

Projects

Relations

List

Yes (card)
#221
**FRD #5: Client Profile > Overview Tab** > **5\. Field Details & Validations** > 5.2 Edit Modal Fields
~100 tok
### 5.2 Edit Modal Fields

**Field**

**Required**

**Max Length**

**Validation**

Full Name

Yes

100

Min 2 characters

Email

Yes

255

Valid format, unique

Phone

Yes

20

7-15 digits

Company

No

N/A

Valid selection

Street Address

No

255

None

Country

No

N/A

Valid country

State

No

N/A

Valid for country

City

No

100

None

Zip/Postal

No

20

None

Internal Note

No

1000

None
#222
**FRD #5: Client Profile > Overview Tab** > **6\. Success Message Handling**
~214 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

**Duration**

Edit Save

"Client updated successfully"

Toast

5 seconds

Archive

"Client archived successfully"

Toast

5 seconds

Unarchive

"Client restored successfully"

Toast

5 seconds

Add to Project

"\[Name\] added to \[Project\] as \[Role\]"

Toast

5 seconds

Remove from Project (multiple)

"\[Name\] removed from \[Project\]"

Toast

5 seconds

Remove from Project (last)

"\[Name\] removed from \[Project\]. Portal access to \[Brand Name\] has been revoked."

Toast

5 seconds

Add to Company

"Client added to \[Company Name\]"

Toast

5 seconds

Remove from Company

"Client removed from \[Company Name\]"

Toast

5 seconds

Copy Portal Link

"Link copied to clipboard"

Toast

3 seconds

Regenerate Link

"New portal link generated"

Toast

5 seconds
#223
**FRD #5: Client Profile > Overview Tab** > **7\. Error Message Handling**
~122 tok
## **7\. Error Message Handling**

**Scenario**

**Error Message**

**Display Type**

Edit validation

"\[Field\] is required"

Inline

Duplicate email

"A client with this email already exists"

Inline

Save failure

"Unable to save changes. Please try again."

Toast

Profile load error

"Unable to load client profile."

Full page

Network error

"Connection error. Please refresh."

Toast

Add archived client to project

"Please unarchive the client before adding to a project"

Toast
#224
**FRD #5: Client Profile > Overview Tab** > **8\. Confirmation & Blocking Modals**
~10 tok
## **8\. Confirmation & Blocking Modals**
#225
**FRD #5: Client Profile > Overview Tab** > **8\. Confirmation & Blocking Modals** > 8.1 Archive Client - Blocking Modal
~85 tok
### 8.1 Archive Client - Blocking Modal

**Title:** Cannot Archive Client

**Message:** This client is associated with active project(s) and cannot be archived: **\[Project 1, Project 2 and Project 3\]** _(clickable links)_

**Hint Box (Yellow):** ⚠️ Please complete or archive the associated projects before proceeding.

**Button:** Cancel
#226
**FRD #5: Client Profile > Overview Tab** > **8\. Confirmation & Blocking Modals** > 8.2 Archive Client - Confirmation Modal
~58 tok
### 8.2 Archive Client - Confirmation Modal

**Title:** Archive Client?

**Message:** Are you sure you want to archive \[Client Name\]? This will revoke their portal access.

**Primary Button:** Archive  
**Secondary Button:** Cancel
#227
**FRD #5: Client Profile > Overview Tab** > **8\. Confirmation & Blocking Modals** > 8.3 Remove Project - Standard Confirmation
~48 tok
### 8.3 Remove Project - Standard Confirmation

**Title:** Remove Project

**Message:** Are you sure you want to remove this project?

**Primary Button:** Remove  
**Secondary Button:** Cancel
#228
**FRD #5: Client Profile > Overview Tab** > **8\. Confirmation & Blocking Modals** > 8.4 Remove Project - Last Project Warning
~84 tok
### 8.4 Remove Project - Last Project Warning

**Title:** Remove Project

**Message:** This is the only project associated with this client. Removing it will revoke the client's access to the \[Brand Name\] client portal. Are you sure you want to proceed?

**Primary Button:** Remove _(Destructive/Red)  
_**Secondary Button:** Cancel
#229
**FRD #5: Client Profile > Overview Tab** > **8\. Confirmation & Blocking Modals** > 8.5 Delete Client - Confirmation Modal
~63 tok
### 8.5 Delete Client - Confirmation Modal

**Title:** Delete Client

**Message:** This action cannot be undone. Are you sure you want to permanently delete \[Client Name\]?

**Primary Button:** Delete _(Destructive/Red)  
_**Secondary Button:** Cancel
#230
**FRD #5: Client Profile > Overview Tab** > **9\. Edge Cases**
~372 tok
## **9\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Client with 50+ projects

Projects card scrollable with virtualization

Medium

EC-002

Only project archived while viewing

Status recalculates to Lead

High

EC-003

Simultaneous edits by two users

Last save wins

Medium

EC-004

Email changed to existing

Edit blocked with error

High

EC-005

Activity timeline 1000+ entries

Pagination or load more

Medium

EC-006

Client removed from all projects

Status changes to Lead, portal access revoked

High

EC-007

Portal link after archive

Link invalid immediately

High

EC-008

Very long note (1000 chars)

Truncate with show more

Low

EC-009

Company archived while viewing

Shows "Archived: \[Name\]"

Medium

EC-010

No email activity exists

Empty state for filter

Low

EC-011

Remove last project while portal link card is visible

Portal Link card updates to show no active links

High

EC-012

User cancels remove last project confirmation

No changes made, modal closes

Medium

EC-013

Network failure during project removal

Show error toast, project remains associated

High

EC-014

Archive client on active project

Blocking modal with clickable project list

High

EC-015

Add archived client to new project

Blocked with toast message

High

EC-016

Client on mix of active and archived projects

Archive blocked (active takes precedence)

High

EC-017

Client on completed projects only

Archive allowed

Medium
#231
**FRD #5: Client Profile > Overview Tab** > **10\. Acceptance Criteria**
~8 tok
## **10\. Acceptance Criteria**
#232
**FRD #5: Client Profile > Overview Tab** > **10\. Acceptance Criteria** > 10.1 Profile Display
~69 tok
### 10.1 Profile Display

**AC ID**

**Criteria**

AC-001

Profile displays name and correct status

AC-002

Contact card shows all fields formatted

AC-003

Empty fields display placeholder

AC-004

Edit modal pre-populates data

AC-005

Edit validation matches create rules
#233
**FRD #5: Client Profile > Overview Tab** > **10\. Acceptance Criteria** > 10.2 Company & Projects
~76 tok
### 10.2 Company & Projects

**AC ID**

**Criteria**

AC-006

Company card shows association

AC-007

User can manage company link

AC-008

Projects card shows all projects

AC-009

User can add to project with role

AC-010

Financial summary calculates correctly

AC-011

Activity timeline shows history
#234
**FRD #5: Client Profile > Overview Tab** > **10\. Acceptance Criteria** > 10.3 Archive Functionality
~116 tok
### 10.3 Archive Functionality

**AC ID**

**Criteria**

AC-012

Archive blocked for clients on active projects

AC-013

Blocking modal shows clickable project list

AC-014

Archive allowed for clients on completed/archived projects only

AC-015

Confirmation modal shown when archive is allowed

AC-016

Portal access revoked on archive

AC-017

Archived client cannot be added to project without unarchiving

AC-018

Unarchive restores client and portal access
#235
**FRD #5: Client Profile > Overview Tab** > **10\. Acceptance Criteria** > 10.4 Project Removal
~107 tok
### 10.4 Project Removal

**AC ID**

**Criteria**

AC-019

Standard confirmation pop-up appears when removing a project (multiple projects exist)

AC-020

Portal access warning pop-up appears when removing the last project

AC-021

Portal access is revoked immediately upon removing last project

AC-022

Client status changes to Lead after last project removal

AC-023

Appropriate success message shown based on removal context
#236
**FRD #5: Client Profile > Overview Tab** > **11\. Dependencies**
~146 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Client Data Model

Data

Client record structure

DEP-002

Company Module

Data

Company association

DEP-003

Project Module

Data

Project associations

DEP-004

Event Module

Data

Event pipeline stages

DEP-005

Email Module

Data

Email activity history

DEP-006

Portal Module

Data

Portal access and links

DEP-007

Financial Module

Data

Invoice and payment data

DEP-008

Proposal Module

Data

Proposal status

DEP-009

Activity Tracking

Data

Timeline entries
#237
**FRD #5: Client Profile > Overview Tab** > **12\. References**
~6 tok
## **12\. References**
#238
**FRD #5: Client Profile > Overview Tab** > **12\. References** > 12.1 Figma Designs
~34 tok
### 12.1 Figma Designs

[Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25505-128401&t=r4NL4B1STgwBOH95-0)
#239
**FRD #5: Client Profile > Overview Tab** > **Change Log**
~171 tok
## **Change Log**

**Version**

**Date**

**Author**

**Changes**

1.0

December 16, 2025

\-

Initial document

1.1

March 10, 2026

\-

Added project removal confirmation pop-ups, portal access warning for last project removal, BR-008, updated success messages, added acceptance criteria (AC-016 to AC-020), added edge cases (EC-011 to EC-013)

2.0

April 10, 2026

\-

Updated archive logic: Clients on active projects cannot be archived. Clients on completed/archived projects can be archived. Added blocking modal with clickable project links. Archived clients must be unarchived before adding to new project. Refined modal message format.

6\. Client Profile > Communications Tab
#240
**FRD #6: Client Profile > Communications Tab**
~51 tok
# **FRD #6: Client Profile > Communications Tab**

**Document Version:** 1.0 **Created Date:** December 16, 2025 **Module:** Client Profile > Communications Tab **Platform:** Pixally CRM - Agency Portal
#241
**FRD #6: Client Profile > Communications Tab** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#242
**FRD #6: Client Profile > Communications Tab** > **1\. Module Overview** > 1.1 Purpose
~92 tok
### 1.1 Purpose

This document defines the functional requirements for the Communications tab within the Client Profile. The Communications tab provides a centralized view of all email interactions with a specific client across all their associated projects, enabling agency users to track communication history and compose new emails directly from the client context.
#243
**FRD #6: Client Profile > Communications Tab** > **1\. Module Overview** > 1.2 Scope
~67 tok
### 1.2 Scope

This FRD covers:

*   Communication tab interface and layout
*   Project-based email organization
*   Email thread display and navigation
*   Compose new email functionality
*   Email templates and smart fields integration
*   AI-assisted email drafting
#244
**FRD #6: Client Profile > Communications Tab** > **1\. Module Overview** > 1.3 Key Business Rules
~158 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Communications are organized by **project** - each project shows its own email thread

BR-002

Emails are routed using **Project ID and Agency ID** embedded in outgoing messages

BR-003

External replies are automatically routed to correct project email center

BR-004

Unidentified senders (not project participants) are labeled as "(Not a Member)"

BR-005

Client email is **pre-populated** in the "To" field when composing from this tab

BR-006

Email templates are sourced from the **Templates module**

BR-007

Unread email count is displayed per project
#245
**FRD #6: Client Profile > Communications Tab** > **2\. User Roles & Permissions**
~95 tok
## **2\. User Roles & Permissions**

**Role**

**View Communications**

**Send Email**

**Use Templates**

**Use AI Assist**

Agency Owner (AO)

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

✅

Team Member

✅

✅

✅

✅

Contractor

Limited

Limited

❌

❌

Client

❌

❌

❌

❌

**Note:** \[TBD: PM to confirm contractor access level for client communications\]
#246
**FRD #6: Client Profile > Communications Tab** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#247
**FRD #6: Client Profile > Communications Tab** > **3\. User Flow** > 3.1 Access Points
~59 tok
### 3.1 Access Points

**Access Point**

**Navigation Path**

Client Profile

Clients & Contractors → Clients → Client Name → Communications Tab

Lead Profile

Clients & Contractors → Clients → Lead Tab → Lead Name → Communications Tab
#248
**FRD #6: Client Profile > Communications Tab** > **3\. User Flow** > 3.2 Communications Tab Layout
~74 tok
### 3.2 Communications Tab Layout

User navigates to Client Profile. User clicks "Communications" tab (shows unread count badge if applicable). System displays split-panel layout. Left panel shows list of projects associated with this client. Right panel shows email thread for selected project.
#249
**FRD #6: Client Profile > Communications Tab** > **3\. User Flow** > 3.3 Project List Panel (Left Side)
~107 tok
### 3.3 Project List Panel (Left Side)

System displays all projects where client is a participant. Each project card shows: Project Name, Event Information, Next Event Date, Unread Email Count. Single event projects show event name with color badge. Multiple events show "Multiple Events" text. Projects are sorted by most recent activity. User clicks a project card to view its email thread. Selected project is highlighted.
#250
**FRD #6: Client Profile > Communications Tab** > **3\. User Flow** > 3.4 Email Thread Panel (Right Side)
~88 tok
### 3.4 Email Thread Panel (Right Side)

System displays email conversation for selected project. Emails are displayed in chronological order (oldest first). Each email shows: Sender name/email, Timestamp, Subject, Body preview. User can expand/collapse individual emails. System highlights unread emails. Unread emails are marked as read when viewed.
#251
**FRD #6: Client Profile > Communications Tab** > **3\. User Flow** > 3.5 Compose New Email Flow
~129 tok
### 3.5 Compose New Email Flow

User clicks "+ New Email" button. System opens compose email modal. "To" field is pre-populated with client's email address. User can add additional recipients (CC/BCC). User enters subject line. User composes email body. User can attach files. User can use "Add Smart Fields" to insert dynamic content. User can use "Use Template" to load pre-built template. User can use "Ask AI" for AI-assisted drafting. User clicks "Send" to dispatch email. System sends email and updates thread.
#252
**FRD #6: Client Profile > Communications Tab** > **3\. User Flow** > 3.6 Using Smart Fields
~87 tok
### 3.6 Using Smart Fields

User clicks "Add Smart Fields" button in compose modal. System displays dropdown of available smart fields. User selects a smart field. System inserts placeholder into email body. Placeholders are replaced with actual values at send time. \[TBD: PM to confirm - refer to Email Module FRD for complete smart fields list\]
#253
**FRD #6: Client Profile > Communications Tab** > **3\. User Flow** > 3.7 Using Email Templates
~81 tok
### 3.7 Using Email Templates

User clicks "Use Template" button in compose modal. System displays list of available templates from Templates module. User selects a template. System populates subject and body with template content. Smart fields within template are preserved. User can edit template content before sending.
#254
**FRD #6: Client Profile > Communications Tab** > **3\. User Flow** > 3.8 Using AI Assist
~85 tok
### 3.8 Using AI Assist

User clicks "Ask AI" button in compose modal. System displays AI prompt input field. User describes desired email content. System generates email draft using AI. User reviews and edits generated content. User can regenerate or modify with additional prompts. \[TBD: PM to confirm AI assist functionality details\]
#255
**FRD #6: Client Profile > Communications Tab** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#256
**FRD #6: Client Profile > Communications Tab** > **4\. Functional Logic** > 4.1 Email Routing Logic
~149 tok
### 4.1 Email Routing Logic

System embeds Project ID and Agency ID in all outgoing emails. External email replies are parsed for embedded IDs. System routes incoming emails to correct project communication center.

If email contains valid Project ID AND Agency ID: Route to corresponding project's email thread and associate with project participants. If sender email matches known client but IDs missing: Route to client's most recent active project with "(Unmatched Project)" indicator. If sender is unknown: Display sender as "(Not a Member)" and route to general inbox for manual assignment.
#257
**FRD #6: Client Profile > Communications Tab** > **4\. Functional Logic** > 4.2 Unread Count Logic
~77 tok
### 4.2 Unread Count Logic

System tracks read/unread status per email per user. Unread count displays on Communications tab badge. Unread count displays per project in left panel. Email is marked as read when user views the email thread containing it. Viewing thread marks all emails in that thread as read.
#258
**FRD #6: Client Profile > Communications Tab** > **4\. Functional Logic** > 4.3 Project Card Display Logic
~83 tok
### 4.3 Project Card Display Logic

**Element**

**Display Rule**

Project Name

Full project name, truncate with ellipsis if >30 chars

Event Info (Single)

Event name with event color badge

Event Info (Multiple)

"Multiple Events" text

Next Event Date

Formatted as "MMM DD, YYYY"

Unread Count

Red badge with count, hidden if 0
#259
**FRD #6: Client Profile > Communications Tab** > **4\. Functional Logic** > 4.4 Email Thread Display Logic
~84 tok
### 4.4 Email Thread Display Logic

Emails sorted chronologically (oldest to newest). Each email displays: Sender avatar, Sender name, Sender email, Timestamp, Subject (for first email or if changed), Body content. Attachments display as clickable links. Long email bodies are truncated with "Show more" option. Images display inline.
#260
**FRD #6: Client Profile > Communications Tab** > **4\. Functional Logic** > 4.5 Compose Email Logic
~74 tok
### 4.5 Compose Email Logic

"To" field pre-filled with client's primary email. User can add multiple recipients to CC/BCC. Subject line is required. Body can be empty (system shows warning before sending). Attachments limited to 25MB total. System validates all email addresses before sending.
#261
**FRD #6: Client Profile > Communications Tab** > **4\. Functional Logic** > 4.6 Smart Fields Logic
~73 tok
### 4.6 Smart Fields Logic

Smart fields are placeholders that resolve at send time. Available fields include client data, project data, agency data. Unresolved fields display placeholder text if data unavailable. \[TBD: PM to confirm - refer to Email Module FRD for implementation details\]
#262
**FRD #6: Client Profile > Communications Tab** > **4\. Functional Logic** > 4.7 Empty State Logic
~46 tok
### 4.7 Empty State Logic

If client has no projects: Display "No projects yet" message. If project has no emails: Display "No communications yet" message with "Send First Email" CTA.
#263
**FRD #6: Client Profile > Communications Tab** > **4\. Functional Logic** > 4.8 Impact on Other Modules
~94 tok
### 4.8 Impact on Other Modules

**Module**

**Impact**

**Email Module**

Emails sent here appear in project email center

**Project Module**

Email counts reflected in project communications

**Notifications**

Email delivery triggers notification to sender

**Client Portal**

Emails visible to client in their portal

**Activity Log**

Email sends are logged as activities
#264
**FRD #6: Client Profile > Communications Tab** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#265
**FRD #6: Client Profile > Communications Tab** > **5\. Field Details & Validations** > 5.1 Compose Email Fields
~116 tok
### 5.1 Compose Email Fields

**Field Name**

**Field Type**

**Mandatory**

**Max Length**

**Validation Rules**

To

Email (multi)

Yes

N/A

Valid email format, at least one recipient

CC

Email (multi)

No

N/A

Valid email format if provided

BCC

Email (multi)

No

N/A

Valid email format if provided

Subject

Text

Yes

255 chars

Cannot be empty

Body

Rich Text

No

50,000 chars

Warning if empty

Attachments

File

No

25MB total

Combined size limit
#266
**FRD #6: Client Profile > Communications Tab** > **5\. Field Details & Validations** > 5.2 Supported Attachment Types
~47 tok
### 5.2 Supported Attachment Types

**Category**

**File Types**

Documents

.pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx

Images

.jpg, .jpeg, .png, .gif, .webp

Others

.zip, .txt, .csv
#267
**FRD #6: Client Profile > Communications Tab** > **6\. Success Message Handling**
~92 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

**Duration**

Email sent

"Email sent successfully"

Toast notification

5 seconds

Template loaded

"Template applied"

Inline indicator

3 seconds

AI draft generated

"Draft generated"

Inline indicator

3 seconds

Attachment added

"File attached"

Inline indicator

2 seconds
#268
**FRD #6: Client Profile > Communications Tab** > **7\. Error Message Handling**
~8 tok
## **7\. Error Message Handling**
#269
**FRD #6: Client Profile > Communications Tab** > **7\. Error Message Handling** > 7.1 Validation Errors
~95 tok
### 7.1 Validation Errors

**Field**

**Error Condition**

**Error Message**

To

Empty

"Please add at least one recipient"

To

Invalid email

"Invalid email address: \[email\]"

Subject

Empty

"Subject line is required"

Attachments

Over size limit

"Attachments exceed 25MB limit. Please remove some files"

Attachments

Invalid type

"File type not supported: \[filename\]"
#270
**FRD #6: Client Profile > Communications Tab** > **7\. Error Message Handling** > 7.2 System Errors
~103 tok
### 7.2 System Errors

**Error Type**

**Error Message**

**Display Type**

Send failed

"Email could not be sent. Please try again"

Toast notification

Template load failed

"Unable to load template. Please try again"

Toast notification

AI generation failed

"AI assistant unavailable. Please try again later"

Inline message

Attachment upload failed

"File upload failed. Please try again"

Inline message
#271
**FRD #6: Client Profile > Communications Tab** > **8\. Edge Cases**
~267 tok
## **8\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Client has 20+ projects

Scrollable project list, virtualized for performance

Medium

EC-002

Email thread has 100+ emails

Paginated loading, most recent shown first

High

EC-003

Client email address changed after email sent

Original recipient preserved in sent email record

Medium

EC-004

Project archived while viewing communications

Communication tab remains accessible, read-only

Medium

EC-005

User composes email, client deleted before send

Error: "Recipient no longer exists"

Medium

EC-006

Large attachment (>25MB)

Reject with size error before upload completes

High

EC-007

Network disconnect while composing

Draft auto-saved locally, restored on reconnect

High

EC-008

External reply from unknown email address

Display with "(Not a Member)" tag

Medium

EC-009

Same email in multiple project threads

Display in all relevant project threads

Low

EC-010

Compose modal closed without sending

Confirmation prompt: "Discard draft?"

Medium
#272
**FRD #6: Client Profile > Communications Tab** > **9\. Acceptance Criteria**
~8 tok
## **9\. Acceptance Criteria**
#273
**FRD #6: Client Profile > Communications Tab** > **9\. Acceptance Criteria** > 9.1 Communications Tab Display
~82 tok
### 9.1 Communications Tab Display

**AC ID**

**Criteria**

AC-001

Communications tab is accessible from client profile

AC-002

Tab badge shows unread email count

AC-003

Left panel displays all client's projects

AC-004

Each project card shows correct unread count

AC-005

Clicking project loads corresponding email thread
#274
**FRD #6: Client Profile > Communications Tab** > **9\. Acceptance Criteria** > 9.2 Email Thread
~72 tok
### 9.2 Email Thread

**AC ID**

**Criteria**

AC-006

Emails display in chronological order

AC-007

Unread emails are visually distinguished

AC-008

Viewing thread marks emails as read

AC-009

Attachments are downloadable

AC-010

External senders show "(Not a Member)" if applicable
#275
**FRD #6: Client Profile > Communications Tab** > **9\. Acceptance Criteria** > 9.3 Compose Email
~89 tok
### 9.3 Compose Email

**AC ID**

**Criteria**

AC-011

Client email is pre-populated in To field

AC-012

User can add CC/BCC recipients

AC-013

Smart fields can be inserted

AC-014

Templates can be applied

AC-015

AI assist generates draft content

AC-016

Attachments can be added within size limit

AC-017

Sent email appears in thread immediately
#276
**FRD #6: Client Profile > Communications Tab** > **10\. Test Cases**
~126 tok
## **10\. Test Cases**

Manual test cases are provided in the accompanying Excel file: [**FRD\_06\_Client\_Profile\_Communications\_Test\_Cases.xlsx**](https://docs.google.com/spreadsheets/d/1j_LhIo7kaHtFfjeRq_1GqHaJCwBqgggb/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)

Test case categories include:

*   Tab navigation and display
*   Project list functionality
*   Email thread display
*   Compose email functionality
*   Smart fields and templates
*   Error handling scenarios
#277
**FRD #6: Client Profile > Communications Tab** > **11\. Dependencies**
~116 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Email Module

Functional

Core email sending infrastructure

DEP-002

Templates Module

Data

Email templates source

DEP-003

Project Module

Data

Project list and associations

DEP-004

AI Service

Functional

AI-assisted drafting

DEP-005

File Storage

Technical

Attachment storage

DEP-006

Client Portal

Functional

Email visibility for clients
#278
**FRD #6: Client Profile > Communications Tab** > **12\. References**
~6 tok
## **12\. References**
#279
**FRD #6: Client Profile > Communications Tab** > **12\. References** > 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25693-47606&t=r4NL4B1STgwBOH95-0)
~41 tok
### 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25693-47606&t=r4NL4B1STgwBOH95-0)

7\. Client Profile > Meetings
#280
**FRD #7: Client Profile > Meetings**
~46 tok
# **FRD #7: Client Profile > Meetings**

**Document Version:** 1.0 **Created Date:** December 16, 2025 **Module:** Client Profile > Meetings **Platform:** Pixally CRM - Agency Portal
#281
**FRD #7: Client Profile > Meetings** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#282
**FRD #7: Client Profile > Meetings** > **1\. Module Overview** > 1.1 Purpose
~83 tok
### 1.1 Purpose

This document defines the functional requirements for the Meetings tab within the Client Profile. The Meetings tab displays all scheduled and completed meetings with a specific client, allowing agency users to view meeting history, join upcoming meetings, and schedule new meetings directly from the client context.
#283
**FRD #7: Client Profile > Meetings** > **1\. Module Overview** > 1.2 Scope
~61 tok
### 1.2 Scope

This FRD covers:

*   Meetings tab interface and layout
*   Upcoming and past meetings display
*   Meeting card details and actions
*   Schedule new meeting functionality
*   Join meeting functionality
*   Meeting status tracking
#284
**FRD #7: Client Profile > Meetings** > **1\. Module Overview** > 1.3 Key Business Rules
~124 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Meetings are organized into **Upcoming** and **Past** sections

BR-002

Meeting creation uses the **Calendar/Calendly module** functionality

BR-003

"Join Meeting" button appears only for **future meetings with video links**

BR-004

Past meetings show **"Completed"** status

BR-005

Meeting count badge shows **upcoming meetings only**

BR-006

Meetings are displayed in **chronological order** (soonest first for upcoming)
#285
**FRD #7: Client Profile > Meetings** > **2\. User Roles & Permissions**
~102 tok
## **2\. User Roles & Permissions**

**Role**

**View Meetings**

**Schedule Meeting**

**Join Meeting**

**Edit Meeting**

**Cancel Meeting**

Agency Owner (AO)

✅

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

✅

✅

Team Member

✅

✅

✅

✅

✅

Contractor

Limited

❌

✅

❌

❌

Client

❌

❌

❌

❌

❌

**Note:** \[TBD: PM to confirm contractor permissions for meeting management\]
#286
**FRD #7: Client Profile > Meetings** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#287
**FRD #7: Client Profile > Meetings** > **3\. User Flow** > 3.1 Access Points
~56 tok
### 3.1 Access Points

**Access Point**

**Navigation Path**

Client Profile

Clients & Contractors → Clients → Client Name → Meetings Tab

Lead Profile

Clients & Contractors → Clients → Lead Tab → Lead Name → Meetings Tab
#288
**FRD #7: Client Profile > Meetings** > **3\. User Flow** > 3.2 Meetings Tab Display
~67 tok
### 3.2 Meetings Tab Display

User navigates to Client Profile. User clicks "Meetings" tab. System displays meetings organized in two sections. "Upcoming" section shows future meetings. "Past" section shows completed meetings. Tab badge displays upcoming meeting count.
#289
**FRD #7: Client Profile > Meetings** > **3\. User Flow** > 3.3 Upcoming Meetings Section
~88 tok
### 3.3 Upcoming Meetings Section

System displays list of future meetings sorted by date (soonest first). Each meeting card shows: Meeting title, Date and time, Duration, Project name, Meeting type, Participants, Action buttons. "Join Meeting" button displays for meetings with video conference links. Meeting time displays in user's local timezone.
#290
**FRD #7: Client Profile > Meetings** > **3\. User Flow** > 3.4 Past Meetings Section
~78 tok
### 3.4 Past Meetings Section

System displays list of completed meetings sorted by date (most recent first). Each meeting card shows: Meeting title, Date and time, Duration, Project name, Status (Completed), Participants. "Completed" status badge displays on past meetings. Past meetings have no action buttons.
#291
**FRD #7: Client Profile > Meetings** > **3\. User Flow** > 3.5 Schedule New Meeting Flow
~116 tok
### 3.5 Schedule New Meeting Flow

User clicks "+ Schedule Meeting" button. System opens meeting creation modal (from Calendar/Calendly module). Client is pre-selected as participant. User fills meeting details: Title, Date, Time, Duration, Location/Video link, Additional participants. User clicks "Schedule" to create meeting. System creates meeting and sends invitations. Meeting appears in Upcoming section. \[TBD: PM to confirm - reuse Calendar module modal\]
#292
**FRD #7: Client Profile > Meetings** > **3\. User Flow** > 3.6 Join Meeting Flow
~71 tok
### 3.6 Join Meeting Flow

User views upcoming meeting with video link. User clicks "Join Meeting" button. System opens video conference link in new tab. Meeting remains in Upcoming until scheduled end time passes. After end time, meeting moves to Past section with "Completed" status.
#293
**FRD #7: Client Profile > Meetings** > **3\. User Flow** > 3.7 View Meeting Details
~86 tok
### 3.7 View Meeting Details

User clicks on meeting card (not Join button). System opens meeting detail modal/drawer. Modal shows: Full meeting details, Participant list, Notes field, Related project link, Edit/Cancel buttons. User can add notes to meeting. User can edit meeting details (if upcoming). User can cancel meeting (if upcoming).
#294
**FRD #7: Client Profile > Meetings** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#295
**FRD #7: Client Profile > Meetings** > **4\. Functional Logic** > 4.1 Meeting Organization Logic
~91 tok
### 4.1 Meeting Organization Logic

System evaluates each meeting associated with client. If meeting end\_time is greater than current\_time: Category is "Upcoming", sorted ascending by start\_time (soonest first). If meeting end\_time is less than current\_time: Category is "Past", sorted descending by start\_time (most recent first), status set to "Completed".
#296
**FRD #7: Client Profile > Meetings** > **4\. Functional Logic** > 4.2 Meeting Card Display Logic
~93 tok
### 4.2 Meeting Card Display Logic

**Element**

**Display Rule**

Title

Meeting title, truncate at 50 chars

Date

"MMM DD, YYYY" format

Time

"HH:MM AM/PM" in user's timezone

Duration

"X hours Y minutes" or "X min"

Project

Project name with link

Participants

Avatar stack, "+N" for overflow

Join Button

Show only if video\_link exists AND meeting is upcoming
#297
**FRD #7: Client Profile > Meetings** > **4\. Functional Logic** > 4.3 Meeting Count Badge Logic
~51 tok
### 4.3 Meeting Count Badge Logic

System counts meetings where end\_time > current\_time. Badge displays count on Meetings tab. Badge is hidden if count is 0. Count updates in real-time as meetings pass.
#298
**FRD #7: Client Profile > Meetings** > **4\. Functional Logic** > 4.4 Meeting Status Logic
~84 tok
### 4.4 Meeting Status Logic

**Condition**

**Status**

**Display**

start\_time > current\_time

Upcoming

No status badge

start\_time <= current\_time <= end\_time

In Progress

"In Progress" badge (optional)

end\_time < current\_time

Completed

"Completed" badge

Meeting cancelled

Cancelled

"Cancelled" badge (strikethrough)
#299
**FRD #7: Client Profile > Meetings** > **4\. Functional Logic** > 4.5 Pre-Population Logic for New Meeting
~83 tok
### 4.5 Pre-Population Logic for New Meeting

When creating meeting from client profile:

*   Client automatically added as participant.
*   If client has single project, project is pre-selected.
*   If client has multiple projects, user must select project.
*   Default duration: 30 minutes.
*   Default meeting type: Video call.
#300
**FRD #7: Client Profile > Meetings** > **4\. Functional Logic** > 4.6 Timezone Handling
~55 tok
### 4.6 Timezone Handling

All meeting times stored in UTC. Display times converted to user's browser timezone. Timezone indicator shown next to time (e.g., "EST", "PST"). Client invitations include timezone conversion.
#301
**FRD #7: Client Profile > Meetings** > **4\. Functional Logic** > 4.7 Empty State Logic
~58 tok
### 4.7 Empty State Logic

If client has no meetings: Display "No meetings scheduled" message with "+ Schedule Meeting" CTA. If no upcoming meetings but has past: Show empty Upcoming section with message, show Past section with data.
#302
**FRD #7: Client Profile > Meetings** > **4\. Functional Logic** > 4.8 Impact on Other Modules
~90 tok
### 4.8 Impact on Other Modules

**Module**

**Impact**

**Calendar Module**

Meetings created here appear in calendar

**Project Module**

Meeting linked to project appears in project view

**Notifications**

Meeting reminders sent to participants

**Client Portal**

Client can view their meeting schedule

**Activity Log**

Meeting creation/updates logged
#303
**FRD #7: Client Profile > Meetings** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#304
**FRD #7: Client Profile > Meetings** > **5\. Field Details & Validations** > 5.1 Meeting Display Fields
~136 tok
### 5.1 Meeting Display Fields

**Field Name**

**Field Type**

**Source**

**Display Format**

Title

Text

Meeting record

Max 50 chars with ellipsis

Date

Date

Meeting.start\_time

"MMM DD, YYYY"

Time

Time

Meeting.start\_time

"HH:MM AM/PM TZ"

Duration

Calculated

end\_time - start\_time

"X hr Y min"

Project

Reference

Meeting.project\_id

Project name (linked)

Type

Enum

Meeting.type

Icon + label

Participants

Reference

Meeting.participants

Avatar stack

Video Link

URL

Meeting.video\_link

Hidden, used for Join button
#305
**FRD #7: Client Profile > Meetings** > **5\. Field Details & Validations** > 5.2 Schedule Meeting Fields
~127 tok
### 5.2 Schedule Meeting Fields

**Field Name**

**Field Type**

**Mandatory**

**Validation Rules**

Title

Text

Yes

Max 100 chars, min 3 chars

Date

Date Picker

Yes

Must be today or future

Start Time

Time Picker

Yes

Valid time format

Duration

Dropdown

Yes

15min, 30min, 45min, 1hr, 1.5hr, 2hr

Project

Dropdown

Yes

Client's active projects

Location/Link

Text/URL

No

Valid URL if video call

Participants

Multi-select

No

Team members, other clients

Notes

Textarea

No

Max 2000 chars
#306
**FRD #7: Client Profile > Meetings** > **6\. Success Message Handling**
~98 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

**Duration**

Meeting scheduled

"Meeting scheduled successfully"

Toast notification

5 seconds

Meeting updated

"Meeting updated successfully"

Toast notification

5 seconds

Meeting cancelled

"Meeting cancelled"

Toast notification

5 seconds

Notes saved

"Notes saved"

Inline indicator

3 seconds
#307
**FRD #7: Client Profile > Meetings** > **7\. Error Message Handling**
~8 tok
## **7\. Error Message Handling**
#308
**FRD #7: Client Profile > Meetings** > **7\. Error Message Handling** > 7.1 Validation Errors
~103 tok
### 7.1 Validation Errors

**Field**

**Error Condition**

**Error Message**

Title

Empty

"Meeting title is required"

Title

Too short

"Title must be at least 3 characters"

Date

Past date

"Meeting date must be today or in the future"

Time

Past time (today)

"Meeting time has already passed"

Project

Not selected

"Please select a project"

Video Link

Invalid URL

"Please enter a valid meeting URL"
#309
**FRD #7: Client Profile > Meetings** > **7\. Error Message Handling** > 7.2 System Errors
~74 tok
### 7.2 System Errors

**Error Type**

**Error Message**

**Display Type**

Schedule failed

"Unable to schedule meeting. Please try again"

Toast notification

Join failed

"Unable to open meeting link"

Toast notification

Load failed

"Unable to load meetings. Please refresh"

Inline message
#310
**FRD #7: Client Profile > Meetings** > **8\. Edge Cases**
~250 tok
## **8\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Meeting happening right now

Show "In Progress" badge, Join button active

High

EC-002

Meeting with no video link

No Join button, show location text instead

Medium

EC-003

Meeting spans multiple days

Display start date, show full duration

Low

EC-004

Client removed from project after meeting scheduled

Meeting remains visible, project shows "(Removed)"

Medium

EC-005

All participants cancel

Meeting shows "Cancelled" status

Medium

EC-006

Back-to-back meetings same day

Display in correct chronological order

Medium

EC-007

Meeting in different timezone than user

Show correct local time with TZ indicator

High

EC-008

50+ past meetings

Paginate or virtualize list for performance

Medium

EC-009

Meeting link expired

Join button opens link, platform handles expiry

Low

EC-010

Edit meeting after start time passed

Prevent editing, show "Cannot edit past meetings"

Medium
#311
**FRD #7: Client Profile > Meetings** > **9\. Acceptance Criteria**
~8 tok
## **9\. Acceptance Criteria**
#312
**FRD #7: Client Profile > Meetings** > **9\. Acceptance Criteria** > 9.1 Meetings Tab Display
~83 tok
### 9.1 Meetings Tab Display

**AC ID**

**Criteria**

AC-001

Meetings tab is accessible from client profile

AC-002

Tab badge shows count of upcoming meetings

AC-003

Upcoming meetings sorted by date (soonest first)

AC-004

Past meetings sorted by date (most recent first)

AC-005

Meeting cards display all required information
#313
**FRD #7: Client Profile > Meetings** > **9\. Acceptance Criteria** > 9.2 Join Meeting
~67 tok
### 9.2 Join Meeting

**AC ID**

**Criteria**

AC-006

Join button appears for meetings with video links

AC-007

Join button opens video link in new tab

AC-008

Join button not shown for past meetings

AC-009

Join button not shown for meetings without video links
#314
**FRD #7: Client Profile > Meetings** > **9\. Acceptance Criteria** > 9.3 Schedule Meeting
~75 tok
### 9.3 Schedule Meeting

**AC ID**

**Criteria**

AC-010

Schedule Meeting button opens creation modal

AC-011

Client is pre-selected as participant

AC-012

All required fields are validated

AC-013

Created meeting appears in Upcoming section

AC-014

Meeting invitations are sent to participants
#315
**FRD #7: Client Profile > Meetings** > **9\. Acceptance Criteria** > 9.4 Meeting Management
~58 tok
### 9.4 Meeting Management

**AC ID**

**Criteria**

AC-015

User can view meeting details by clicking card

AC-016

User can edit upcoming meetings

AC-017

User can cancel upcoming meetings

AC-018

Past meetings cannot be edited
#316
**FRD #7: Client Profile > Meetings** > **10\. Test Cases**
~115 tok
## **10\. Test Cases**

Manual test cases are provided in the accompanying Excel file: [**FRD\_07\_Client\_Profile\_Meetings\_Test\_Cases.xlsx**](https://docs.google.com/spreadsheets/d/1oudvA_Q2Qjo7ceHAgFBNj34Kybw0PXOI/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)

Test case categories include:

*   Tab navigation and display
*   Meeting card functionality
*   Schedule meeting flow
*   Join meeting functionality
*   Edge case testing
#317
**FRD #7: Client Profile > Meetings** > **11\. Dependencies**
~104 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Calendar/Calendly Module

Functional

Meeting creation and management

DEP-002

Project Module

Data

Project associations

DEP-003

Video Conferencing

External

Zoom, Google Meet, etc.

DEP-004

Notification Service

Functional

Meeting reminders

DEP-005

Timezone Service

Technical

Time conversions
#318
**FRD #7: Client Profile > Meetings** > **12\. References**
~6 tok
## **12\. References**
#319
**FRD #7: Client Profile > Meetings** > **12\. References** > 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25693-47609&t=r4NL4B1STgwBOH95-0)
~42 tok
### 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25693-47609&t=r4NL4B1STgwBOH95-0)

8\. Client Profile > Payments Tab
#320
**FRD #8: Client Profile > Payments Tab**
~48 tok
# **FRD #8: Client Profile > Payments Tab**

**Document Version:** 1.0 **Created Date:** December 16, 2025 **Module:** Client Profile > Payments Tab **Platform:** Pixally CRM - Agency Portal
#321
**FRD #8: Client Profile > Payments Tab** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#322
**FRD #8: Client Profile > Payments Tab** > **1\. Module Overview** > 1.1 Purpose
~76 tok
### 1.1 Purpose

This document defines the functional requirements for the Payments tab within the Client Profile. The Payments tab provides a comprehensive view of all financial transactions associated with a client, including invoices, payments received, and payment statuses across all their projects.
#323
**FRD #8: Client Profile > Payments Tab** > **1\. Module Overview** > 1.2 Scope
~59 tok
### 1.2 Scope

This FRD covers:

*   Payments tab interface and layout
*   Invoice listing and status tracking
*   Payment status definitions
*   Send invoice functionality
*   Mark as Paid functionality
*   Payment history and filtering
#324
**FRD #8: Client Profile > Payments Tab** > **1\. Module Overview** > 1.3 Key Business Rules
~141 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Payments tab shows invoices from **all projects** where client is the primary contact

BR-002

Only **Booked Clients** can have invoices (not Leads)

BR-003

Invoices are generated from the **Proposal Module** or created manually

BR-004

"Mark as Paid" is available for **Unpaid, Overdue, and Failed** statuses

BR-005

Client Worth is calculated as **sum of all paid invoices**

BR-006

Invoice actions are available in 3-dot menu

BR-007

Refund functionality links to **Financial Module**
#325
**FRD #8: Client Profile > Payments Tab** > **2\. User Roles & Permissions**
~99 tok
## **2\. User Roles & Permissions**

**Role**

**View Payments**

**Send Invoice**

**Mark as Paid**

**Process Refund**

**Download Invoice**

Agency Owner (AO)

✅

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

❌

✅

Team Member

✅

❌

❌

❌

✅

Contractor

❌

❌

❌

❌

❌

Client

❌

❌

❌

❌

❌

**Note:** \[TBD: PM to confirm role-based access for payment management\]
#326
**FRD #8: Client Profile > Payments Tab** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#327
**FRD #8: Client Profile > Payments Tab** > **3\. User Flow** > 3.1 Access Points
~35 tok
### 3.1 Access Points

**Access Point**

**Navigation Path**

Client Profile

Clients & Contractors → Clients → Client Name → Payments Tab
#328
**FRD #8: Client Profile > Payments Tab** > **3\. User Flow** > 3.2 Payments Tab Display
~61 tok
### 3.2 Payments Tab Display

User navigates to Client Profile (Booked Client only). User clicks "Payments" tab. System displays payment summary header. System displays invoice listing table. Table shows all invoices associated with this client.
#329
**FRD #8: Client Profile > Payments Tab** > **3\. User Flow** > 3.3 Payment Summary Header
~55 tok
### 3.3 Payment Summary Header

System displays total Client Worth (sum of paid invoices). System displays count of pending invoices. System displays total outstanding amount. "+ Send Invoice" button displayed in header.
#330
**FRD #8: Client Profile > Payments Tab** > **3\. User Flow** > 3.4 Invoice Listing Table
~81 tok
### 3.4 Invoice Listing Table

System displays table with columns: Invoice #, Project, Amount, Due Date, Status, Actions. Invoices sorted by due date (most recent first). Status badges indicate: Paid, Unpaid, Overdue, Failed, Refunded. 3-dot action menu available for each invoice. Clicking invoice row opens invoice detail.
#331
**FRD #8: Client Profile > Payments Tab** > **3\. User Flow** > 3.5 Send Invoice Flow
~107 tok
### 3.5 Send Invoice Flow

User clicks "+ Send Invoice" button. System opens invoice creation modal. User selects project for invoice. User enters invoice details: Amount, Description, Due date, Payment schedule. User clicks "Send Invoice". System generates invoice and sends to client email. Invoice appears in listing with "Unpaid" status. \[TBD: PM to confirm - refer to Financial Module FRD for detailed invoice creation\]
#332
**FRD #8: Client Profile > Payments Tab** > **3\. User Flow** > 3.6 Mark as Paid Flow
~72 tok
### 3.6 Mark as Paid Flow

User clicks 3-dot menu on invoice row. User selects "Mark as Paid". System displays confirmation modal. User confirms payment received. System updates invoice status to "Paid". System updates Client Worth calculation. Payment date is recorded as current date.
#333
**FRD #8: Client Profile > Payments Tab** > **3\. User Flow** > 3.7 Invoice Actions (3-dot Menu)
~103 tok
### 3.7 Invoice Actions (3-dot Menu)

**Action**

**Visibility**

**Behavior**

View Details

All statuses

Opens invoice detail modal

Download PDF

All statuses

Downloads invoice as PDF

Send Reminder

Unpaid, Overdue

Sends payment reminder email

Mark as Paid

Unpaid, Overdue, Failed

Changes status to Paid

Process Refund

Paid

Opens refund flow (Financial Module)

Void Invoice

Unpaid

Cancels invoice
#334
**FRD #8: Client Profile > Payments Tab** > **3\. User Flow** > 3.8 Filter and Search
~48 tok
### 3.8 Filter and Search

User can filter by status: All, Paid, Unpaid, Overdue, Failed, Refunded. User can filter by project. User can filter by date range. User can search by invoice number.
#335
**FRD #8: Client Profile > Payments Tab** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#336
**FRD #8: Client Profile > Payments Tab** > **4\. Functional Logic** > 4.1 Invoice Display Logic
~56 tok
### 4.1 Invoice Display Logic

System queries all invoices where client is primary contact. Invoices grouped by project (optionally). Each invoice displays: Number, Project name, Amount with currency, Due date, Status badge.
#337
**FRD #8: Client Profile > Payments Tab** > **4\. Functional Logic** > 4.2 Payment Status Logic
~94 tok
### 4.2 Payment Status Logic

**Status**

**Condition**

**Badge Color**

Unpaid

Due date in future, no payment

Yellow

Overdue

Due date passed, no payment

Red

Paid

Full payment received

Green

Partial

Partial payment received

Orange

Failed

Payment attempt failed

Red (different)

Refunded

Payment was refunded

Gray

Void

Invoice cancelled

Gray (strikethrough)
#338
**FRD #8: Client Profile > Payments Tab** > **4\. Functional Logic** > 4.3 Client Worth Calculation
~87 tok
### 4.3 Client Worth Calculation

Client Worth equals the sum of all invoice amounts where invoice status is "Paid" and invoice client\_id matches current client. Worth is displayed in header. Worth updates when invoice marked as paid. Worth decreases when refund processed. Worth aggregates across all brands if client exists in multiple brands.
#339
**FRD #8: Client Profile > Payments Tab** > **4\. Functional Logic** > 4.4 Overdue Detection Logic
~64 tok
### 4.4 Overdue Detection Logic

System runs daily check on all invoices. If invoice.due\_date < current\_date AND status = 'Unpaid': status = 'Overdue' Overdue invoices trigger notification to agency. \[TBD: PM to confirm overdue notification behavior\]
#340
**FRD #8: Client Profile > Payments Tab** > **4\. Functional Logic** > 4.5 Mark as Paid Logic
~73 tok
### 4.5 Mark as Paid Logic

User selects "Mark as Paid" from 3-dot menu. System validates invoice is in valid status (Unpaid, Overdue, Failed). System prompts for confirmation. On confirm: status = 'Paid', payment\_date = current\_timestamp. System updates Client Worth. System logs activity.
#341
**FRD #8: Client Profile > Payments Tab** > **4\. Functional Logic** > 4.6 Refund Logic
~66 tok
### 4.6 Refund Logic

Refund flow handled by Financial Module. Link provided to Financial Module from 3-dot menu. After refund processed, status updates to "Refunded". Client Worth is reduced by refund amount. \[TBD: PM to confirm - refer to Financial Module FRD\]
#342
**FRD #8: Client Profile > Payments Tab** > **4\. Functional Logic** > 4.7 Empty State Logic
~47 tok
### 4.7 Empty State Logic

If client has no invoices: Display "No invoices yet" message with "+ Send Invoice" CTA. For Leads: Display "Invoices available for Booked Clients only" message.
#343
**FRD #8: Client Profile > Payments Tab** > **4\. Functional Logic** > 4.8 Impact on Other Modules
~84 tok
### 4.8 Impact on Other Modules

**Module**

**Impact**

**Financial Module**

Invoice and payment data source

**Project Module**

Project-level invoice totals updated

**Reports Module**

Revenue reports reflect payment status

**Client Portal**

Client can view their invoices

**Notifications**

Payment reminders and confirmations
#344
**FRD #8: Client Profile > Payments Tab** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#345
**FRD #8: Client Profile > Payments Tab** > **5\. Field Details & Validations** > 5.1 Invoice Listing Fields
~102 tok
### 5.1 Invoice Listing Fields

**Field Name**

**Field Type**

**Source**

**Display Format**

Invoice #

Text

invoice.number

"INV-XXXXX"

Project

Reference

invoice.project\_id

Project name

Amount

Currency

invoice.amount

"$X,XXX.XX"

Due Date

Date

invoice.due\_date

"MMM DD, YYYY"

Status

Enum

invoice.status

Status badge

Payment Date

Date

invoice.payment\_date

"MMM DD, YYYY" (if paid)
#346
**FRD #8: Client Profile > Payments Tab** > **5\. Field Details & Validations** > 5.2 Send Invoice Fields
~84 tok
### 5.2 Send Invoice Fields

**Field Name**

**Field Type**

**Mandatory**

**Validation Rules**

Project

Dropdown

Yes

Client's active projects

Amount

Currency

Yes

\> 0, max 2 decimal places

Description

Textarea

No

Max 500 chars

Due Date

Date Picker

Yes

Today or future

Payment Type

Dropdown

Yes

One-time, Recurring
#347
**FRD #8: Client Profile > Payments Tab** > **6\. Success Message Handling**
~113 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

**Duration**

Invoice sent

"Invoice sent to \[client email\]"

Toast notification

5 seconds

Marked as paid

"Invoice marked as paid"

Toast notification

5 seconds

Reminder sent

"Payment reminder sent"

Toast notification

5 seconds

Invoice voided

"Invoice voided"

Toast notification

5 seconds

PDF downloaded

"Invoice downloaded"

Browser download

N/A
#348
**FRD #8: Client Profile > Payments Tab** > **7\. Error Message Handling**
~8 tok
## **7\. Error Message Handling**
#349
**FRD #8: Client Profile > Payments Tab** > **7\. Error Message Handling** > 7.1 Validation Errors
~77 tok
### 7.1 Validation Errors

**Field**

**Error Condition**

**Error Message**

Amount

Zero or negative

"Amount must be greater than zero"

Amount

Invalid format

"Please enter a valid amount"

Due Date

Past date

"Due date must be today or in the future"

Project

Not selected

"Please select a project"
#350
**FRD #8: Client Profile > Payments Tab** > **7\. Error Message Handling** > 7.2 System Errors
~72 tok
### 7.2 System Errors

**Error Type**

**Error Message**

**Display Type**

Send failed

"Unable to send invoice. Please try again"

Toast notification

Mark paid failed

"Unable to update payment status"

Toast notification

Load failed

"Unable to load payment history"

Inline message
#351
**FRD #8: Client Profile > Payments Tab** > **8\. Edge Cases**
~247 tok
## **8\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Lead profile (not Booked Client)

Payments tab shows restricted message

High

EC-002

Invoice for archived project

Invoice displays with project marked "(Archived)"

Medium

EC-003

Multiple invoices same project

All invoices listed, grouped option available

Medium

EC-004

Invoice in foreign currency

Display original currency with conversion note

Low

EC-005

Payment received after marked void

Cannot mark void invoice as paid

Medium

EC-006

Partial payment received

Show "Partial" status with remaining amount

Medium

EC-007

100+ invoices for client

Paginate listing (20 per page)

Medium

EC-008

Invoice due today

Status remains "Unpaid" (not Overdue) until day after

High

EC-009

Refund more than paid amount

Prevent; error "Refund cannot exceed paid amount"

High

EC-010

Send invoice to client without email

Error "Client email required to send invoice"

High
#352
**FRD #8: Client Profile > Payments Tab** > **9\. Acceptance Criteria**
~8 tok
## **9\. Acceptance Criteria**
#353
**FRD #8: Client Profile > Payments Tab** > **9\. Acceptance Criteria** > 9.1 Payments Tab Display
~73 tok
### 9.1 Payments Tab Display

**AC ID**

**Criteria**

AC-001

Payments tab accessible for Booked Clients only

AC-002

Client Worth displays correctly in header

AC-003

All invoices for client are listed

AC-004

Invoice status badges display correctly

AC-005

Invoices sorted by due date
#354
**FRD #8: Client Profile > Payments Tab** > **9\. Acceptance Criteria** > 9.2 Invoice Actions
~76 tok
### 9.2 Invoice Actions

**AC ID**

**Criteria**

AC-006

3-dot menu shows appropriate actions per status

AC-007

Mark as Paid updates status and Client Worth

AC-008

Send Reminder sends email to client

AC-009

Download PDF generates and downloads invoice

AC-010

Void Invoice cancels unpaid invoice
#355
**FRD #8: Client Profile > Payments Tab** > **9\. Acceptance Criteria** > 9.3 Send Invoice
~48 tok
### 9.3 Send Invoice

**AC ID**

**Criteria**

AC-011

Send Invoice button opens creation modal

AC-012

Invoice sent to client email

AC-013

New invoice appears in listing with Unpaid status
#356
**FRD #8: Client Profile > Payments Tab** > **9\. Acceptance Criteria** > 9.4 Filters
~44 tok
### 9.4 Filters

**AC ID**

**Criteria**

AC-014

Status filter works correctly

AC-015

Project filter shows only client's projects

AC-016

Date range filter works correctly
#357
**FRD #8: Client Profile > Payments Tab** > **10\. Test Cases**
~112 tok
## **10\. Test Cases**

Manual test cases are provided in the accompanying Excel file: [**FRD\_08\_Client\_Profile\_Payments\_Test\_Cases.xlsx**](https://docs.google.com/spreadsheets/d/1JbrGQXEtTV8328-9MMOZkPxgFP8f13t8/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)

Test case categories include:

*   Tab access and restrictions
*   Invoice display and sorting
*   Payment status logic
*   Invoice actions
*   Edge case testing
#358
**FRD #8: Client Profile > Payments Tab** > **11\. Dependencies**
~120 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Financial Module

Functional

Invoice creation and management

DEP-002

Proposal Module

Data

Auto-generated invoices from proposals

DEP-003

Project Module

Data

Project associations

DEP-004

Email Service

Functional

Invoice and reminder emails

DEP-005

PDF Generator

Technical

Invoice PDF generation

DEP-006

Payment Gateway

External

Stripe integration
#359
**FRD #8: Client Profile > Payments Tab** > **12\. References**
~6 tok
## **12\. References**
#360
**FRD #8: Client Profile > Payments Tab** > **12\. References** > 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25693-47612&t=r4NL4B1STgwBOH95-0)
~41 tok
### 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25693-47612&t=r4NL4B1STgwBOH95-0)

9\. Client Profile > Notes Tab
#361
**Functional Requirements Document (FRD) — Client Profile > Notes Tab**
~79 tok
# **Functional Requirements Document (FRD) — Client Profile > Notes Tab**

**Document Version:** 2.0 **Updated Date:** May 06, 2026 **Module:** Client Profile > Notes Tab **Platform:** Pixally CRM — Agency Portal **Aligned With:** Agency Notes Module (Project Details FRD) — Notes logic standardized across modules.
#362
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **1\. Module Overview**
~377 tok
## **1\. Module Overview**

*   **Module Name:** Client Profile — Notes Management  
    
*   **Purpose:** Enable agency users to create, view, edit, and delete public and private notes from within a Client's profile, with full sync to the associated Project and Event, and cross-portal visibility based on the selected audience.  
    
*   **Business Goal:** Centralize client-related communication and documentation at the client level while keeping notes consistent with project and event-level notes, ensuring agency, contractors, and clients see the same information across portals.  
    
*   **Scope:  
    **
    *   Notes tab interface inside Client Profile
    *   Public and Private note creation, edit, delete (CRUD)
    *   Mandatory Project + Event association for every note
    *   Audience-based visibility for Public notes (Clients, Contractors, Team Members of the selected project)
    *   Cross-portal synchronization to the Project module, Client Portal, and Contractor Portal
    *   Search, sort, and pagination
    *   Visibility conversion (Private ↔ Public) per role rules
*   **Out of Scope:  
    **
    *   **Lead Profile does NOT have a Notes tab.** Notes only become available once a Lead is converted to a Client. (Leads → Clients flow is handled in the Lead Conversion module.)
    *   Notes initiated from the Project or Event module (covered in the Agency Notes Module FRD)
    *   Client-side note creation from the Client Portal (covered in the Agency Notes Module FRD)
#363
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **2\. User Roles & Permissions**
~246 tok
## **2\. User Roles & Permissions**

*   **Link:** [Roles and permissions — draft](https://docs.google.com/spreadsheets/d/1fPBOJVJmmtHcs9Ev9o_pneOD4Em3Z4AB-j3jrLyJvaY/edit?usp=sharing)

**Role**

**View Public Notes**

**View Private Notes**

**Create Notes**

**Edit Own Notes**

**Delete Own Notes**

Agency Owner (AO)

✅

Own only

✅

✅

✅

Agency Admin

✅

Own only

✅

✅

✅

Project Manager (PM)

✅

Own only

✅

✅

✅

Team Member

✅

Own only

✅

✅

✅

**Notes on Access:**

*   **Contractors** do **not** have access to the Client Profile and therefore cannot view or create notes from this module. Contractors can still be **selected as an audience** for Public notes — the note will appear for them in the **Project module / Contractor Portal**, not in the Client Profile.
*   **Clients** do not have access to the Client Profile. They can be selected as an audience for Public notes — the note will appear for them in the **Client Portal** under the associated Project/Event.
#364
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#365
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **3\. User Flow** > 3.1 Access Point
~64 tok
### 3.1 Access Point

**Access Point**

**Navigation Path**

Client Profile

Clients & Contractors → Clients → Client Name → Notes Tab

Lead Profile does not have a Notes tab. Notes for a lead only become available after the Lead is converted to a Client.
#366
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **3\. User Flow** > 3.2 Empty State
~69 tok
### 3.2 Empty State

*   User navigates to a Client Profile and clicks the **Notes** tab.
*   If no notes exist for this client, both **Public Notes** and **Private Notes** sections are displayed with their respective empty-state messaging and a "+ Add Note" CTA per section.
#367
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **3\. User Flow** > 3.3 Create Note Flow (from Public section)
~176 tok
### 3.3 Create Note Flow (from Public section)

*   User clicks **"+ Add Note"** in the Public Notes section.
*   The "Create Note" pop-up opens with **Visibility = Public** pre-selected and the Private toggle disabled.
*   User selects a **Project** (mandatory dropdown — only this client's active projects are listed).
*   User selects an **Event** (mandatory dropdown — populated based on the selected project).
*   Audience checkboxes (**Clients, Contractors, Team Members**) are displayed; at least one must be selected.
*   User enters Headline, Note Content (rich text), and optionally uploads images.
*   User clicks **Create Note** → success toast → note appears at the top of the Public section.
#368
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **3\. User Flow** > 3.4 Create Note Flow (from Private section)
~140 tok
### 3.4 Create Note Flow (from Private section)

*   User clicks **"+ Add Note"** in the Private Notes section.
*   The "Create Note" pop-up opens with **Visibility = Private** pre-selected and the Public toggle disabled.
*   User selects **Project** (mandatory) and **Event** (mandatory, cascading from project).
*   No audience checkboxes shown for Private notes.
*   User enters Headline, Note Content, and optionally uploads images.
*   User clicks **Create Note** → success toast → note appears at the top of the Private section (visible only to creator).
#369
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **3\. User Flow** > 3.5 View Note Flow
~54 tok
### 3.5 View Note Flow

*   User clicks anywhere on a note card.
*   A read-only "Note Pop-Up View" opens displaying full content, metadata, and Edit/Delete buttons (visible only if the current user is the creator).
#370
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **3\. User Flow** > 3.6 Edit Note Flow
~93 tok
### 3.6 Edit Note Flow

*   User clicks the kebab (3-dot) menu on their own note → **Edit**, OR clicks **Edit** inside the Note Pop-Up View.
*   Edit pop-up opens, pre-filled with existing values.
*   User modifies any editable field (including Project, Event, Visibility, audience).
*   On **Save** → success toast; note moves between sections if visibility was changed.
#371
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **3\. User Flow** > 3.7 Delete Note Flow
~79 tok
### 3.7 Delete Note Flow

*   User clicks the kebab menu on their own note → **Delete**, OR clicks **Delete** inside the Note Pop-Up View.
*   Confirmation dialog: "Delete this note?"
*   On confirm → note is permanently removed from Client Profile, Project module, and any portals it was visible in → success toast.
#372
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#373
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.1 Empty State
~78 tok
### 4.1 Empty State

*   If no notes exist for the client, both Public Notes and Private Notes sections are rendered with their empty-state copy and "+ Add Note" CTAs.
*   Empty-state messages:
    *   Public Notes: _"No public notes yet."_
    *   Private Notes: _"No private notes yet. (Only visible to you.)"_
#374
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.2 General Display
~205 tok
### 4.2 General Display

*   **Placement:** Notes appear in the Public Notes section or Private Notes section of the Client Profile based on their visibility flag.
*   **Card Structure:** Each note card shows: Event title with color badge, Project name, Kebab menu (creator only), Headline (truncated), Content preview (truncated; for image-only notes show _"Click here to preview"_), User avatars, Creation timestamp.
*   **Ordering:** Newest first. Recently edited notes move to the top.
*   **Pagination:** Show 4 notes per section initially, then **"Show More (+X notes)"** in groups of 10.
*   **Search:** Works across all visible notes (Public + Private) by Headline and Note Content. Matching notes are filtered and displayed.
*   **Sort:** Newest or Oldest. The list rearranges accordingly based on creation date.
#375
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.3 Visibility & Avatars
~100 tok
### 4.3 Visibility & Avatars

*   **Private Notes:** Visible to the creator only. Card shows the creator's avatar.
*   **Public Notes:** Visible to the selected audience (Clients, Contractors, Team Members of the selected project) plus all agency users with profile access. Cards show up to 3 avatars + "+X" indicator. Hover reveals a categorized audience list (Clients / Contractors / Team Members).
#376
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.4 Cross-Portal Display (Public Notes only)
~212 tok
### 4.4 Cross-Portal Display (Public Notes only)

A Public note created in the Client Profile syncs based on the audience checkboxes selected. The audience pool is **scoped to the project selected during note creation**:

**Audience Checkbox**

**Resulting Visibility**

Clients

Visible to clients **attached to the selected project**, in the Client Portal under that Project / Event

Contractors

Visible to contractors **attached to the selected project**, in the Contractor Portal under that Project / Event

Team Members

Visible to all team members in the Agency Portal, under both Client Profile and Project module

*   The same note appears in:
    1.  Client Profile → Notes Tab (Public section)
    2.  Project module → Notes (Public section under the selected Event)
    3.  The respective external portals based on audience checkboxes
#377
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.5 Create Note
~200 tok
### 4.5 Create Note

*   Notes can be created from the Client Profile by Agency Owners, Agency Admins, Project Managers, and Team Members.
*   **Project context:** Project is **always selectable** from the create modal (no pre-fill, since this is the client level). Only **active projects of the current client** are listed.
*   **Event context:** Event dropdown is **mandatory** and is **populated based on the selected project**. If no project is selected, the Event dropdown is disabled.
*   **Empty state:** Each section (Public/Private) shows its own "+ Add Note" CTA.
*   **After notes exist:** Each section retains its own "+ Add Note" CTA, which pre-selects visibility:
    *   **Public + :** Public pre-selected, Private disabled
    *   **Private + :** Private pre-selected, Public disabled
#378
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.6 Role Rules (within Client Profile)
~107 tok
### 4.6 Role Rules (within Client Profile)

*   **Agency Users (Owner, Admin, PM, Team Member)** can create both **Private** and **Public** notes.
*   **Public notes** require selecting at least one audience (Clients, Contractors, Team Members).
*   **Private notes** are visible only to the creator and have no audience selection.
*   Contractors and Clients cannot create notes from the Client Profile (no access to this view).
#379
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.7 Edit Note
~110 tok
### 4.7 Edit Note

*   Agency Users can edit notes they created via the Kebab Menu → Edit, or via the Note Pop-Up View → Edit button.
*   **Access:** Only the note creator can edit. Fields are pre-populated.
*   **Editable Fields:** Project, Event, Headline, Note Content, Images, Visibility (Private/Public), Audience checkboxes (Public only).
*   Changing the **Project** resets the **Event** dropdown (since events are project-scoped).
#380
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.8 Visibility Changes
~146 tok
### 4.8 Visibility Changes

*   When a note is changed from **Private to Public**, the user must select one or more audiences (Clients, Contractors, Team Members of the project). On save, the note moves from the Private section to the Public section and is propagated cross-portal based on selected audience.
*   When a note is changed from **Public to Private**, the note is hidden from all audiences and portals and moved into the creator's Private Notes section in the Client Profile.
*   **On Save:** Note updates, moves between sections if needed, and a success toast is shown.
#381
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.9 Delete Note
~108 tok
### 4.9 Delete Note

*   **Access:** Only the note creator can delete a note (via Kebab Menu → Delete, or Note Pop-Up → Delete).
*   **Results:**
    *   **Public Note:** Removed from everywhere — Client Profile, Project module, and all portals it was visible in.
    *   **Private Note:** Removed only for the creator (it never existed elsewhere).
*   **On Delete:** Confirmation required, then permanent deletion + success toast.
#382
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.10 Note ↔ Project / Event Sync
~120 tok
### 4.10 Note ↔ Project / Event Sync

*   Every note in the Client Profile is tied to a specific Project and Event.
*   A note created from the Client Profile is automatically visible in the corresponding Project module's Notes section (under the selected Event).
*   Edits made from either location sync to the other.
*   Deletions made from either location remove the note from both.
*   This sync logic is the same as defined in the Agency Notes Module (Project Details FRD).
#383
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **4\. Functional Logic** > 4.11 Impact on Other Modules
~193 tok
### 4.11 Impact on Other Modules

**Module**

**Impact**

Project Module

Notes appear in the Project's Notes section under the selected Event (Public section if Public, otherwise creator's Private section)

Client Portal

Public notes with "Clients" audience checked appear under the corresponding Project/Event

Contractor Portal

Public notes with "Contractors" audience checked appear under the corresponding Project/Event

Activity Log

Note creation, edit, and delete events are logged

Global Search

Public notes are indexed for global search; private notes are excluded

Notification System

Audience members receive a notification when a Public note is shared with them

CRM Library Module

Uploaded images are saved to the CRM library and embedded in the note
#384
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#385
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **5\. Field Details & Validations** > 5.1 Create / Edit Note Fields
~349 tok
### 5.1 Create / Edit Note Fields

**Field Name**

**Required**

**Validation Rules**

Choose Project

Yes

Dropdown lists only active projects of the current client. Selecting a project drives the Event dropdown.

Choose Event

Yes

Dropdown lists events under the selected project. Disabled until a project is selected.

Choose Visibility

Yes

Private Note or Public Note. Pre-selected based on which section's "+ Add Note" was clicked; the alternate option is disabled.

User Access Checkboxes

Conditional

Displayed only when Public visibility is selected. Three checkboxes: **Clients, Contractors, Team Members**. At least one must be selected. The audience pool is scoped to the selected project.

Headline

Yes

No character limit. Single-line text input.

Note Content

No

Standard rich text formatting features — Undo, Redo, Heading, Bold, Italic, Underline, Emoji, Link, Bullet list, Number list.

Image Upload

No

On click, opens a pop-up with two options: **Library** (select from existing CRM library images) and **Upload** (upload from local system). Supported formats: .jpg, .jpeg, .png, .webp, .svg. Max **15 MB per file**. Uploaded images are auto-saved to the CRM library and inserted into the note.

Cancel

No

Closes the pop-up without saving changes.

Create Note / Save

No

Validates fields and either shows the relevant error or saves the note and closes the pop-up.
#386
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **5\. Field Details & Validations** > 5.2 Note Pop-Up View Fields
~284 tok
### 5.2 Note Pop-Up View Fields

**Field Name**

**Display Rules**

Note Title

Shows note headline as the main title

Public/Private

Displays "Public Note" or "Private Note"

Cancel (X)

Closes the pop-up and returns to the Notes tab

Project

Displays the project name (e.g., "Jadon & Monika Wedding")

Event

Displays the event name with its color badge

Visible To

**Private Notes:** Shows creator avatar ("You"). **Public Notes:** Shows first 3 user avatars + "+X" for additional users. Hover displays a categorized list: Clients, Contractors, Team Members.

Created On

"CREATED ON" label with date and time. Format: Month DD, YYYY HH:MM

Created By

"CREATED BY" label with user avatar and name

Edited On

"EDITED ON" label with last modification date/time. Only displayed if the note has been edited at least once. Format: Month DD, YYYY HH:MM

Note Content

Full content with rich text formatting and any embedded media

Delete Button

Visible only to the creator. On click, shows a "Delete Note" confirmation dialog.

Edit Button

Visible only to the creator. On click, opens the Edit Note pop-up with pre-populated data.
#387
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **6\. Success Message Handling**
~70 tok
## **6\. Success Message Handling**

**Validation Scenario**

**Success Message**

Note created successfully

"Note has been created successfully."

Note updated successfully

"Note has been updated successfully."

Note deleted successfully

"Note has been deleted successfully."
#388
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **7\. Error Message Handling**
~211 tok
## **7\. Error Message Handling**

**Field**

**Validation Scenario**

**Error Message**

Choose Project

Not selected

"Please select a project."

Choose Event

Not selected

"Please select an event."

Choose Visibility

Not selected

"Please select the visibility option."

User Access Checkboxes

Public note saved with no audience selected

"Please select an option."

Headline

Empty submission

"Please enter a headline."

Note Content

Empty submission _(only when no headline + no images either)_

"Please enter note content."

Image Upload

Unsupported format

"Please upload a valid image format (.jpg, .jpeg, .png, .webp, .svg)."

Image Upload

File exceeds 15 MB

"Image size cannot exceed 15 MB."

General

Save / Update / Delete error

"Something went wrong."

Load

Notes failed to load

"Unable to load notes. Please refresh."
#389
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **8\. Edge Cases**
~615 tok
## **8\. Edge Cases**

**Scenario**

**Expected Behavior**

Client has no active projects

The "+ Add Note" CTA opens the modal, but the Project dropdown is empty with helper text _"This client has no active projects."_ The Create button stays disabled until a project is available.

User changes the Project mid-creation

Event dropdown resets, and any previously selected event is cleared. Audience checkboxes also reset (since contractor/client lists are project-scoped).

Project deleted/archived after note created

Note remains in Client Profile and Project module references show the project as "(Archived)". Edit is still available; switching to another project requires re-selecting an event.

Audience member (client/contractor) removed from project after note created

Note remains; the removed user no longer sees the note in their portal but the note is still visible in Client Profile and Project module.

Search returns no results

Display _"No notes found."_

Agency user deletes a note while another user is viewing it

On the next API call/refresh, the note no longer appears for the other user.

Note opened in multiple tabs in the same browser, then deleted

Continues to display in stale tabs until refresh / next API call, after which it is removed.

Multiple agency users create notes simultaneously

All notes save independently with no conflict.

User tries to edit another user's note

Kebab menu does not show Edit/Delete options; Note Pop-Up View hides the Edit/Delete buttons.

Visibility changed Private → Public, then Public → Private back-to-back

Note moves correctly between sections; audience selections from the Public phase are discarded once Private is saved.

Creator deactivated

Note shows "\[Deactivated User\]" as creator. Editing/deleting by anyone else is still not allowed.

Client archived after note created

Notes remain accessible in the archived client profile (read-only context).

Very long headline / large image-heavy note

Rendered with proper truncation in the card view; full content available in the Note Pop-Up View.

Edit changes the Project — note already synced cross-portal

On save, the note is removed from the previous Project's notes and audience portals and re-synced to the newly selected Project + Event + audience.

Note created while user is being downgraded to no-access role

Save call is honored if validated server-side at submission; subsequent access is governed by new permissions.
#390
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **9\. Acceptance Criteria**
~381 tok
## **9\. Acceptance Criteria**

*   Notes tab is accessible from the Client Profile only; Lead profiles do not show this tab.
*   Notes are organized into separate **Public** and **Private** sections; both sections are always visible.
*   Notes are sorted newest-first by default; sort can be toggled to Oldest.
*   Search filters notes across both Public and Private by headline and content.
*   Pagination shows 4 notes initially with "Show More (+X)" in groups of 10.
*   Project and Event are mandatory for every note (Public and Private).
*   Public notes require at least one audience checkbox (Clients, Contractors, Team Members), scoped to the selected project.
*   Private notes are visible only to their creator.
*   "+ Add Note" CTA in each section pre-selects the section's visibility and disables the alternate option.
*   Public notes sync to the Project module and propagate to Client/Contractor portals based on audience checkboxes.
*   Visibility can be changed Private ↔ Public; the note moves between sections and propagates correctly.
*   Only the note creator can edit or delete a note (via kebab menu or Note Pop-Up View).
*   Delete action requires confirmation; on confirmation, note is removed from Client Profile, Project module, and all portals.
*   Edited notes display the "EDITED ON" timestamp.
*   Success toasts are shown after create, update, and delete.
*   Contractors cannot access the Client Profile and therefore cannot create notes here, though they can be an audience for Public notes.
#391
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **10\. Dependencies**
~238 tok
## **10\. Dependencies**

**Module/System**

**Dependency Type**

**Impact if Unavailable**

Client Management Module

Data dependency

Notes tab cannot render without Client context

Project Management Module

Data dependency

Project dropdown empty; note creation blocked

Events Management

Data dependency

Event dropdown empty; note creation blocked

User Management

Authentication dependency

Cannot determine user permissions or audience pool

Rich Text Editor Component

UI dependency

Cannot format note content

CRM Library Module

Integration dependency

Cannot select from existing images or save uploaded images to the library

Notification System

Integration dependency

Audience members will not receive note-creation alerts

Activity Log

Functional dependency

Note CRUD events will not be tracked

Lead-to-Client Conversion Module

Functional dependency

Notes are unavailable on Lead profiles by design; activated post-conversion
#392
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **11\. References**
~164 tok
## **11\. References**

*   **Aligned FRD:** Agency Notes Module (Project Details FRD) — Notes logic source of truth.
*   **Roles & Permissions:** [Roles and permissions — draft](https://docs.google.com/spreadsheets/d/1fPBOJVJmmtHcs9Ev9o_pneOD4Em3Z4AB-j3jrLyJvaY/edit?usp=sharing)
*   **Figma Designs:** [Pixally — Client Profile Notes Tab](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25693-47615&t=r4NL4B1STgwBOH95-0)
*   **Test Cases:** [FRD\_09\_Client\_Profile\_Notes\_Test\_Cases.xlsx](https://docs.google.com/spreadsheets/d/1dZpDopCJ2z0IvNwJHyht0zzWNrsEesW9/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)
#393
**Functional Requirements Document (FRD) — Client Profile > Notes Tab** > **Change Log**
~120 tok
## **Change Log**

**Version**

**Date**

**Change Summary**

1.0

December 16, 2025

Initial draft of Client Profile Notes Tab

2.0

May 06, 2026

Aligned with Agency Notes Module (Project Details FRD): added rich text + headline + image upload, audience checkboxes for Public notes, mandatory Project + Event, Private↔Public visibility conversion, search & sort, 4+10 pagination, cross-portal sync, removed Contractor access, removed Lead Profile from scope

10\. Leads Profile
#394
**FRD #10: Leads Profile**
~40 tok
# **FRD #10: Leads Profile**

**Document Version:** 1.0 **Created Date:** December 16, 2025 **Module:** Leads Profile **Platform:** Pixally CRM - Agency Portal
#395
**FRD #10: Leads Profile** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#396
**FRD #10: Leads Profile** > **1\. Module Overview** > 1.1 Purpose
~79 tok
### 1.1 Purpose

This document defines the functional requirements for the Lead Profile view. The Lead Profile provides a comprehensive view of lead information with similar structure to Client Profile but with key differences reflecting the lead's pre-conversion status (no financial data, no invoice capabilities).
#397
**FRD #10: Leads Profile** > **1\. Module Overview** > 1.2 Scope
~54 tok
### 1.2 Scope

This FRD covers:

*   Lead Profile layout and navigation
*   Differences from Client Profile
*   Lead-specific restrictions
*   Lead to Client conversion indicators
*   Portal link behavior for Leads
#398
**FRD #10: Leads Profile** > **1\. Module Overview** > 1.3 Key Business Rules
~170 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Lead Profile has **same 5 tabs** as Client Profile: Overview, Communications, Meetings, Payments, Notes

BR-002

Lead Profile displays **"Lead" badge (orange)** instead of "Client" badge (green)

BR-003

Lead Profile does **NOT display Client Worth** (no financial data)

BR-004

Lead Profile does **NOT have "Send Invoice"** quick action

BR-005

Portal Link shows **"No portal link yet"** until Lead is attached to a project

BR-006

Lead **automatically converts to Booked Client** when proposal signed OR first payment received

BR-007

Payments tab is visible but shows **limited/empty state** for Leads
#399
**FRD #10: Leads Profile** > **2\. User Roles & Permissions**
~80 tok
## **2\. User Roles & Permissions**

**Role**

**View Lead**

**Edit Lead**

**Delete Lead**

**Add to Project**

**Schedule Meeting**

Agency Owner (AO)

✅

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

✅

✅

Team Member

✅

✅

✅

✅

✅

Contractor

Limited

❌

❌

❌

❌

Client

❌

❌

❌

❌

❌
#400
**FRD #10: Leads Profile** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#401
**FRD #10: Leads Profile** > **3\. User Flow** > 3.1 Access Points
~60 tok
### 3.1 Access Points

**Access Point**

**Navigation Path**

Leads Listing

Clients & Contractors → Clients → Leads Tab → Click Lead Name

Search Results

Global Search → Lead Name

Project Clients

Project → Clients Tab → Click Lead Name
#402
**FRD #10: Leads Profile** > **3\. User Flow** > 3.2 Lead Profile Header
~61 tok
### 3.2 Lead Profile Header

User navigates to Lead Profile. System displays profile header with:

*   Lead avatar/photo
*   Lead name
*   **"Lead" badge (orange color)**
*   Email address
*   Phone number
*   3-dot menu (Edit, Archive, Delete)
#403
**FRD #10: Leads Profile** > **3\. User Flow** > 3.3 Lead Profile Tabs
~63 tok
### 3.3 Lead Profile Tabs

System displays 5 tabs: Overview, Communications, Meetings, Payments, Notes. Tabs function identically to Client Profile except for noted differences. Unread counts display on Communications and Meetings tabs where applicable.
#404
**FRD #10: Leads Profile** > **3\. User Flow** > 3.4 Overview Tab - Lead Specific
~140 tok
### 3.4 Overview Tab - Lead Specific

System displays Lead Overview with sections:

*   **Stats Section**: Total Projects, Upcoming Meetings (NO Client Worth)
*   **Quick Actions**: Edit, Archive, Delete, Add Project(s), Schedule Meeting (NO Send Invoice)
*   **Portal Link Section**: Shows "No portal link yet" message if no projects attached
*   **Company Section**: Current company association with "Add Company" option
*   **Projects Section**: Active and Archived project tabs with project cards
*   **General Details**: Contact information, address, dates
#405
**FRD #10: Leads Profile** > **3\. User Flow** > 3.5 Portal Link Behavior for Leads
~75 tok
### 3.5 Portal Link Behavior for Leads

If Lead has no projects: Display "No portal link yet" with message "The portal link will appear after you add a project". If Lead has projects: Display portal link per brand (same as Client). Portal link is generated when Lead is first attached to a project.
#406
**FRD #10: Leads Profile** > **3\. User Flow** > 3.6 Payments Tab for Leads
~81 tok
### 3.6 Payments Tab for Leads

User clicks Payments tab on Lead Profile. System displays message: "Payment history will be available once this lead becomes a booked client." No invoices or payment data displayed. No "Send Invoice" action available. \[TBD: PM to confirm - refer to F3 clarification: No invoices to Leads\]
#407
**FRD #10: Leads Profile** > **3\. User Flow** > 3.7 Lead to Client Conversion
~98 tok
### 3.7 Lead to Client Conversion

Conversion triggers automatically when:

*   Proposal is signed by Lead, OR
*   First payment is received from Lead

Upon conversion:

*   Badge changes from "Lead" (orange) to "Client" (green)
*   Client Worth becomes calculated and displayed
*   "Send Invoice" quick action becomes available
*   Lead moves from Leads tab to Booked Clients tab in listing
#408
**FRD #10: Leads Profile** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#409
**FRD #10: Leads Profile** > **4\. Functional Logic** > 4.1 Lead vs Client Profile Comparison
~118 tok
### 4.1 Lead vs Client Profile Comparison

**Feature**

**Client Profile**

**Lead Profile**

Badge

"Client" (green)

"Lead" (orange)

Client Worth

✅ Displayed

❌ Not shown

Send Invoice (Quick Action)

✅ Available

❌ Not available

Payments Tab

Full functionality

Empty state message

Portal Link

Always available

"No link yet" if no projects

Communications Tab

Full access

Full access

Meetings Tab

Full access

Full access

Notes Tab

Full access

Full access
#410
**FRD #10: Leads Profile** > **4\. Functional Logic** > 4.2 Stats Section Logic (Lead)
~70 tok
### 4.2 Stats Section Logic (Lead)

Total Projects equals count of projects where lead\_id matches current\_lead. Upcoming Meetings equals count of meetings where lead\_id matches current\_lead AND start\_time is greater than current time. Client Worth is NOT displayed for Leads.
#411
**FRD #10: Leads Profile** > **4\. Functional Logic** > 4.3 Quick Actions Logic (Lead)
~86 tok
### 4.3 Quick Actions Logic (Lead)

**Action**

**Availability**

**Behavior**

Edit

Always

Opens Edit Lead modal

Archive

Always

Archives lead

Delete

Conditional

Blocked if active projects

Add Project(s)

Always

Opens project selection

Schedule Meeting

Always

Opens meeting creation

Send Invoice

**NEVER**

Not available for Leads
#412
**FRD #10: Leads Profile** > **4\. Functional Logic** > 4.4 Automatic Conversion Logic
~86 tok
### 4.4 Automatic Conversion Logic

Conversion triggers when proposal\_signed OR payment\_received event occurs. If entity type is "Lead": System changes entity type to "Booked Client". System updates badge to green "Client". System enables financial features. System moves entity to Booked Clients listing. System logs conversion in activity.
#413
**FRD #10: Leads Profile** > **4\. Functional Logic** > 4.5 Portal Link Generation Logic
~64 tok
### 4.5 Portal Link Generation Logic

When lead is attached to project, system checks if portal\_link exists for brand. If portal\_link does not exist: System generates portal\_link for brand and stores it. System displays portal\_link in Overview section.
#414
**FRD #10: Leads Profile** > **4\. Functional Logic** > 4.6 Impact on Other Modules
~85 tok
### 4.6 Impact on Other Modules

**Module**

**Impact**

**Client Listing**

Lead appears in Leads tab, not Booked Clients

**Project Module**

Lead can be attached to projects

**Proposal Module**

Lead can receive proposals

**Financial Module**

No invoices until converted

**Reports**

Lead counted in Lead metrics, not Client metrics
#415
**FRD #10: Leads Profile** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#416
**FRD #10: Leads Profile** > **5\. Field Details & Validations** > 5.1 Lead Profile Display Fields
~110 tok
### 5.1 Lead Profile Display Fields

**Field Name**

**Display Location**

**Notes**

Avatar

Header

Photo or initials

Full Name

Header

Editable

Badge

Header

"Lead" (orange)

Email

Header / Details

Primary contact

Phone

Header / Details

With country code

Company

Overview

Optional association

Address

General Details

Full address

Created Date

General Details

Auto-generated

Last Updated

General Details

Auto-updated
#417
**FRD #10: Leads Profile** > **6\. Success Message Handling**
~105 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

**Duration**

Lead edited

"Lead updated successfully"

Toast notification

5 seconds

Project added

"Lead added to \[Project Name\]"

Toast notification

5 seconds

Meeting scheduled

"Meeting scheduled successfully"

Toast notification

5 seconds

Lead converted

"Lead converted to Booked Client"

Toast notification

5 seconds
#418
**FRD #10: Leads Profile** > **7\. Error Message Handling**
~81 tok
## **7\. Error Message Handling**

**Error Type**

**Error Message**

**Display Type**

Delete blocked

"Cannot delete lead with active projects"

Toast notification

Archive blocked

"Please remove lead from active projects before archiving"

Modal

Load failed

"Unable to load lead profile. Please refresh"

Inline message
#419
**FRD #10: Leads Profile** > **8\. Edge Cases**
~187 tok
## **8\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Lead with 0 projects

Portal shows "No link yet" message

High

EC-002

Lead converted mid-session

UI updates to Client badge immediately

High

EC-003

Lead has multiple brands through projects

Portal links shown per brand

Medium

EC-004

Lead archived then unarchived

Lead returns with same data intact

Medium

EC-005

Lead payment received without proposal

Converts to Client immediately

High

EC-006

Partial payment to Lead

Still converts if any payment received

Medium

EC-007

Lead profile viewed during conversion

Real-time update to Client UI

Medium

EC-008

User attempts Send Invoice on Lead

Action not available/visible

High
#420
**FRD #10: Leads Profile** > **9\. Acceptance Criteria**
~8 tok
## **9\. Acceptance Criteria**
#421
**FRD #10: Leads Profile** > **9\. Acceptance Criteria** > 9.1 Lead Profile Display
~79 tok
### 9.1 Lead Profile Display

**AC ID**

**Criteria**

AC-001

Lead Profile displays "Lead" badge (orange)

AC-002

Client Worth is NOT displayed for Leads

AC-003

"Send Invoice" quick action is NOT available

AC-004

All 5 tabs are accessible

AC-005

Portal link shows appropriate message based on project status
#422
**FRD #10: Leads Profile** > **9\. Acceptance Criteria** > 9.2 Lead Functionality
~55 tok
### 9.2 Lead Functionality

**AC ID**

**Criteria**

AC-006

Lead can be added to projects

AC-007

Meetings can be scheduled with Lead

AC-008

Notes can be created for Lead

AC-009

Communications work same as Client
#423
**FRD #10: Leads Profile** > **9\. Acceptance Criteria** > 9.3 Conversion
~59 tok
### 9.3 Conversion

**AC ID**

**Criteria**

AC-010

Lead converts when proposal signed

AC-011

Lead converts when payment received

AC-012

Badge changes from Lead to Client on conversion

AC-013

Conversion enables financial features
#424
**FRD #10: Leads Profile** > **10\. Test Cases**
~110 tok
## **10\. Test Cases**

Manual test cases are provided in the accompanying Excel file: [**FRD\_10\_Leads\_Profile\_Test\_Cases.xlsx**](https://docs.google.com/spreadsheets/d/1w9js82sH6PoJ91xISfDKggbeys_1nTnQ/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)

Test case categories include:

*   Profile display differences
*   Tab functionality
*   Quick action availability
*   Portal link behavior
*   Conversion scenarios
#425
**FRD #10: Leads Profile** > **11\. Dependencies**
~104 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Client Profile (FRD\_05)

Reference

Base profile structure

DEP-002

Project Module

Functional

Project attachments

DEP-003

Proposal Module

Functional

Conversion trigger

DEP-004

Financial Module

Functional

Payment conversion trigger

DEP-005

Client Portal

Functional

Portal link generation
#426
**FRD #10: Leads Profile** > **12\. References**
~6 tok
## **12\. References**
#427
**FRD #10: Leads Profile** > **12\. References** > 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25934-26553&t=r4NL4B1STgwBOH95-0)
~39 tok
### 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25934-26553&t=r4NL4B1STgwBOH95-0)

11\. Company Profile
#428
**FRD #11: Company Profile**
~51 tok
# **FRD #11: Company Profile**

**Document Version:** 2.0  
**Created Date:** December 16, 2025  
**Last Updated:** April 10, 2026  
**Module:** Company Profile  
**Platform:** Pixally CRM - Agency Portal
#429
**FRD #11: Company Profile** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#430
**FRD #11: Company Profile** > **1\. Module Overview** > 1.1 Purpose
~84 tok
### 1.1 Purpose

This document defines the functional requirements for the Company Profile view. The Company Profile provides an overview of company information, aggregated metrics from associated clients, and management of client-company associations. Unlike Client/Lead profiles, Company Profile has only an Overview section (no tabs).
#431
**FRD #11: Company Profile** > **1\. Module Overview** > 1.2 Scope
~53 tok
### 1.2 Scope

This FRD covers:

*   Company Profile layout (Overview only)
*   Client Worth aggregation
*   Associated clients management
*   Associated projects display
*   Company edit/archive/delete actions
#432
**FRD #11: Company Profile** > **1\. Module Overview** > 1.3 Key Business Rules
~177 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Company Profile has **only Overview section** (no tabs)

BR-002

Companies do **NOT have portal access**

BR-003

Client Worth displays **aggregated value from all associated clients**

BR-004

Companies cannot be **directly linked to projects** (projects link to clients)

BR-005

Associated projects are shown through **client associations**

BR-006

Company can have **multiple clients** associated

BR-007

Deleting company does **NOT cascade delete** associated clients

BR-008

Company with clients on **active projects** cannot be archived

BR-009

Company with clients on **completed or archived projects only** can be archived
#433
**FRD #11: Company Profile** > **2\. User Roles & Permissions**
~90 tok
## **2\. User Roles & Permissions**

**Role**

**View Company**

**Edit Company**

**Archive Company**

**Delete Company**

**Add Clients**

**Remove Clients**

Agency Owner (AO)

✅

✅

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

✅

✅

✅

Team Member

✅

✅

✅

✅

✅

✅

Contractor

Limited

❌

❌

❌

❌

❌

Client

❌

❌

❌

❌

❌

❌
#434
**FRD #11: Company Profile** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#435
**FRD #11: Company Profile** > **3\. User Flow** > 3.1 Access Points
~66 tok
### 3.1 Access Points

**Access Point**

**Navigation Path**

Company Listing

Clients & Contractors → Clients → Companies Tab → Click Company Name

Client Profile

Client Profile → Company Section → Click Company Name

Search Results

Global Search → Company Name
#436
**FRD #11: Company Profile** > **3\. User Flow** > 3.2 Company Profile Header
~60 tok
### 3.2 Company Profile Header

User navigates to Company Profile. System displays profile header with:

*   Company logo/avatar
*   Company name
*   "Company" badge
*   Primary email
*   Phone number
*   3-dot menu (Edit, Archive, Delete)
#437
**FRD #11: Company Profile** > **3\. User Flow** > 3.3 Company Overview Layout
~124 tok
### 3.3 Company Overview Layout

System displays single Overview section with:

*   **Stats Section**: Client Worth (aggregated), Total Projects
*   **Quick Actions**: Edit, Archive, Delete, Add Client(s)
*   **Internal Notes**: Private notes about company with edit/delete
*   **General Details**: Email, Phone, Website, Industry, Created date
*   **Projects Section**: Active/Archived tabs showing associated projects
*   **Clients Section**: List of associated clients with add/remove options
#438
**FRD #11: Company Profile** > **3\. User Flow** > 3.4 Stats Section
~59 tok
### 3.4 Stats Section

*   System calculates aggregated Client Worth from all associated clients
*   System counts Total Projects associated with all clients of this company
*   Stats update in real-time when client associations change
#439
**FRD #11: Company Profile** > **3\. User Flow** > 3.5 Projects Section
~89 tok
### 3.5 Projects Section

*   Projects are derived from associated clients (not direct association)
*   Active tab shows projects in progress
*   Archived tab shows completed/archived projects
*   Each project card shows: Project name, Event date, Associated client(s), 3-dot menu (Remove option)
*   "Remove" detaches project view (doesn't delete project)
#440
**FRD #11: Company Profile** > **3\. User Flow** > 3.6 Clients Section
~65 tok
### 3.6 Clients Section

*   System displays grid/list of associated clients
*   Each client card shows: Avatar, Name, Date added, 3-dot menu (Remove option)
*   "+ Add Client" button available
*   Clicking "+" shows dropdown: "New Client" | "Existing Client"
#441
**FRD #11: Company Profile** > **3\. User Flow** > 3.7 Add New Client Flow
~55 tok
### 3.7 Add New Client Flow

1.  User clicks "+" → "New Client"
2.  System opens Create Client modal
3.  Company is pre-selected (read-only)
4.  User fills client details
5.  Client is created and associated with company
#442
**FRD #11: Company Profile** > **3\. User Flow** > 3.8 Add Existing Client Flow
~89 tok
### 3.8 Add Existing Client Flow

1.  User clicks "+" → "Existing Client"
2.  System opens client selection modal
3.  Modal shows searchable list of clients not associated with this company
4.  User can select multiple clients
5.  System shows warning if client already has another company association
6.  User confirms; clients are associated with company
#443
**FRD #11: Company Profile** > **3\. User Flow** > 3.9 Remove Client Flow
~58 tok
### 3.9 Remove Client Flow

1.  User clicks 3-dot on client card
2.  User selects "Remove"
3.  System displays confirmation modal
4.  User confirms; client-company association is removed
5.  Client is not deleted, only disassociated
#444
**FRD #11: Company Profile** > **3\. User Flow** > 3.10 Archive Company
~80 tok
### 3.10 Archive Company

1.  User clicks Archive button
2.  System checks for restrictions (see Section 4.8)
3.  If restricted, blocking modal appears with clickable client/project list
4.  If allowed, confirmation modal appears
5.  User confirms archive
6.  Success toast displayed
7.  Company moves to archived list
#445
**FRD #11: Company Profile** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#446
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.1 Client Worth Aggregation
~70 tok
### 4.1 Client Worth Aggregation

Company worth equals the sum of client\_worth for each client where client.company\_id equals current\_company.

Worth updates when:

*   Client is associated with company
*   Client is removed from company
*   Associated client's worth changes
#447
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.2 Total Projects Calculation
~39 tok
### 4.2 Total Projects Calculation

Total projects equals the count of distinct projects where any project client has company\_id matching current\_company.
#448
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.3 Projects Display Logic
~66 tok
### 4.3 Projects Display Logic

*   Projects are shown through client association, not direct link
*   Each project card shows which client(s) from this company are attached
*   If multiple company clients on same project, project shown once with all client names
#449
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.4 Client Association Logic
~67 tok
### 4.4 Client Association Logic

One company per client rule applies. When existing client is added to company:

*   If client has existing company, show warning
*   User confirms to proceed
*   Previous company association removed
*   New company association created
#450
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.5 Remove Client Logic
~55 tok
### 4.5 Remove Client Logic

Removing client from company:

*   Client-company association deleted
*   Client record remains intact
*   Client's projects remain intact
*   Client appears as "No Company" in client listing
#451
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.6 Internal Notes Logic
~64 tok
### 4.6 Internal Notes Logic

*   Company internal notes are separate from client notes
*   Notes visible only to team (not clients)
*   Same public/private note structure as client profile
*   Notes do NOT sync to projects (company not linked to projects)
#452
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.7 Empty State Logic
~55 tok
### 4.7 Empty State Logic

*   If company has no clients: Display "No clients added yet" with "+ Add Client" CTA
*   If company has no projects (through clients): Display "You have no projects yet" with "+ Add Client" CTA
#453
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.8 Archive Restrictions
~7 tok
### 4.8 Archive Restrictions
#454
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.8 Archive Restrictions > **4.8.1 Project Status Determination**
~170 tok
#### **4.8.1 Project Status Determination**

Project status is determined based on the pipeline stages of **all events** within the project:

**Pipeline Stage**

**Maps To**

New Leads

**Active**

Booked

**Active**

Post Event

**Active**

Completed

**Completed**

Archived

**Archived**

**Precedence Order:** Active > Completed > Archived

**Event Scenarios**

**Project Status**

All events in Active stages (New Leads/Booked/Post Event)

**Active**

All events in Completed stage

**Completed**

All events in Archived stage

**Archived**

Mix: Active + Completed events

**Active**

Mix: Active + Archived events

**Active**

Mix: Completed + Archived events

**Completed**
#455
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.8 Archive Restrictions > **4.8.2 Company Archive Logic**
~150 tok
#### **4.8.2 Company Archive Logic**

**Scenario**

**Can Archive?**

**Behavior**

Any client on **Active** project(s)

❌ Blocked

Blocking modal with clickable client/project list

All clients on **Completed** project(s) only

✅ Allowed

Confirmation modal → Archive

All clients on **Archived** project(s) only

✅ Allowed

Confirmation modal → Archive

Mix: Some clients on Active, others on Completed/Archived

❌ Blocked

Active takes precedence

All clients on mix of Completed + Archived

✅ Allowed

Confirmation modal → Archive

No associated clients

✅ Allowed

Confirmation modal → Archive
#456
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.8 Archive Restrictions > **4.8.3 Archive Eligibility Check**
~123 tok
#### **4.8.3 Archive Eligibility Check**

System retrieves all clients associated with company\_id

FOR each client:

System retrieves all projects for client

FOR each project:

Determine project\_status using Project Status Logic (4.8.1)

IF project\_status = "Active":

Add client and project to blocked\_list

IF blocked\_list.count > 0:

Return NOT\_ALLOWED

Display blocking modal with blocked client and project list (clickable links)

ELSE:

Return ALLOWED

Display confirmation modal
#457
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.8 Archive Restrictions > **4.8.4 Archive Implementation**
~67 tok
#### **4.8.4 Archive Implementation**

System sets company.archived\_at = current\_timestamp

System sets company.archived\_by = current\_user\_id

System sets company.status = "archived"

System logs activity "company\_archived" with company\_id and current\_user\_id
#458
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.9 Unarchive Logic
~51 tok
### 4.9 Unarchive Logic

*   Archived companies can be manually unarchived
*   Unarchiving restores the company to active status
*   Associated clients remain in their current status (archived or active)
#459
**FRD #11: Company Profile** > **4\. Functional Logic** > 4.10 Impact on Other Modules
~70 tok
### 4.10 Impact on Other Modules

**Module**

**Impact**

**Client Module**

Clients can be associated/disassociated

**Project Module**

Projects shown through client associations

**Reports**

Company-level aggregations available

**Search**

Company searchable by name, industry
#460
**FRD #11: Company Profile** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#461
**FRD #11: Company Profile** > **5\. Field Details & Validations** > 5.1 Company Profile Display Fields
~108 tok
### 5.1 Company Profile Display Fields

**Field Name**

**Display Location**

**Notes**

Logo/Avatar

Header

Image or industry icon

Company Name

Header

From creation

Badge

Header

"Company" label

Email

Header / Details

Company contact email

Phone

Header / Details

With country code

Website

General Details

Clickable link

Industry

General Details

From dropdown + Other

Created Date

General Details

Auto-generated
#462
**FRD #11: Company Profile** > **5\. Field Details & Validations** > 5.2 Client Card Display
~49 tok
### 5.2 Client Card Display

**Field Name**

**Display**

**Notes**

Avatar

Card

Client photo or initials

Name

Card

Full name

Date Added

Card

Association date

Actions

3-dot

Remove option
#463
**FRD #11: Company Profile** > **6\. Success Message Handling**
~138 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

**Duration**

Company edited

"Company updated successfully"

Toast notification

5 seconds

Company archived

"Company archived successfully"

Toast notification

5 seconds

Company unarchived

"Company restored successfully"

Toast notification

5 seconds

Client added

"Client added to company"

Toast notification

5 seconds

Client removed

"Client removed from company"

Toast notification

5 seconds

Note saved

"Note saved"

Toast notification

3 seconds
#464
**FRD #11: Company Profile** > **7\. Error Message Handling**
~79 tok
## **7\. Error Message Handling**

**Error Type**

**Error Message**

**Display Type**

Add client failed

"Unable to add client. Please try again"

Toast notification

Save failure

"Unable to save changes. Please try again"

Toast notification

Network error

"Connection error. Please refresh."

Toast notification
#465
**FRD #11: Company Profile** > **8\. Confirmation & Blocking Modals**
~10 tok
## **8\. Confirmation & Blocking Modals**
#466
**FRD #11: Company Profile** > **8\. Confirmation & Blocking Modals** > 8.1 Archive Company - Blocking Modal
~97 tok
### 8.1 Archive Company - Blocking Modal

**Title:** Cannot Archive Company

**Message:** This company cannot be archived because **\[Client Name\]** _(clickable link)_ is associated with active project(s): **\[Project 1, Project 2 and Project 3\]** _(clickable links)_

**Hint Box (Yellow):** ⚠️ Please complete or archive the associated projects before proceeding.

**Button:** Cancel
#467
**FRD #11: Company Profile** > **8\. Confirmation & Blocking Modals** > 8.2 Archive Company - Confirmation Modal
~50 tok
### 8.2 Archive Company - Confirmation Modal

**Title:** Archive Company?

**Message:** Are you sure you want to archive \[Company Name\]?

**Primary Button:** Archive  
**Secondary Button:** Cancel
#468
**FRD #11: Company Profile** > **8\. Confirmation & Blocking Modals** > 8.3 Delete Company - Confirmation Modal
~54 tok
### 8.3 Delete Company - Confirmation Modal

**Title:** Delete Company?

**Message:** Are you sure you want to delete \[Company Name\]?

**Primary Button:** Delete _(Destructive/Red)  
_**Secondary Button:** Cancel
#469
**FRD #11: Company Profile** > **8\. Confirmation & Blocking Modals** > 8.4 Remove Client - Confirmation Modal
~52 tok
### 8.4 Remove Client - Confirmation Modal

**Title:** Remove Client

**Message:** Are you sure you want to remove \[Client Name\] from this company?

**Primary Button:** Remove  
**Secondary Button:** Cancel
#470
**FRD #11: Company Profile** > **9\. Edge Cases**
~320 tok
## **9\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Company with 50+ clients

Paginated client list

Medium

EC-002

Client added who has existing company

Warning shown, proceed moves client

High

EC-003

All clients removed from company

Empty state displayed, company remains

Medium

EC-004

Company archived with clients

Clients remain in their current status

Medium

EC-005

Client deleted while viewing company

Client card removed from display

Medium

EC-006

Same project has multiple company clients

Project shown once with multiple client names

Medium

EC-007

Company has only Leads (no Booked Clients)

Client Worth shows $0 (Leads have no worth)

High

EC-008

Industry set to "Other"

"Other" field value displayed

Low

EC-009

Archive company with client on active project

Blocking modal with clickable client/project list

High

EC-010

Company with mix of active and archived client projects

Archive blocked (active takes precedence)

High

EC-011

Company with clients on completed projects only

Archive allowed

Medium

EC-012

Single client on multiple active projects

Blocking modal lists all active projects

High

EC-013

Client status changes during archive flow

Re-evaluate eligibility

Medium
#471
**FRD #11: Company Profile** > **10\. Acceptance Criteria**
~8 tok
## **10\. Acceptance Criteria**
#472
**FRD #11: Company Profile** > **10\. Acceptance Criteria** > 10.1 Company Profile Display
~74 tok
### 10.1 Company Profile Display

**AC ID**

**Criteria**

AC-001

Company Profile shows Overview only (no tabs)

AC-002

Client Worth displays aggregated value from all clients

AC-003

Total Projects shows count from all associated clients

AC-004

General Details shows all company information
#473
**FRD #11: Company Profile** > **10\. Acceptance Criteria** > 10.2 Client Management
~79 tok
### 10.2 Client Management

**AC ID**

**Criteria**

AC-005

New clients can be added to company

AC-006

Existing clients can be associated with company

AC-007

Warning shown when adding client with existing company

AC-008

Clients can be removed from company

AC-009

Removing client does not delete client record
#474
**FRD #11: Company Profile** > **10\. Acceptance Criteria** > 10.3 Projects Display
~55 tok
### 10.3 Projects Display

**AC ID**

**Criteria**

AC-010

Projects shown are derived from associated clients

AC-011

Active and Archived project tabs work correctly

AC-012

Project cards show associated client names
#475
**FRD #11: Company Profile** > **10\. Acceptance Criteria** > 10.4 Archive Functionality
~97 tok
### 10.4 Archive Functionality

**AC ID**

**Criteria**

AC-013

Archive blocked for companies with clients on active projects

AC-014

Blocking modal shows clickable client and project list

AC-015

Archive allowed for companies with clients on completed/archived projects only

AC-016

Confirmation modal shown when archive is allowed

AC-017

Unarchive restores company to active status
#476
**FRD #11: Company Profile** > **11\. Dependencies**
~89 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Client Module

Data

Client associations

DEP-002

Project Module

Data

Projects through clients

DEP-003

Event Module

Data

Event pipeline stages

DEP-004

Master Data

Data

Industry dropdown

DEP-005

Activity Tracking

Data

Log entries
#477
**FRD #11: Company Profile** > **12\. References**
~6 tok
## **12\. References**
#478
**FRD #11: Company Profile** > **12\. References** > 12.1 Figma Designs
~33 tok
### 12.1 Figma Designs

[Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=25934-20735&t=r4NL4B1STgwBOH95-0)
#479
**FRD #11: Company Profile** > **Change Log**
~103 tok
## **Change Log**

**Version**

**Date**

**Author**

**Changes**

1.0

December 16, 2025

\-

Initial document

2.0

April 10, 2026

\-

Added archive restrictions logic: Companies with clients on active projects cannot be archived. Companies with clients on completed/archived projects can be archived. Added blocking modal with clickable client/project links. Refined modal message format.

12\. Edit Client
#480
**FRD #12: Edit Client**
~39 tok
# **FRD #12: Edit Client**

**Document Version:** 1.0 **Created Date:** December 16, 2025 **Module:** Edit Client **Platform:** Pixally CRM - Agency Portal
#481
**FRD #12: Edit Client** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#482
**FRD #12: Edit Client** > **1\. Module Overview** > 1.1 Purpose
~68 tok
### 1.1 Purpose

This document defines the functional requirements for editing existing Client/Lead records in the Pixally CRM system. The Edit Client functionality allows agency users to update client information while preserving project associations and historical data.
#483
**FRD #12: Edit Client** > **1\. Module Overview** > 1.2 Scope
~46 tok
### 1.2 Scope

This FRD covers:

*   Edit Client modal interface
*   Editable vs non-editable fields
*   Validation rules for updates
*   Impact on related records
*   Edit permissions
#484
**FRD #12: Edit Client** > **1\. Module Overview** > 1.3 Key Business Rules
~127 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Client status (Lead/Booked Client) is **NOT editable** - determined by system logic

BR-002

Email change requires **duplicate validation** against existing records

BR-003

Company association can be **changed or removed** via edit

BR-004

Project associations are **NOT managed** through Edit Client

BR-005

Edit history is **logged** for audit purposes

BR-006

Archived clients **cannot be edited** (Figma will be updated per PM)
#485
**FRD #12: Edit Client** > **2\. User Roles & Permissions**
~68 tok
## **2\. User Roles & Permissions**

**Role**

**Edit Client**

**Edit Lead**

**Edit Own Created**

**Edit Any**

Agency Owner (AO)

✅

✅

✅

✅

Agency Admin

✅

✅

✅

✅

Account Manager (AR)

✅

✅

✅

✅

Team Member

✅

✅

✅

✅

Contractor

❌

❌

❌

❌

Client

❌

❌

❌

❌
#486
**FRD #12: Edit Client** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#487
**FRD #12: Edit Client** > **3\. User Flow** > 3.1 Access Points
~97 tok
### 3.1 Access Points

**Access Point**

**Navigation Path**

**Trigger**

Client Listing

Clients → Row 3-dot menu → Edit

Click Edit

Client Profile

Client Profile → 3-dot menu → Edit

Click Edit

Client Profile

Client Profile → Quick Actions → Edit

Click Edit

Lead Listing

Leads Tab → Row 3-dot menu → Edit

Click Edit

Lead Profile

Lead Profile → Quick Actions → Edit

Click Edit
#488
**FRD #12: Edit Client** > **3\. User Flow** > 3.2 Open Edit Modal
~45 tok
### 3.2 Open Edit Modal

User clicks "Edit" from any access point. System opens Edit Client modal. Modal pre-fills all fields with current client data. Full Name field is focused.
#489
**FRD #12: Edit Client** > **3\. User Flow** > 3.3 Edit Client Information
~81 tok
### 3.3 Edit Client Information

User modifies any editable field. System validates changes in real-time where applicable. User clicks "Save Changes" button. System validates all fields. System checks for duplicate email if email was changed. System saves updates to client record. System closes modal and refreshes display.
#490
**FRD #12: Edit Client** > **3\. User Flow** > 3.4 Editable Fields
~56 tok
### 3.4 Editable Fields

User can modify:

*   Full Name
*   Email Address
*   Phone Number (with country code)
*   Company association
*   Street Address
*   Country
*   State
*   City
*   Zip/Postal Code
*   Internal Note
#491
**FRD #12: Edit Client** > **3\. User Flow** > 3.5 Non-Editable Elements
~70 tok
### 3.5 Non-Editable Elements

User cannot modify through Edit modal:

*   Client ID (system-generated)
*   Client Status (Lead/Booked Client) - system-controlled
*   Created Date
*   Project associations (managed in Project module)
*   Portal access settings (managed separately)
#492
**FRD #12: Edit Client** > **3\. User Flow** > 3.6 Change Company Association
~72 tok
### 3.6 Change Company Association

User clicks Company dropdown. System shows list of existing companies. User selects a new company. If company changed: Previous association removed, new association created. If the dropdown is left empty, the client automatically becomes unassociated.
#493
**FRD #12: Edit Client** > **3\. User Flow** > 3.7 Cancel Edit
~48 tok
### 3.7 Cancel Edit

User clicks "Cancel" or X button. If changes were made: System prompts "Discard changes?". User confirms: Modal closes without saving. User cancels: Returns to edit modal.
#494
**FRD #12: Edit Client** > **4\. Functional Logic**
~237 tok
## **4\. Functional Logic**

*   **4.1 Field Pre-Population**
*   System retrieves current client record. All editable fields populated with current values. Company dropdown shows current association selected. Country and State are pre-populated as text fields with current values.
*   **4.2 Email Change Validation**
*   When email field is changed and new\_email differs from original\_email: System checks for duplicate by querying clients where email equals new\_email AND id does not equal current\_client\_id. If duplicate found: System displays error "A client with this email already exists" and blocks save.
*   **4.3 Address Field Logic**
*   All address fields (Country, State, City, Street, Zip/Postal Code) are free-text input fields allowing manual entry. No validation is performed against predefined lists. No cascading or dependent behavior exists between address fields — changing Country does not clear or affect the State field.
#495
**FRD #12: Edit Client** > **4\. Functional Logic** > 4.4 Save Operation
~83 tok
### 4.4 Save Operation

System validates all mandatory fields. System validates email format. System checks for duplicate email (if changed). System updates client record with new values. System logs edit activity with: User ID, Timestamp, Changed fields, Old values, New values. System triggers any relevant notifications/webhooks.
#496
**FRD #12: Edit Client** > **4\. Functional Logic** > 4.5 Company Change Logic
~60 tok
### 4.5 Company Change Logic

**Scenario**

**Behavior**

No company → Company selected

Create association

Company A → Company B

Remove A association, create B association

Company → No Company

Remove association

Same company

No change
#497
**FRD #12: Edit Client** > **4\. Functional Logic** > 4.6 Impact on Other Modules
~84 tok
### 4.6 Impact on Other Modules

**Module**

**Impact**

**Project Module**

Updated client info reflected in project views

**Communications**

New email used for future communications

**Client Portal**

Updated info shown in portal

**Financial**

Updated info on invoices (if applicable)

**Activity Log**

Edit logged as activity
#498
**FRD #12: Edit Client** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#499
**FRD #12: Edit Client** > **5\. Field Details & Validations** > 5.1 Edit Client Fields
~209 tok
### 5.1 Edit Client Fields

**Field Name**

**Field Type**

**Mandatory**

**Max Length**

**Validation Rules**

**Pre-filled**

Full Name

Text Input

Yes

100 chars

Min 2 characters

Yes

Email Address

Email Input

Yes

255 chars

Valid format, unique

Yes

Phone Number

Phone Input

Yes

20 chars

7-15 digits

Yes

Country Code

Text Input

Yes

N/A

Valid code

Yes

Company

Dropdown

No

N/A

Existing companies

Yes (if any)

Street Address

Text Input

No

255 chars

Alphanumeric + special

Yes (if any)

Country

Text Input

No

N/A

Valid country

Yes (if any)

State

Text Input

No

N/A

Valid for country

Yes (if any)

City

Text Input

No

100 chars

Alphanumeric

Yes (if any)

Zip/Postal Code

Text Input

No

20 chars

Alphanumeric

Yes (if any)

Internal Note

Textarea

No

1000 chars

Free text

Yes (if any)
#500
**FRD #12: Edit Client** > **6\. Success Message Handling**
~63 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

**Duration**

Client updated

"Client updated successfully"

Toast notification

5 seconds

Lead updated

"Lead updated successfully"

Toast notification

5 seconds
#501
**FRD #12: Edit Client** > **7\. Error Message Handling**
~8 tok
## **7\. Error Message Handling**
#502
**FRD #12: Edit Client** > **7\. Error Message Handling** > 7.1 Validation Errors
~111 tok
### 7.1 Validation Errors

**Field**

**Error Condition**

**Error Message**

Full Name

Empty

"Full name is required"

Full Name

< 2 chars

"Full name must be at least 2 characters"

Email

Empty

"Email address is required"

Email

Invalid format

"Please enter a valid email address"

Email

Duplicate

"A client with this email already exists"

Phone

Empty

"Phone number is required"

Phone

Invalid

"Please enter a valid phone number"
#503
**FRD #12: Edit Client** > **7\. Error Message Handling** > 7.2 System Errors
~80 tok
### 7.2 System Errors

**Error Type**

**Error Message**

**Display Type**

Save failed

"Unable to save changes. Please try again"

Toast notification

Record locked

"This client is being edited by another user"

Toast notification

Permission denied

"You don't have permission to edit this client"

Toast notification
#504
**FRD #12: Edit Client** > **8\. Edge Cases**
~215 tok
## **8\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Edit archived client

Edit not available (per PM confirmation)

High

EC-002

Email changed to archived client's email

Allow - archived emails available

Medium

EC-003

Company deleted while editing

Error on save, prompt to refresh

Medium

EC-004

Country changed, State was selected

State dropdown resets

High

EC-005

Two users edit same client simultaneously

Last save wins (optimistic locking)

Medium

EC-006

Network disconnect during save

Retry prompt, data preserved in form

High

EC-007

Special characters in name (é, ñ, 中文)

Accepted and saved correctly

Medium

EC-008

Remove all optional fields

Client saved with only mandatory fields

Low

EC-009

Client converted to Booked during edit

Edit completes, status updated separately

Low
#505
**FRD #12: Edit Client** > **9\. Acceptance Criteria**
~8 tok
## **9\. Acceptance Criteria**
#506
**FRD #12: Edit Client** > **9\. Acceptance Criteria** > 9.1 Edit Modal
~64 tok
### 9.1 Edit Modal

**AC ID**

**Criteria**

AC-001

Edit modal accessible from listing 3-dot menu

AC-002

Edit modal accessible from profile 3-dot menu

AC-003

Edit modal accessible from Quick Actions

AC-004

All fields pre-filled with current values
#507
**FRD #12: Edit Client** > **9\. Acceptance Criteria** > 9.2 Field Editing
~72 tok
### 9.2 Field Editing

**AC ID**

**Criteria**

AC-005

Full Name can be updated

AC-006

Email can be updated with duplicate check

AC-007

Phone number can be updated

AC-008

Company association can be changed

AC-009

Address fields can be updated

AC-010

Internal Note can be updated
#508
**FRD #12: Edit Client** > **9\. Acceptance Criteria** > 9.3 Save and Cancel
~53 tok
### 9.3 Save and Cancel

**AC ID**

**Criteria**

AC-011

Save validates all mandatory fields

AC-012

Success message displays on save

AC-013

Cancel prompts if changes were made

AC-014

Edit history is logged
#509
**FRD #12: Edit Client** > **10\. Test Cases**
~106 tok
## **10\. Test Cases**

Manual test cases are provided in the accompanying Excel file: [**FRD\_12\_Edit\_Client\_Test\_Cases.xlsx**](https://docs.google.com/spreadsheets/d/1oHVoTsQawfLrpTwkRuc2dHoyEUd8XEUn/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)

Test case categories include:

*   Modal access and display
*   Field editing
*   Validation rules
*   Company association changes
*   Error handling
#510
**FRD #12: Edit Client** > **11\. Dependencies**
~78 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Client Module

Data

Client record retrieval

DEP-002

Company Module

Data

Company list for association

DEP-003

Master Data

Data

Countries, States

DEP-004

Activity Log

Functional

Edit logging
#511
**FRD #12: Edit Client** > **12\. References**
~6 tok
## **12\. References**
#512
**FRD #12: Edit Client** > **12\. References** > 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=24269-77509&t=r4NL4B1STgwBOH95-0)
~38 tok
### 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=24269-77509&t=r4NL4B1STgwBOH95-0)

13\. Edit Company
#513
**FRD #13: Edit Company**
~39 tok
# **FRD #13: Edit Company**

**Document Version:** 1.0 **Created Date:** December 16, 2025 **Module:** Edit Company **Platform:** Pixally CRM - Agency Portal
#514
**FRD #13: Edit Company** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#515
**FRD #13: Edit Company** > **1\. Module Overview** > 1.1 Purpose
~62 tok
### 1.1 Purpose

This document defines the functional requirements for editing existing Company records in the Pixally CRM system. The Edit Company functionality allows agency users to update company information while preserving client associations.
#516
**FRD #13: Edit Company** > **1\. Module Overview** > 1.2 Scope
~45 tok
### 1.2 Scope

This FRD covers:

*   Edit Company modal interface
*   Editable fields and validations
*   Industry dropdown with "Other" handling
*   Impact on associated clients
#517
**FRD #13: Edit Company** > **1\. Module Overview** > 1.3 Key Business Rules
~95 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Company email change requires **duplicate validation**

BR-002

Editing company does **NOT affect associated clients**

BR-003

Client associations are managed **separately** (not in Edit modal)

BR-004

"Other" industry requires **specification text**

BR-005

Edit history is **logged** for audit purposes
#518
**FRD #13: Edit Company** > **2\. User Roles & Permissions**
~52 tok
## **2\. User Roles & Permissions**

**Role**

**Edit Company**

**Edit Any Company**

Agency Owner (AO)

✅

✅

Agency Admin

✅

✅

Account Manager (AR)

✅

✅

Team Member

✅

✅

Contractor

❌

❌

Client

❌

❌
#519
**FRD #13: Edit Company** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#520
**FRD #13: Edit Company** > **3\. User Flow** > 3.1 Access Points
~57 tok
### 3.1 Access Points

**Access Point**

**Navigation Path**

Company Listing

Companies Tab → Row 3-dot menu → Edit

Company Profile

Company Profile → 3-dot menu → Edit

Company Profile

Company Profile → Quick Actions → Edit
#521
**FRD #13: Edit Company** > **3\. User Flow** > 3.2 Open Edit Modal
~46 tok
### 3.2 Open Edit Modal

User clicks "Edit" from any access point. System opens Edit Company modal. Modal pre-fills all fields with current company data. Company Name field is focused.
#522
**FRD #13: Edit Company** > **3\. User Flow** > 3.3 Edit Company Information
~62 tok
### 3.3 Edit Company Information

User modifies any editable field. If Industry changed to "Other", specify field appears. If Industry changed from "Other", specify field hides. User clicks "Save Changes" button. System validates and saves updates.
#523
**FRD #13: Edit Company** > **3\. User Flow** > 3.4 Editable Fields
~56 tok
### 3.4 Editable Fields

User can modify:

*   Company Name
*   Industry
*   Other Industry (if Industry = Other)
*   Email Address
*   Phone Number
*   Website
*   Street Address, Country, State, City, Zip
*   Internal Note
#524
**FRD #13: Edit Company** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#525
**FRD #13: Edit Company** > **4\. Functional Logic** > 4.1 Industry Change Handling
~73 tok
### 4.1 Industry Change Handling

When industry dropdown value is changed: If new value equals "Other": System shows other\_industry text field and sets other\_industry as mandatory. If new value does not equal "Other": System hides other\_industry text field and clears other\_industry value.
#526
**FRD #13: Edit Company** > **4\. Functional Logic** > 4.2 Validation Rules
~71 tok
### 4.2 Validation Rules

Company Name: Required, min 2 chars, max 150 chars. Industry: Required selection. Other Industry: Required if Industry = Other. Email: Valid format if provided, unique check if changed. Phone: Valid format if provided. Website: Valid URL format if provided.
#527
**FRD #13: Edit Company** > **4\. Functional Logic** > 4.3 Impact on Related Data
~43 tok
### 4.3 Impact on Related Data

Editing company does NOT affect:

*   Associated clients
*   Client project associations
*   Client financial data
*   Client portal access
#528
**FRD #13: Edit Company** > **5\. Field Details & Validations**
~165 tok
## **5\. Field Details & Validations**

**Field Name**

**Field Type**

**Mandatory**

**Max Length**

**Validation**

Company Name

Text

Yes

150 chars

Min 2 chars

Industry

Dropdown

Yes

N/A

Valid selection

Other Industry

Text

Conditional

100 chars

Required if Other

Email

Email

No

255 chars

Valid format, unique

Phone

Phone

No

20 chars

Valid format

Website

URL

No

500 chars

Valid URL

Street Address

Text

No

255 chars

\-

Country

Text Input

No

N/A

Valid country

State

Text Input

No

N/A

Valid for country

City

Text

No

100 chars

\-

Zip/Postal Code

Text

No

20 chars

\-

Internal Note

Textarea

No

1000 chars

\-
#529
**FRD #13: Edit Company** > **6\. Success Message Handling**
~45 tok
## **6\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

**Duration**

Company updated

"Company updated successfully"

Toast notification

5 seconds
#530
**FRD #13: Edit Company** > **7\. Error Message Handling**
~106 tok
## **7\. Error Message Handling**

**Field**

**Error Condition**

**Error Message**

Company Name

Empty

"Company name is required"

Industry

Not selected

"Please select an industry"

Other Industry

Empty when Other

"Please specify the industry"

Email

Invalid format

"Please enter a valid email address"

Email

Duplicate

"A company with this email already exists"

Website

Invalid URL

"Please enter a valid URL"
#531
**FRD #13: Edit Company** > **8\. Edge Cases**
~82 tok
## **8\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Industry changed from Other to specific

Other field hidden, value cleared

Medium

EC-002

Company email same as client email

Allowed (separate namespaces)

Low

EC-003

Country changed, State was selected

State resets

Medium
#532
**FRD #13: Edit Company** > **9\. Acceptance Criteria**
~92 tok
## **9\. Acceptance Criteria**

**AC ID**

**Criteria**

AC-001

Edit modal accessible from listing and profile

AC-002

All fields pre-filled with current values

AC-003

Industry "Other" shows/hides specify field correctly

AC-004

Validation errors display appropriately

AC-005

Successful save updates company record

AC-006

Associated clients unaffected by edit
#533
**FRD #13: Edit Company** > **10\. Test Cases**
~68 tok
## **10\. Test Cases**

Manual test cases are provided in the accompanying Excel file: [**FRD\_13\_Edit\_Company\_Test\_Cases.xlsx**](https://docs.google.com/spreadsheets/d/1KseltLvfegzQlbI39sBCeJN7kbQTpRyY/edit?usp=drive_link&ouid=105170312247554220827&rtpof=true&sd=true)
#534
**FRD #13: Edit Company** > **11\. Dependencies**
~52 tok
## **11\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Company Module

Data

Company record

DEP-002

Master Data

Data

Industries, Countries, States
#535
**FRD #13: Edit Company** > **12\. References**
~6 tok
## **12\. References**
#536
**FRD #13: Edit Company** > **12\. References** > 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=24269-77509&t=r4NL4B1STgwBOH95-0)
~38 tok
### 12.1 Figma Designs: [Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=24269-77509&t=r4NL4B1STgwBOH95-0)

14\. Client Delete
#537
**FRD #14: Client Delete**
~50 tok
# **FRD #14: Client Delete**

**Document Version:** 2.0  
**Created Date:** December 16, 2025  
**Last Updated:** April 10, 2026  
**Module:** Client Delete  
**Platform:** Pixally CRM - Agency Portal
#538
**FRD #14: Client Delete** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#539
**FRD #14: Client Delete** > **1\. Module Overview** > 1.1 Purpose
~66 tok
### 1.1 Purpose

This document defines the functional requirements for deleting Client/Lead records from the Pixally CRM system. The Delete Client functionality implements soft deletion with specific rules to protect data integrity and prevent accidental data loss.
#540
**FRD #14: Client Delete** > **1\. Module Overview** > 1.2 Scope
~60 tok
### 1.2 Scope

This FRD covers:

*   Delete confirmation flow
*   Deletion restrictions based on project associations
*   Project status determination logic
*   Primary client handling
*   Soft delete behavior
*   Impact on related records
#541
**FRD #14: Client Delete** > **1\. Module Overview** > 1.3 Key Business Rules
~257 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Client deletion is a **soft delete** (data retained, marked as deleted)

BR-002

Client attached to **active or completed projects** cannot be deleted

BR-003

Client attached to **archived projects only** can be deleted (with warning)

BR-004

Client must be **removed from active/completed projects** before deletion is allowed

BR-005

**Primary client** on active/completed projects cannot be deleted - user must change primary first

BR-006

**Primary client** on archived projects only can be deleted directly

BR-007

If client is the **only client on an active/completed project**, user must add another client before removing

BR-008

Deleting client **removes portal access** immediately

BR-009

Client data (communications, payments, files, notes) is **preserved** after deletion

BR-010

Deleted clients do **NOT appear** in listings or search

BR-011

Project status is determined by the **collective status of all events** within the project
#542
**FRD #14: Client Delete** > **2\. User Roles & Permissions**
~126 tok
## **2\. User Roles & Permissions**

**Role**

**Delete Client**

**Delete Lead**

**Delete Primary Client (on active/completed)**

Agency Owner (AO)

✅

✅

❌ (must change primary first)

Agency Admin

✅

✅

❌ (must change primary first)

Account Manager (AR)

✅

✅

❌ (must change primary first)

Team Member

✅

✅

❌

Contractor

❌

❌

❌

Client

❌

❌

❌

**Note:** Primary client deletion is blocked only for active/completed projects. Primary clients on archived projects only can be deleted directly.
#543
**FRD #14: Client Delete** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#544
**FRD #14: Client Delete** > **3\. User Flow** > 3.1 Access Points
~65 tok
### 3.1 Access Points

**Access Point**

**Navigation Path**

Client Listing

Clients → Row 3-dot menu → Delete

Client Profile

Profile → 3-dot menu → Delete

Client Profile

Profile → Quick Actions → Delete

Lead Listing

Leads Tab → Row 3-dot menu → Delete
#545
**FRD #14: Client Delete** > **3\. User Flow** > 3.2 Delete - No Project Associations
~74 tok
### 3.2 Delete - No Project Associations

1.  User clicks "Delete" on a client with no project associations
2.  System displays simple confirmation modal
3.  User clicks "Delete" to confirm
4.  System soft-deletes client record
5.  System displays success message
6.  Client removed from listing
#546
**FRD #14: Client Delete** > **3\. User Flow** > 3.3 Delete - Active/Completed Project Association Block
~64 tok
### 3.3 Delete - Active/Completed Project Association Block

1.  User clicks "Delete" on client attached to active or completed project(s)
2.  System displays blocking modal with clickable project list
3.  Only "Cancel" button available (no delete option)
#547
**FRD #14: Client Delete** > **3\. User Flow** > 3.4 Delete - Archived Projects Only (Warning)
~70 tok
### 3.4 Delete - Archived Projects Only (Warning)

1.  User clicks "Delete" on client attached to archived project(s) only
2.  System displays warning modal
3.  User clicks "Delete" to confirm or "Cancel" to abort
4.  System soft-deletes client record
5.  Success message displayed
#548
**FRD #14: Client Delete** > **3\. User Flow** > 3.5 Delete - Primary Client on Active/Completed Project Block
~60 tok
### 3.5 Delete - Primary Client on Active/Completed Project Block

1.  User clicks "Delete" on a primary client (on active/completed project)
2.  System displays blocking modal with clickable project list
3.  Only "Cancel" button available
#549
**FRD #14: Client Delete** > **3\. User Flow** > 3.6 Delete - Only Client on Active/Completed Project Block
~63 tok
### 3.6 Delete - Only Client on Active/Completed Project Block

1.  User clicks "Delete" on a client who is the only client on an active/completed project
2.  System displays blocking modal with clickable project list
3.  Only "Cancel" button available
#550
**FRD #14: Client Delete** > **3\. User Flow** > 3.7 Removal Flow - Client on Active/Completed Project
~275 tok
### 3.7 Removal Flow - Client on Active/Completed Project

To delete a client who is associated with active/completed projects, the user must follow these steps:

**If client is NOT the primary:**

1.  Navigate to Project → Clients section
2.  Remove client from project using 3-dot menu → Remove
3.  Repeat for all associated active/completed projects
4.  Once client has no active/completed project associations, delete is allowed

**If client IS the primary (and other clients exist):**

1.  Navigate to Project → Clients section
2.  Change primary client to another client
3.  Remove the original client from project
4.  Repeat for all associated active/completed projects
5.  Once client has no active/completed project associations, delete is allowed

**If client is the ONLY client on project:**

1.  Navigate to Project → Clients section
2.  Add another client to the project
3.  Change primary to the new client
4.  Remove the original client from project
5.  Repeat for all associated active/completed projects
6.  Once client has no active/completed project associations, delete is allowed
#551
**FRD #14: Client Delete** > **4\. Project Status Logic**
~8 tok
## **4\. Project Status Logic**
#552
**FRD #14: Client Delete** > **4\. Project Status Logic** > 4.1 Pipeline Stage to Project Status Mapping
~72 tok
### 4.1 Pipeline Stage to Project Status Mapping

Project status is determined based on the pipeline stages of events within the project:

**Pipeline Stage**

**Maps To**

New Leads

**Active**

Booked

**Active**

Post Event

**Active**

Completed

**Completed**

Archived

**Archived**
#553
**FRD #14: Client Delete** > **4\. Project Status Logic** > 4.2 Project Status Determination
~212 tok
### 4.2 Project Status Determination

A single project can have **multiple events**. The overall project status is determined by evaluating the **collective status of ALL events** within that project.

**Precedence Order:** Active > Completed > Archived

**Event Scenarios**

**Project Status**

**Reason**

All events in Active stages (New Leads/Booked/Post Event)

**Active**

All events are active

All events in Completed stage

**Completed**

All events are completed

All events in Archived stage

**Archived**

All events are archived

Mix: Active + Completed events

**Active**

Active takes precedence

Mix: Active + Archived events

**Active**

Active takes precedence

Mix: Completed + Archived events

**Completed**

Completed takes precedence over Archived

Mix: Active + Completed + Archived events

**Active**

Active takes precedence
#554
**FRD #14: Client Delete** > **4\. Project Status Logic** > 4.3 Project Status Check Logic
~121 tok
### 4.3 Project Status Check Logic

FOR each event in project:

IF event.pipeline\_stage IN \["New Leads", "Booked", "Post Event"\]:

has\_active\_event = TRUE

ELSE IF event.pipeline\_stage = "Completed":

has\_completed\_event = TRUE

ELSE IF event.pipeline\_stage = "Archived":

has\_archived\_event = TRUE

IF has\_active\_event:

project\_status = "Active"

ELSE IF has\_completed\_event:

project\_status = "Completed"

ELSE IF has\_archived\_event:

project\_status = "Archived"
#555
**FRD #14: Client Delete** > **4\. Project Status Logic** > 4.4 Examples
~133 tok
### 4.4 Examples

**Example 1: Project with 3 events**

*   Event A: Booked (Active)
*   Event B: Completed
*   Event C: Archived

**Result:** Project Status = **Active** (because Event A is in an active stage)

**Example 2: Project with 2 events**

*   Event A: Completed
*   Event B: Archived

**Result:** Project Status = **Completed** (Completed takes precedence over Archived)

**Example 3: Project with 2 events**

*   Event A: Archived
*   Event B: Archived

**Result:** Project Status = **Archived** (All events are archived)
#556
**FRD #14: Client Delete** > **5\. Functional Logic**
~7 tok
## **5\. Functional Logic**
#557
**FRD #14: Client Delete** > **5\. Functional Logic** > 5.1 Client Delete Logic
~185 tok
### 5.1 Client Delete Logic

**Scenario**

**Allowed?**

**Behavior**

No project associations

✅ Yes

Simple confirmation → Delete

Attached to **active** project(s)

❌ Blocked

Must remove client from projects first

Attached to **completed** project(s)

❌ Blocked

Must remove client from projects first

Attached to **archived** project(s) only

✅ Yes (with warning)

Warning shown → Data preserved → Delete

Is **primary client** on active/completed project

❌ Blocked

Must change primary first

Is **primary client** on archived project only

✅ Yes

Can delete directly

Is **only client** on active/completed project

❌ Blocked

Must add another client first

Is **only client** on archived project only

✅ Yes

Can delete directly
#558
**FRD #14: Client Delete** > **5\. Functional Logic** > 5.2 Deletion Eligibility Check
~225 tok
### 5.2 Deletion Eligibility Check

System retrieves all projects associated with client\_id

FOR each project:

Determine project\_status using Project Status Logic (Section 4)

IF project\_status = "Active" OR project\_status = "Completed":

Add to blocked\_projects list

ELSE IF project\_status = "Archived":

Add to archived\_projects list

IF blocked\_projects.count > 0:

IF client.is\_primary = TRUE for any blocked project:

Return NOT\_ALLOWED with reason "is\_primary\_client\_on\_active\_completed"

Include project name(s)

IF client is ONLY client on any blocked project:

Return NOT\_ALLOWED with reason "only\_client\_on\_active\_completed\_project"

Include project name(s)

Return NOT\_ALLOWED with reason "associated\_with\_active\_completed\_projects"

Include list of blocked project names

IF archived\_projects.count > 0:

Return ALLOWED\_WITH\_WARNING

ELSE:

Return ALLOWED
#559
**FRD #14: Client Delete** > **5\. Functional Logic** > 5.3 Soft Delete Implementation
~112 tok
### 5.3 Soft Delete Implementation

System sets client.deleted\_at = current\_timestamp

System sets client.deleted\_by = current\_user\_id

System sets client.status = "deleted"

System revokes portal access for client\_id

System removes client from search index

System logs activity "client\_deleted" with client\_id and current\_user\_id

System preserves all historical data (communications, payments, files, notes remain linked but hidden)
#560
**FRD #14: Client Delete** > **5\. Functional Logic** > 5.4 Portal Access Revocation
~57 tok
### 5.4 Portal Access Revocation

Upon deletion:

*   Client's portal access tokens are invalidated
*   Magic links become non-functional
*   Client cannot log into portal
*   Portal shows "Account no longer active" if attempted
#561
**FRD #14: Client Delete** > **5\. Functional Logic** > 5.5 Data Preservation
~64 tok
### 5.5 Data Preservation

Deleted client data preserved includes:

*   Communication history (emails)
*   Payment records
*   Files and documents
*   Notes
*   Meeting history
*   Activity logs
*   Historical project associations (for reporting purposes)
#562
**FRD #14: Client Delete** > **5\. Functional Logic** > 5.6 Impact on Other Modules
~126 tok
### 5.6 Impact on Other Modules

**Module**

**Impact**

**Client Listing**

Client removed from all listings

**Search**

Client not returned in search results

**Projects**

Client shown as "(Deleted)" in project history

**Communications**

History preserved, client name shown with "(Deleted)"

**Payments**

Invoice records preserved with deleted client reference

**Files**

All files preserved and accessible in project context

**Reports**

Historical data included, current counts exclude deleted
#563
**FRD #14: Client Delete** > **6\. Field Details & Validations**
~10 tok
## **6\. Field Details & Validations**
#564
**FRD #14: Client Delete** > **6\. Field Details & Validations** > 6.1 Deletion Record Fields
~56 tok
### 6.1 Deletion Record Fields

**Field Name**

**Type**

**Description**

deleted\_at

Timestamp

When deletion occurred

deleted\_by

User ID

Who performed deletion

deletion\_reason

Text

Optional reason (future feature)
#565
**FRD #14: Client Delete** > **7\. Success Message Handling**
~63 tok
## **7\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

**Duration**

Client deleted

"Client deleted successfully"

Toast notification

5 seconds

Lead deleted

"Lead deleted successfully"

Toast notification

5 seconds
#566
**FRD #14: Client Delete** > **8\. Error Message Handling**
~64 tok
## **8\. Error Message Handling**

**Error Type**

**Error Message**

**Display Type**

Delete failed

"Unable to delete client. Please try again"

Toast notification

Permission denied

"You don't have permission to delete this client"

Toast notification
#567
**FRD #14: Client Delete** > **9\. Confirmation & Blocking Modals**
~10 tok
## **9\. Confirmation & Blocking Modals**
#568
**FRD #14: Client Delete** > **9\. Confirmation & Blocking Modals** > 9.1 Delete Client - Blocking Modal (Active/Completed Projects)
~95 tok
### 9.1 Delete Client - Blocking Modal (Active/Completed Projects)

**Title:** Cannot Delete Client

**Message:** This client is associated with active or completed project(s) and cannot be deleted: **\[Project 1, Project 2 and Project 3\]** _(clickable links)_

**Hint Box (Yellow):** ⚠️ Please remove the client from the associated projects before proceeding.

**Button:** Cancel
#569
**FRD #14: Client Delete** > **9\. Confirmation & Blocking Modals** > 9.2 Delete Client - Blocking Modal (Primary Client)
~91 tok
### 9.2 Delete Client - Blocking Modal (Primary Client)

**Title:** Cannot Delete Client

**Message:** This client is the primary contact on active or completed project(s) and cannot be deleted: **\[Project 1, Project 2 and Project 3\]** _(clickable links)_

**Hint Box (Yellow):** ⚠️ Please assign another client as primary before proceeding.

**Button:** Cancel
#570
**FRD #14: Client Delete** > **9\. Confirmation & Blocking Modals** > 9.3 Delete Client - Blocking Modal (Only Client on Project)
~87 tok
### 9.3 Delete Client - Blocking Modal (Only Client on Project)

**Title:** Cannot Delete Client

**Message:** This client is the only client on project(s) and cannot be deleted: **\[Project 1, Project 2 and Project 3\]** _(clickable links)_

**Hint Box (Yellow):** ⚠️ Please add another client to the project before proceeding.

**Button:** Cancel
#571
**FRD #14: Client Delete** > **9\. Confirmation & Blocking Modals** > 9.4 Delete Client - Warning Modal (Archived Projects Only)
~81 tok
### 9.4 Delete Client - Warning Modal (Archived Projects Only)

**Title:** Delete Client?

**Message:** This client has associated records. All related data including payments, files, and history will be preserved. Are you sure you want to delete \[Client Name\]?

**Primary Button:** Delete  
**Secondary Button:** Cancel
#572
**FRD #14: Client Delete** > **9\. Confirmation & Blocking Modals** > 9.5 Delete Client - Confirmation Modal (No Projects)
~51 tok
### 9.5 Delete Client - Confirmation Modal (No Projects)

**Title:** Delete Client?

**Message:** Are you sure you want to delete \[Client Name\]?

**Primary Button:** Delete  
**Secondary Button:** Cancel
#573
**FRD #14: Client Delete** > **10\. Edge Cases**
~410 tok
## **10\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Delete client being viewed by another user

Deletion proceeds; other user sees "Client not found" on refresh

Medium

EC-002

Delete client mid-email-compose

Email send fails; error "Recipient no longer exists"

Medium

EC-003

Client has pending payment

Blocking - treat as active financial activity

High

EC-004

Delete and immediately search

Client not in search results

High

EC-005

Attempt restore after delete

Not available in current version (soft delete exists for potential future restore)

Low

EC-006

Client on 10+ projects

Blocking/warning modal shows scrollable project list

Low

EC-007

Network failure during delete

Retry prompt; no partial deletion

High

EC-008

Client is primary on multiple active/completed projects

Must change primary on ALL active/completed projects before deletion

High

EC-009

Client removed from project during delete attempt

Delete eligibility re-checked; may now succeed

Medium

EC-010

Client on both active AND archived projects

Blocked - active project takes precedence

High

EC-011

Primary client on archived project only

Allowed - can delete directly

Medium

EC-012

Only client on archived project

Allowed - can delete directly

Medium

EC-013

Project has mix of active and completed events

Project treated as Active; client deletion blocked

High

EC-014

Event status changes during delete flow

Re-evaluate project status; eligibility may change

Medium

EC-015

Project with single archived event

Project is Archived; client can be deleted with warning

Medium
#574
**FRD #14: Client Delete** > **11\. Acceptance Criteria**
~8 tok
## **11\. Acceptance Criteria**
#575
**FRD #14: Client Delete** > **11\. Acceptance Criteria** > 11.1 Delete Flow
~63 tok
### 11.1 Delete Flow

**AC ID**

**Criteria**

AC-001

Delete option accessible from listing 3-dot menu

AC-002

Delete option accessible from profile

AC-003

Confirmation dialog shown before deletion

AC-004

Success message displayed after deletion
#576
**FRD #14: Client Delete** > **11\. Acceptance Criteria** > 11.2 Restrictions
~136 tok
### 11.2 Restrictions

**AC ID**

**Criteria**

AC-005

Client with active/completed project association cannot be deleted

AC-006

Client with archived project association only can be deleted with warning

AC-007

Primary client on active/completed project cannot be deleted

AC-008

Primary client on archived project only can be deleted

AC-009

Only client on active/completed project cannot be deleted

AC-010

Appropriate blocking modal shown for restricted cases

AC-011

Project list shown in blocking/warning modals as clickable links
#577
**FRD #14: Client Delete** > **11\. Acceptance Criteria** > 11.3 Project Status Logic
~76 tok
### 11.3 Project Status Logic

**AC ID**

**Criteria**

AC-012

Project status correctly determined based on all events

AC-013

Active events take precedence over completed/archived

AC-014

Completed events take precedence over archived

AC-015

Project with all archived events allows client deletion
#578
**FRD #14: Client Delete** > **11\. Acceptance Criteria** > 11.4 Post-Deletion
~54 tok
### 11.4 Post-Deletion

**AC ID**

**Criteria**

AC-016

Client removed from listings

AC-017

Client not returned in search

AC-018

Portal access revoked

AC-019

Historical data (payments, files, notes) preserved
#579
**FRD #14: Client Delete** > **12\. Dependencies**
~100 tok
## **12\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Project Module

Data

Project and event status check

DEP-002

Event Module

Data

Event pipeline stage for status determination

DEP-003

Client Portal

Functional

Access revocation

DEP-004

Search Service

Functional

Index removal

DEP-005

Activity Log

Functional

Deletion logging
#580
**FRD #14: Client Delete** > **13\. References**
~6 tok
## **13\. References**
#581
**FRD #14: Client Delete** > **13\. References** > 13.1 Figma Designs
~33 tok
### 13.1 Figma Designs

[Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=24269-77509&t=r4NL4B1STgwBOH95-0)
#582
**FRD #14: Client Delete** > **Change Log**
~156 tok
## **Change Log**

**Version**

**Date**

**Author**

**Changes**

1.0

December 16, 2025

\-

Initial version

2.0

April 10, 2026

\-

Updated deletion logic: Clients on active/completed projects cannot be deleted. Clients on archived projects only can be deleted with warning. Primary client and only client restrictions apply only to active/completed projects. Added Project Status Logic section with pipeline stage mapping and event-based status determination. All data (payments, files, records) preserved after deletion. Refined modal message format with clickable project links and hint boxes.

15\. Company Delete
#583
**FRD #15: Company Delete**
~51 tok
# **FRD #15: Company Delete**

**Document Version:** 2.0  
**Created Date:** December 16, 2025  
**Last Updated:** April 10, 2026  
**Module:** Company Delete  
**Platform:** Pixally CRM - Agency Portal
#584
**FRD #15: Company Delete** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#585
**FRD #15: Company Delete** > **1\. Module Overview** > 1.1 Purpose
~71 tok
### 1.1 Purpose

This document defines the functional requirements for deleting Company records from the Pixally CRM system. The Delete Company functionality implements soft deletion with specific rules to protect data integrity, particularly regarding associated client relationships.
#586
**FRD #15: Company Delete** > **1\. Module Overview** > 1.2 Scope
~67 tok
### 1.2 Scope

This FRD covers:

*   Delete confirmation flow
*   Deletion restrictions based on client-project associations
*   Project status determination logic
*   Warning messages for client disassociation
*   Soft delete behavior
*   Impact on associated clients
#587
**FRD #15: Company Delete** > **1\. Module Overview** > 1.3 Key Business Rules
~202 tok
### 1.3 Key Business Rules

**Rule ID**

**Rule Description**

BR-001

Company deletion is a **soft delete** (data retained, marked as deleted)

BR-002

Company cannot be deleted if any associated client is attached to **active or completed projects**

BR-003

Company can be deleted if clients are attached to **archived projects only** (with warning)

BR-004

Deleting company does **NOT cascade delete** associated clients

BR-005

Associated clients (with no active/completed project associations) become **"No Company"** after company deletion

BR-006

Company data (notes, history, payments, files) is **preserved** after deletion

BR-007

Having clients associated with a company is **not mandatory**

BR-008

Project status is determined by the **collective status of all events** within the project
#588
**FRD #15: Company Delete** > **2\. User Roles & Permissions**
~43 tok
## **2\. User Roles & Permissions**

**Role**

**Delete Company**

Agency Owner (AO)

✅

Agency Admin

✅

Account Manager (AR)

✅

Team Member

✅

Contractor

❌

Client

❌
#589
**FRD #15: Company Delete** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#590
**FRD #15: Company Delete** > **3\. User Flow** > 3.1 Access Points
~54 tok
### 3.1 Access Points

**Access Point**

**Navigation Path**

Company Listing

Companies Tab → Row 3-dot menu → Delete

Company Profile

Profile → 3-dot menu → Delete

Company Profile

Profile → Quick Actions → Delete
#591
**FRD #15: Company Delete** > **3\. User Flow** > 3.2 Delete - No Associated Clients
~72 tok
### 3.2 Delete - No Associated Clients

1.  User clicks "Delete" on company with no associated clients
2.  System displays simple confirmation modal
3.  User clicks "Delete" to confirm
4.  System soft-deletes company record
5.  Success message displayed
6.  Company removed from listing
#592
**FRD #15: Company Delete** > **3\. User Flow** > 3.3 Delete - Clients with Active/Completed Projects (Blocked)
~70 tok
### 3.3 Delete - Clients with Active/Completed Projects (Blocked)

1.  User clicks "Delete" on company where any associated client has active or completed project associations
2.  System displays blocking modal with clickable client/project list
3.  Only "Cancel" button available
#593
**FRD #15: Company Delete** > **3\. User Flow** > 3.4 Delete - Clients with Archived Projects Only (Warning)
~89 tok
### 3.4 Delete - Clients with Archived Projects Only (Warning)

1.  User clicks "Delete" on company where clients are attached to archived projects only
2.  System displays warning modal
3.  User clicks "Delete" to confirm or "Cancel" to abort
4.  System soft-deletes company record
5.  Associated clients become "No Company"
6.  Success message displayed
#594
**FRD #15: Company Delete** > **3\. User Flow** > 3.5 Delete - Clients with No Project Associations (Warning)
~65 tok
### 3.5 Delete - Clients with No Project Associations (Warning)

1.  User clicks "Delete" on company with clients (none attached to any projects)
2.  System displays warning modal
3.  User clicks "Delete" or "Cancel"
4.  Associated clients become "No Company"
#595
**FRD #15: Company Delete** > **3\. User Flow** > 3.6 Alternative: Disassociate Clients First
~131 tok
### 3.6 Alternative: Disassociate Clients First

User can disassociate all clients from the company before deletion:

1.  Navigate to Company Profile → Clients Section
2.  For each client with active/completed project associations:
    *   Click 3-dot menu → Disassociate from Company
    *   Client becomes "No Company" but remains on their projects
3.  After all clients with active/completed projects are disassociated, delete proceeds with warning (if other clients remain) or simple confirmation (if no clients remain)
#596
**FRD #15: Company Delete** > **4\. Project Status Logic**
~8 tok
## **4\. Project Status Logic**
#597
**FRD #15: Company Delete** > **4\. Project Status Logic** > 4.1 Pipeline Stage to Project Status Mapping
~72 tok
### 4.1 Pipeline Stage to Project Status Mapping

Project status is determined based on the pipeline stages of events within the project:

**Pipeline Stage**

**Maps To**

New Leads

**Active**

Booked

**Active**

Post Event

**Active**

Completed

**Completed**

Archived

**Archived**
#598
**FRD #15: Company Delete** > **4\. Project Status Logic** > 4.2 Project Status Determination
~212 tok
### 4.2 Project Status Determination

A single project can have **multiple events**. The overall project status is determined by evaluating the **collective status of ALL events** within that project.

**Precedence Order:** Active > Completed > Archived

**Event Scenarios**

**Project Status**

**Reason**

All events in Active stages (New Leads/Booked/Post Event)

**Active**

All events are active

All events in Completed stage

**Completed**

All events are completed

All events in Archived stage

**Archived**

All events are archived

Mix: Active + Completed events

**Active**

Active takes precedence

Mix: Active + Archived events

**Active**

Active takes precedence

Mix: Completed + Archived events

**Completed**

Completed takes precedence over Archived

Mix: Active + Completed + Archived events

**Active**

Active takes precedence
#599
**FRD #15: Company Delete** > **4\. Project Status Logic** > 4.3 Project Status Check Logic
~121 tok
### 4.3 Project Status Check Logic

FOR each event in project:

IF event.pipeline\_stage IN \["New Leads", "Booked", "Post Event"\]:

has\_active\_event = TRUE

ELSE IF event.pipeline\_stage = "Completed":

has\_completed\_event = TRUE

ELSE IF event.pipeline\_stage = "Archived":

has\_archived\_event = TRUE

IF has\_active\_event:

project\_status = "Active"

ELSE IF has\_completed\_event:

project\_status = "Completed"

ELSE IF has\_archived\_event:

project\_status = "Archived"
#600
**FRD #15: Company Delete** > **4\. Project Status Logic** > 4.4 Examples
~133 tok
### 4.4 Examples

**Example 1: Project with 3 events**

*   Event A: Booked (Active)
*   Event B: Completed
*   Event C: Archived

**Result:** Project Status = **Active** (because Event A is in an active stage)

**Example 2: Project with 2 events**

*   Event A: Completed
*   Event B: Archived

**Result:** Project Status = **Completed** (Completed takes precedence over Archived)

**Example 3: Project with 2 events**

*   Event A: Archived
*   Event B: Archived

**Result:** Project Status = **Archived** (All events are archived)
#601
**FRD #15: Company Delete** > **5\. Functional Logic**
~7 tok
## **5\. Functional Logic**
#602
**FRD #15: Company Delete** > **5\. Functional Logic** > 5.1 Company Delete Logic
~132 tok
### 5.1 Company Delete Logic

**Scenario**

**Allowed?**

**Behavior**

No associated clients

✅ Yes

Simple confirmation → Delete

Clients on **active** projects

❌ Blocked

Must disassociate clients from company first

Clients on **completed** projects

❌ Blocked

Must disassociate clients from company first

Clients on **archived** projects only

✅ Yes (with warning)

Warning shown → Data preserved → Delete

Clients with no project associations

✅ Yes (with warning)

Warning shown → Clients become "No Company" → Delete
#603
**FRD #15: Company Delete** > **5\. Functional Logic** > 5.2 Deletion Eligibility Check
~186 tok
### 5.2 Deletion Eligibility Check

System retrieves all clients associated with company\_id

FOR each client:

System retrieves all projects for client

FOR each project:

Determine project\_status using Project Status Logic (Section 4)

IF project\_status = "Active" OR project\_status = "Completed":

Add client and project to blocked\_clients list

ELSE IF project\_status = "Archived":

Add client to archived\_clients list

IF blocked\_clients.count > 0:

Return NOT\_ALLOWED with reason "clients\_on\_active\_completed\_projects"

Include blocked\_clients list with their project names

IF archived\_clients.count > 0 OR clients\_with\_no\_projects.count > 0:

Return ALLOWED\_WITH\_WARNING

Include clients list

ELSE:

Return ALLOWED
#604
**FRD #15: Company Delete** > **5\. Functional Logic** > 5.3 Soft Delete Implementation
~134 tok
### 5.3 Soft Delete Implementation

IF deletion ALLOWED or ALLOWED\_WITH\_WARNING:

FOR each client associated with company\_id:

System sets client.company\_id = NULL (disassociates client)

System sets company.deleted\_at = current\_timestamp

System sets company.deleted\_by = current\_user\_id

System sets company.status = "deleted"

System removes company from search index

System logs activity "company\_deleted" with company\_id and current\_user\_id

System preserves all historical data (payments, files, notes remain linked)
#605
**FRD #15: Company Delete** > **5\. Functional Logic** > 5.4 Client Disassociation on Delete
~71 tok
### 5.4 Client Disassociation on Delete

When company is deleted:

*   All associated clients have company\_id set to NULL
*   Clients appear as "No Company" or "---" in listing
*   Client records remain fully intact
*   Client projects unaffected
*   No notification sent to clients
#606
**FRD #15: Company Delete** > **5\. Functional Logic** > 5.5 Data Preservation
~50 tok
### 5.5 Data Preservation

Deleted company data preserved includes:

*   Payment records
*   Files and documents
*   Notes
*   Activity logs
*   Historical client associations (for reporting purposes)
#607
**FRD #15: Company Delete** > **5\. Functional Logic** > 5.6 Impact on Other Modules
~118 tok
### 5.6 Impact on Other Modules

**Module**

**Impact**

**Company Listing**

Company removed from listing

**Client Listing**

Affected clients show "---" or "No Company"

**Client Profile**

Company section shows "No company associated"

**Search**

Company not returned in search

**Payments**

Invoice records preserved with deleted company reference

**Files**

All files preserved and accessible

**Reports**

Historical data preserved; current counts exclude deleted
#608
**FRD #15: Company Delete** > **6\. Field Details & Validations**
~10 tok
## **6\. Field Details & Validations**
#609
**FRD #15: Company Delete** > **6\. Field Details & Validations** > 6.1 Deletion Record Fields
~42 tok
### 6.1 Deletion Record Fields

**Field Name**

**Type**

**Description**

deleted\_at

Timestamp

When deletion occurred

deleted\_by

User ID

Who performed deletion
#610
**FRD #15: Company Delete** > **7\. Success Message Handling**
~45 tok
## **7\. Success Message Handling**

**Action**

**Success Message**

**Display Type**

**Duration**

Company deleted

"Company deleted successfully"

Toast notification

5 seconds
#611
**FRD #15: Company Delete** > **8\. Error Message Handling**
~65 tok
## **8\. Error Message Handling**

**Error Type**

**Error Message**

**Display Type**

Delete failed

"Unable to delete company. Please try again"

Toast notification

Permission denied

"You don't have permission to delete this company"

Toast notification
#612
**FRD #15: Company Delete** > **9\. Confirmation & Blocking Modals**
~10 tok
## **9\. Confirmation & Blocking Modals**
#613
**FRD #15: Company Delete** > **9\. Confirmation & Blocking Modals** > 9.1 Delete Company - Blocking Modal (Clients on Active/Completed Projects)
~109 tok
### 9.1 Delete Company - Blocking Modal (Clients on Active/Completed Projects)

**Title:** Cannot Delete Company

**Message:** This company cannot be deleted because **\[Client Name\]** _(clickable link)_ is associated with active or completed project(s): **\[Project 1, Project 2 and Project 3\]** _(clickable links)_

**Hint Box (Yellow):** ⚠️ Please disassociate the clients from this company before proceeding.

**Button:** Cancel
#614
**FRD #15: Company Delete** > **9\. Confirmation & Blocking Modals** > 9.2 Delete Company - Warning Modal (Clients on Archived Projects Only)
~84 tok
### 9.2 Delete Company - Warning Modal (Clients on Archived Projects Only)

**Title:** Delete Company?

**Message:** This company has associated records. All related data including payments, files, and history will be preserved. Are you sure you want to delete \[Company Name\]?

**Primary Button:** Delete  
**Secondary Button:** Cancel
#615
**FRD #15: Company Delete** > **9\. Confirmation & Blocking Modals** > 9.3 Delete Company - Warning Modal (Clients with No Projects)
~82 tok
### 9.3 Delete Company - Warning Modal (Clients with No Projects)

**Title:** Delete Company?

**Message:** This company has associated records. All related data including payments, files, and history will be preserved. Are you sure you want to delete \[Company Name\]?

**Primary Button:** Delete  
**Secondary Button:** Cancel
#616
**FRD #15: Company Delete** > **9\. Confirmation & Blocking Modals** > 9.4 Delete Company - Confirmation Modal (No Clients)
~52 tok
### 9.4 Delete Company - Confirmation Modal (No Clients)

**Title:** Delete Company?

**Message:** Are you sure you want to delete \[Company Name\]?

**Primary Button:** Delete  
**Secondary Button:** Cancel
#617
**FRD #15: Company Delete** > **10\. Edge Cases**
~334 tok
## **10\. Edge Cases**

**Edge Case ID**

**Scenario**

**Expected Behavior**

**Priority**

EC-001

Company has 50+ clients

Warning/blocking modal shows scrollable client list

Low

EC-002

Client added to company during delete process

Delete fails; prompt to retry

Medium

EC-003

Company viewed by user while being deleted

Viewer sees "Company not found" on refresh

Medium

EC-004

Same company name exists after deletion

Allowed - deleted names can be reused

Low

EC-005

Network failure during delete

Retry prompt; ensure no partial deletion

High

EC-006

Client added to active project during company delete

Re-check eligibility; may now be blocked

High

EC-007

All clients manually disassociated before delete

Simple confirmation (no warning needed)

Low

EC-008

Company has clients on both active AND archived projects

Blocked - active project takes precedence

High

EC-009

Company has mix of clients: some on archived, some with no projects

Allowed with warning

Medium

EC-010

Project has mix of active and completed events

Project treated as Active; company deletion blocked

High

EC-011

Event status changes during delete flow

Re-evaluate project status; eligibility may change

Medium

EC-012

Client's project with single archived event

Project is Archived; does not block company deletion

Medium
#618
**FRD #15: Company Delete** > **11\. Acceptance Criteria**
~8 tok
## **11\. Acceptance Criteria**
#619
**FRD #15: Company Delete** > **11\. Acceptance Criteria** > 11.1 Delete Flow
~63 tok
### 11.1 Delete Flow

**AC ID**

**Criteria**

AC-001

Delete option accessible from listing 3-dot menu

AC-002

Delete option accessible from profile

AC-003

Confirmation dialog shown before deletion

AC-004

Success message displayed after deletion
#620
**FRD #15: Company Delete** > **11\. Acceptance Criteria** > 11.2 Restrictions
~90 tok
### 11.2 Restrictions

**AC ID**

**Criteria**

AC-005

Company with clients on active/completed projects cannot be deleted

AC-006

Company with clients on archived projects only can be deleted with warning

AC-007

Blocking modal shows clickable client and project list

AC-008

Warning modal shows for companies with clients (no active/completed projects)
#621
**FRD #15: Company Delete** > **11\. Acceptance Criteria** > 11.3 Project Status Logic
~78 tok
### 11.3 Project Status Logic

**AC ID**

**Criteria**

AC-009

Project status correctly determined based on all events

AC-010

Active events take precedence over completed/archived

AC-011

Completed events take precedence over archived

AC-012

Project with all archived events does not block company deletion
#622
**FRD #15: Company Delete** > **11\. Acceptance Criteria** > 11.4 Post-Deletion
~70 tok
### 11.4 Post-Deletion

**AC ID**

**Criteria**

AC-013

Company removed from listings

AC-014

Company not returned in search

AC-015

Associated clients become "No Company"

AC-016

Associated clients are NOT deleted

AC-017

Historical data (payments, files, notes) preserved
#623
**FRD #15: Company Delete** > **12\. Dependencies**
~99 tok
## **12\. Dependencies**

**Dependency ID**

**Module/Feature**

**Dependency Type**

**Description**

DEP-001

Client Module

Data

Client associations

DEP-002

Project Module

Data

Project and event status check

DEP-003

Event Module

Data

Event pipeline stage for status determination

DEP-004

Search Service

Functional

Index removal

DEP-005

Activity Log

Functional

Deletion logging
#624
**FRD #15: Company Delete** > **13\. References**
~6 tok
## **13\. References**
#625
**FRD #15: Company Delete** > **13\. References** > 13.1 Figma Designs
~33 tok
### 13.1 Figma Designs

[Figma](https://www.figma.com/design/ej0kxwP45mDKmZCZfAJ5O8/Pixally?node-id=24269-77509&t=r4NL4B1STgwBOH95-0)
#626
**FRD #15: Company Delete** > **Change Log**
~135 tok
## **Change Log**

**Version**

**Date**

**Author**

**Changes**

1.0

December 16, 2025

\-

Initial version

2.0

April 10, 2026

\-

Updated deletion logic: Company cannot be deleted if clients are on active/completed projects. Company can be deleted if clients are on archived projects only (with warning). Added Project Status Logic section with pipeline stage mapping and event-based status determination. All data (payments, files, records) preserved after deletion. Refined modal message format with clickable links and hint boxes.