← 23. Proposal Form
Chunks — 23. Proposal Form
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.
398 chunks · ~51,940 tokens
#1
(intro)
~2 tok
Proposal
#2
(intro)
~1 tok
#
#3
(intro)
~1 tok
#
#4
(intro)
~1 tok
#
#5
(intro)
~1 tok
#
#6
(intro)
~1 tok
#
#7
**Proposal Form**
~46 tok
# **Proposal Form** **Functional Requirement Document** **BA & Ideation: Deval Chauhan** **Reviewed By: Keval Gajjar** **Updated Date:16 December 2025 Status:** **Version: 1.0**
#8
**Proposal Module - FRD Summary**
~33 tok
# **Proposal Module - FRD Summary** **Module:** Proposal Module | **FRDs:** 5 | **Test Cases:** 289 | **Date:** December 16, 2025
#9
**Proposal Module - FRD Summary** > **FRD #1: Proposal Listing**
~194 tok
## **FRD #1: Proposal Listing** * Centralized template management interface under Templates → Proposals * Columns: Name, Status (Draft/Published), Brand, Created Date, Actions * Actions: Edit Template, Duplicate, Delete (with confirmation) * Search: Real-time filtering by name/brand (case-insensitive) * Sorting: All columns sortable; default = newest first * Pagination: 10/25/50/100 rows per page * Create Modal: Proposal Name + Brand (auto-select if single brand) * Status Flow: Draft → Published (one-way, cannot revert) * Only Published templates available for project assignment * Duplicate creates "(Copy)" version in Draft status (naming convention TBD) * Deleting Published template doesn't affect existing project proposals (snapshot model)
#10
**Proposal Module - FRD Summary** > **FRD #2: Proposal Builder**
~349 tok
## **FRD #2: Proposal Builder**
* 4 Sidebar Panels: Builder, Text Settings, Colors, Settings
* **Mandatory Sections:** Package Groups, Contract, Payment Terms
* **Optional Sections:** Header Image, Welcome Message, Thank You Message, Discount
* Header Image: 5MB max; JPG/PNG/GIF/WebP
* Package Groups: Multi-select from published groups (filtered by brand)
* Contract: Single selection only from published templates
* Payment Terms: Smart Date / Fixed Date (inherited from Invoice module)
* Payment Types: Custom amount, Percentage, Equal Payment
* Presets: Save and Apply payment term configurations
* **Discount Types:**
* Bundle Discount: Requires 2+ package groups; Apply to packages only OR packages + A La Carte
* Regular Discount: No conditions; applies to entire invoice
* Discount Values: Flat amount OR Percentage (max 100%, cannot exceed subtotal)
* Text Settings: Inherited from Invoice Builder module
* Colors: Body (text, input border, input bg), Button (text, color), Background + "Use Brand Colors" checkbox
* Settings Panel: Payment Options (Credit Card/ACH), Frequency (One-Time; others TBD), Tax (Auto/Manual), Expiration (days/weeks/months from send date)
* Preview: Desktop/Mobile toggle
* Publish: Enabled only when all mandatory sections complete
* Update: Changes to published template don't affect existing project proposals#11
**Proposal Module - FRD Summary** > **FRD #3: Proposal Usage in Project**
~374 tok
## **FRD #3: Proposal Usage in Project**
* Only published templates assignable to projects (filtered by brand)
* One active proposal per project until signed
* Assignment creates snapshot copy (template edits don't affect assigned proposals)
* **Share Modal:** Multi-recipient chips, optional subject/message, rich text editor, template dropdown
* **Generate Link:** Unique tokenized URL per recipient ([https://www.pixally.com/document/v2?token=\[token](https://www.pixally.com/document/v2?token=%5Btoken)\])
* Email Preview before sending
* Sent Confirmation: Green checkmark modal (auto-dismiss ~3 seconds)
* **Status Tracking:** Badge display + client cards with completion status
* Last Viewed: Most recent view timestamp (overall, not per-recipient)
* **Information Collected (3 tabs, post-completion):**
* Selected Items: Packages, A La Carte, subtotals, tax, discount, payment schedule, total
* Personal Details: Name, email, phone, address, event dates
* Contract Details: Smart field values (venue, dates, etc.)
* File Activity Log: Chronological audit trail (Created, Sent, Viewed, Completed, Resent)
* Download PDF: Available only when Completed
* **Revised Proposal:** Only if previous is unsigned AND unpaid; auto-expires previous version
* After Signing: No further proposals allowed; use invoices for additional services
* Link Expiration: Matches proposal expiration setting
* All recipients get automatic client portal access#12
**Proposal Module - FRD Summary** > **FRD #4: Client-Side Interaction**
~583 tok
## **FRD #4: Client-Side Interaction**
* **6-Step Flow:** Choose Packages → Personal Details → Price Summary → Event Dates → Sign Contract → Initial Payment
* Welcome Screen: Brand header/logo, welcome message, step overview, "Open Proposal" button
* Navigation: Bottom bar (Previous/Step Indicators/Next); completed steps show checkmarks
* **Step 1 - Choose Packages:**
* One package per group (mandatory)
* Horizontal scroll with progress bar for multiple packages
* "Show Details" modal for full package info
* Line items display as "Item x\[qty\]" when quantity > 1
* A La Carte: Before selection = common items; After selection = all available items
* Quantity input when enabled (cannot be 0)
* Skip Page: Only for multi-group; must return before completion
* All groups must have selection before proceeding
* **Step 2 - Personal Details:**
* All fields required except Address Line 2
* Auto-fill from client profile; changes sync back to Client Management
* Address required for tax calculation
* **Step 3 - Price Summary:**
* Left: Selected packages with add-ons
* Right: Subtotals, tax, discount, payment schedule, total
* Discount applied BEFORE tax
* **Step 4 - Event Dates:**
* Event cards with date picker
* "No definite date yet" toggle (available for ALL events including primary)
* All events must have date OR toggle enabled
* **Step 5 - Sign Contract:**
* Full scrollable contract
* Dynamic Section 7 (Events table) + Section 8 (Payment Details)
* E-signature pad (script font display)
* Certification checkbox required before signing
* Post-signing: Cannot go back; must contact agency for modifications
* **Step 6 - Initial Payment:**
* Amount due (first payment milestone)
* View Invoice link
* Payment tabs: Credit Card / Bank Account (if ACH enabled)
* Card fields with brand icons; Luhn validation
* ACH: Shows "In Progress" status
* Pay button with dynamic amount
* **Payment Success Screen:** Green checkmark, receipt/invoice numbers, payment method, Download Invoice/Receipt buttons, Finish button
* Expiration: Shows message, cannot proceed; must contact agency
* Save & Resume: TBD
* $0 Payment scenario: TBD#13
**Proposal Module - FRD Summary** > **FRD #5: Impact on Project**
~498 tok
## **FRD #5: Impact on Project**
* **Automatic Event Creation:**
* Events from selected packages create/update project event tabs
* Matching: NOT case-sensitive; proposal data overrides existing
* A La Carte "Event" type items also create events
* **Event Mismatch Warning:**
* Triggers when project has events not in proposal
* Warning icon (⚠️) on event tab with tooltip
* Orange/red banner in Services section
* Actions: "Delete Event" (permanent) or "Keep Event Active" (dismiss warning)
* **Service Population:**
* Services created from package line items grouped by service type
* Service cards with Assign Contractors / Edit / Delete options
* **Deliverable Creation:**
* Line items with Deliverable toggle ON create post-production tasks
* Due date = Event Date + configured days (TBD if event has no date)
* **Client Profile Sync:**
* Personal details (name, email, phone, address) sync to Client Management
* Overwrites existing values
* **Automatic Invoice Generation:**
* Triggered on proposal completion
* Status: Unpaid
* Matches proposal total with payment schedule
* Appears in Finance → Billing and Project → Invoices
* **Pipeline Automation:**
* Trigger: Contract signed + first payment received
* Action: Event status updates to next pipeline stage
* All linked events update simultaneously
* Configurable per agency
* **Signed Proposal Access:**
* Agency: Project Details → Files/Documents
* Client: Client Portal → Project → Documents
* Email delivery with attachments
* **Post-Signing Rules:**
* Proposal locked and uneditable
* No new proposals for same project
* Additional services via invoices only
* Contract legally binding; audit trail maintained
* **Failed Payment Notifications:** Client + Agency Owner notified; other roles TBD
* **Multi-party Signing:** Planned for V2#14
**Proposal Module - FRD Summary** > **TBD Items (Requiring Future Clarification)**
~432 tok
## **TBD Items (Requiring Future Clarification)**
* Frequency options beyond One-Time
* Character limits for text fields
* Duplicate naming convention
* Save & Resume client functionality
* $0 Payment step behavior
* Stripe minimum charge amount
* Edit process after signing
* Notification roles for failed payments
* Duplicate event handling (same name from multiple packages)
_Total: 5 FRDs | 12 Sections Each | 289 Test Cases | 121 Acceptance Criteria_
I need to update the proposal FRD with some changes.
1. The first point is -
1. Primary Event Changes- If the Primary Event is changed, only future/unpaid payment milestones will be changed based on the new Primary Event date. Already-paid milestones remain untouched.3. Fully Paid (Completed) Invoices- Once an invoice is fully paid, it will not be editable. Refunds (partial or full) will remain available.- Any additional charges after full payment will require a new invoice. (This matches Honeybook's behavior as well.)4. Partially Paid Invoices- Invoices with any pending balance can still be edited.- If a new deliverable/charge is added after the event date has passed, the user must create a new payment schedule for that amount with a future date — past dates will not be allowed.5. New Invoices After the Primary Event Has Passed- Auto-applied payment schedule presets will not be applied; the user must set up the schedule manually.- The "before/after Event date" option will be greyed out (with appropriate messaging), since the event has already been completed.- Schedules can be set relative to the invoice date (e.g., net-30) or on specific current/future dates, preserving flexibility for payment plans.
✅ 1. Proposal Listing#15
**Functional Requirements Document**
~10 tok
# **Functional Requirements Document**
#16
**FRD #1: Proposal Listing**
~66 tok
# **FRD #1: Proposal Listing** **Document Version:** 1.1 **Created Date:** December 16, 2025 **Last Updated:** April 17, 2026 | 11:30 AM IST **Module:** Proposal Listing (Templates → Proposals) **Platform:** Pixally CRM - Agency Portal **Status:** Draft
#17
**FRD #1: Proposal Listing** > **Change Log**
~115 tok
## **Change Log** **Version** **Date** **Time** **Author** **Changes** 1.1 April 17, 2026 11:30 AM IST Claude AI (1) Updated empty state per Figma screenshots; (2) Added clarification that template statuses (Draft/Published) are separate from proposal instance statuses (Pending/In Progress/Completed/Expired in FRD #3); (3) Duplicate naming convention set to "Copy of \[Proposal Name\]" 1.0 December 16, 2025 \- Claude AI Initial FRD creation
#18
**FRD #1: Proposal Listing** > **Table of Contents**
~323 tok
## **Table of Contents** 1. [Module Overview](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#1-module-overview) 2. [User Roles & Permissions](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#2-user-roles--permissions) 3. [User Flow](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#3-user-flow) 4. [Functional Logic](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#4-functional-logic) 5. [Field Details & Validations](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#5-field-details--validations) 6. [Success Message Handling](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#6-success-message-handling) 7. [Error Message Handling](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#7-error-message-handling) 8. [Edge Cases](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#8-edge-cases) 9. [Acceptance Criteria](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#9-acceptance-criteria) 10. [Manual Test Cases](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#10-manual-test-cases) 11. [Dependencies](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#11-dependencies) 12. [References](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#12-references)
#19
**FRD #1: Proposal Listing** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#20
**FRD #1: Proposal Listing** > **1\. Module Overview** > 1.1 Purpose
~96 tok
### 1.1 Purpose The Proposal Listing module provides agency users with a centralized interface to view, manage, and organize all proposal templates created within the Pixally CRM system. This module serves as the entry point for proposal template management, enabling users to create new templates, search existing ones, and perform essential actions such as duplication and deletion.
#21
**FRD #1: Proposal Listing** > **1\. Module Overview** > 1.2 Business Goals
~168 tok
### 1.2 Business Goals The Proposal Listing module aims to achieve the following business objectives: * Provide agencies with an organized, filterable view of all proposal templates categorized by brand. * Enable quick access to template creation, duplication, and deletion workflows to improve operational efficiency. * Support efficient template management through robust search, sorting, and pagination capabilities. * Maintain clear visibility of template statuses (Draft vs. Published) to streamline workflow management and prevent accidental use of incomplete templates. * Ensure only published templates are available for assignment to client projects.
#22
**FRD #1: Proposal Listing** > **1\. Module Overview** > 1.3 Scope
~89 tok
### 1.3 Scope This FRD covers the following functionality: * Proposal template listing page with tabular display * Create new proposal template modal * Search, filter, and sort functionality * Pagination controls * Template actions (Edit, Duplicate, Delete) * Status management (Draft/Published display only; status change occurs in Builder)
#23
**FRD #1: Proposal Listing** > **1\. Module Overview** > 1.4 Out of Scope
~75 tok
### 1.4 Out of Scope The following items are not covered in this FRD: * Proposal Builder functionality (covered in FRD #2) * Proposal assignment to projects (covered in FRD #3) * Client-side proposal interaction (covered in FRD #4) * Project integration and automation (covered in FRD #5)
#24
**FRD #1: Proposal Listing** > **2\. User Roles & Permissions**
~9 tok
## **2\. User Roles & Permissions**
#25
**FRD #1: Proposal Listing** > **2\. User Roles & Permissions** > 2.1 Role-Based Access Matrix
~111 tok
### 2.1 Role-Based Access Matrix **Permission** **Agency Owner** **Agency Admin** **Project Manager** **Client** **Contractor** View Proposal Listing ✅ ✅ ✅ ❌ ❌ Create New Template ✅ ✅ ✅ ❌ ❌ Edit Template (via Builder) ✅ ✅ ✅ (own only) ❌ ❌ Duplicate Template ✅ ✅ ✅ (own only) ❌ ❌ Delete Template ✅ ✅ ❌ ❌ ❌ Publish Template ✅ ✅ ❌ ❌ ❌ Search & Filter ✅ ✅ ✅ ❌ ❌ Change Rows Per Page ✅ ✅ ✅ ❌ ❌
#26
**FRD #1: Proposal Listing** > **2\. User Roles & Permissions** > 2.2 Permission Notes
~135 tok
### 2.2 Permission Notes * Team Members can only edit and duplicate templates they have created. They cannot edit or duplicate templates created by other users. * Only Agency Owner and Agency Admin can delete templates or publish templates (change status from Draft to Published). * Clients and Contractors have no access to the Proposal Listing module; this is an agency-only feature. * Published templates cannot be reverted to Draft status. If changes are needed, the template can be edited and updated while remaining Published.
#27
**FRD #1: Proposal Listing** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#28
**FRD #1: Proposal Listing** > **3\. User Flow** > 3.1 Accessing Proposal Listing
~107 tok
### 3.1 Accessing Proposal Listing 1. User logs into Pixally CRM Agency Portal using valid credentials. 2. User views the left sidebar navigation menu. 3. User clicks on "Templates" to expand the submenu. 4. User clicks on "Proposals" submenu item. 5. System displays the Proposal Listing page with all templates for the agency. 6. If no templates exist, system displays empty state with prompt to create first template.
#29
**FRD #1: Proposal Listing** > **3\. User Flow** > 3.2 Creating a New Proposal Template
~189 tok
### 3.2 Creating a New Proposal Template
1. User is on the Proposal Listing page.
2. User clicks the "+ Create New" button located in the top-right corner of the page.
3. System displays the "Create a proposal" modal overlay with dimmed background.
4. User enters the Proposal Name in the text input field.
5. User selects a Brand from the dropdown menu.
* If the agency has only one brand, it is auto-selected and displayed.
* If the agency has multiple brands, user must select from available options.
6. User clicks the "Create Proposal" button.
7. System validates that both fields are completed.
8. System creates the template with Draft status.
9. System redirects user to the Proposal Builder (FRD #2) to configure the template.#30
**FRD #1: Proposal Listing** > **3\. User Flow** > 3.3 Searching for Templates
~129 tok
### 3.3 Searching for Templates 1. User is on the Proposal Listing page. 2. User clicks on the search input field. 3. User types search keywords (template name or brand name). 4. System filters the listing in real-time as user types. 5. System displays matching templates. 6. If no matches found, system displays "No proposals found matching your search criteria" message. 7. User can clear search by clicking the X icon or deleting the search text. 8. System restores full listing when search is cleared.
#31
**FRD #1: Proposal Listing** > **3\. User Flow** > 3.4 Filtering Templates
~105 tok
### 3.4 Filtering Templates 1. User is on the Proposal Listing page. 2. User clicks the filter icon (funnel) to open filter options. 3. System displays filter panel with available filter options. 4. User selects filter criteria (e.g., Brand, Status). 5. System applies filters and updates the listing. 6. Active filters display a badge count on the filter icon. 7. User can clear filters to restore full listing.
#32
**FRD #1: Proposal Listing** > **3\. User Flow** > 3.5 Sorting Templates
~90 tok
### 3.5 Sorting Templates 1. User is on the Proposal Listing page. 2. User clicks on a sortable column header (Name, Status, Brand, or Created). 3. System sorts the listing by the selected column in ascending order. 4. User clicks the same column header again. 5. System toggles to descending order. 6. Sort indicator arrow shows current sort direction.
#33
**FRD #1: Proposal Listing** > **3\. User Flow** > 3.6 Editing a Template
~90 tok
### 3.6 Editing a Template 1. User locates the desired template in the listing. 2. User clicks the "Edit Template" button in the Actions column. 3. System navigates to the Proposal Builder (FRD #2) for that template. 4. User makes changes in the Builder. 5. User saves/publishes changes in the Builder. 6. User can return to listing via back navigation.
#34
**FRD #1: Proposal Listing** > **3\. User Flow** > 3.7 Duplicating a Template
~125 tok
### 3.7 Duplicating a Template 1. User locates the desired template in the listing. 2. User clicks the three-dot menu (⋮) in the Actions column. 3. System displays dropdown menu with options. 4. User clicks "Duplicate" option. 5. System creates an exact copy of the template. 6. Duplicated template is named per naming convention (TBD). 7. Duplicated template is set to Draft status regardless of original status. 8. System redirects user to the Proposal Builder for the duplicated template.
#35
**FRD #1: Proposal Listing** > **3\. User Flow** > 3.8 Deleting a Template
~136 tok
### 3.8 Deleting a Template 1. User locates the desired template in the listing. 2. User clicks the three-dot menu (⋮) in the Actions column. 3. System displays dropdown menu with options. 4. User clicks "Delete" option. 5. System displays confirmation dialog warning that this action cannot be undone. 6. User clicks "Delete" to confirm or "Cancel" to abort. 7. If confirmed, system permanently removes the template from the listing. 8. System displays success message confirming deletion. 9. Listing refreshes to reflect the removal.
#36
**FRD #1: Proposal Listing** > **3\. User Flow** > 3.9 Changing Pagination
~96 tok
### 3.9 Changing Pagination 1. User is on the Proposal Listing page. 2. User views the pagination controls at the bottom of the listing. 3. User clicks the "Rows per page" dropdown. 4. User selects desired option (10, 25, 50, or 100). 5. System updates the listing to show the selected number of rows. 6. User can navigate between pages using Previous (<) and Next (>) buttons.
#37
**FRD #1: Proposal Listing** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#38
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.1 Empty State Behavior
~196 tok
### 4.1 Empty State Behavior When an agency has no proposal templates created, the listing page displays an empty state view with the following elements: **Visual Layout:** * Proposal/document icon displayed centered above the text * Title: "No Proposal found" * Subtitle: "Create and share proposals with clients" * "Create" button (yellow/primary color) centered below the subtitle * The "+ Create New" button in the top-right header also remains visible and functional **Behavior:** * Both the centered "Create" button and the header "+ Create New" button trigger the same Create Proposal modal * The empty state should clearly guide users on how to begin using the module * No default templates are provided; users must create their first template from scratch
#39
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.2 Listing Table Structure
~273 tok
### 4.2 Listing Table Structure The proposal listing displays templates in a tabular format with the following columns: **Name Column:** Displays the proposal template name exactly as entered during creation. Long names are truncated with ellipsis (...) and full name displays on hover via tooltip. **Status Column:** Displays the template status as a badge. Draft status appears as a yellow/amber badge indicating the template is not ready for use. Published status appears as a green badge indicating the template is available for assignment to projects. These are the only two statuses for proposal templates. **Brand Column:** Displays the brand name associated with the template. The brand owner's avatar may appear alongside the name for visual identification. **Created Column:** Displays the creation date in "MMM DD, YYYY" format (e.g., "Jan 24, 2025"). This represents the date the template was initially created, not the last modified date. **Actions Column:** Contains the "Edit Template" button and a three-dot menu (⋮) that reveals additional options: Duplicate and Delete.
#40
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.3 Sorting Functionality
~129 tok
### 4.3 Sorting Functionality All column headers with a down arrow indicator (↓) support sorting. Clicking a column header toggles between ascending and descending order. Only one column can be sorted at a time. Default sorting is by Created date in descending order (newest templates first). Name column sorts alphabetically (A-Z ascending, Z-A descending). Status column sorts with Draft before Published in ascending order. Brand column sorts alphabetically by brand name. Created column sorts chronologically.
#41
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.4 Search Functionality
~135 tok
### 4.4 Search Functionality The search bar is positioned above the listing table. Search filters templates by matching against template Name and Brand name. Search is case-insensitive, meaning "Wedding" matches "wedding" and "WEDDING". Search performs partial matching, so "Wed" matches "Wedding Package". Search results update in real-time as the user types with a reasonable debounce delay (300-500ms recommended). Clearing the search field restores the complete, unfiltered listing. Search works in conjunction with any active filters.
#42
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.5 Filter Functionality
~127 tok
### 4.5 Filter Functionality The filter icon (funnel/filter) opens a filter panel or dropdown. Users can filter by Brand using a dropdown containing all agency brands. Users can filter by Status with options for Draft, Published, or All. Multiple filter criteria can be applied simultaneously. Active filters display a badge count on the filter icon indicating how many filters are active. Filters persist during the session until explicitly cleared. Filter results combine with search results (AND logic).
#43
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.6 Pagination
~130 tok
### 4.6 Pagination The listing displays a configurable number of rows per page. The default is 10 rows per page. Available options are 10, 25, 50, and 100 rows per page. The "Rows per page" dropdown allows users to change this setting. Pagination controls display the current range and total count (e.g., "1-10 of 45"). Previous (<) button navigates to the prior page and is disabled on the first page. Next (>) button navigates to the next page and is disabled on the last page. Changing rows per page resets to page 1.
#44
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.7 Create New Modal Logic
~293 tok
### 4.7 Create New Modal Logic The "Create a proposal" modal appears centered on the screen with a semi-transparent background overlay that prevents interaction with the underlying page. **Modal Header:** Displays "Create a proposal" title with an X button to close. **Proposal Name Field:** Text input field with placeholder "Proposal Name". This field is required and must contain at least 1 character. Character limit follows existing module conventions (TBD). **Brand Field:** Dropdown selector for choosing the brand. This field is required. If the agency has only one brand configured, that brand is auto-selected and the dropdown may be disabled or simply show the selected brand. If the agency has multiple brands, the dropdown displays all brands the current user has access to. **Cancel Button:** Closes the modal without creating a template. No data is saved. **Create Proposal Button:** Validates both fields are complete, creates the template in Draft status, and redirects to the Proposal Builder. This button remains disabled until both required fields are populated. Clicking outside the modal or pressing Escape also closes the modal without saving.
#45
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.8 Edit Template Action
~136 tok
### 4.8 Edit Template Action Clicking "Edit Template" navigates the user to the Proposal Builder (FRD #2) for the selected template. Both Draft and Published templates can be edited. For Published templates, changes are saved and the template remains Published. There is no "unpublish" action; once Published, a template cannot revert to Draft. Editing a Published template that has been previously assigned to projects does not affect those project proposals because projects retain a snapshot copy of the template at the time of assignment.
#46
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.9 Duplicate Action
~157 tok
### 4.9 Duplicate Action Clicking "Duplicate" from the three-dot menu initiates the duplication process. The system creates an exact copy of the template including all content, settings, package selections, contract selection, payment terms, discount configuration, and color settings. The duplicated template receives a new name following the naming convention (TBD). The duplicated template is always set to Draft status, even if the original was Published. The user is redirected to the Proposal Builder for the duplicated template to review and modify as needed. All duplications are logged in the system for audit purposes.
#47
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.10 Delete Action
~157 tok
### 4.10 Delete Action Clicking "Delete" from the three-dot menu triggers a confirmation dialog. The confirmation message clearly warns that this action is permanent and cannot be undone (e.g., "Are you sure you want to delete this proposal template? This action cannot be undone."). Published templates can be deleted even if they have been previously assigned to projects because projects retain their own snapshot copy and are not affected. Upon confirmation, the template is permanently removed from the database. The listing refreshes to reflect the deletion. If the user cancels, the dialog closes and no action is taken.
#48
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.11 Status Logic
~288 tok
### 4.11 Status Logic **IMPORTANT:** Proposal **template** statuses (Draft/Published) are different from proposal **instance** statuses used in projects. This section covers template statuses only. **Context** **Statuses** **Description** Template (this FRD) Draft, Published Template readiness for use Project Instance (FRD #3) Pending, In Progress, Completed, Expired Client completion progress Proposal templates have exactly two statuses: Draft and Published. **Draft Status:** Indicates the template is in progress and not ready for use. Draft templates cannot be assigned to projects. Draft templates can be edited freely in the Builder. Draft status is assigned automatically when a template is created or duplicated. **Published Status:** Indicates the template is complete and available for use. Published templates appear when users select a proposal template for project assignment. Published templates can still be edited; changes are saved while maintaining Published status. Published status is set via the "Publish" action in the Proposal Builder (not in the listing). Once Published, a template cannot be reverted to Draft.
#49
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.12 Template Availability for Projects
~62 tok
### 4.12 Template Availability for Projects Only Published templates appear in the template selection interface when users are assigning proposals to projects. This ensures that incomplete or draft templates are not accidentally used with clients.
#50
**FRD #1: Proposal Listing** > **4\. Functional Logic** > 4.13 No Default Templates
~59 tok
### 4.13 No Default Templates The system does not provide any pre-built default proposal templates. All templates must be created by agency users from scratch. This ensures complete customization and brand consistency for each agency.
#51
**FRD #1: Proposal Listing** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#52
**FRD #1: Proposal Listing** > **5\. Field Details & Validations** > 5.1 Create Proposal Modal Fields
~109 tok
### 5.1 Create Proposal Modal Fields **Field Name** **Field Type** **Required** **Default Value** **Validation Rules** **Error Message** Proposal Name Text Input Yes Empty Min 1 character; Max character limit TBD; Cannot be only whitespace; Special characters allowed "Proposal name is required" Brand Dropdown Yes Auto-select if single brand; Empty if multiple Must select from available brands "Please select a brand"
#53
**FRD #1: Proposal Listing** > **5\. Field Details & Validations** > 5.2 Listing Table Display Fields
~126 tok
### 5.2 Listing Table Display Fields **Field Name** **Data Type** **Sortable** **Format** **Notes** Name String Yes Plain text; Truncate with ellipsis if >50 chars Full name on hover tooltip Status Enum Yes Badge (Draft=Yellow, Published=Green) Only two values possible Brand String Yes Text with optional avatar Shows brand name Created DateTime Yes "MMM DD, YYYY" (e.g., "Jan 24, 2025") Creation date only Actions N/A No Button + Menu Edit Template button; Three-dot menu
#54
**FRD #1: Proposal Listing** > **5\. Field Details & Validations** > 5.3 Search Field
~51 tok
### 5.3 Search Field **Field Name** **Field Type** **Required** **Validation Rules** **Notes** Search Text Input No No minimum; Performs matching on 1+ characters Case-insensitive; Partial match
#55
**FRD #1: Proposal Listing** > **5\. Field Details & Validations** > 5.4 Pagination Controls
~73 tok
### 5.4 Pagination Controls **Control** **Type** **Options** **Default** **Notes** Rows Per Page Dropdown 10, 25, 50, 100 10 Persists during session Page Navigation Buttons Previous, Next N/A Disabled at boundaries Page Indicator Display Text N/A Shows "X-Y of Z" format
#56
**FRD #1: Proposal Listing** > **6\. Success Message Handling**
~141 tok
## **6\. Success Message Handling** **Action** **Success Message** **Display Type** **Duration** **Post-Success Behavior** Create Proposal None (silent redirect) N/A N/A Redirect to Proposal Builder Duplicate Proposal "Proposal template duplicated successfully" Toast notification 3 seconds Redirect to Proposal Builder for copy Delete Proposal "Proposal template deleted successfully" Toast notification 3 seconds Listing refreshes; Template removed Copy Link (if applicable) "Link copied to clipboard" Toast notification 2 seconds None
#57
**FRD #1: Proposal Listing** > **7\. Error Message Handling**
~385 tok
## **7\. Error Message Handling** **Error Scenario** **Error Message** **Display Type** **Trigger Condition** **User Action Required** Empty Proposal Name "Proposal name is required" Inline field error Submit with empty name Enter a valid proposal name Whitespace-only Name "Proposal name is required" Inline field error Submit with only spaces Enter a valid proposal name Name Exceeds Limit "Proposal name cannot exceed \[X\] characters" Inline field error Name too long (TBD) Shorten the proposal name No Brand Selected "Please select a brand" Inline field error Submit without brand Select a brand from dropdown No Brands Available "No brands available. Please create a brand first." Inline message Agency has no brands Navigate to Brand settings Delete Failed "Unable to delete proposal. Please try again." Toast notification Server error Retry the delete action Duplicate Failed "Unable to duplicate proposal. Please try again." Toast notification Server error Retry the duplicate action Load Failed "Unable to load proposals. Please refresh the page." Inline message Server/network error Refresh the page Network Error "Connection error. Please check your internet connection." Toast notification Network failure Check connection and retry Session Expired "Your session has expired. Please log in again." Modal Auth token expired Re-authenticate Permission Denied "You don't have permission to perform this action." Toast notification Insufficient permissions Contact admin
#58
**FRD #1: Proposal Listing** > **8\. Edge Cases**
~678 tok
## **8\. Edge Cases**
**Edge Case**
**System Behavior**
User has no brands configured
Brand dropdown shows empty state with message "No brands available. Please create a brand first." Create Proposal button remains disabled. User must navigate to Brand settings to create a brand first.
Search returns no results
Display message "No proposals found matching your search criteria" with option to clear search. The "+ Create New" button remains visible in the header. This message is different from the empty state ("No Proposal found") which only appears when zero templates exist in the system.
User tries to delete while another user is editing
Allow deletion to proceed. The editing user will receive an error message "Template no longer exists" when they attempt to save.
Very long proposal name entered
Accept the input but truncate display in listing with ellipsis (...). Full name displays on hover via tooltip. Maximum character limit enforced at input (TBD).
User refreshes page during creation modal
Modal closes without saving. No template is created. User must restart the creation flow.
Concurrent duplicate by multiple users
Each user receives their own independent copy with unique ID. No conflicts occur.
Filter applied with no matching results
Display message "No proposals match the selected filters" with option to clear filters.
User's access revoked while viewing listing
On next action (click, navigation), redirect to dashboard with message "You no longer have access to this module."
Extremely large number of templates (1000+)
Pagination handles display. Consider implementing virtual scrolling or server-side pagination for performance.
User creates template with same name as existing
Allow duplicate names; templates are identified by unique ID internally. Display both in listing.
Browser back button after successful creation
Should return to listing page, not reopen modal. Template creation is already complete.
User attempts to edit template created by another user (Team Member)
Display permission error. Edit button may be hidden or disabled for templates not owned by the Team Member.
Special characters in template name
Allow special characters including: ! @ # $ % & \* ( ) - \_ = + \[ \] { } ; : ' " , . / ?
Empty listing with active filters
Show "No proposals match the selected filters" rather than the empty state message ("No Proposal found"). The empty state with "Create" button only appears when zero templates exist in the entire system, not when filters return no results.
Page number exceeds total pages
Redirect to last available page. For example, if on page 10 and templates are deleted leaving only 5 pages, redirect to page 5.#59
**FRD #1: Proposal Listing** > **9\. Acceptance Criteria**
~540 tok
## **9\. Acceptance Criteria** * **AC-PL-001:** Users with appropriate permissions can view a listing of all proposal templates displaying Name, Status, Brand, and Created columns. * **AC-PL-002:** Users can create a new proposal template by clicking "+ Create New", providing a name, and selecting a brand. * **AC-PL-003:** The system auto-selects the brand in the Create modal if the agency has only one brand configured. * **AC-PL-004:** Users can search templates by name with real-time filtering that is case-insensitive and supports partial matching. * **AC-PL-005:** Users can sort the listing by any sortable column (Name, Status, Brand, Created) in ascending or descending order. * **AC-PL-006:** Users can filter the listing by Brand and/or Status, with active filters indicated by a badge count. * **AC-PL-007:** Users can duplicate any template they have permission to access, creating a Draft copy. * **AC-PL-008:** Users with delete permission can delete templates with a confirmation prompt. * **AC-PL-009:** Deleting a Published template does not affect projects that have already used that template. * **AC-PL-010:** Pagination displays correct row counts and allows navigation between pages. * **AC-PL-011:** Users can change rows per page using the dropdown (10, 25, 50, 100 options). * **AC-PL-012:** Only Published templates are selectable when assigning proposals to projects. * **AC-PL-013:** Draft templates display with yellow badge; Published templates display with green badge. * **AC-PL-014:** Published templates cannot be reverted to Draft status. * **AC-PL-015:** The system does not provide default templates; all templates must be created by users. * **AC-PL-016:** Team Members can only edit and duplicate templates they created. * **AC-PL-017:** Empty state displays "No Proposal found" title, "Create and share proposals with clients" subtitle, proposal icon, and centered "Create" button when no templates exist. Both the centered "Create" button and the header "+ Create New" button remain functional. * **AC-PL-018:** Search and filter can be combined and work together with AND logic.
#60
**FRD #1: Proposal Listing** > **10\. Manual Test Cases**
~84 tok
## **10\. Manual Test Cases** Manual test cases for this module are provided in a separate Excel file: 📎 **File:** FRD\_01\_Proposal\_Listing\_Test\_Cases.xlsx The test cases cover: * Functional logic verification * Acceptance criteria validation * Edge case testing * Permission-based access testing * UI/UX validation
#61
**FRD #1: Proposal Listing** > **11\. Dependencies**
~6 tok
## **11\. Dependencies**
#62
**FRD #1: Proposal Listing** > **11\. Dependencies** > 11.1 Internal Dependencies
~201 tok
### 11.1 Internal Dependencies **Dependency** **Module/Feature** **Type** **Impact if Unavailable** Brands Management Brand creation and configuration Required Cannot create proposals without at least one brand. Create modal Brand dropdown will be empty. Proposal Builder Template editing interface (FRD #2) Required Cannot edit or configure template content. Edit Template and Create Proposal redirects will fail. User Authentication Login and session management Required Cannot access listing or verify permissions. Redirect to login. User Permissions Role-based access control Required Cannot determine what actions user can perform. Default to read-only or deny access. Project Management Template assignment Downstream Published templates are used when assigning to projects.
#63
**FRD #1: Proposal Listing** > **11\. Dependencies** > 11.2 External Dependencies
~115 tok
### 11.2 External Dependencies **Dependency** **Service** **Type** **Impact if Unavailable** Database Service Data persistence Required Listing cannot load. Display error state with retry option. Search Service Search indexing Optional Search functionality unavailable. Basic listing still works. Consider client-side search fallback. CDN/Asset Service Image/icon delivery Optional UI may display without icons/images. Functionality unaffected.
#64
**FRD #1: Proposal Listing** > **12\. References**
~6 tok
## **12\. References**
#65
**FRD #1: Proposal Listing** > **12\. References** > 12.1 Figma Designs
~49 tok
### 12.1 Figma Designs **Screen** **File Name** **Description** Listing Page 1-listing.png Main proposal template listing view Create Modal 2-createnew.png Create a proposal modal dialog
#66
**FRD #1: Proposal Listing** > **12\. References** > 12.2 Related FRDs
~116 tok
### 12.2 Related FRDs **FRD** **Module** **Relationship** FRD #2 Proposal Builder Edit Template action navigates to Builder FRD #3 Proposal Usage in Project Published templates used for project assignment Invoice Module FRD Invoice Templates Similar listing pattern; Text Settings inherited Packages Module FRD Package Groups Referenced in Builder for selection Brands Management FRD Brand Configuration Brand dropdown populated from this module
#67
**FRD #1: Proposal Listing** > **12\. References** > 12.3 Source Documents
~46 tok
### 12.3 Source Documents **Document** **Reference** Module Logic Explanation Proposal Module Dec 15 2025.pdf (00:35 - 02:24) Historical Context Proposal-Module-185d8b98-5a32.json
#68
**FRD #1: Proposal Listing** > **Document Revision History**
~72 tok
## **Document Revision History** **Version** **Date** **Author** **Changes** 1.1 April 17, 2026 Claude AI Empty state update, status clarification, duplicate naming 1.0 December 16, 2025 Claude AI Initial FRD creation _End of FRD #1: Proposal Listing_ ✅ 2. Proposal Builder
#69
**Functional Requirements Document**
~10 tok
# **Functional Requirements Document**
#70
**FRD #2: Proposal Builder**
~69 tok
# **FRD #2: Proposal Builder** **Document Version:** 1.1 **Created Date:** December 16, 2025 **Last Updated:** April 17, 2026 | 11:25 AM IST **Module:** Proposal Builder (Templates → Proposals → Builder) **Platform:** Pixally CRM - Agency Portal **Status:** Draft
#71
**FRD #2: Proposal Builder** > **Change Log**
~92 tok
## **Change Log** **Version** **Date** **Time** **Author** **Changes** 1.1 April 17, 2026 11:25 AM IST Claude AI (1) Added dynamic discount message preview in Builder; (2) Added reference to Contract template for multi-party signing configuration; (3) Clarified discount message format variations 1.0 December 16, 2025 \- Claude AI Initial FRD creation
#72
**FRD #2: Proposal Builder** > **Table of Contents**
~323 tok
## **Table of Contents** 1. [Module Overview](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#1-module-overview) 2. [User Roles & Permissions](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#2-user-roles--permissions) 3. [User Flow](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#3-user-flow) 4. [Functional Logic](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#4-functional-logic) 5. [Field Details & Validations](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#5-field-details--validations) 6. [Success Message Handling](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#6-success-message-handling) 7. [Error Message Handling](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#7-error-message-handling) 8. [Edge Cases](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#8-edge-cases) 9. [Acceptance Criteria](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#9-acceptance-criteria) 10. [Manual Test Cases](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#10-manual-test-cases) 11. [Dependencies](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#11-dependencies) 12. [References](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#12-references)
#73
**FRD #2: Proposal Builder** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#74
**FRD #2: Proposal Builder** > **1\. Module Overview** > 1.1 Purpose
~112 tok
### 1.1 Purpose The Proposal Builder is a comprehensive template editor that allows agency users to design and configure proposal templates within the Pixally CRM system. It provides a visual interface for adding content blocks, configuring payment terms, setting discounts, customizing appearance, and managing proposal settings. The Builder ensures that proposals sent to clients are professional, complete, and aligned with the agency's brand.
#75
**FRD #2: Proposal Builder** > **1\. Module Overview** > 1.2 Business Goals
~193 tok
### 1.2 Business Goals The Proposal Builder module aims to achieve the following business objectives: * Enable agencies to create professional, branded proposal templates without requiring technical or coding knowledge. * Provide flexible configuration options for packages, contracts, payment terms, and discounts to accommodate various business models. * Ensure consistency across proposals through reusable templates and standardized sections. * Support both immediate payment collection and scheduled payment workflows to meet diverse client needs. * Integrate seamlessly with existing modules (Packages, Contracts, Invoice) to leverage pre-configured content. * Enforce mandatory sections (Packages, Contract, Payment Terms) to ensure complete proposals.
#76
**FRD #2: Proposal Builder** > **1\. Module Overview** > 1.3 Scope
~148 tok
### 1.3 Scope This FRD covers the following functionality: * Builder interface layout with four sidebar navigation panels * Header image upload and management * Welcome Message section (optional) * Package Groups section (mandatory) * Contract section (mandatory) * Payment Terms section (mandatory) * Discount section (optional) * Thank You Message section (optional) * Text Settings panel (inherited from Invoice Builder) * Colors panel for customization * Settings panel (Payment Options, Tax, Expiration) * Preview functionality * Publish and Update workflows
#77
**FRD #2: Proposal Builder** > **1\. Module Overview** > 1.4 Out of Scope
~93 tok
### 1.4 Out of Scope The following items are not covered in this FRD: * Proposal Listing functionality (covered in FRD #1) * Proposal assignment to projects (covered in FRD #3) * Client-side proposal interaction (covered in FRD #4) * Package creation and management (covered in Packages Module FRD) * Contract template creation (covered in Contracts Module FRD)
#78
**FRD #2: Proposal Builder** > **2\. User Roles & Permissions**
~9 tok
## **2\. User Roles & Permissions**
#79
**FRD #2: Proposal Builder** > **2\. User Roles & Permissions** > 2.1 Role-Based Access Matrix
~182 tok
### 2.1 Role-Based Access Matrix **Permission** **Agency Owner** **Agency Admin** **Team Member** **Client** **Contractor** Access Builder ✅ ✅ ✅ ❌ ❌ Edit Content Sections ✅ ✅ ✅ (own templates) ❌ ❌ Configure Settings ✅ ✅ ✅ (own templates) ❌ ❌ Customize Colors ✅ ✅ ✅ (own templates) ❌ ❌ Configure Text Settings ✅ ✅ ✅ (own templates) ❌ ❌ Add Package Groups ✅ ✅ ✅ (own templates) ❌ ❌ Add Contract ✅ ✅ ✅ (own templates) ❌ ❌ Configure Payment Terms ✅ ✅ ✅ (own templates) ❌ ❌ Configure Discounts ✅ ✅ ✅ (own templates) ❌ ❌ Preview Proposal ✅ ✅ ✅ ❌ ❌ Save Template ✅ ✅ ✅ (own templates) ❌ ❌ Publish Template ✅ ✅ ❌ ❌ ❌ Update Published Template ✅ ✅ ❌ ❌ ❌
#80
**FRD #2: Proposal Builder** > **2\. User Roles & Permissions** > 2.2 Permission Notes
~92 tok
### 2.2 Permission Notes * Team Members can access and edit the Builder only for templates they have created. * Only Agency Owner and Agency Admin can publish templates or update already-published templates. * Team Members can save changes to their own Draft templates but cannot publish them. * Clients and Contractors have no access to the Proposal Builder.
#81
**FRD #2: Proposal Builder** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#82
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.1 Accessing the Proposal Builder
~98 tok
### 3.1 Accessing the Proposal Builder 1. User creates a new proposal from the listing (FRD #1) OR clicks "Edit Template" on an existing proposal. 2. System loads the Proposal Builder interface. 3. System displays the template content in the main area. 4. System shows the left sidebar with four navigation icons. 5. Builder icon (1st) is selected by default, showing the content editor.
#83
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.2 Adding a Header Image
~89 tok
### 3.2 Adding a Header Image 1. User views the header image placeholder at the top of the content area. 2. User clicks "Edit" button on the placeholder. 3. System opens file upload dialog. 4. User selects an image file (JPG, PNG, GIF, or WebP). 5. System uploads and displays the image. 6. User can click "X" to remove the header image if needed.
#84
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.3 Adding a Welcome Message
~118 tok
### 3.3 Adding a Welcome Message 1. User locates the Welcome Message section in the Builder. 2. User clicks "+ Add Custom Welcome Message" button. 3. System displays the Welcome Message popup modal. 4. User enters a Title in the text field. 5. User enters Message Text in the rich text area. 6. User clicks "Save Message" button. 7. System closes the popup and displays the welcome message in the section. 8. User can delete the message by clicking the trash icon.
#85
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.4 Adding Package Groups
~160 tok
### 3.4 Adding Package Groups 1. User locates the Package Groups section (mandatory). 2. User clicks "+ Add Package Group" button. 3. System displays the "Add Package Group(s)" popup modal. 4. System shows list of published package groups filtered by the proposal's brand. 5. User selects one or more package groups using checkboxes. 6. User clicks "Add to Proposal" button. 7. System closes the popup and displays selected groups in the section. 8. User can customize the Group Heading text for each group. 9. User can expand groups to view packages and A La Carte items. 10. User can delete groups by clicking the trash icon.
#86
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.5 Adding a Contract
~116 tok
### 3.5 Adding a Contract 1. User locates the Contract section (mandatory). 2. User clicks "+ Add From Template" button. 3. System displays popup with published contract templates for the brand. 4. User selects exactly one contract template (single selection only). 5. User clicks "Add to Proposal" or similar confirmation. 6. System closes the popup and displays the selected contract. 7. User can preview the contract or delete and select a different one.
#87
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.6 Configuring Payment Terms
~227 tok
### 3.6 Configuring Payment Terms 1. User locates the Payment Terms section (mandatory). 2. User sees the payment terms table with columns: Amount, Due Date, Payment Date, Payment ID, Status. 3. User clicks "+ Add Payment" to add a payment milestone. 4. System displays the "Set Payment Terms" popup. 5. User selects Date Type (Smart Date or Fixed Date - inherited from Invoice module). 6. For Smart Date, user configures: Number, Unit (Days/Weeks/Months), Timing (before/after project date). 7. User selects Payment Type: Custom, Percentage, or Equal Payment. 8. User enters the amount or percentage as required. 9. User clicks "Save" to add the payment term. 10. System adds the row to the payment terms table. 11. User can add multiple payment terms. 12. User can click "Save as Preset" to save the configuration for reuse. 13. User can click "Apply Preset" to load a previously saved preset.
#88
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.7 Enabling and Configuring Discounts
~140 tok
### 3.7 Enabling and Configuring Discounts
1. User locates the Discount section (optional).
2. User toggles the Discount switch to ON.
3. System displays discount configuration options.
4. User selects discount type: Bundle Discount or Regular Discount.
5. For Bundle Discount (only available with 2+ package groups):
* User selects apply scope: "Packages only" OR "Packages and A La Carte items"
6. User selects value type: Flat ($) or Percentage (%).
7. User enters the discount value.
8. System validates the discount does not exceed limits.#89
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.8 Adding a Thank You Message
~81 tok
### 3.8 Adding a Thank You Message 1. User locates the Thank You Message section (optional). 2. User clicks to add a thank you message. 3. System displays popup similar to Welcome Message. 4. User enters Title and Message Text. 5. User clicks "Save Message". 6. System displays the thank you message in the section.
#90
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.9 Configuring Settings (4th Sidebar Icon)
~168 tok
### 3.9 Configuring Settings (4th Sidebar Icon)
1. User clicks the Settings icon (4th) in the left sidebar.
2. System displays the Settings panel.
3. User configures Payment Options by selecting Credit Card and/or ACH Payment.
4. User configures Frequency (One-Time; other options TBD).
5. User configures Tax Details:
* Selects "Auto-Calculate Sales Tax" (Stripe integration) OR
* Selects "Manual Sales Tax" and enters percentage amount.
6. User configures Expiration Date:
* Toggles "Turn On File Expiration" to ON.
* Enters expiration duration number.
* Selects unit: Days, Weeks, or Months.
7. User clicks "Save" to apply settings.#91
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.10 Customizing Colors (3rd Sidebar Icon)
~113 tok
### 3.10 Customizing Colors (3rd Sidebar Icon) 1. User clicks the Colors icon (3rd) in the left sidebar. 2. System displays the Colors panel. 3. User customizes Body colors: Text Color, Input Border, Input Background. 4. User customizes Button colors: Button Text, Button Color. 5. User customizes Background Color. 6. Alternatively, user checks "Use Brand Colors" to apply brand color scheme. 7. Changes are applied in real-time to the preview.
#92
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.11 Configuring Text Settings (2nd Sidebar Icon)
~78 tok
### 3.11 Configuring Text Settings (2nd Sidebar Icon) 1. User clicks the Text Settings icon (2nd) in the left sidebar. 2. System displays the Text Settings panel (same as Invoice Builder). 3. User configures font family, sizes, and other typography options. 4. Changes are applied to proposal text elements.
#93
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.12 Previewing the Proposal
~78 tok
### 3.12 Previewing the Proposal 1. User clicks "Preview" button in the header. 2. System opens a preview modal or new tab. 3. Preview displays the proposal exactly as clients will see it. 4. User can toggle between desktop and mobile preview using device icons. 5. User closes preview to return to editing.
#94
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.13 Publishing a Template
~96 tok
### 3.13 Publishing a Template 1. User completes all mandatory sections (Packages, Contract, Payment Terms). 2. User clicks "Publish" button in the header. 3. System validates all mandatory sections are complete. 4. If validation passes, system changes status from Draft to Published. 5. System displays success message. 6. Template is now available for assignment to projects.
#95
**FRD #2: Proposal Builder** > **3\. User Flow** > 3.14 Updating a Published Template
~86 tok
### 3.14 Updating a Published Template 1. User opens a Published template in the Builder. 2. User sees "Update" button instead of "Publish". 3. User makes desired changes. 4. User clicks "Update" button. 5. System saves changes while maintaining Published status. 6. Existing project proposals are not affected (they retain snapshots).
#96
**FRD #2: Proposal Builder** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#97
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.1 Builder Interface Structure
~9 tok
### 4.1 Builder Interface Structure
#98
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.1 Builder Interface Structure > **4.1.1 Left Sidebar Navigation**
~231 tok
#### **4.1.1 Left Sidebar Navigation** The left sidebar contains four icon buttons arranged vertically for accessing different configuration panels: **Icon 1 - Builder (Default):** Main proposal content editor. This panel displays all content sections where users add packages, contracts, messages, etc. This is the default view when entering the Builder. **Icon 2 - Text Settings:** Typography configuration panel. This panel inherits its design and functionality from the Invoice Builder module. Users can configure font family, font sizes, and other text styling options. **Icon 3 - Colors:** Color scheme customization panel. Users can customize colors for body text, inputs, buttons, and background. A "Use Brand Colors" option allows automatic application of brand colors. **Icon 4 - Settings:** Proposal settings panel. Contains configuration for payment options, tax calculation, and expiration date settings.
#99
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.1 Builder Interface Structure > **4.1.2 Header Area**
~119 tok
#### **4.1.2 Header Area** The header area displays the proposal template name with status badge (Draft shown as yellow badge, Published shown as green badge). A back arrow (←) returns to the Proposal Listing page. Device preview icons allow toggling between desktop and mobile preview modes. The "Preview" button opens a full preview of the proposal. The "Publish" button (yellow) publishes a Draft template. For already-published templates, "Update" button appears instead.
#100
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.2 Content Sections
~6 tok
### 4.2 Content Sections
#101
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.2 Content Sections > **4.2.1 Section Order**
~83 tok
#### **4.2.1 Section Order** Content sections display in a fixed order and cannot be reordered. The down-arrow icons between sections are visual separators only, not reordering controls. The fixed order is: Header Image → Proposal Title → Welcome Message → Package Groups → Contract → Payment Terms → Discount → Thank You Message.
#102
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.2 Content Sections > **4.2.2 Mandatory vs Optional Sections**
~107 tok
#### **4.2.2 Mandatory vs Optional Sections** **Section** **Required** **Notes** Header Image No Optional branding element Welcome Message No Optional introduction Package Groups **Yes** At least one group required Contract **Yes** Exactly one contract required Payment Terms **Yes** At least one payment term required Discount No Optional pricing adjustment Thank You Message No Optional closing message
#103
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.3 Header Image Section
~106 tok
### 4.3 Header Image Section The header image section displays at the top of the proposal content. A placeholder is shown when no image is uploaded. The "Edit" button opens a file upload dialog. Supported image formats are JPG, PNG, GIF, and WebP. Maximum file size is 5MB (or as configured). The "X" button removes the uploaded image and reverts to placeholder. Recommended dimensions should be displayed to guide users.
#104
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.4 Welcome Message Section
~183 tok
### 4.4 Welcome Message Section This section displays instructional helper text: "Add a welcome message for your client on what to expect during the proposal process." Clicking "+ Add Custom Welcome Message" opens the Welcome Message popup. **Welcome Message Popup:** * Modal title: "Welcome Message" * Title field: Text input with placeholder "Welcome Message" * Message Text field: Rich text area for the message body * Cancel button: Closes without saving * Save Message button (yellow): Saves and closes The section is optional, but if the user chooses to add it, both Title and Message Text fields become mandatory. Once saved, the welcome message displays in the section with a delete (trash) icon to remove it.
#105
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.5 Package Groups Section
~399 tok
### 4.5 Package Groups Section This section displays instructional helper text: "Specify which package(s) groups your client can choose from during the proposal." This is a mandatory section; at least one package group must be added before publishing. **Add Package Group(s) Popup:** * Modal title: "Add Package Group(s)" * List of published package groups filtered by the proposal's brand * Each row shows: Checkbox, Package group name, Package count (e.g., "3 packages") * Multi-select is allowed; users can select multiple groups * Cancel button: Closes without adding * Add to Proposal button (yellow): Adds selected groups **Package Group Display in Builder:** * Each added group displays in a collapsible card * Card shows: Group heading (editable text input), Package group name, Package count, Preview icon (eye), Delete icon (trash) * Group heading defaults to a descriptive text like "Choose a Photo/Video Package" and can be customized * Expanding the group reveals package cards displayed horizontally * Each package card shows: Service type badges, Package name, Description, Event sections with line items, Price * Below packages, A La Carte Items display as chips showing item names and prices * Users cannot edit package content within the Builder; edits must be made in the Packages module **Package Selection Rules:** * Users can add multiple package groups from different groups * Only published package groups appear in the selection * Groups are sorted with newest created first * Scrolling is enabled for long lists (not pagination)
#106
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.6 Contract Section
~315 tok
### 4.6 Contract Section This section displays instructional helper text: "Add a contract template for clients to review and sign." This is a mandatory section; exactly one contract must be selected. **Contract Selection Popup:** * Similar format to package group selection * Lists published contract templates for the proposal's brand * Single selection only (radio buttons or single-select behavior) * Cancel and confirmation buttons **Contract Display in Builder:** * Selected contract displays with contract name * Preview icon (eye) to view contract content * Delete icon (trash) to remove and select a different contract * Only one contract can be attached per proposal **Multi-Party Signing Note:** Multi-party signing configuration (multiple signers, mandatory signatures) is managed in the **Contract Template** itself, not in the Proposal Builder. When a contract template with multi-party signing is selected: * The proposal inherits the signing configuration from the contract * All configured signers will be required to sign during client-side completion (FRD #4) * Agency countersign configuration is also inherited from the contract template * See Contract Module FRD for details on configuring multi-party signing
#107
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.7 Payment Terms Section
~429 tok
### 4.7 Payment Terms Section This section displays instructional helper text: "Specify when and how you will be paid." This is a mandatory section; at least one payment term must be configured. **Payment Terms Table:** * Columns: Amount, Due Date, Payment Date, Payment ID, Status * Initial state shows placeholder row with $0.00 * "+ Add Payment" button adds new payment milestones * "Save as Preset" button saves current configuration as a reusable preset * "Apply Preset" dropdown loads a previously saved preset **Set Payment Terms Popup:** _Date Type Selection:_ * Dropdown with options: Smart Date, Fixed Date (inherited from Invoice module) _Smart Date Configuration (when Smart Date selected):_ * Number input field (e.g., "4") * Unit dropdown: Days, Weeks, Months * Timing dropdown: "before project date", "after project date", "after booking date" _Fixed Date Configuration (when Fixed Date selected):_ * Date picker for selecting specific calendar date _Payment Type Selection (Tabs):_ * Custom: User enters a fixed dollar amount. Info text: "Total custom payments can be up to $\[total\]" * Percentage: User enters a percentage value. Info text: "The percentage amount takes proportional part of your full payment" * Equal Payment: No amount field needed; system auto-divides remaining balance equally among Equal Payment terms _Buttons:_ * Cancel: Closes without saving * Save (yellow): Saves the payment term **Payment Terms Validation:** * Sum of all payment term amounts must equal the proposal total * System validates and warns if amounts don't match * Percentage values must be between 1-100 * Custom amounts cannot exceed remaining balance
#108
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.8 Discount Section
~489 tok
### 4.8 Discount Section
This section is optional. A toggle switch enables/disables the discount. When disabled, the section is collapsed and inactive.
**Discount Types:**
_Bundle Discount:_
* Only available when 2+ package groups are added to the proposal
* If only one package group exists, Bundle Discount option is hidden or disabled with tooltip
* Apply scope options:
* "Packages only" - discount applies only to package prices
* "Packages and A La Carte items" - discount applies to packages plus add-ons
* Value type: Flat ($) or Percentage (%)
_Regular Discount:_
* Available regardless of package group count
* Applies to the entire invoice without conditions
* Value type: Flat ($) or Percentage (%)
**Discount Validation:**
* Percentage cannot exceed 100%
* Flat amount cannot exceed the subtotal (invoice cannot go negative)
* System displays error if discount exceeds limits
**Calculation Order:** The discount is applied before tax calculation: (Subtotal - Discount) + Tax = Total
**Dynamic Discount Message Preview:**
The Builder preview displays a yellow/cream info banner showing the discount configuration that clients will see:
**Discount Type**
**Application Scope**
**Preview Message**
Bundle
Percentage + Packages only
"10% Discount applied to packages only"
Bundle
Percentage + Both
"10% Discount applied to packages and a la carte"
Bundle
Flat + Packages only
"$50 Discount applied to packages only"
Bundle
Flat + Both
"$50 Discount applied to packages and a la carte"
Regular
Percentage + Packages only
"10% Discount applied to packages only"
Regular
Percentage + Both
"10% Discount applied to packages and a la carte"
Regular
Flat + Packages only
"$50 Discount applied to packages only"
Regular
Flat + Both
"$50 Discount applied to packages and a la carte"
This message appears in the Price Summary section of the preview and in the client-side view (FRD #4).#109
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.9 Thank You Message Section
~85 tok
### 4.9 Thank You Message Section This section displays instructional helper text: "Instructions for what's next after booking is complete." The section is optional. Clicking opens a popup identical to Welcome Message format with Title and Message Text fields. If added, both fields are mandatory. Once saved, displays with delete option.
#110
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.10 Settings Panel (4th Sidebar Icon)
~11 tok
### 4.10 Settings Panel (4th Sidebar Icon)
#111
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.10 Settings Panel (4th Sidebar Icon) > **4.10.1 Payment Options Configuration**
~103 tok
#### **4.10.1 Payment Options Configuration** **Set Payment Options Header** Payment Options dropdown/checkboxes: * Credit Card (checkbox) * ACH Payment (checkbox) * At least one option must be selected * Both can be selected to offer clients a choice **Frequency Setting:** * Dropdown with "One-Time" as the current option * Other options: TBD (may include recurring payment options in future)
#112
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.10 Settings Panel (4th Sidebar Icon) > **4.10.2 Tax Details Configuration**
~175 tok
#### **4.10.2 Tax Details Configuration** **Add Tax Details Header** Radio button options: * **Auto-Calculate Sales Tax (Default):** Uses Stripe's tax calculation integration based on client's location. Info tooltip: "Enable this to automatically calculate sales tax using Stripe's integration, based on the client's location. Pixally relies on Stripe for accuracy and is not liable for errors — consult your accountant if unsure." * **Manual Sales Tax:** When selected, displays "Percentage Amount" input field for user to enter a fixed tax rate. Tax is applied only to line items marked as "Taxable" in the package configuration. This respects the taxable settings from the Packages module.
#113
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.10 Settings Panel (4th Sidebar Icon) > **4.10.3 Expiration Date Configuration**
~163 tok
#### **4.10.3 Expiration Date Configuration** **Set Expiration Date Header** "Turn On File Expiration" toggle switch: * When OFF: No expiration; proposal remains valid indefinitely * When ON: Displays expiration configuration fields Expiration Configuration: * "Expires in" label * Number input field (e.g., "10") * Unit dropdown: Days, Weeks, Months * Calculated expiration date displays below (e.g., "Expiration date: June 30, 2025") **Important:** The expiration date shown in the Builder is a placeholder. The actual expiration is calculated from the date the proposal is sent to each client, not from the template creation date.
#114
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.10 Settings Panel (4th Sidebar Icon) > **4.10.4 Save Button**
~25 tok
#### **4.10.4 Save Button** Yellow "Save" button at the bottom saves all settings configurations.
#115
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.11 Colors Panel (3rd Sidebar Icon)
~10 tok
### 4.11 Colors Panel (3rd Sidebar Icon)
#116
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.11 Colors Panel (3rd Sidebar Icon) > **4.11.1 Body Colors Section**
~56 tok
#### **4.11.1 Body Colors Section** * **Text Color:** Color picker for main body text * **Input Border:** Color picker for form input field borders * **Input Background:** Color picker for form input field backgrounds
#117
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.11 Colors Panel (3rd Sidebar Icon) > **4.11.2 Button Colors Section**
~38 tok
#### **4.11.2 Button Colors Section** * **Button Text:** Color picker for button label text * **Button Color:** Color picker for button background
#118
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.11 Colors Panel (3rd Sidebar Icon) > **4.11.3 Background Section**
~27 tok
#### **4.11.3 Background Section** * **Background Color:** Color picker for overall proposal background
#119
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.11 Colors Panel (3rd Sidebar Icon) > **4.11.4 Brand Colors Option**
~61 tok
#### **4.11.4 Brand Colors Option** * **Use Brand Colors:** Checkbox to apply the brand's predefined color scheme * When checked, individual color pickers are disabled * Brand colors from Brand Management module are applied automatically
#120
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.12 Text Settings Panel (2nd Sidebar Icon)
~100 tok
### 4.12 Text Settings Panel (2nd Sidebar Icon) The Text Settings panel inherits its structure and functionality from the Invoice Builder module. It provides typography configuration options including font family selection, font size settings for different text elements (headings, body, labels), and other text styling options. Refer to the Invoice Builder FRD for complete details on this panel.
#121
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.13 Preview Functionality
~104 tok
### 4.13 Preview Functionality Clicking the "Preview" button opens a preview of the proposal. The preview shows the proposal exactly as clients will see it, with all styling, colors, and content applied. Device toggle icons in the header allow switching between desktop and mobile preview modes. The preview reflects all current configurations including unsaved changes. Preview can be closed to return to editing.
#122
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.14 Publish Logic
~138 tok
### 4.14 Publish Logic The "Publish" button is only enabled when all mandatory sections are complete: * At least one Package Group is added * One Contract template is selected * At least one Payment Term is configured Clicking "Publish" performs validation of all mandatory sections. If validation passes, the template status changes from Draft to Published. A success message confirms the publication. The template becomes available for selection when assigning proposals to projects. Published templates cannot be reverted to Draft status.
#123
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.15 Update Logic
~89 tok
### 4.15 Update Logic For templates that are already Published, the "Publish" button is replaced with "Update". Clicking "Update" saves all changes while maintaining the Published status. Existing project proposals that used this template are not affected; they retain their snapshot copy from the time of assignment. A success message confirms the update.
#124
**FRD #2: Proposal Builder** > **4\. Functional Logic** > 4.16 Auto-Save Behavior
~77 tok
### 4.16 Auto-Save Behavior Changes in the Builder are not automatically saved. Users must explicitly save or publish changes. If the user navigates away without saving, unsaved changes are lost. A confirmation prompt should warn users about unsaved changes before navigation. (Implementation detail: TBD)
#125
**FRD #2: Proposal Builder** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#126
**FRD #2: Proposal Builder** > **5\. Field Details & Validations** > 5.1 Welcome/Thank You Message Fields
~88 tok
### 5.1 Welcome/Thank You Message Fields **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Title Text Input Yes (if section added) Min 1 character; Max TBD (follow existing modules) "Title is required" Message Text Rich Text Area Yes (if section added) Min 1 character; Max TBD "Message text is required"
#127
**FRD #2: Proposal Builder** > **5\. Field Details & Validations** > 5.2 Package Group Configuration
~86 tok
### 5.2 Package Group Configuration **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Package Group Selection Multi-checkbox Yes (at least one) Must select at least one published group "Please add at least one package group" Group Heading Text Input No Editable; defaults to descriptive text N/A
#128
**FRD #2: Proposal Builder** > **5\. Field Details & Validations** > 5.3 Contract Selection
~58 tok
### 5.3 Contract Selection **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Contract Template Single-select Yes Must select exactly one published contract "Please add a contract template"
#129
**FRD #2: Proposal Builder** > **5\. Field Details & Validations** > 5.4 Payment Terms Fields
~225 tok
### 5.4 Payment Terms Fields **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Date Type Dropdown Yes Must select Smart Date or Fixed Date "Please select a date type" Duration Number Number Input Yes (Smart Date) Positive integer, 1-365 "Please enter a valid number" Duration Unit Dropdown Yes (Smart Date) Days, Weeks, or Months "Please select a unit" Timing Dropdown Yes (Smart Date) before/after project date, after booking date "Please select timing" Fixed Date Date Picker Yes (Fixed Date) Must be valid date "Please select a date" Payment Type Tab Selection Yes Custom, Percentage, or Equal Payment N/A Custom Amount Currency Input Yes (if Custom) Positive number; ≤ remaining balance "Amount exceeds remaining balance" Percentage Amount Number Input Yes (if Percentage) 1-100 "Percentage must be between 1 and 100"
#130
**FRD #2: Proposal Builder** > **5\. Field Details & Validations** > 5.5 Discount Fields
~170 tok
### 5.5 Discount Fields **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Discount Toggle Toggle Switch No Enables/disables discount N/A Discount Type Radio Buttons Yes (if enabled) Bundle Discount or Regular Discount "Please select discount type" Apply To Radio Buttons Yes (Bundle only) Packages only OR Packages + A La Carte "Please select application scope" Value Type Toggle Yes (if enabled) Flat ($) or Percentage (%) N/A Flat Amount Currency Input Yes (if Flat) Positive; ≤ subtotal "Discount cannot exceed subtotal" Percentage Value Number Input Yes (if Percentage) 1-100 "Percentage cannot exceed 100%"
#131
**FRD #2: Proposal Builder** > **5\. Field Details & Validations** > 5.6 Settings Panel Fields
~181 tok
### 5.6 Settings Panel Fields **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Payment Options Multi-checkbox Yes At least one selected "Please select at least one payment option" Frequency Dropdown Yes Default: One-Time; Options TBD N/A Tax Calculation Radio Buttons Yes Auto-Calculate or Manual N/A Manual Tax Rate Number Input Yes (if Manual) 0-100 percentage "Tax rate must be between 0 and 100" Expiration Toggle Toggle Switch No Enables/disables expiration N/A Expiration Number Number Input Yes (if enabled) Positive integer "Please enter a valid number" Expiration Unit Dropdown Yes (if enabled) Days, Weeks, or Months "Please select a unit"
#132
**FRD #2: Proposal Builder** > **5\. Field Details & Validations** > 5.7 Color Settings Fields
~109 tok
### 5.7 Color Settings Fields **Field Name** **Field Type** **Required** **Default Value** Text Color Color Picker No #000000 (Black) Input Border Color Picker No #CCCCCC (Gray) Input Background Color Picker No #FFFFFF (White) Button Text Color Picker No #000000 (Black) Button Color Color Picker No #F5C518 (Yellow) Background Color Color Picker No #FFFFFF (White) Use Brand Colors Checkbox No Unchecked
#133
**FRD #2: Proposal Builder** > **5\. Field Details & Validations** > 5.8 Header Image
~64 tok
### 5.8 Header Image **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Header Image File Upload No Formats: JPG, PNG, GIF, WebP; Max size: 5MB "Image must be JPG, PNG, GIF, or WebP" / "Image size must be under 5MB"
#134
**FRD #2: Proposal Builder** > **6\. Success Message Handling**
~379 tok
## **6\. Success Message Handling** **Action** **Success Message** **Display Type** **Duration** **Post-Success Behavior** Add Package Group(s) None (UI updates immediately) N/A N/A Popup closes; groups appear in section Add Contract None (UI updates immediately) N/A N/A Popup closes; contract appears in section Save Welcome Message None (UI updates immediately) N/A N/A Popup closes; message displays in section Save Thank You Message None (UI updates immediately) N/A N/A Popup closes; message displays in section Save Payment Term None (UI updates immediately) N/A N/A Popup closes; row added/updated in table Delete Item (any section) None (UI updates immediately) N/A N/A Item removed from section Save Settings "Settings saved successfully" Toast notification 3 seconds Settings panel remains open Save Colors None (UI updates immediately) N/A N/A Colors applied to preview Save as Preset (Payment) "Payment preset saved successfully" Toast notification 3 seconds Preset available in Apply Preset dropdown Apply Preset None (UI updates immediately) N/A N/A Payment terms populated from preset Upload Header Image None (UI updates immediately) N/A N/A Image displays in header area Publish Template "Proposal template published successfully" Toast notification 3 seconds Status badge changes to Published (green) Update Template "Proposal template updated successfully" Toast notification 3 seconds Changes saved; status remains Published
#135
**FRD #2: Proposal Builder** > **7\. Error Message Handling**
~654 tok
## **7\. Error Message Handling** **Error Scenario** **Error Message** **Display Type** **Trigger Condition** **User Action Required** Publish without Packages "Please add at least one package group to publish this proposal." Toast/Inline Publish clicked with no packages Add package group Publish without Contract "Please add a contract template to publish this proposal." Toast/Inline Publish clicked with no contract Add contract template Publish without Payment Terms "Please configure at least one payment term to publish this proposal." Toast/Inline Publish clicked with no payments Configure payment terms Discount exceeds subtotal "Discount amount cannot exceed the invoice subtotal." Inline field error Flat discount > subtotal Reduce discount amount Percentage over 100 "Percentage cannot exceed 100%." Inline field error Percentage > 100 entered Enter valid percentage (1-100) Payment terms mismatch "Payment terms total must equal the invoice amount. Current total: $X, Required: $Y" Toast notification Sum of payments ≠ invoice total Adjust payment amounts No payment option selected "Please select at least one payment option." Inline error All payment options unchecked Select Credit Card or ACH Invalid expiration number "Please enter a valid expiration duration." Inline field error Non-numeric or negative value Enter positive number Header image too large "Image file size must be under 5MB." Toast notification File > 5MB uploaded Upload smaller image Unsupported image format "Please upload a JPG, PNG, GIF, or WebP image." Toast notification Unsupported format uploaded Upload supported format No published packages available "No published package groups available for this brand. Please create and publish a package group first." Inline in popup No packages exist for brand Create packages in Packages module No published contracts available "No published contract templates available for this brand. Please create and publish a contract template first." Inline in popup No contracts exist for brand Create contract in Contracts module Welcome/Thank You Title empty "Title is required" Inline field error Save clicked with empty title Enter a title Welcome/Thank You Message empty "Message text is required" Inline field error Save clicked with empty message Enter message text Network/Save error "Unable to save changes. Please try again." Toast notification Server error during save Retry save action Session expired "Your session has expired. Please log in again." Modal Auth token expired Re-authenticate
#136
**FRD #2: Proposal Builder** > **8\. Edge Cases**
~690 tok
## **8\. Edge Cases** **Edge Case** **System Behavior** No published package groups exist for brand Package selection popup shows message "No published package groups available. Please create and publish a package group first." User cannot add packages until groups exist in Packages module. No published contract templates exist for brand Contract selection popup shows message "No published contract templates available. Please create and publish a contract template first." User cannot add contract until templates exist. User removes all package groups after adding Publish/Update button becomes disabled. Validation error shown if user attempts to publish. Bundle Discount selected with only one package group System hides Bundle Discount option OR shows tooltip "Bundle discount requires selecting packages from 2+ package groups." User must add more groups or select Regular Discount. User enables discount then disables it Discount values are cleared. Section collapses. No discount applied to calculations. Equal Payment selected with $0 invoice total System prevents saving with message "Cannot configure equal payments with $0 total." User must add priced packages first. Browser closes during editing Unsaved changes are lost. Template retains last explicitly saved state. Two users edit same template simultaneously Last save wins. No merge or conflict resolution. Second user's save overwrites first user's changes. Very large number of package groups (50+) Scrolling enabled in selection popup. Performance may degrade; consider lazy loading. Payment preset applied then manually edited Preset is "unapplied"; configuration treated as custom. Preset dropdown resets to none. User tries to add same package group twice System prevents duplicate selection. Already-added groups shown as disabled or selected in popup. Discount makes payment terms invalid If discount is increased after payment terms are set, validation error appears indicating mismatch. User must adjust payments or discount. Expiration set to 0 Validation error: "Expiration must be at least 1 \[unit\]." Very long group heading entered Text truncates in display with ellipsis. Full text visible on edit. All payment terms deleted Publish button disabled. Validation requires at least one payment term. User unchecks all package groups in popup "Add to Proposal" button disabled. At least one must be selected. Color picker value invalid System rejects invalid hex codes. Reverts to previous valid color. Manual tax rate entered as negative Validation error: "Tax rate must be between 0 and 100." User navigates away with unsaved changes Confirmation prompt: "You have unsaved changes. Are you sure you want to leave?" (TBD implementation)
#137
**FRD #2: Proposal Builder** > **9\. Acceptance Criteria**
~743 tok
## **9\. Acceptance Criteria** * **AC-PB-001:** Users can access the Proposal Builder with four sidebar navigation options (Builder, Text Settings, Colors, Settings). * **AC-PB-002:** Users can upload a custom header image in JPG, PNG, GIF, or WebP format up to 5MB. * **AC-PB-003:** Users can remove an uploaded header image and revert to placeholder. * **AC-PB-004:** Users can add an optional Welcome Message with Title and Message Text fields; both are mandatory if section is added. * **AC-PB-005:** Users can add multiple Package Groups from published groups filtered by the proposal's brand. * **AC-PB-006:** Users can customize the Group Heading text for each package group. * **AC-PB-007:** Users can add exactly one Contract template from published contracts for the brand. * **AC-PB-008:** Users can configure Payment Terms with Smart Date or Fixed Date options (inherited from Invoice module). * **AC-PB-009:** Payment Terms support Custom (fixed amount), Percentage, and Equal Payment types. * **AC-PB-010:** Users can save Payment Term configurations as presets and apply saved presets. * **AC-PB-011:** Users can enable Discount section with Bundle Discount or Regular Discount types. * **AC-PB-012:** Bundle Discount option is only available when 2+ package groups are added. * **AC-PB-013:** Discount validation prevents percentage >100% and amounts exceeding subtotal. * **AC-PB-014:** Users can add an optional Thank You Message with Title and Message Text fields. * **AC-PB-015:** Users can configure Payment Options (Credit Card, ACH, or both) in Settings. * **AC-PB-016:** Users can set Tax calculation method (Auto via Stripe or Manual percentage). * **AC-PB-017:** Auto tax calculation applies only to line items marked as Taxable in packages. * **AC-PB-018:** Users can enable and configure Proposal Expiration (number + days/weeks/months). * **AC-PB-019:** Expiration is calculated from proposal send date, not template creation date. * **AC-PB-020:** Users can customize colors for body, buttons, and background in Colors panel. * **AC-PB-021:** "Use Brand Colors" checkbox applies brand color scheme and disables individual pickers. * **AC-PB-022:** Text Settings panel matches Invoice Builder functionality. * **AC-PB-023:** Preview function shows proposal exactly as clients will see it. * **AC-PB-024:** Preview supports desktop and mobile view modes. * **AC-PB-025:** Publish button is only enabled when all mandatory sections are complete. * **AC-PB-026:** Publishing changes template status from Draft to Published. * **AC-PB-027:** Published templates cannot be reverted to Draft status. * **AC-PB-028:** Updating a Published template saves changes without affecting existing project proposals. * **AC-PB-029:** Section order is fixed and cannot be reordered (visual separators only). * **AC-PB-030:** Package content cannot be edited within Builder; must use Packages module.
#138
**FRD #2: Proposal Builder** > **10\. Manual Test Cases**
~129 tok
## **10\. Manual Test Cases** Manual test cases for this module are provided in a separate Excel file: 📎 **File:** FRD\_02\_Proposal\_Builder\_Test\_Cases.xlsx The test cases cover: * Builder interface and navigation * All content section functionality * Settings panel configuration * Colors panel customization * Payment terms configuration * Discount logic and validation * Publish and Update workflows * All acceptance criteria validation * Edge case testing * Permission-based scenarios
#139
**FRD #2: Proposal Builder** > **11\. Dependencies**
~6 tok
## **11\. Dependencies**
#140
**FRD #2: Proposal Builder** > **11\. Dependencies** > 11.1 Internal Dependencies
~186 tok
### 11.1 Internal Dependencies **Dependency** **Module/Feature** **Type** **Impact if Unavailable** Proposal Listing Template list and creation Required Cannot access Builder without creating/selecting template Packages Module Package groups and items Required Cannot add packages; mandatory section incomplete Contracts Module Contract templates Required Cannot add contract; mandatory section incomplete Invoice Module Payment terms logic, presets, text settings Required Payment terms and text settings unavailable Brands Management Brand configuration and colors Required Cannot filter by brand; brand colors unavailable User Authentication Session management Required Cannot save changes or verify permissions
#141
**FRD #2: Proposal Builder** > **11\. Dependencies** > 11.2 External Dependencies
~105 tok
### 11.2 External Dependencies **Dependency** **Service** **Type** **Impact if Unavailable** Stripe API Tax calculation Optional Auto tax calculation fails; must use manual rate Image Upload Service CDN/Storage Required Cannot upload header images Database Service Data persistence Required Cannot save template configurations File Storage Preset storage Required Cannot save or load payment presets
#142
**FRD #2: Proposal Builder** > **12\. References**
~6 tok
## **12\. References**
#143
**FRD #2: Proposal Builder** > **12\. References** > 12.1 Figma Designs
~190 tok
### 12.1 Figma Designs **Screen** **File Name** **Description** Builder Main View 3-builderstep1.png Main builder interface with sidebar Package Groups 3-builderstep2.png, 3-builderstep2-1.png Package section display All Sections 3-builderstep3.png - 3-builderstep3-3.png Complete builder with all sections Settings Panel 4-builderstngstep1.png series Settings configuration Colors Panel 4-builderstngstep2.png Color customization Edit Mode Header 4-builderstngstep2-1.png Update button for published templates Welcome Message Popup 5-builderpopup.png Message entry modal Package Selection Popup 5-builderpopup1.png Package group selection Payment Terms Popups 5-builderpopup2.png - 5-builderpopup4.png Payment configuration modals
#144
**FRD #2: Proposal Builder** > **12\. References** > 12.2 Related FRDs
~115 tok
### 12.2 Related FRDs **FRD** **Module** **Relationship** FRD #1 Proposal Listing Entry point to Builder FRD #3 Proposal Usage in Project Published templates used here FRD #4 Client-Side Interaction What clients see from Builder configuration Invoice Module FRD Invoice Templates Payment terms, text settings inherited Packages Module FRD Package Groups Package content source Contracts Module FRD Contract Templates Contract content source
#145
**FRD #2: Proposal Builder** > **12\. References** > 12.3 Source Documents
~46 tok
### 12.3 Source Documents **Document** **Reference** Module Logic Explanation Proposal Module Dec 15 2025.pdf (02:24 - 19:20) Historical Context Proposal-Module-185d8b98-5a32.json
#146
**FRD #2: Proposal Builder** > **Document Revision History**
~73 tok
## **Document Revision History** **Version** **Date** **Author** **Changes** 1.1 April 17, 2026 Claude AI Discount message preview, multi-party signing reference 1.0 December 16, 2025 Claude AI Initial FRD creation _End of FRD #2: Proposal Builder_ ✅ 3. Proposal Usage in Project
#147
**Functional Requirements Document**
~10 tok
# **Functional Requirements Document**
#148
**FRD #3: Proposal Usage in Project**
~75 tok
# **FRD #3: Proposal Usage in Project** **Document Version:** 1.6 **Created Date:** December 16, 2025 **Last Updated:** April 17, 2026 | 04:45 PM IST **Module:** Proposal Usage in Project (Projects → Project Details → Proposal) **Platform:** Pixally CRM - Agency Portal **Status:** Draft
#149
**FRD #3: Proposal Usage in Project** > **Change Log**
~176 tok
## **Change Log** **Version** **Date** **Time** **Author** **Changes** 1.2 April 17, 2026 12:30 PM IST Claude AI (1) Invoice generated after signatures, BEFORE payment; (2) Invoice appears in Files and Finance → Billing; (3) TBD format: "TBD - 3 days before event"; (4) Countersign available after signatures (before payment); (5) Payment not mandatory - agency can mark paid manually; (6) Invoice naming: \[BRAND\_INITIALS\]-INV-\[UNIX\_TIMESTAMP\]; (7) Receipt via email only, not in Files 1.1 April 17, 2026 11:15 AM IST Claude AI Updated statuses, multi-party signing, countersign flow, discount message, Payment Schedule TBD 1.0 December 16, 2025 \- Claude AI Initial FRD creation
#150
**FRD #3: Proposal Usage in Project** > **Table of Contents**
~323 tok
## **Table of Contents** 1. [Module Overview](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#1-module-overview) 2. [User Roles & Permissions](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#2-user-roles--permissions) 3. [User Flow](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#3-user-flow) 4. [Functional Logic](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#4-functional-logic) 5. [Field Details & Validations](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#5-field-details--validations) 6. [Success Message Handling](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#6-success-message-handling) 7. [Error Message Handling](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#7-error-message-handling) 8. [Edge Cases](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#8-edge-cases) 9. [Acceptance Criteria](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#9-acceptance-criteria) 10. [Manual Test Cases](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#10-manual-test-cases) 11. [Dependencies](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#11-dependencies) 12. [References](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#12-references)
#151
**FRD #3: Proposal Usage in Project** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#152
**FRD #3: Proposal Usage in Project** > **1\. Module Overview** > 1.1 Purpose
~93 tok
### 1.1 Purpose The Proposal Usage in Project module defines how proposal templates are assigned to client projects, how proposals are shared with clients, and how agency users track proposal status and view collected information after client completion. This module serves as the bridge between proposal templates created in the Builder and actual client interactions.
#153
**FRD #3: Proposal Usage in Project** > **1\. Module Overview** > 1.2 Business Goals
~165 tok
### 1.2 Business Goals The Proposal Usage in Project module aims to achieve the following business objectives: * Enable seamless assignment of published proposal templates to client projects. * Provide agencies with visibility into proposal status and client engagement through comprehensive tracking. * Support multiple sharing methods (email, direct link) to accommodate different client preferences. * Capture and display all client responses for agency review and project setup. * Maintain a complete audit trail of all proposal-related activities. * Enforce business rules around proposal revisions and signing to maintain contract integrity.
#154
**FRD #3: Proposal Usage in Project** > **1\. Module Overview** > 1.3 Scope
~97 tok
### 1.3 Scope This FRD covers the following functionality: * Proposal template assignment to projects * Share Proposal modal and email functionality * Generate Link and unique recipient links * Proposal status tracking and display * Information Collected section with three tabs * File Activity log * Download PDF functionality * Revised proposal logic and restrictions
#155
**FRD #3: Proposal Usage in Project** > **1\. Module Overview** > 1.4 Out of Scope
~79 tok
### 1.4 Out of Scope The following items are not covered in this FRD: * Proposal template creation (covered in FRD #1 and #2) * Client-side proposal completion flow (covered in FRD #4) * Project creation and automatic updates (covered in FRD #5) * Invoice generation details (covered in Invoice Module FRD)
#156
**FRD #3: Proposal Usage in Project** > **2\. User Roles & Permissions**
~9 tok
## **2\. User Roles & Permissions**
#157
**FRD #3: Proposal Usage in Project** > **2\. User Roles & Permissions** > 2.1 Role-Based Access Matrix
~171 tok
### 2.1 Role-Based Access Matrix **Permission** **Agency Owner** **Agency Admin** **Team Member** **Client** **Contractor** View Project Proposal Section ✅ ✅ ✅ (assigned projects) ❌ ❌ Assign Proposal Template ✅ ✅ ✅ (assigned projects) ❌ ❌ Share Proposal (Email) ✅ ✅ ✅ (assigned projects) ❌ ❌ Generate Share Link ✅ ✅ ✅ (assigned projects) ❌ ❌ View Proposal Status ✅ ✅ ✅ (assigned projects) ❌ ❌ View Information Collected ✅ ✅ ✅ (assigned projects) ❌ ❌ View File Activity ✅ ✅ ✅ (assigned projects) ❌ ❌ Download PDF ✅ ✅ ✅ (assigned projects) ❌ ❌ Send Revised Proposal ✅ ✅ ❌ ❌ ❌ Resend Proposal ✅ ✅ ✅ (assigned projects) ❌ ❌
#158
**FRD #3: Proposal Usage in Project** > **2\. User Roles & Permissions** > 2.2 Permission Notes
~114 tok
### 2.2 Permission Notes * Team Members can only access proposals for projects they are assigned to. * Only Agency Owner and Agency Admin can send revised proposals (which voids previous versions). * Clients access proposals through the Client Portal (covered in FRD #4), not the agency interface. * Contractors have no access to proposal management. * Proposal status in Project Details is handled separately (TBD per project detail dependency).
#159
**FRD #3: Proposal Usage in Project** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#160
**FRD #3: Proposal Usage in Project** > **3\. User Flow** > 3.1 Assigning Proposal to Project
~128 tok
### 3.1 Assigning Proposal to Project 1. User navigates to Projects in the left sidebar. 2. User selects a project to open Project Details. 3. User locates the Proposal section within the project. 4. User clicks to select/assign a proposal template. 5. System displays list of Published proposal templates filtered by project's brand. 6. User selects a template. 7. System creates a proposal instance linked to the project (snapshot copy of template). 8. Proposal status is set to Draft (not yet shared).
#161
**FRD #3: Proposal Usage in Project** > **3\. User Flow** > 3.2 Sharing Proposal via Email
~190 tok
### 3.2 Sharing Proposal via Email 1. User locates the assigned proposal in Project Details. 2. User clicks "Share" or similar action button. 3. System displays the "Share Proposal" modal. 4. System auto-populates recipient(s) from project's client list. 5. User can add additional recipients using the + button. 6. User can modify the subject line (optional). 7. User can customize the message body using the rich text editor. 8. User can select an email template from the Template dropdown. 9. User clicks "Preview" to review the email before sending. 10. User clicks "Send" to deliver the email. 11. System sends email with proposal link to all recipients. 12. Proposal status updates to "Sent". 13. System logs the activity in File Activity.
#162
**FRD #3: Proposal Usage in Project** > **3\. User Flow** > 3.3 Sharing Proposal via Link
~145 tok
### 3.3 Sharing Proposal via Link 1. User is in the Share Proposal modal. 2. User clicks "Copy Link" or "Generate Link" button. 3. System displays confirmation: "Your file will then become accessible to all members who are actively involved in the project." 4. User clicks "Generate Link" to confirm. 5. System generates unique tokenized URLs for each recipient. 6. System displays "Share Link" modal with individual links. 7. User can copy each link using the "Copy Link" button. 8. User clicks "Done" to close the modal. 9. Links can be shared manually via any channel.
#163
**FRD #3: Proposal Usage in Project** > **3\. User Flow** > 3.4 Previewing Email Before Sending
~85 tok
### 3.4 Previewing Email Before Sending 1. User is in the Share Proposal modal with content entered. 2. User clicks "Preview" button. 3. System displays email preview showing: To (recipients), Subject, Message body, "Get Started" CTA button. 4. User reviews the email content. 5. User closes preview to make edits OR proceeds to send.
#164
**FRD #3: Proposal Usage in Project** > **3\. User Flow** > 3.5 Tracking Proposal Status
~101 tok
### 3.5 Tracking Proposal Status 1. User navigates to the project's Proposal section. 2. System displays the proposal header with current status badge. 3. User views the client card showing client name, completion status, and last viewed time. 4. User scrolls to view the Information Collected section (empty until client completes). 5. User views the File Activity log showing all proposal events.
#165
**FRD #3: Proposal Usage in Project** > **3\. User Flow** > 3.6 Viewing Collected Information (After Completion)
~136 tok
### 3.6 Viewing Collected Information (After Completion) 1. Client completes all 6 steps of the proposal (FRD #4). 2. Proposal status changes to "Completed". 3. User opens the project's Proposal section. 4. User sees "Information Collected" section with three tabs. 5. User clicks "Selected Items" tab to view packages and pricing. 6. User clicks "Personal Details" tab to view client information. 7. User clicks "Contract Details" tab to view contract-specific data. 8. User can click "Download PDF" to export the completed proposal.
#166
**FRD #3: Proposal Usage in Project** > **3\. User Flow** > 3.7 Resending Proposal
~81 tok
### 3.7 Resending Proposal 1. User has previously sent a proposal that client hasn't completed. 2. User opens Share Proposal modal. 3. User makes any desired changes to recipients/message. 4. User clicks "Send" to resend. 5. System sends new email with the same proposal link. 6. Activity is logged in File Activity.
#167
**FRD #3: Proposal Usage in Project** > **3\. User Flow** > 3.8 Sending Revised Proposal (Admin/Owner Only)
~103 tok
### 3.8 Sending Revised Proposal (Admin/Owner Only) 1. Previous proposal is unsigned and unpaid. 2. Agency Owner/Admin opens Share Proposal modal. 3. User modifies proposal details or selects new template. 4. User sends the revised proposal. 5. System automatically expires/voids the previous proposal version. 6. New proposal becomes the active version. 7. Client can only complete the latest version.
#168
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#169
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.1 Proposal Assignment Rules
~143 tok
### 4.1 Proposal Assignment Rules Only published proposal templates can be assigned to projects. Templates are filtered by the project's brand, so only templates matching the brand appear in selection. Only one active proposal can exist per project phase until signed or paid. When a proposal is assigned, the system creates a snapshot copy of the template, meaning subsequent template edits do not affect assigned proposals. The assigned proposal inherits all configurations from the template including packages, contract, payment terms, discounts, colors, and settings.
#170
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.2 Proposal Status Lifecycle
~253 tok
### 4.2 Proposal Status Lifecycle Proposal status in Project Details follows a defined lifecycle: **Status** **Description** **Visual** **Trigger** Pending Shared but not opened Gray/neutral badge Email sent or link generated, client has not accessed In Progress Client has started Yellow/amber badge Client opened and completed at least one step (partial completion) Completed All steps finished Green badge Payment successful OR agency manually marks complete Expired Past expiration date Red/gray badge System date check shows expiration passed **Status Transitions:** * **Pending → In Progress:** Client opens the proposal and completes at least one step * **In Progress → Completed:** Client completes payment OR agency manually marks complete (for cash payments or separate invoices) * **Any Status → Expired:** System automatically updates when expiration date passes * **Note:** "Sent" and "Viewed" statuses have been replaced with "Pending" and "In Progress" for clarity
#171
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.3 One Proposal Per Project Rule
~117 tok
### 4.3 One Proposal Per Project Rule Only one active proposal can exist per project until the proposal is signed and payment is received. This prevents conflicting agreements and ensures clarity for both agency and client. Agencies can update/revise the proposal for negotiation purposes before the client signs. Once signed, no further proposals can be sent for that project phase. Additional services after signing should be added via invoices, not new proposals.
#172
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.4 Share Proposal Modal
~7 tok
### 4.4 Share Proposal Modal
#173
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.4 Share Proposal Modal > **4.4.1 Modal Structure**
~344 tok
#### **4.4.1 Modal Structure** The Share Proposal modal provides a comprehensive interface for sending proposals to clients: **Header:** "Share Proposal" title with X close button. **Email To Field:** * Displays selected recipient(s) as removable chips * Each chip shows recipient name with X to remove * Plus (+) button opens dropdown to add recipients * Dropdown lists project clients and contacts * Users can search/filter the dropdown * Multiple recipients supported * All invites include client portal access automatically **Subject Field:** * Text input with placeholder "Enter the subject" * Optional customization; may have default value * Maximum length TBD (follow existing patterns) **Message Body:** * Rich text area with placeholder "Type your message" * "Get Started" button preview embedded in composer * Supports basic formatting (bold, italic, links) **Formatting Toolbar:** * Template dropdown: Select pre-defined email templates * Text formatting icon (A): Font styling options * Link icon: Insert hyperlinks * Person/mention icon: Insert recipient names dynamically * Additional formatting options **Action Buttons:** * "Copy Link" / "Generate Link": Creates shareable URLs * "Preview": Opens email preview before sending * "Send": Sends email to recipients (may have dropdown for additional options)
#174
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.4 Share Proposal Modal > **4.4.2 Generate Link Flow**
~203 tok
#### **4.4.2 Generate Link Flow**
When user clicks "Generate Link":
1. **Confirmation Dialog:
**
* Message: "Your file will then become accessible to all members who are actively involved in the project."
* Cancel button: Closes without generating
* Generate Link button: Proceeds with generation
2. **Share Link Modal:
**
* Title: "Share Link"
* Security notice: "Links are unique for each recipient. Make sure that the intended recipients/signers are the only ones accessing the document through their link."
* Individual Links section listing each recipient
* Each row shows: Avatar, Name, Email, Unique URL field, "Copy Link" button
* URL format: https://www.pixally.com/document/v2?token=\[unique\_token\]
* Done button: Closes the modal#175
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.4 Share Proposal Modal > **4.4.3 Email Preview**
~88 tok
#### **4.4.3 Email Preview** The Preview modal shows exactly what recipients will receive: * **To:** List of recipient names (comma-separated) * **Subject:** The subject line entered * **Body:** Message content with formatting * **CTA:** "Get Started" button that will link to proposal User can close preview and make edits before sending.
#176
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.5 Sent Confirmation
~66 tok
### 4.5 Sent Confirmation After successful send: * Success modal displays with green checkmark icon * Message: "Proposal Sent" * Modal auto-closes after short delay or user dismisses * Proposal status updates to "Sent" * Activity logged in File Activity
#177
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.6 Proposal Tracking Display
~8 tok
### 4.6 Proposal Tracking Display
#178
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.6 Proposal Tracking Display > **4.6.1 Header Section**
~43 tok
#### **4.6.1 Header Section** * Proposal title with project name * Status badge showing current state * "Download PDF" button (visible only when status is Completed)
#179
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.6 Proposal Tracking Display > **4.6.2 Client Card**
~56 tok
#### **4.6.2 Client Card** * Client avatar image * Client name * Completion status with timestamp (e.g., "Completed (17 Dec 2024 at 1:31 PM)") * Not viewed / Viewed indicator * Last viewed date and time (if viewed)
#180
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.6 Proposal Tracking Display > **4.6.3 View Tracking**
~100 tok
#### **4.6.3 View Tracking** View tracking is recorded **per mandatory signatory**. Each mandatory signatory has their own "Last viewed" timestamp that updates when that specific signatory opens the proposal (e.g., Aaron Ramsdale — 17 Dec 2024 at 1:31 PM; Jadon Sanches — 18 Dec 2024 at 2:10 PM). Only mandatory signatories are tracked in this listing; see §4.8 for the full Activity Listing rules.
#181
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.7 Information Collected Section
~9 tok
### 4.7 Information Collected Section
#182
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.7 Information Collected Section > **4.7.1 Before Completion (Empty State)**
~63 tok
#### **4.7.1 Before Completion (Empty State)** When proposal is not yet completed: * Section displays empty state message * Message: "No information collected yet. Wait until your client complete proposal." * Tabs are not shown or are disabled
#183
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.7 Information Collected Section > **4.7.2 After Completion (Three Tabs)**
~578 tok
#### **4.7.2 After Completion (Three Tabs)** **Tab 1: Selected Items** Displays all packages and add-ons selected by the client: _Package Cards:_ * Package name and description * Service type badges * Event sections with line items * "Show Details" button for expanded view * Individual package price _A La Carte Items Section:_ * List of selected add-on items * Each shows: Item name, Event association, Price * Subtotal for A La Carte items _Total Summary Card:_ * Packages Subtotal * A La Carte Items Subtotal * Discount (percentage badge and amount shown in green/teal) * **Dynamic Discount Message** (yellow info banner, e.g., "10% Discount applied to packages only") * Taxes (calculated amount) * Net Total * Payment Schedule (list of dates/conditions and amounts) * **Total** (final amount, same as Net Total) _Payment Schedule Display:_ * If event date was set: Shows actual calculated dates (e.g., "June 18, 2025") * If event date was TBD: Shows "TBD - \[X\] \[unit\] before event" (e.g., "TBD - 3 days before event") * If custom/fixed date: Shows exact date defined by agency (no TBD prefix) _Invoice File:_ * Appears in Project → Files and Documents listing after all signatures complete * Also visible in Finance → Billing → Invoices * Same file linked from "View Invoice" in client payment step **Tab 2: Personal Details** Displays client contact information and event dates entered during proposal completion: **IMPORTANT:** This data is specific to this proposal only. Changes made by the client during proposal completion do NOT sync to their Client Management profile. _Contact Information:_ * First Name * Last Name * Email address * Contact Number (with country code) * Address (full formatted address) _Event Dates:_ * Each event from selected packages listed * Event name (with "Primary Event" label if applicable) * Date entered by client OR "There is no definite date yet" **Tab 3: Contract Details** Displays smart field values from the contract template: _Common Fields (may vary by contract):_ * Venue name * Venue Address * Contact Number * Event Date * Other custom smart fields defined in contract These are dynamic fields that were filled by the client during the contract signing step.
#184
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.8 File Activity Log
~664 tok
### 4.8 File Activity Log The File Activity section maintains a chronological audit trail of all proposal events: **Activity Entry Format:** * Icon indicating activity type * Description text with actor name highlighted * Timestamp (date and time) **Activity Types:** **Activity** **Description Format** Created "Proposal has been successfully created by \[User Name\] (You)" Sent "Proposal has been successfully sent by \[User Name\] (You)" Viewed "Proposal has been viewed by \[Client Name\]" Signed "Contract has been signed by \[Client Name\]" Countersigned "Contract has been countersigned by \[Agency User Name\]" Completed "Proposal has been completed by \[Client Name\]" Resent "Proposal has been resent by \[User Name\]" Expired "Proposal has expired" **Activity Listing (Mandatory Signatories Only):** The Activity Listing displays ONLY recipients who are marked as **mandatory** signatories — not all recipients, and not all who were added for signature. **Element** **Format** Mandatory signatory who signed "\[Client Name\] - Signed (\[Date\] at \[Time\])" Mandatory signatory pending "\[Client Name\] - In progress" Last viewed (per signatory) "Last viewed: \[Date\] at \[Time\]" Agency countersign "\[Agency User\] (You) - In progress" with "Countersign" button **Who Appears / Who Doesn't:** **Recipient Type** **In Activity Listing?** Marked as **mandatory** signatory ✅ Yes Added for signature but **NOT** marked mandatory ❌ No (unless they make a payment) Non-signatory (view-only) ❌ No (unless they make a payment) **Example:** If 5 clients are added and only 2 are marked as mandatory signatories, only those 2 appear in the Activity Listing. The remaining 3 do NOT appear — and neither does their activity — unless they make a payment. **Per-Signatory Tracking:** Each mandatory signatory has their OWN "Last viewed" timestamp (e.g., Aaron Ramsdale — 17 Dec 2024 at 1:31 PM; Jadon Sanches — 18 Dec 2024 at 2:10 PM). **File Activity Log (All Actions):** The File Activity section tracks actions from ALL recipients regardless of signatory status: **Activity** **Who Appears** Created Agency user Sent Agency user Viewed Mandatory signatories only Signed Mandatory signatories only Edited selections Any recipient (including non-mandatory and non-signatories) Payment made Any recipient (including non-mandatory and non-signatories) Countersigned Agency user **Note:** Non-mandatory recipients (whether added for signature or view-only) appear in File Activity ONLY if they make edits or payment. Activities are displayed newest first (reverse chronological order).
#185
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.8.1 Agency Countersign
~301 tok
### 4.8.1 Agency Countersign After all client signatures are complete (payment NOT required): 1. Invoice is automatically generated with status "Unpaid" 2. Invoice appears in Project → Files and Documents AND Finance → Billing 3. Agency user sees all signer statuses in the activity section 4. "Countersign" button (yellow) appears next to the agency user's entry 5. Agency user clicks to countersign the contract 6. Activity logs the countersign event 7. Client can then proceed to payment (Step 6) OR agency can mark as paid manually (for cash payments) **Countersign Requirements:** * All mandatory client signatures must be complete * Payment is NOT required before countersign * Only available for proposals with multi-party signing configured in Contract template **Invoice Generation:** * Triggered when all mandatory signatures complete * Invoice naming convention: \[BRAND\_INITIALS\]-INV-\[UNIX\_TIMESTAMP\] (e.g., ZEN-INV-1769593092) * Initial status: Unpaid * Single invoice with all payment milestones * Payment terms show "TBD - \[X\] days before event" when event date not set * Invoice auto-updates with actual dates once agency sets event date in Project
#186
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.9 Revised Proposal Logic
~188 tok
### 4.9 Revised Proposal Logic Agencies can send revised proposals under specific conditions: **Conditions for Revised Proposal:** * Previous proposal must be unsigned AND unpaid * Agency Owner or Agency Admin permission required * Project must be in pre-contract phase **When Revised Proposal is Sent:** * Previous proposal version is automatically expired/voided * Client can no longer access or complete old version * New proposal becomes the active version * Activity is logged for both expiration and new send **Restrictions After Signing:** * Once a proposal is signed, no further proposals can be sent for that project phase * Additional services must be added via invoices * Invoice does not alter the signed proposal
#187
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.10 Download PDF
~101 tok
### 4.10 Download PDF The "Download PDF" button is only available when proposal status is "Completed". The PDF includes: * All proposal content (welcome message, packages, contract, etc.) * Client's selected packages and add-ons * Signed contract with e-signature * Payment details and schedule * All collected information File naming convention: "\[Project Name\] - Proposal - \[Date\].pdf"
#188
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.11 Link Expiration
~75 tok
### 4.11 Link Expiration Share links expire along with the proposal expiration. If proposal expiration is set (e.g., 14 days), the links become invalid after that period. Expired links show an expiration message to the client. Agency must send a new proposal if client needs access after expiration.
#189
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.12 Recipient Access
~73 tok
### 4.12 Recipient Access All recipients invited via the Share Proposal modal automatically receive client portal access. If a recipient doesn't have an existing Pixally account, one is created for them. Recipients can access the proposal through the emailed link or via their client portal.
#190
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.13 Proposal Access Methods & Email Verification
~34 tok
### 4.13 Proposal Access Methods & Email Verification Clients can access a proposal in two ways, with different authentication behavior:
#191
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.13 Proposal Access Methods & Email Verification > **4.13.1 Access via Email Link (from Share Modal)**
~53 tok
#### **4.13.1 Access via Email Link (from Share Modal)** **Client Status** **Behavior** Logged into portal Direct access to the proposal (no verification) Not logged in Email verification popup is displayed
#192
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.13 Proposal Access Methods & Email Verification > **4.13.2 Access via Generated Link**
~69 tok
#### **4.13.2 Access via Generated Link** **Client Status** **Behavior** Logged into portal Email verification popup is displayed Not logged in Email verification popup is displayed **Note:** Generated links ALWAYS require email verification, regardless of login status.
#193
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.13 Proposal Access Methods & Email Verification > **4.13.3 Email Verification Popup**
~146 tok
#### **4.13.3 Email Verification Popup** **Element** **Description** Brand Logo Agency brand logo at top Title "Provide your email" Subtitle "Enter the same email address you used to contact \[Brand Name\] to view your \[Proposal Name\]." Input Email field (placeholder: "Your email: eg demo@gmail.com") Button "Submit" (yellow/primary) Close X button **Verification Logic:** * Entered email is checked against the recipient list (signatory or non-signatory) * Match → proposal loads * No match → redirects to 404 error page * Multiple retry attempts allowed
#194
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.14 Recipient Types & Permissions
~258 tok
### 4.14 Recipient Types & Permissions Recipients can be added as signatories or non-signatories (view-only). Among signatories, some may be marked as **mandatory** (required to sign before payment). **Permission** **Mandatory Signatory** **Non-Mandatory Signatory** **Non-Signatory** View all steps ✅ ✅ ✅ Edit selections (Steps 1-4) ✅ ✅ ✅ Signature field interaction ✅ Own block ✅ Own block 👁️ View-only Make payment ✅ (after mandatory signs) ✅ (after mandatory signs) ✅ (after mandatory signs) **Appear in Activity Listing** ✅ ❌ (unless pays) ❌ (unless pays) Appear in File Activity ✅ Always ✅ Only for edits/payment ✅ Only for edits/payment **Notes:** * Only **mandatory** signatures block the progression to payment * Only **mandatory** signatories appear in the Activity Listing * Non-mandatory recipients (signatory or not) appear in File Activity only when they make edits or payment * Blocking popup applies to all recipients: "To continue, the contract must be signed by: \[Name(s)\]"
#195
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.15 Add New Document Modal & Re-Send Restriction
~60 tok
### 4.15 Add New Document Modal & Re-Send Restriction Users can add documents to a project via "Add New Document" in Project Details → Files. **Modal Tabs:** Local File, Invoice, Proposal, Client Contract, Service Agreement, Questionnaire.
#196
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.15 Add New Document Modal & Re-Send Restriction > **4.15.1 Proposal Tab — Normal State**
~42 tok
#### **4.15.1 Proposal Tab — Normal State** * Lists all published proposal templates for the project's brand * Each template shows a "Review & Send" button (yellow)
#197
**FRD #3: Proposal Usage in Project** > **4\. Functional Logic** > 4.15 Add New Document Modal & Re-Send Restriction > **4.15.2 Proposal Tab — Restricted State (After Signing)**
~169 tok
#### **4.15.2 Proposal Tab — Restricted State (After Signing)** Once a proposal has been **signed** for the project: **Element** **State** Message Banner Shown at top of listing Message Text "Proposal for this project has already been shared and booked. To make changes, add packages or events manually." All Templates Visible but disabled "Review & Send" Buttons Greyed out for ALL templates **Restriction Logic:** * Triggered when: client has **signed** (regardless of payment status) * NOT triggered when: client has only viewed but not signed * Applies to: ALL proposal templates in the list * Workaround: add packages/events manually to the project
#198
**FRD #3: Proposal Usage in Project** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#199
**FRD #3: Proposal Usage in Project** > **5\. Field Details & Validations** > 5.1 Share Proposal Modal Fields
~99 tok
### 5.1 Share Proposal Modal Fields **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Email To Multi-select chips Yes At least one recipient; Valid email format "Please select at least one recipient" Subject Text Input No Max length TBD N/A Message Rich Text No Max length TBD N/A Template Dropdown No Select from available templates N/A
#200
**FRD #3: Proposal Usage in Project** > **5\. Field Details & Validations** > 5.2 Proposal Status Display
~67 tok
### 5.2 Proposal Status Display **Field** **Data Type** **Display Condition** Status Badge Enum Always visible Last Viewed DateTime After first client view Completion Date DateTime When status is Completed Download PDF Button Action Only when Completed
#201
**FRD #3: Proposal Usage in Project** > **5\. Field Details & Validations** > 5.3 Information Collected - Selected Items
~117 tok
### 5.3 Information Collected - Selected Items **Field** **Data Type** **Source** Package Name String Client selection Package Price Currency Package configuration A La Carte Items Array Client selection Packages Subtotal Currency Calculated A La Carte Subtotal Currency Calculated Taxes Currency Calculated per settings Discount Currency + % Proposal configuration Payment Schedule Array Proposal configuration Total Currency Calculated
#202
**FRD #3: Proposal Usage in Project** > **5\. Field Details & Validations** > 5.4 Information Collected - Personal Details
~78 tok
### 5.4 Information Collected - Personal Details **Field** **Data Type** **Source** First Name String Client input Last Name String Client input Email Address Email Client input Contact Number Phone Client input Address String Client input (formatted) Event Dates Array Client input per event
#203
**FRD #3: Proposal Usage in Project** > **5\. Field Details & Validations** > 5.5 Information Collected - Contract Details
~75 tok
### 5.5 Information Collected - Contract Details **Field** **Data Type** **Source** Venue String Contract smart field Venue Address String Contract smart field Contact Number Phone Contract smart field Event Date Date Contract smart field (Additional fields) Varies Contract template
#204
**FRD #3: Proposal Usage in Project** > **6\. Success Message Handling**
~139 tok
## **6\. Success Message Handling** **Action** **Success Message** **Display Type** **Duration** **Post-Success Behavior** Proposal Sent "Proposal Sent" (modal with checkmark) Modal Auto-dismiss 3s Status updates to Sent; Activity logged Link Generated None N/A N/A Share Link modal displays Link Copied "Link copied to clipboard" Toast notification 2 seconds Clipboard contains URL PDF Downloaded None N/A N/A File download initiates Proposal Resent "Proposal resent successfully" Toast notification 3 seconds Activity logged
#205
**FRD #3: Proposal Usage in Project** > **7\. Error Message Handling**
~382 tok
## **7\. Error Message Handling** **Error Scenario** **Error Message** **Display Type** **Trigger Condition** **User Action Required** No recipient selected "Please select at least one recipient" Inline error Send clicked with empty recipients Add at least one recipient Invalid email format "Please enter a valid email address" Inline error Invalid email in recipient field Correct email format Send failed "Failed to send proposal. Please try again." Toast notification Server/network error Retry sending Link generation failed "Unable to generate link. Please try again." Toast notification Server error Retry generation PDF generation failed "Unable to generate PDF. Please try again." Toast notification Server/timeout error Retry download Proposal already signed "Cannot send new proposal. A signed proposal already exists for this project." Toast notification Attempt to send when signed Use invoices for additions Template unavailable "Selected template is no longer available." Toast notification Template deleted Select different template Proposal expired "This proposal has expired. Please create a new proposal." Inline message Expiration date passed Create and send new proposal No published templates "No published proposal templates available for this brand." Inline message No templates for brand Create template in Builder Network error "Connection error. Please check your internet connection." Toast notification Network failure Check connection and retry
#206
**FRD #3: Proposal Usage in Project** > **8\. Edge Cases**
~395 tok
## **8\. Edge Cases** **Edge Case** **System Behavior** Mandatory signatory opens proposal multiple times That signatory's "Last viewed" timestamp updates to their most recent view; per-signatory tracking retained. Multiple recipients - one completes Proposal marked complete when any recipient completes all steps; Others can no longer complete. Client partially completes then stops Status remains "Viewed" or "In Progress"; Incomplete data not saved to Information Collected; Client can resume if not expired. Proposal expires while client is completing Client sees expiration message; Cannot proceed; Agency must send new proposal. Client loses link Agency can resend the proposal email with the same link or generate new link. Client email bounces Activity log should show bounce event (TBD); Agency notified to use alternative contact. Very long proposal with many packages PDF generation may take longer; Loading indicator shown; Consider async generation for large files. Agency resends before client views Multiple "Sent" activities logged; Client receives multiple emails; Same proposal link. Template deleted after assignment Assigned proposal retains snapshot; Template deletion doesn't affect project proposals. Project deleted with active proposal Proposal becomes orphaned; Cleanup process handles (TBD). Simultaneous view by multiple signatories Each mandatory signatory's own "Last viewed" timestamp is tracked independently. Generate link without sending email Links are valid; Status may remain Draft until email sent (TBD behavior).
#207
**FRD #3: Proposal Usage in Project** > **9\. Acceptance Criteria**
~8 tok
## **9\. Acceptance Criteria**
#208
**FRD #3: Proposal Usage in Project** > **9\. Acceptance Criteria**
~800 tok
* **AC-PU-001:** Users can assign published proposal templates to projects filtered by brand. * **AC-PU-002:** Only one active proposal can exist per project until signed and paid. * **AC-PU-003:** Users can share proposals via email with customizable subject and message. * **AC-PU-004:** Users can select email templates for proposal sharing. * **AC-PU-005:** Users can add multiple recipients to a single proposal send. * **AC-PU-006:** All recipients automatically receive client portal access. * **AC-PU-007:** Users can generate unique shareable links for each recipient. * **AC-PU-008:** Generated links are tokenized and unique per recipient. * **AC-PU-009:** Share links expire with proposal expiration. * **AC-PU-010:** Users can preview email content before sending. * **AC-PU-011:** System displays proposal status: Pending, In Progress, Completed, or Expired. * **AC-PU-012:** "Last viewed" shows a per-signatory timestamp for each mandatory signatory. * **AC-PU-013:** File Activity log shows all proposal events with timestamps. * **AC-PU-014:** After completion, "Information Collected" displays three tabs of client data. * **AC-PU-015:** Selected Items tab shows packages, A La Carte items, and pricing summary. * **AC-PU-016:** Personal Details tab shows client contact info and event dates. * **AC-PU-017:** Contract Details tab shows smart field values from the contract. * **AC-PU-018:** Download PDF is available only for completed proposals. * **AC-PU-019:** Revised proposals can only be sent if previous is unsigned and unpaid. * **AC-PU-020:** Sending revised proposal auto-expires previous version. * **AC-PU-021:** No proposals can be sent after one is signed (for same project phase). * **AC-PU-022:** Users can resend the same proposal multiple times. * **AC-PU-023:** Empty state displays when no information is collected yet. * **AC-PU-024:** Multi-party signing activity shows each signer's status with timestamp. * **AC-PU-025:** Countersign button appears after all client signatures and payment complete. * **AC-PU-026:** Dynamic discount message displays in Information Collected (e.g., "10% Discount applied to packages only"). * **AC-PU-027:** Payment Schedule shows actual dates when event date is set, or condition text when TBD. * **AC-PU-028:** Personal Details in Information Collected reflects proposal-only data (no sync to Client Management). * **AC-PU-029:** Email link access: logged-in users get direct access; not logged-in users see verification popup. * **AC-PU-030:** Generated link access: ALL users see verification popup regardless of login status. * **AC-PU-031:** Email verification checks against recipient list; invalid email redirects to 404. * **AC-PU-032:** Generate Link creates unique link per recipient with copy button for each. * **AC-PU-033:** Activity Listing shows MANDATORY signatories only; non-mandatory recipients are hidden unless they pay. * **AC-PU-034:** Non-mandatory recipients (signatory or not) appear in File Activity only when they make edits or payment. * **AC-PU-039:** Each mandatory signatory has their own per-signatory "Last viewed" time
#209
**FRD #3: Proposal Usage in Project** > **9\. Acceptance Criteria**
~104 tok
stamp. * **AC-PU-035:** Add New Document modal shows Proposal tab with template list. * **AC-PU-036:** Once proposal is signed, all proposal templates are disabled with message. * **AC-PU-037:** Restriction message: "Proposal for this project has already been shared and booked. To make changes, add packages or events manually." * **AC-PU-038:** Proposal restriction is triggered by signing, not by viewing.
#210
**FRD #3: Proposal Usage in Project** > **10\. Manual Test Cases**
~128 tok
## **10\. Manual Test Cases** Manual test cases for this module are provided in a separate Excel file: 📎 **File:** FRD\_03\_Proposal\_Usage\_Test\_Cases.xlsx The test cases cover: * Proposal assignment to projects * Share modal functionality * Email sending and preview * Link generation and copying * Status tracking and display * Information Collected tabs * File Activity verification * PDF download * Revised proposal logic * All acceptance criteria validation * Edge case testing
#211
**FRD #3: Proposal Usage in Project** > **11\. Dependencies**
~6 tok
## **11\. Dependencies**
#212
**FRD #3: Proposal Usage in Project** > **11\. Dependencies** > 11.1 Internal Dependencies
~160 tok
### 11.1 Internal Dependencies **Dependency** **Module/Feature** **Type** **Impact if Unavailable** Proposal Builder Published templates Required No templates available to assign Project Management Project context and client list Required Cannot access project or recipients Client Management Client profiles and contacts Required Cannot retrieve client info for recipients Email Templates Pre-defined email templates Optional Cannot use templates; manual entry only Brands Management Brand filtering Required Cannot filter templates by brand Project Detail Status management TBD Status tracking may be incomplete
#213
**FRD #3: Proposal Usage in Project** > **11\. Dependencies** > 11.2 External Dependencies
~100 tok
### 11.2 External Dependencies **Dependency** **Service** **Type** **Impact if Unavailable** Email Service SendGrid/similar Required Cannot send proposal emails PDF Generation PDF service Required Cannot download completed proposals Link Tokenization Token service Required Cannot generate secure share links Client Portal Portal access Required Recipients cannot access proposals
#214
**FRD #3: Proposal Usage in Project** > **12\. References**
~6 tok
## **12\. References**
#215
**FRD #3: Proposal Usage in Project** > **12\. References** > 12.1 Figma Designs
~200 tok
### 12.1 Figma Designs **Screen** **File Name** **Description** Share Modal 8-share.png Share Proposal main modal Recipient Selection 8-share1.png Adding recipients dropdown Email Preview 8-share2.png Preview before sending Send Confirmation 8-share3.png Proposal Sent success Share Contract 8-share4.png Similar modal for contracts Generate Link Confirm 8-share5.png Link generation confirmation Share Link Modal 8-share6.png Individual recipient links Share Modal Alt 8-share7.png Alternative view Proposal Sent Status 7-propusage.png Project detail - Sent state Proposal Completed 7-propusage1.png - 7-propusage2.png Completed with data Personal Details Tab 7-propusage3.png Personal info display Contract Details Tab 7-propusage4.png Contract smart fields
#216
**FRD #3: Proposal Usage in Project** > **12\. References** > 12.2 Related FRDs
~104 tok
### 12.2 Related FRDs **FRD** **Module** **Relationship** FRD #1 Proposal Listing Source of templates FRD #2 Proposal Builder Template configuration FRD #4 Client-Side Interaction What clients see after receiving FRD #5 Impact on Project What happens after completion Project Management FRD Project Details Host module for proposals Email Center FRD Email functionality Email template integration
#217
**FRD #3: Proposal Usage in Project** > **12\. References** > 12.3 Source Documents
~46 tok
### 12.3 Source Documents **Document** **Reference** Module Logic Explanation Proposal Module Dec 15 2025.pdf (19:20 - 47:00) Historical Context Proposal-Module-185d8b98-5a32.json
#218
**FRD #3: Proposal Usage in Project** > **Document Revision History**
~101 tok
## **Document Revision History** **Version** **Date** **Author** **Changes** 1.2 April 17, 2026 Claude AI Invoice generation timing, TBD format, countersign before payment 1.1 April 17, 2026 Claude AI Statuses, multi-party signing, countersign, discount display 1.0 December 16, 2025 Claude AI Initial FRD creation _End of FRD #3: Proposal Usage in Project_ ✅ 4. Client-Side Interaction
#219
**Functional Requirements Document**
~10 tok
# **Functional Requirements Document**
#220
**FRD #4: Client-Side Interaction**
~70 tok
# **FRD #4: Client-Side Interaction** **Document Version:** 1.3 **Created Date:** December 16, 2025 **Last Updated:** April 17, 2026 | 02:00 PM IST **Module:** Client-Side Proposal Interaction (Client Portal) **Platform:** Pixally CRM - Client Portal **Status:** Draft
#221
**FRD #4: Client-Side Interaction** > **Change Log**
~165 tok
## **Change Log** **Version** **Date** **Time** **Author** **Changes** 1.3 April 17, 2026 02:00 PM IST Claude AI (1) Email vs Generated Link access flow; (2) Email verification popup details; (3) Signatory vs Non-Signatory permissions; (4) Non-signatories: view-only for signatures, can edit/pay; (5) Blocking message applies to both signatory and non-signatory 1.2 April 17, 2026 12:30 PM IST Claude AI TBD format, invoice timing, countersign before payment, receipt handling 1.1 April 17, 2026 10:45 AM IST Claude AI Step order, multi-party signing, no client sync, sub-pages 1.0 December 16, 2025 \- Claude AI Initial FRD creation
#222
**FRD #4: Client-Side Interaction** > **Table of Contents**
~323 tok
## **Table of Contents** 1. [Module Overview](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#1-module-overview) 2. [User Roles & Permissions](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#2-user-roles--permissions) 3. [User Flow](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#3-user-flow) 4. [Functional Logic](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#4-functional-logic) 5. [Field Details & Validations](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#5-field-details--validations) 6. [Success Message Handling](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#6-success-message-handling) 7. [Error Message Handling](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#7-error-message-handling) 8. [Edge Cases](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#8-edge-cases) 9. [Acceptance Criteria](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#9-acceptance-criteria) 10. [Manual Test Cases](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#10-manual-test-cases) 11. [Dependencies](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#11-dependencies) 12. [References](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#12-references)
#223
**FRD #4: Client-Side Interaction** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#224
**FRD #4: Client-Side Interaction** > **1\. Module Overview** > 1.1 Purpose
~96 tok
### 1.1 Purpose The Client-Side Interaction module defines the complete client experience when viewing and completing a proposal. Clients navigate through a structured six-step process including package selection, personal information entry, event date configuration, pricing review, contract signing with e-signature (including multi-party signing), and initial payment collection.
#225
**FRD #4: Client-Side Interaction** > **1\. Module Overview** > 1.2 Business Goals
~182 tok
### 1.2 Business Goals The Client-Side Interaction module aims to achieve the following business objectives: * Provide clients with a guided, intuitive proposal completion experience that minimizes abandonment. * Capture all necessary client information required for project setup and service delivery. * Facilitate legally binding contract signing with compliant e-signature functionality, supporting both single and multi-party signing. * Enable secure payment collection through integrated Stripe payment processing. * Support both immediate payment and deferred payment collection based on agency configuration. * Allow agencies to countersign contracts after client signatures for complete contract execution.
#226
**FRD #4: Client-Side Interaction** > **1\. Module Overview** > 1.3 Scope
~141 tok
### 1.3 Scope This FRD covers the following functionality: * Welcome screen with step overview * Step 1: Package Selection (with A La Carte items and sub-page navigation) * Step 2: Personal Details entry * Step 3: Event Dates configuration * Step 4: Price Summary review (with dynamic discount display) * Step 5: Contract Signing with e-signature (single and multi-party) * Step 6: Initial Payment collection * Navigation controls and progress indicators * Multi-party signing flow with agency countersign * Success screens and confirmations
#227
**FRD #4: Client-Side Interaction** > **1\. Module Overview** > 1.4 Out of Scope
~78 tok
### 1.4 Out of Scope The following items are not covered in this FRD: * Agency-side proposal configuration (covered in FRD #2) * Proposal assignment and sharing (covered in FRD #3) * Post-completion project updates (covered in FRD #5) * Client Portal general functionality (covered in Client Portal FRD)
#228
**FRD #4: Client-Side Interaction** > **2\. User Roles & Permissions**
~9 tok
## **2\. User Roles & Permissions**
#229
**FRD #4: Client-Side Interaction** > **2\. User Roles & Permissions** > 2.1 Role-Based Access Matrix
~120 tok
### 2.1 Role-Based Access Matrix **Permission** **Client (Primary)** **Client (Secondary)** **Agency User (Preview)** Access Proposal via Link ✅ ✅ ✅ View Welcome Screen ✅ ✅ ✅ Select Packages ✅ ✅ ❌ Enter Personal Details ✅ ✅ (own details) ❌ Enter Event Dates ✅ ✅ ❌ View Price Summary ✅ ✅ ✅ Sign Contract ✅ ✅ (own signature block) ❌ Make Payment ✅ ❌ ❌ Download Invoice/Receipt ✅ ✅ ❌ Countersign Contract ❌ ❌ ✅ (after all client signatures)
#230
**FRD #4: Client-Side Interaction** > **2\. User Roles & Permissions** > 2.2 Permission Notes
~171 tok
### 2.2 Permission Notes * Primary Client is the main recipient whose information is pre-filled from the project. * Secondary Client(s) can be included for multi-party signing scenarios. * Each client can only edit their own signature block; other blocks are visible but read-only. * Both primary and secondary clients can edit package selections and other steps UNTIL all mandatory signatures are complete. * Agency Users can preview proposals but cannot interact with actual proposal instances. * Agency countersign is required after all client signatures for contract completion. * All recipients automatically receive client portal access when proposal is shared.
#231
**FRD #4: Client-Side Interaction** > **2\. User Roles & Permissions** > 2.3 Signatory vs Non-Signatory Permissions
~240 tok
### 2.3 Signatory vs Non-Signatory Permissions Recipients can be designated as signatories or non-signatories: **Permission** **Signatory** **Non-Signatory** Access proposal ✅ ✅ View all steps (1-6) ✅ ✅ Edit package selections (Step 1) ✅ ✅ Edit personal details (Step 2) ✅ ✅ Edit event dates (Step 3) ✅ ✅ View price summary (Step 4) ✅ ✅ View contract (Step 5) ✅ ✅ Interact with signature field ✅ Own block only ❌ View-only Make payment (Step 6) ✅ After all signs ✅ After all signs Appear in Activity Listing ✅ ❌ Appear in File Activity ✅ Always ✅ Only for edits/payment **Non-Signatory Behavior:** * Can view the entire proposal including contract * Can make edits to selections in Steps 1-4 * Cannot click or interact with ANY signature field (view-only) * Can proceed to payment ONLY after all mandatory signatures are complete * If attempting to proceed before signatures complete, sees blocking popup message
#232
**FRD #4: Client-Side Interaction** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#233
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.1 Accessing the Proposal
~31 tok
### 3.1 Accessing the Proposal Clients can access proposals through two methods with different authentication requirements:
#234
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.1 Accessing the Proposal > **Access via Email Link (from Share Modal)**
~176 tok
#### **Access via Email Link (from Share Modal)** **Client Status** **Behavior** **Logged into portal** Direct access to proposal **Not logged into portal** Email verification popup displayed **Flow (Direct Access):** 1. Client clicks link in email. 2. System detects client is logged in. 3. Proposal loads directly to Welcome Message screen. **Flow (Verification Required):** 1. Client clicks link in email. 2. System detects client is not logged in. 3. Email verification popup displayed. 4. Client enters email and clicks "Submit". 5. System validates email against recipient list. 6. If valid: Proposal loads to Welcome Message screen. 7. If invalid: Redirects to 404 error page.
#235
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.1 Accessing the Proposal > **Access via Generated Link**
~141 tok
#### **Access via Generated Link** **Client Status** **Behavior** **Logged into portal** Email verification popup displayed **Not logged into portal** Email verification popup displayed **Note:** Generated links ALWAYS require email verification regardless of login status. **Flow:** 1. Client clicks generated link. 2. Email verification popup displayed. 3. Client enters email and clicks "Submit". 4. System validates email against recipient list. 5. If valid: Proposal loads to Welcome Message screen. 6. If invalid: Redirects to 404 error page.
#236
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.1 Accessing the Proposal > **Email Verification Popup**
~154 tok
#### **Email Verification Popup** **Element** **Description** Brand Logo Agency brand logo centered at top Title "Provide your email" Subtitle "Enter the same email address you used to contact \[Brand Name\] to view your \[Proposal Name\]." Input Field Email address input (placeholder: "Your email: eg demo@gmail.com") Submit Button "Submit" (yellow/primary button) Close Button X button in top-right corner **Verification Rules:** * Email must match a recipient (signatory OR non-signatory) * Multiple retry attempts allowed * Invalid email redirects to 404 page (no specific error message)
#237
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.1 Accessing the Proposal > **Post-Verification Flow**
~56 tok
#### **Post-Verification Flow** 1. System loads the proposal and displays the Welcome Message screen. 2. Client reviews the welcome message and step overview. 3. Client clicks "Open Proposal" to begin the completion flow.
#238
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.2 Step 1: Choose Packages
~216 tok
### 3.2 Step 1: Choose Packages 1. System displays the first package group with available packages. 2. If multiple package groups exist, header shows "STEP 1 — CHOOSE PACKAGES (HAS \[X\] SUB-PAGES)". 3. Progress bar displays "Packages: \[current\]/\[total\]" (e.g., "1/3"). 4. Client views package cards with details (name, description, events, price). 5. Client clicks "Select" on desired package (one per group). 6. Selected package shows "Selected" state with checkmark. 7. Client optionally selects A La Carte items below packages. 8. If multiple package groups exist, client navigates through each group using "Next Step". 9. Client can use "Skip Page" to temporarily skip a package group. 10. Client must select at least ONE package total across all groups before completing Step 1. 11. Client clicks "Next Step" to proceed to Personal Details.
#239
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.3 Step 2: Personal Details
~107 tok
### 3.3 Step 2: Personal Details 1. System displays Personal Details form. 2. Fields pre-populate from Primary Client data in the project. 3. Client reviews/updates personal information fields. 4. Client enters address information (required for tax calculation). 5. **Note:** Changes made here are saved ONLY for this proposal and do NOT sync to Client Management. 6. Client clicks "Next Step" to proceed to Event Dates.
#240
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.4 Step 3: Event Dates
~92 tok
### 3.4 Step 3: Event Dates 1. System displays event cards for each event in selected packages. 2. Client enters dates for each event using date picker. 3. Client can toggle "There is no definite date yet" for any event (including primary). 4. Primary event date is used for payment schedule calculations. 5. Client clicks "Next Step" to proceed to Price Summary.
#241
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.5 Step 4: Price Summary
~107 tok
### 3.5 Step 4: Price Summary 1. System displays all selected packages and add-ons. 2. Client reviews itemized pricing on the left panel. 3. Client reviews summary calculations on the right panel. 4. Dynamic discount message displays (e.g., "10% Discount applied to packages only"). 5. Payment schedule shows actual dates OR condition text if event date is TBD. 6. Client clicks "Next Step" to proceed to Sign Contract.
#242
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.6 Step 5: Sign Contract
~235 tok
### 3.6 Step 5: Sign Contract
1. System displays the full contract document.
2. Client scrolls through and reads contract terms.
3. Client views dynamic sections populated with their specific details.
4. All signature blocks are visible (own + other parties if multi-party).
5. Client can only edit their own signature block.
6. Client provides e-signature in their signature pad area.
7. Client checks the certification checkbox.
8. Client clicks "Sign Contract" button.
9. **If multi-party signing:**
* If other required signatures are pending, client sees error popup when clicking "Next Step": "To continue, the contract must be signed by: \[Name(s)\]".
* Client cannot proceed to Step 6 until all mandatory signatures are complete.
* Client can still go back and edit Steps 1-4 while waiting for other signatures.
10. Once all signatures complete, client clicks "Next Step" to proceed to Initial Payment.#243
**FRD #4: Client-Side Interaction** > **3\. User Flow** > 3.7 Step 6: Initial Payment
~238 tok
### 3.7 Step 6: Initial Payment **Pre-Conditions:** * All mandatory signatures are complete * Invoice has been generated (status: Unpaid) * Agency countersign may already be complete (countersign happens BEFORE payment) **Flow:** 1. System displays payment amount due (first payment milestone). 2. Client can click "View Invoice" to see full invoice details (same file as in Files and Documents). 3. Client enters payment information (Credit Card or ACH). 4. Client clicks "Pay $\[amount\]" button. 5. System processes payment through Stripe. 6. System displays Payment Successful screen with receipt details. 7. Client can download Invoice (Receipt is emailed, not downloadable here). 8. Client clicks "Finish" to complete the flow. **Alternative Flow - Cash Payment:** * Client does not complete Step 6 online * Agency manually marks invoice as "Paid" in Finance → Billing * Proposal status updated to "Completed" by agency
#244
**FRD #4: Client-Side Interaction** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#245
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.1 Welcome Message Screen
~170 tok
### 4.1 Welcome Message Screen
The Welcome screen serves as the introduction to the proposal flow:
**Display Elements:**
* Brand header image from proposal template
* Brand logo (centered)
* Welcome message title (from template or default)
* Welcome message body text (from template)
* Step overview showing 6 steps with icons:
1. Choose Packages
2. Personal Details
3. Event Dates
4. Price Summary
5. Sign Contract
6. Initial Payment
* "Open Proposal" button (primary CTA)
**Behavior:**
* Steps display as horizontal timeline with icons
* All steps shown as upcoming (not started)
* Clicking "Open Proposal" advances to Step 1#246
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.2 Navigation Controls
~304 tok
### 4.2 Navigation Controls **Bottom Navigation Bar:** * "Previous Step" button (left): Returns to prior step; Hidden on Step 1 * Step indicators (center): Numbered circles (1-6) showing progress * "Next Step" button (right): Advances to next step; "Finish" on final step **Step Indicators:** * Current step: Highlighted/active state * Completed steps: Checkmark icon replaces number * Future steps: Number with inactive state **Sub-Page Navigation (for Multiple Package Groups):** * When proposal has multiple package groups, Step 1 has sub-pages * Header displays: "STEP 1 — CHOOSE PACKAGES (HAS \[X\] SUB-PAGES)" * Progress bar shows: "Packages: \[current\]/\[total\]" (e.g., "Packages: 1/3") * Step indicators remain as 1, 2, 3, 4, 5, 6 (sub-pages don't add new step numbers) * Progress bar updates as client navigates through sub-pages **Skip Page Button:** * Displays in top-right corner ONLY on package selection sub-pages * Allows temporary skip to next package group * Does NOT appear on Price Summary or other steps * Client must select at least ONE package total before completing Step 1 * All 6 major steps are mandatory; skip only applies within package selection
#247
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.3 Step 1: Choose Packages
~8 tok
### 4.3 Step 1: Choose Packages
#248
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.3 Step 1: Choose Packages > **4.3.1 Package Group Display**
~250 tok
#### **4.3.1 Package Group Display** **Page Header:** * If single group: "Choose a \[Group Heading\]" (e.g., "Choose a Photo/Video Package") * If multiple groups: "STEP 1 — CHOOSE PACKAGES (HAS \[X\] SUB-PAGES)" with progress bar * Subtitle: "Select a main package for your event(s)." **Package Cards (Horizontal Layout):** Each package displays as a card containing: * Service type badges (e.g., "Photography", "Videography") * Package cover image * Package name * Package description * Event sections (e.g., "Wedding", "Rehearsal Dinner") with line items * Price (e.g., "$350.00 USD") * "Select" button * "Show Details" button **Horizontal Scrolling:** * If packages exceed horizontal space, scroll arrows appear * Progress bar shows scroll position * Last partially visible package shows fade effect indicating more content **Line Item Quantity Display:** * If line item has quantity > 1, displays as "Item Name x\[quantity\]" * Example: "Basic Retouch x2"
#249
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.3 Step 1: Choose Packages > **4.3.2 Package Selection Rules**
~116 tok
#### **4.3.2 Package Selection Rules** * Client can select only ONE package per package group * Selecting a package changes button from "Select" to "Selected" (blue with checkmark) * Card border highlights to indicate selection * Selecting different package deselects previous selection * Client must select at least ONE package total across all groups * If using "Skip Page", client can skip individual groups but must complete at least one selection
#250
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.3 Step 1: Choose Packages > **4.3.3 Show Details Modal**
~69 tok
#### **4.3.3 Show Details Modal** Clicking "Show Details" opens a modal with: * Package image * Service type badge * Package name * Description * Event-by-event breakdown with all line items and descriptions * Total package price * Close (X) button to dismiss
#251
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.3 Step 1: Choose Packages > **4.3.4 A La Carte Items Section**
~222 tok
#### **4.3.4 A La Carte Items Section** **Section Header:** * Title: "Choose A La Carte Items" * Subtitle: "Additional items to enhance your experience" **Item Display:** * Items shown in grid format with checkboxes * Each item shows: Checkbox, Item name, Event association, Price (+$XX.00), "MORE INFO" link **A La Carte Display Logic:** * Before package selection: Shows items COMMON to all packages in the group * After package selection: Shows all items available for the selected package * Items dynamically update when package selection changes **Quantity Selection:** * When item is selected (checkbox checked), quantity selector appears * Quantity selector shows "— \[qty\] +" controls * **Minimum quantity: 1** (cannot go below 1 while selected) * **Maximum quantity: 99** * To deselect item: Uncheck the checkbox (not by reducing quantity to 0)
#252
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.3 Step 1: Choose Packages > **4.3.5 Multi-Group Navigation**
~137 tok
#### **4.3.5 Multi-Group Navigation** When proposal has multiple package groups: * Header shows "STEP 1 — CHOOSE PACKAGES (HAS \[X\] SUB-PAGES)" * Progress bar: "Packages: 1/3" → "Packages: 2/3" → "Packages: 3/3" * Client sees pages for each group sequentially * "Skip Page" button allows skipping to next group temporarily * Step indicators show standard 1-6 (no sub-step numbering like 1.1, 1.2) * Client must select at least ONE package total before completing Step 1 * Can navigate back to previous groups using "Previous Step"
#253
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.4 Step 2: Personal Details
~8 tok
### 4.4 Step 2: Personal Details
#254
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.4 Step 2: Personal Details > **4.4.1 Form Structure**
~128 tok
#### **4.4.1 Form Structure** **Page Header:** * "Personal Details" * Subtitle: "Add your contact information in the form below." **Personal Information Section:** * First Name (text input) * Last Name (text input) * Email address (email input) * Contact Number (phone input with country code selector) **Address Section:** * Address line 1 (text input) * Address line 2 (text input, optional) * City (text input) * State (text input) * Postal Code (text input) * Country (dropdown)
#255
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.4 Step 2: Personal Details > **4.4.2 Data Pre-Fill (IMPORTANT CHANGE)**
~160 tok
#### **4.4.2 Data Pre-Fill (IMPORTANT CHANGE)** **Data Source:** * Fields pre-populate from the **Primary Client** associated with the project in Client Management. **Data Persistence:** * Changes made by the client are saved **ONLY for this proposal**. * Changes do **NOT** sync back to Client Management. * **No new client record** is created based on these changes. * Data is displayed in the agency's "Information Collected → Personal Details" tab. **If Client Info is Incorrect:** * Client can edit the fields for this proposal. * To update their master profile, client must update via their Client Portal settings.
#256
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.4 Step 2: Personal Details > **4.4.3 Address Purpose**
~62 tok
#### **4.4.3 Address Purpose** Address is required primarily for tax calculation: * Used by Stripe Tax for auto-calculation (if enabled) * Used for invoice billing address * Required fields: Address line 1, City, State, Postal Code, Country
#257
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.5 Step 3: Event Dates (MOVED FROM STEP 4)
~12 tok
### 4.5 Step 3: Event Dates (MOVED FROM STEP 4)
#258
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.5 Step 3: Event Dates (MOVED FROM STEP 4) > **4.5.1 Page Structure**
~87 tok
#### **4.5.1 Page Structure** **Page Header:** * "Event Dates" * Subtitle: "Select a additional event dates" **Event Cards:** Each event from selected packages displays as a card: * Event name (e.g., "Wedding") * "(Primary Event)" label for main event * "Event Date" label with date picker * Toggle: "There is no definite date yet"
#259
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.5 Step 3: Event Dates (MOVED FROM STEP 4) > **4.5.2 Date Entry Logic**
~80 tok
#### **4.5.2 Date Entry Logic** * Date picker opens calendar for selection * Date format displayed per locale settings * Primary event can also have "no definite date" toggle enabled * When toggle enabled, date picker is disabled/cleared * All events must either have date entered OR "no definite date" toggled
#260
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.5 Step 3: Event Dates (MOVED FROM STEP 4) > **4.5.3 Event Population**
~68 tok
#### **4.5.3 Event Population** Events are dynamically populated based on selected packages: * Each unique event type in selected packages gets a card * If package covers Wedding + Rehearsal Dinner, both appear * Primary event identified from package configuration
#261
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.5 Step 3: Event Dates (MOVED FROM STEP 4) > **4.5.4 Impact on Payment Schedule**
~83 tok
#### **4.5.4 Impact on Payment Schedule** * **Primary event date** is used for all Smart Date payment schedule calculations * If primary event date is set: Payment Schedule shows calculated dates (e.g., "June 18, 2025") * If primary event date is TBD: Payment Schedule shows condition text (e.g., "TBD - 3 days before event")
#262
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.6 Step 4: Price Summary (MOVED FROM STEP 3)
~12 tok
### 4.6 Step 4: Price Summary (MOVED FROM STEP 3)
#263
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.6 Step 4: Price Summary (MOVED FROM STEP 3) > **4.6.1 Left Panel - Selected Items**
~77 tok
#### **4.6.1 Left Panel - Selected Items** Displays each selected package: * Service type badge(s) * Package name * Description text * Price * "SELECTED ADD-ONS" section showing chips with item name and price If multiple packages selected (from different groups), each displays as separate card.
#264
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.6 Step 4: Price Summary (MOVED FROM STEP 3) > **4.6.2 Right Panel - Summary**
~112 tok
#### **4.6.2 Right Panel - Summary** **Line Item** **Value** Packages Subtotal Sum of package prices A La Carte Items Subtotal Sum of add-on prices Discount Percentage badge and amount (negative, in green/teal) **Dynamic Discount Message** Yellow info banner (see 4.6.4) Taxes Calculated tax amount Net Total Subtotal - Discount + Tax Payment Schedule List of dates/conditions and amounts **Total** Final amount (same as Net Total)
#265
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.6 Step 4: Price Summary (MOVED FROM STEP 3) > **4.6.3 Calculation Formula**
~108 tok
#### **4.6.3 Calculation Formula** Packages Subtotal = SUM(Selected Package Prices) A La Carte Subtotal = SUM(Selected Items × Quantities) Subtotal = Packages Subtotal + A La Carte Subtotal Discount Amount = Subtotal × Discount% (or Flat Amount) Taxable Amount = (Subtotal - Discount) \[only taxable items\] Tax = Taxable Amount × Tax Rate Total = Subtotal - Discount + Tax Note: Discount is applied BEFORE tax calculation.
#266
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.6 Step 4: Price Summary (MOVED FROM STEP 3) > **4.6.4 Dynamic Discount Message**
~243 tok
#### **4.6.4 Dynamic Discount Message** A yellow/cream colored info banner displays below the Discount line showing the discount configuration: **Message Format Variations:** **Discount Type** **Application** **Format** Bundle - Percentage - Packages Only "10% Discount applied to packages only" Bundle - Percentage - Both "10% Discount applied to packages and a la carte" Bundle - Flat - Packages Only "$50 Discount applied to packages only" Bundle - Flat - Both "$50 Discount applied to packages and a la carte" Regular - Percentage - Packages Only "10% Discount applied to packages only" Regular - Percentage - Both "10% Discount applied to packages and a la carte" Regular - Flat - Packages Only "$50 Discount applied to packages only" Regular - Flat - Both "$50 Discount applied to packages and a la carte" This message also appears in: * Proposal Builder preview (agency side) * Information Collected view (agency side, after completion)
#267
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.6 Step 4: Price Summary (MOVED FROM STEP 3) > **4.6.5 Payment Schedule Display**
~151 tok
#### **4.6.5 Payment Schedule Display** **When Primary Event Date is SET:** **Payment Schedule** **Amount** June 18, 2025 $200.00 September 28, 2026 $260.22 December 21, 2026 $260.22 **When Primary Event Date is TBD:** **Payment Schedule** **Amount** TBD - 3 days before event $200.00 TBD - 30 days after event $260.22 TBD - 60 days after event $260.22 **When Custom/Fixed Date is Set:** **Payment Schedule** **Amount** June 18, 2025 $200.00 September 28, 2026 $260.22 The TBD prefix only appears when event date is not set. Fixed/custom dates show exact date without TBD prefix.
#268
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.7 Step 5: Sign Contract
~7 tok
### 4.7 Step 5: Sign Contract
#269
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.7 Step 5: Sign Contract > **4.7.1 Contract Display**
~70 tok
#### **4.7.1 Contract Display** **Page Header:** * "Sign Contract" * Subtitle text **Contract Content:** * Full contract document in scrollable container * Contract text from selected contract template * Numbered sections (1, 2, 3, etc.) * Standard legal language
#270
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.7 Step 5: Sign Contract > **4.7.2 Dynamic Sections**
~119 tok
#### **4.7.2 Dynamic Sections** The contract includes dynamic sections populated with client-specific data: **Section 7 - Event and Dates:** * Table showing event names and dates * Primary event with date or "There is no definite date yet" * Additional events with dates **Section 8 - Payment Details:** * Packages Subtotal * A La Carte Items Subtotal * Taxes * Discount (percentage and amount) * Payment Schedule (dates/conditions and amounts) * Total
#271
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.7 Step 5: Sign Contract > **4.7.3 Signature Section - Single Party**
~144 tok
#### **4.7.3 Signature Section - Single Party** **Signature Pad:** * Drawing area for e-signature * Client draws or types signature * Signature renders in script font below pad * Date auto-populated (current date) **Certification Checkbox:** * Text: "I certify that I have read and agree to the terms and conditions mentioned in this contract." * Must be checked to enable Sign Contract button **Sign Contract Button:** * Disabled until checkbox is checked * Clicking locks the signature and records contract signing * Timestamp captured for audit trail
#272
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.7 Step 5: Sign Contract > **4.7.4 Signature Section - Multi-Party**
~199 tok
#### **4.7.4 Signature Section - Multi-Party** When proposal has multiple signers configured (in Contract Template): **Display:** * ALL signature blocks are visible to all parties * Each party sees their own block as editable * Other parties' blocks show as read-only (empty if not signed, signature if signed) **Signing Logic:** * No specific signing order; whoever opens the proposal first can sign first * Each client can only edit their own signature block * After signing, that client's signature is locked * Other clients' blocks remain editable for those clients **Mandatory vs Optional Signatures:** * If agency marks signatures as mandatory (in Contract Template), ALL signatures required * If not all mandatory signatures complete, "Next Step" shows error popup
#273
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.7 Step 5: Sign Contract > **4.7.5 Multi-Party Signing - Blocking Logic**
~322 tok
#### **4.7.5 Multi-Party Signing - Blocking Logic** When ANY client (signatory OR non-signatory) clicks "Next Step" to proceed to payment but mandatory signatures are pending: **Error Popup:** * Icon: Warning triangle (⚠️) * Message: "To continue, the contract must be signed by: \[Name(s)\]" * Example: "To continue, the contract must be signed by: Sehal Maheswari" * If multiple names: "To continue, the contract must be signed by: Sehal Maheswari, John Smith" * Close (X) button to dismiss **This blocking applies to:** * Signatories who have signed but others haven't * Signatories who haven't signed yet * Non-signatories attempting to proceed to payment **Client Experience After Signing (Signatories):** * Client can still navigate back to Steps 1-4 and make changes * Client cannot proceed to Step 6 until all mandatory signatures complete * Changes to package selections do NOT invalidate existing signatures * Client can return later to check if other parties have signed **Non-Signatory Experience:** * Can navigate through Steps 1-5 and view/edit as permitted * Cannot interact with signature fields (view-only) * Cannot proceed to Step 6 until all mandatory signatures complete * Sees same blocking popup if attempting to proceed early
#274
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.7 Step 5: Sign Contract > **4.7.6 Non-Signatory Signature View**
~101 tok
#### **4.7.6 Non-Signatory Signature View** When a non-signatory views Step 5 (Sign Contract): * All signature blocks are visible * All blocks are in view-only mode (cannot click or interact) * Signed blocks show the signature * Unsigned blocks show empty state * No signature pad or certification checkbox available to non-signatories * Non-signatory can scroll and read the entire contract
#275
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.7 Step 5: Sign Contract > **4.7.6 Editing Before All Signatures Complete**
~95 tok
#### **4.7.6 Editing Before All Signatures Complete** **IMPORTANT:** All steps (1-4) remain editable by any party until ALL mandatory signatures are complete. * Both/all clients can edit package selections, personal details, and event dates * Signatures already made remain valid even if selections change * Once ALL signatures complete, Steps 1-4 become locked (read-only)
#276
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.7 Step 5: Sign Contract > **4.7.7 Post-All-Signatures Rules**
~77 tok
#### **4.7.7 Post-All-Signatures Rules** * Once all mandatory signatures complete, client can proceed to Step 6 * Steps 1-4 become locked; client cannot go back to make changes * For any modifications after this point, client must contact agency (TBD process) * Contract data sent to agency's system
#277
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.8 Step 6: Initial Payment
~8 tok
### 4.8 Step 6: Initial Payment
#278
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.8 Step 6: Initial Payment > **4.8.1 Payment Information Display**
~67 tok
#### **4.8.1 Payment Information Display** **Page Header:** * "Initial Payment" * Subtitle: "Make your initial payment and we'll take it from here." **Amount Section:** * "Amount due" label * Dollar amount (first payment milestone) * "View Invoice" link
#279
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.8 Step 6: Initial Payment > **4.8.2 Payment Form**
~178 tok
#### **4.8.2 Payment Form** **Email Address:** * Pre-filled from Personal Details * Receipt sent to this email **Payment Tabs:** * "Debit or credit card" (tab 1) * "Bank account" (tab 2, if ACH enabled) **Credit Card Fields:** * Card Number (with card brand icons: Visa, Mastercard, Amex, JCB) * Expiration Date (MM/YY) * Security Code (CVC) * Name on Card * Country (dropdown) **ACH Fields (if enabled):** * Bank Account Number * Routing Number * Account Type (Checking/Savings) * "In Progress" status indicator for ACH processing **Pay Button:** * "Pay $\[amount\]" (e.g., "Pay $200.00") * Button color matches proposal theme * Disabled until valid payment info entered
#280
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.8 Step 6: Initial Payment > **4.8.3 Payment Processing Logic**
~136 tok
#### **4.8.3 Payment Processing Logic** **Immediate Payment:** * If first payment is due immediately per proposal settings * Payment is charged when Pay button clicked * Success screen shown upon completion **Deferred/Scheduled Payment:** * Payment info collected and saved securely (via Stripe) * Actual charge occurs on scheduled date * Success screen still shown for confirmation **Stripe Integration:** * Card validation via Stripe * PCI-compliant - no sensitive data stored in Pixally * Stripe minimum charge: TBD
#281
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.9 Payment Success Screen
~184 tok
### 4.9 Payment Success Screen **Display Elements:** * Green checkmark icon * "Payment Successful" heading * Message: "You have been successfully charged for this transaction. A receipt for this purchase has been sent to your email." **Receipt Details:** **Field** **Value** Receipt number e.g., 2593-0995 Invoice number e.g., ZEN-INV-1769593092 Payment method e.g., VISA - 4242 **Action Buttons:** * "Download Invoice" - Downloads invoice PDF (same file as in Files and Documents) **Note:** Receipt is sent via email only and is NOT available for download on this screen or in Files and Documents. **Navigation:** * "Finish" button completes the flow * Returns client to client portal or confirmation page
#282
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.10 Agency Countersign
~210 tok
### 4.10 Agency Countersign After all client signatures AND payment complete: **Agency View (in Project Details → Files):** * Shows all signers with status * Format: "\[Client Name\] - Signed (\[Date\] at \[Time\])" for completed * Format: "\[Client Name\] (You) - In progress" for agency pending * "Countersign" button (yellow) appears for agency user **Countersign Flow:** 1. All client signatures must be complete 2. Payment must be complete (or agency manually marks complete for cash/separate invoice scenarios) 3. "Countersign" button appears for agency user 4. Agency clicks to countersign 5. Proposal status changes to "Completed" **Activity Tracking:** * Each signer's name, status, and "Last viewed" timestamp displayed * Example: "Signed (17 Dec 2024 at 1:31 PM)" / "Last viewed: 17 Dec 2024 at 1:31 PM"
#283
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.11 Proposal Expiration Handling
~82 tok
### 4.11 Proposal Expiration Handling If proposal has expiration enabled and date has passed: * Client sees expiration message instead of proposal content * Message indicates proposal has expired * Client cannot proceed with completion * Instructions to contact agency for new proposal * Status changes to "Expired"
#284
**FRD #4: Client-Side Interaction** > **4\. Functional Logic** > 4.12 Save and Resume (TBD)
~68 tok
### 4.12 Save and Resume (TBD) The ability for clients to save progress mid-flow and resume later is TBD. Current behavior: * Progress may be lost if client closes browser * Client must restart from beginning * Future enhancement may include auto-save functionality
#285
**FRD #4: Client-Side Interaction** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#286
**FRD #4: Client-Side Interaction** > **5\. Field Details & Validations** > 5.1 Personal Details Fields
~232 tok
### 5.1 Personal Details Fields **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** First Name Text Input Yes 1-50 chars; Letters, spaces, hyphens, apostrophes "First name is required" Last Name Text Input Yes 1-50 chars; Letters, spaces, hyphens, apostrophes "Last name is required" Email Address Email Input Yes Valid email format (RFC 5322) "Please enter a valid email address" Contact Number Phone Input Yes Valid phone with country code "Please enter a valid phone number" Address Line 1 Text Input Yes 1-100 chars "Address is required" Address Line 2 Text Input No 0-100 chars N/A City Text Input Yes 1-50 chars "City is required" State Text Input Yes 1-50 chars "State is required" Postal Code Text Input Yes Valid format for country "Please enter a valid postal code" Country Dropdown Yes Must select from list "Please select a country"
#287
**FRD #4: Client-Side Interaction** > **5\. Field Details & Validations** > 5.2 Event Date Fields
~79 tok
### 5.2 Event Date Fields **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Event Date Date Picker Conditional Required unless toggle is on; Valid date "Please select a date or indicate date is not set" No Definite Date Toggle Toggle No When ON, date field optional N/A
#288
**FRD #4: Client-Side Interaction** > **5\. Field Details & Validations** > 5.3 A La Carte Quantity Fields
~59 tok
### 5.3 A La Carte Quantity Fields **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Quantity Number Input Yes (if item selected) Min: 1, Max: 99; Integer only "Quantity must be between 1 and 99"
#289
**FRD #4: Client-Side Interaction** > **5\. Field Details & Validations** > 5.4 Payment Fields - Credit Card
~128 tok
### 5.4 Payment Fields - Credit Card **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Card Number Number Input Yes Valid card (Luhn); 13-19 digits "Please enter a valid card number" Expiration Date Date Input Yes MM/YY format; Future date "Card has expired" Security Code Number Input Yes 3-4 digits "Invalid security code" Name on Card Text Input Yes 1-100 chars "Name on card is required" Country Dropdown Yes Must select "Please select a country"
#290
**FRD #4: Client-Side Interaction** > **5\. Field Details & Validations** > 5.5 Payment Fields - ACH (if enabled)
~93 tok
### 5.5 Payment Fields - ACH (if enabled) **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** Account Number Number Input Yes Valid account number "Invalid account number" Routing Number Number Input Yes 9 digits; Valid ABA "Invalid routing number" Account Type Radio Yes Checking or Savings "Please select account type"
#291
**FRD #4: Client-Side Interaction** > **5\. Field Details & Validations** > 5.6 Contract Signature Fields
~76 tok
### 5.6 Contract Signature Fields **Field Name** **Field Type** **Required** **Validation Rules** **Error Message** E-Signature Signature Pad Yes Must have content "Please provide your signature" Certification Checkbox Checkbox Yes Must be checked "Please confirm you agree to the terms"
#292
**FRD #4: Client-Side Interaction** > **6\. Success Message Handling**
~172 tok
## **6\. Success Message Handling** **Action** **Success Message** **Display Type** **Duration** **Post-Success Behavior** Package Selected None (UI updates) Visual state change N/A "Select" → "Selected" with checkmark A La Carte Selected None (UI updates) Checkbox checked N/A Item added to selection Step Completed None (auto-advance) N/A N/A Next step loads Contract Signed None (button state) Button disabled N/A If multi-party pending, show info; else proceed enabled Payment Successful "Payment Successful" + details Full screen Persistent Shows receipt info and download options Proposal Completed None N/A N/A Redirect to portal or confirmation
#293
**FRD #4: Client-Side Interaction** > **7\. Error Message Handling**
~494 tok
## **7\. Error Message Handling** **Error Scenario** **Error Message** **Display Type** **Trigger Condition** **User Action Required** No package selected "Please select a package to continue" Inline/Toast Next clicked without any selection Select at least one package Required field empty "\[Field name\] is required" Inline field error Next clicked with empty field Fill required field Invalid email "Please enter a valid email address" Inline field error Invalid format Correct email Invalid phone "Please enter a valid phone number" Inline field error Invalid format Correct phone Invalid postal code "Please enter a valid postal code" Inline field error Format mismatch Correct postal code Card declined "Payment declined. Please check your card details or try a different card." Toast/Inline Stripe decline Use different card Card expired "This card has expired. Please use a different card." Inline field error Past expiration Use valid card Invalid CVC "Invalid security code" Inline field error CVC validation fail Enter correct CVC Insufficient funds "Insufficient funds. Please try a different payment method." Toast Bank decline Different payment Signature required "Please provide your signature" Inline error Proceed without signing Sign in pad Checkbox not checked "Please confirm you agree to the terms" Inline error Proceed without checking Check the box Multi-party signature pending "To continue, the contract must be signed by: \[Name(s)\]" Popup modal Next clicked with pending signatures Wait for other signatures Proposal expired "This proposal has expired. Please contact \[Agency\] for a new proposal." Full page Expiration passed Contact agency Network error "Connection error. Please check your internet and try again." Toast Network failure Retry A La Carte quantity invalid "Quantity must be between 1 and 99" Inline error Quantity outside range Enter valid quantity
#294
**FRD #4: Client-Side Interaction** > **8\. Edge Cases**
~567 tok
## **8\. Edge Cases** **Edge Case** **System Behavior** Client refreshes page mid-flow Progress may be lost (TBD save/resume); Client restarts or resumes from last saved point. Client closes browser then returns If within session/token validity, may resume; Otherwise restarts. TBD implementation. Client completes on mobile Responsive design adapts; Signature pad works with touch input. Multiple events with same name Display both; Differentiated by event ID internally. Client selects then deselects package A La Carte display reverts to common items; Selection state clears. Client enters past date for event Calendar may allow it; Agency responsibility to validate business logic. Tax calculation fails (Stripe error) Fall back to manual rate if configured; Otherwise show error. Payment amount is $0 Step 6 behavior TBD; May skip payment or show $0 confirmation. Client's country not supported by Stripe Payment fails; Message to contact agency for alternative payment. Very long contract document Scrollable container; May impact mobile experience. Client disputes signature later Timestamp and IP logged for legal audit trail. ACH payment processing delay Show "In Progress" status; Client informed of delay. All events marked "no definite date" Allowed; Events created as TBD in project; Payment Schedule shows condition text. Client tries to go back after all signatures complete Navigation to Steps 1-4 blocked; Must contact agency. Client abandons at payment step Contract signed but not paid; Agency follows up; Agency can manually mark complete for cash payments. Multi-party: One client signed, other changes selections Signatures remain valid; Changes do not invalidate existing signatures. Multi-party: Client A signed, waiting for Client B Client A can still edit Steps 1-4; Cannot proceed to Step 6. Multi-party: Both clients open proposal simultaneously Both can make selections; Last save wins for shared fields; Each signs own block. Client tries to skip all package groups Must select at least one package total; Error shown if trying to proceed with zero selections. Primary event TBD but secondary has date Payment Schedule uses condition text (based on primary); Secondary event date saved normally.
#295
**FRD #4: Client-Side Interaction** > **9\. Acceptance Criteria**
~8 tok
## **9\. Acceptance Criteria**
#296
**FRD #4: Client-Side Interaction** > **9\. Acceptance Criteria**
~800 tok
* **AC-CI-001:** Clients can access proposals via emailed link or client portal. * **AC-CI-002:** Welcome screen displays agency's welcome message and 6-step overview with correct order: Packages, Personal Details, Event Dates, Price Summary, Sign Contract, Initial Payment. * **AC-CI-003:** Clients can select one package per package group. * **AC-CI-004:** Package selection updates available A La Carte items dynamically. * **AC-CI-005:** Clients can select multiple A La Carte items. * **AC-CI-006:** A La Carte quantity selection shows min 1, max 99; deselect via checkbox. * **AC-CI-007:** When multiple package groups exist, header shows "STEP 1 — CHOOSE PACKAGES (HAS \[X\] SUB-PAGES)" with progress bar. * **AC-CI-008:** Skip Page button only appears on package selection sub-pages, not on Price Summary or other steps. * **AC-CI-009:** Client must select at least one package total; can skip individual groups but not all. * **AC-CI-010:** Personal details pre-fill from Primary Client in project. * **AC-CI-011:** Changes to Personal Details are saved ONLY for this proposal and do NOT sync to Client Management. * **AC-CI-012:** Event Dates appear as Step 3 before Price Summary. * **AC-CI-013:** Primary event date is used for payment schedule calculations. * **AC-CI-014:** Payment Schedule shows actual dates when primary event date is set, or condition text when TBD. * **AC-CI-015:** Price Summary appears as Step 4 after Event Dates. * **AC-CI-016:** Dynamic discount message displays in yellow banner (e.g., "10% Discount applied to packages only"). * **AC-CI-017:** Discount is applied before tax calculation. * **AC-CI-018:** Contract displays with dynamic sections for events and payment. * **AC-CI-019:** For multi-party signing, all signature blocks are visible; each client edits only their own. * **AC-CI-020:** When multi-party signatures pending, error popup shows: "To continue, the contract must be signed by: \[Name(s)\]". * **AC-CI-021:** All steps (1-4) remain editable until ALL mandatory signatures complete. * **AC-CI-022:** Signatures remain valid even if another party changes package selections. * **AC-CI-023:** Payment step (Step 6) is blocked until all mandatory signatures complete. * **AC-CI-024:** Client cannot go back to Steps 1-4 after all signatures complete. * **AC-CI-025:** Agency countersign is required after all client signatures and payment. * **AC-CI-026:** Proposal status shows as Pending (sent, not opened), In Progress (opened, partially complete), Completed (payment done or agency marked), or Expired. * **AC-CI-027:** ACH payments show "In Progress" status. * **AC-CI-028:** Payment success screen shows receipt with download options. * **AC-CI-029:** Expired proposals show expiration message and prevent completion. * **AC-CI-030:** Email link access: logged-in users get direct access; not logged-in see verification popup. * **AC-CI-031:** Generated link access: ALL users see verification popup regardless of login status. * **AC-CI-032:** Verification popup shows brand logo, title, email input, and Submit button. * **AC-CI-033:** Invalid email verification redir
#297
**FRD #4: Client-Side Interaction** > **9\. Acceptance Criteria**
~80 tok
ects to 404 page. * **AC-CI-034:** Non-signatories can view all steps but cannot interact with signature fields. * **AC-CI-035:** Non-signatories can make edits to Steps 1-4 and payment after all signatures. * **AC-CI-036:** Blocking popup applies to both signatories and non-signatories when signatures incomplete.
#298
**FRD #4: Client-Side Interaction** > **10\. Manual Test Cases**
~219 tok
## **10\. Manual Test Cases** Manual test cases for this module are provided in a separate Excel file: 📎 **File:** FRD\_04\_Client\_Side\_Interaction\_Test\_Cases.xlsx The test cases cover: * Welcome screen display with correct step order * Package selection (single and multi-group with sub-pages) * A La Carte item selection and quantity (min 1, max 99) * Skip Page functionality (only on package pages) * Personal Details entry (no sync to Client Management) * Event Dates entry (Step 3) * Price Summary with dynamic discount message (Step 4) * Payment Schedule with TBD condition text * Multi-party signing flow * Signature blocking when other signatures pending * Editing before all signatures complete * Agency countersign * Payment processing (Card and ACH) * Success screens * Error handling * All acceptance criteria * Edge cases
#299
**FRD #4: Client-Side Interaction** > **11\. Dependencies**
~6 tok
## **11\. Dependencies**
#300
**FRD #4: Client-Side Interaction** > **11\. Dependencies** > 11.1 Internal Dependencies
~136 tok
### 11.1 Internal Dependencies **Dependency** **Module/Feature** **Type** **Impact if Unavailable** Proposal Builder Template configuration Required Proposal content unavailable Packages Module Package and pricing data Required Package display fails Contracts Module Contract template content (including multi-party config) Required Contract section fails Client Management Profile pre-fill (read-only source) Required Pre-fill unavailable Invoice Module Payment schedule, invoice data Required Pricing may be incomplete
#301
**FRD #4: Client-Side Interaction** > **11\. Dependencies** > 11.2 External Dependencies
~112 tok
### 11.2 External Dependencies **Dependency** **Service** **Type** **Impact if Unavailable** Stripe API Payment processing Required Cannot collect payments Stripe Tax Tax calculation Optional Use manual rate fallback E-Signature Service Signature capture Required Cannot sign contracts PDF Generation Invoice/Receipt download Required Downloads unavailable Client Portal Access and navigation Required Cannot access proposals
#302
**FRD #4: Client-Side Interaction** > **12\. References**
~6 tok
## **12\. References**
#303
**FRD #4: Client-Side Interaction** > **12\. References** > 12.1 Figma Designs
~199 tok
### 12.1 Figma Designs **Screen** **File Name** **Description** Welcome Screen 6-clientside.png Initial welcome with steps Package Selection 6-clientside1.png Package cards view Package Sub-Pages (new) Multi-group navigation Package Scroll 6-clientside1-1.png Horizontal scrolling Package Selected 6-clientside1-2.png Selection state Package Details 6-clientside1-3.png Show Details modal Personal Details 6-clientside2.png Contact form Event Dates (Step 3) Date entry Price Summary (Step 4) Pricing display with discount banner Sign Contract 6-clientside5.png - 6-clientside5-3.png Contract and signature Multi-Party Signing (new) Multiple signature blocks Initial Payment 6-clientside6.png Payment form Payment Success 6-clientside6-1.png Success screen
#304
**FRD #4: Client-Side Interaction** > **12\. References** > 12.2 Related FRDs
~118 tok
### 12.2 Related FRDs **FRD** **Module** **Relationship** FRD #2 Proposal Builder Template source, discount config FRD #3 Proposal Usage How proposal is shared, status tracking FRD #5 Impact on Project Post-completion updates (no client sync) Packages Module FRD Packages Package content source Invoice Module FRD Invoices Payment terms source Contract Module FRD Contracts Multi-party signing config Client Portal FRD Portal Access and navigation
#305
**FRD #4: Client-Side Interaction** > **12\. References** > 12.3 Source Documents
~87 tok
### 12.3 Source Documents **Document** **Reference** Module Logic Explanation Proposal Module Dec 15 2025.pdf (21:00 - 38:00) Historical Context Proposal-Module-185d8b98-5a32.json Update Screenshots April 2026 screenshots showing Event Dates step order, multi-party signing _End of FRD #4: Client-Side Interaction_ ✅ 5. Impact on Project
#306
**Functional Requirements Document**
~10 tok
# **Functional Requirements Document**
#307
**FRD #5: Impact on Project**
~71 tok
# **FRD #5: Impact on Project** **Document Version:** 1.7 **Created Date:** December 16, 2025 **Last Updated:** April 17, 2026 | 04:30 PM IST **Module:** Proposal Impact on Project (Project Management Integration) **Platform:** Pixally CRM - Agency Portal **Status:** Draft
#308
**FRD #5: Impact on Project** > **Change Log**
~394 tok
## **Change Log** **Version** **Date** **Time** **Author** **Changes** 1.7 April 17, 2026 04:30 PM IST Claude AI (1) Override boundary changed from stage-based to **payment-based**: override allowed through "Proposal Signed" (unpaid), stops at "Deposit Paid"; (2) Full 9-stage pipeline documented; (3) Added Rule 4 Primary Event override (package primary replaces existing); (4) Manual events follow same rules, default to Lead 1.6 April 17, 2026 04:00 PM IST Claude AI **FIX:** Added missing Event Override Rules (§4.1.4), Override Scenarios A-F (§4.1.5), Naming Convention (§4.1.6), Additional Scenarios (§4.1.7) that failed to save in prior versions; fixed duplicate §4.1.3 numbering; removed duplicate acceptance criteria 1.5 April 17, 2026 03:30 PM IST Claude AI (1) Detailed event mismatch warning with exact message text; (2) Warning location: Event tab indicator + Services tab banner; (3) Clarified scenarios for existing events with suffix + new proposal; (4) Multiple mismatched events each show warning 1.4 April 17, 2026 03:00 PM IST Claude AI Primary Event date change, fully paid invoices locked, partially paid editable, new invoices after event passed 1.3 April 17, 2026 01:15 PM IST Claude AI Event override logic, multi-package naming, pipeline stages 1.2 April 17, 2026 12:30 PM IST Claude AI Invoice timing, naming, TBD format, countersign before payment 1.1 April 17, 2026 11:20 AM IST Claude AI No client sync, countersign requirement, event date edits 1.0 December 16, 2025 \- Claude AI Initial FRD creation
#309
**FRD #5: Impact on Project** > **Table of Contents**
~323 tok
## **Table of Contents** 1. [Module Overview](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#1-module-overview) 2. [User Roles & Permissions](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#2-user-roles--permissions) 3. [User Flow](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#3-user-flow) 4. [Functional Logic](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#4-functional-logic) 5. [Field Details & Validations](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#5-field-details--validations) 6. [Success Message Handling](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#6-success-message-handling) 7. [Error Message Handling](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#7-error-message-handling) 8. [Edge Cases](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#8-edge-cases) 9. [Acceptance Criteria](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#9-acceptance-criteria) 10. [Manual Test Cases](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#10-manual-test-cases) 11. [Dependencies](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#11-dependencies) 12. [References](https://claude.ai/chat/e8ac5351-6906-45d5-af12-abe4225ce9c6#12-references)
#310
**FRD #5: Impact on Project** > **1\. Module Overview**
~7 tok
## **1\. Module Overview**
#311
**FRD #5: Impact on Project** > **1\. Module Overview** > 1.1 Purpose
~87 tok
### 1.1 Purpose The Impact on Project module defines how completed proposals affect project records within the Pixally CRM system. This includes automatic event creation, data population from proposal selections, deliverable generation from package line items, client profile synchronization, invoice generation, and pipeline automation triggers.
#312
**FRD #5: Impact on Project** > **1\. Module Overview** > 1.2 Business Goals
~171 tok
### 1.2 Business Goals The Impact on Project module aims to achieve the following business objectives: * Automate project setup based on client's proposal selections to reduce manual data entry. * Ensure accurate event and service creation from proposal data for efficient project management. * Maintain data integrity between proposal selections and project configuration throughout the project lifecycle. * Support workflow automation through pipeline status updates triggered by proposal milestones. * Provide clear handling of event mismatches between proposals and existing project data. * Enable seamless transition from signed proposal to active project execution.
#313
**FRD #5: Impact on Project** > **1\. Module Overview** > 1.3 Scope
~101 tok
### 1.3 Scope This FRD covers the following functionality: * Automatic event creation from proposal * Event matching and override logic * Event mismatch warnings and resolution * Service population from packages * Deliverable creation from line items * Client profile synchronization * Automatic invoice generation * Pipeline automation triggers * Signed proposal access and storage
#314
**FRD #5: Impact on Project** > **1\. Module Overview** > 1.4 Out of Scope
~95 tok
### 1.4 Out of Scope The following items are not covered in this FRD: * Proposal template creation (covered in FRD #1 and #2) * Proposal sharing and tracking (covered in FRD #3) * Client-side completion flow (covered in FRD #4) * General Project Management functionality (covered in Project Management FRD) * Invoice management details (covered in Invoice Module FRD)
#315
**FRD #5: Impact on Project** > **2\. User Roles & Permissions**
~9 tok
## **2\. User Roles & Permissions**
#316
**FRD #5: Impact on Project** > **2\. User Roles & Permissions** > 2.1 Role-Based Access Matrix
~128 tok
### 2.1 Role-Based Access Matrix **Permission** **Agency Owner** **Agency Admin** **Team Member** **Client** **Contractor** View Project Events ✅ ✅ ✅ (assigned) ❌ ✅ (assigned) Manage Events (Create/Edit) ✅ ✅ ✅ (assigned) ❌ ❌ Delete Events ✅ ✅ ❌ ❌ ❌ Keep Event Active ✅ ✅ ✅ (assigned) ❌ ❌ View Signed Proposal ✅ ✅ ✅ (assigned) ✅ ❌ Download Signed Proposal ✅ ✅ ✅ (assigned) ✅ ❌ Override Proposal Data ✅ ✅ ❌ ❌ ❌ View Auto-Generated Invoice ✅ ✅ ✅ (assigned) ✅ ❌
#317
**FRD #5: Impact on Project** > **2\. User Roles & Permissions** > 2.2 Permission Notes
~103 tok
### 2.2 Permission Notes * Team Members can view and manage events for projects they are assigned to but cannot delete events. * Only Agency Owner and Agency Admin can delete events or override proposal data. * Clients can view and download their signed proposal and invoice through the Client Portal. * Contractors can view project events they are assigned to but cannot modify proposal-generated data.
#318
**FRD #5: Impact on Project** > **3\. User Flow**
~5 tok
## **3\. User Flow**
#319
**FRD #5: Impact on Project** > **3\. User Flow** > 3.1 Proposal Completion Triggers Project Updates
~175 tok
### 3.1 Proposal Completion Triggers Project Updates 1. Client completes all 6 steps of the proposal (FRD #4). 2. System marks proposal as "Completed". 3. System automatically processes proposal data. 4. System creates/updates events in Project Details based on selected packages. 5. System creates services within events from package line items. 6. System creates deliverables from line items marked as deliverable. 7. System stores personal details entered (proposal-specific, NOT synced to Client Management). 8. System generates invoice matching proposal amounts. 9. If pipeline automation enabled, system updates event statuses. 10. Agency user can view all updates in Project Details.
#320
**FRD #5: Impact on Project** > **3\. User Flow** > 3.2 Handling Event Mismatch Warning
~141 tok
### 3.2 Handling Event Mismatch Warning
1. Agency user navigates to Project Details after proposal completion.
2. System identifies events in project that don't exist in signed proposal.
3. System displays warning indicator on affected event tab.
4. User clicks on the event tab.
5. System displays warning banner in Services section.
6. User reads the warning message explaining the mismatch.
7. User decides to either:
* Click "Delete Event" to remove the orphaned event, OR
* Click "Keep Event Active" to dismiss warning and retain the event.#321
**FRD #5: Impact on Project** > **3\. User Flow** > 3.3 Viewing Signed Proposal in Project
~68 tok
### 3.3 Viewing Signed Proposal in Project 1. Agency user navigates to Project Details. 2. User clicks on Files/Documents tab. 3. User locates the signed proposal document. 4. User can view or download the PDF. 5. Signed contract is also available in this location.
#322
**FRD #5: Impact on Project** > **3\. User Flow** > 3.4 Client Accessing Signed Proposal
~54 tok
### 3.4 Client Accessing Signed Proposal 1. Client logs into Client Portal. 2. Client navigates to their project. 3. Client accesses Documents section. 4. Client views or downloads signed proposal and contract.
#323
**FRD #5: Impact on Project** > **4\. Functional Logic**
~7 tok
## **4\. Functional Logic**
#324
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.1 Automatic Event Creation
~8 tok
### 4.1 Automatic Event Creation
#325
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.1 Automatic Event Creation > **4.1.1 Event Source**
~57 tok
#### **4.1.1 Event Source** Events are created based on the packages selected by the client during proposal completion. Each unique event type defined in the selected packages generates a corresponding event in Project Details.
#326
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.1 Automatic Event Creation > **4.1.2 Pipeline Stages & Override Boundary**
~255 tok
#### **4.1.2 Pipeline Stages & Override Boundary**
The system organizes events into three stage groups. **Override eligibility is determined by payment, not the stage group alone** — override is allowed as long as NO payment has been made (through the "Proposal Signed" stage). Once any payment is made ("Deposit Paid" onward), a new event is created instead.
**Stage Group**
**Sub-Stage**
**Override Behavior**
**New Lead**
New Lead
✅ Override
**New Lead**
Follow-up
✅ Override
**New Lead**
Proposal Sent
✅ Override
**Booked**
Proposal Signed (unpaid)
✅ Override
**Booked**
Deposit Paid
❌ Create new
**Booked**
Planning
❌ Create new
**Post-Event**
Post Production
❌ Create new
**Post-Event**
Completed
❌ Create new
**Post-Event**
Archived
❌ Create new
**Override Boundary Rule:** Override is permitted up to and including "Proposal Signed" (signed but unpaid). The boundary is crossed at "Deposit Paid" — once any payment (even partial/deposit) is made, the event is no longer overridden.#327
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.1 Automatic Event Creation > **4.1.3 Event Matching Logic**
~212 tok
#### **4.1.3 Event Matching Logic** The system compares proposal events with existing project events: **Scenario** **System Behavior** Proposal event matches existing event AND no payment made Proposal data overrides existing event Proposal event matches existing event BUT payment made New event created with numbered suffix Proposal has event not in project System creates new event tab in Project Details Project has event not in proposal Warning displayed to user with options (keep/delete) A La Carte "Event" type item selected Creates new event if not already existing **Name Matching:** Event matching is NOT case-sensitive. "Wedding" matches "wedding" and "WEDDING". **Manual vs Auto Events:** Manually-created events follow the SAME override rules as lead-form auto-created events. Manual events default to the "Lead" stage.
#328
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.1 Automatic Event Creation > **4.1.4 Event Override Rules**
~316 tok
#### **4.1.4 Event Override Rules** **Rule 1 — Matching Event, No Payment Made (Override)** * Applies when existing event is in New Lead stages OR "Proposal Signed" (unpaid) * Proposal event data **OVERRIDES** the existing event completely * Event details (date, services, etc.) are updated from the proposal * No new event is created **Rule 2 — Matching Event, Payment Made (Create New)** * Applies when existing event is at "Deposit Paid" or later (any payment made) * Existing event is **NOT overridden** (remains unchanged) * A **new event is created** with a numbered suffix: " (2)", " (3)", etc. **Rule 3 — Same Event in Multiple Packages (within same proposal)** * If the client selects the same event type in 2+ packages, multiple events are created * First: "Wedding"; Second: "Wedding (2)"; Third: "Wedding (3)" **Rule 4 — Primary Event Override** * The package's designated primary event always **becomes the project's Primary Event** * This **replaces** any existing Primary Event flag (old primary becomes non-primary) * When creating packages, the user marks one event as primary; selecting that package makes it the project primary * If multiple packages are selected, the client can choose which event is primary
#329
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.1 Automatic Event Creation > **4.1.5 Event Override Scenarios**
~167 tok
#### **4.1.5 Event Override Scenarios** **#** **Existing Event** **State** **Proposal Selection** **Result** A Wedding Unpaid (Lead / Proposal Signed) Wedding (1 package) Override existing → **Wedding** (1 event) B Wedding Paid (Deposit Paid+) Wedding (1 package) Keep + Create → **Wedding, Wedding (2)** C Wedding Post-Event Wedding (1 package) Keep + Create → **Wedding, Wedding (2)** D None N/A Wedding (2 packages) Create both → **Wedding, Wedding (2)** E Wedding Unpaid Wedding (2 packages) Override + Create → **Wedding, Wedding (2)** F Wedding Paid Wedding (2 packages) Keep + Create 2 → **Wedding, Wedding (2), Wedding (3)**
#330
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.1 Automatic Event Creation > **4.1.6 Event Naming Convention**
~93 tok
#### **4.1.6 Event Naming Convention** When multiple events of the same type exist: First event: Wedding Second event: Wedding (2) Third event: Wedding (3) Fourth event: Wedding (4) **Notes:** * The first event does NOT have a number suffix * Numbering starts at (2) for the second instance * Numbers are sequential regardless of which packages they come from
#331
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.1 Automatic Event Creation > **4.1.7 Additional Override Scenarios**
~136 tok
#### **4.1.7 Additional Override Scenarios** **Existing "Wedding" + "Wedding (2)" + Proposal adds Wedding:** **Existing Events State** **Proposal Adds** **Result** Both unpaid Wedding Override one → Wedding, Wedding (2) Both paid Wedding Create new → Wedding, Wedding (2), **Wedding (3)** **Multiple Events in Different States** (each follows its own rule): **Existing Event** **State** **Proposal Has Same?** **Result** Wedding Unpaid Yes Override Wedding Rehearsal Dinner Paid Yes Keep + Create "Rehearsal Dinner (2)"
#332
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.1 Automatic Event Creation > **4.1.8 Event Data Population**
~79 tok
#### **4.1.8 Event Data Population** When events are created or updated from proposal: **Field** **Source** Event Name Package event configuration Event Date Client input from Step 4 (or "TBD" if no definite date) Primary Event Flag Package configuration Services Package line items grouped by service type
#333
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.2 Event Mismatch Warning
~8 tok
### 4.2 Event Mismatch Warning
#334
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.2 Event Mismatch Warning > **4.2.1 Warning Trigger**
~82 tok
#### **4.2.1 Warning Trigger** The warning appears when the project contains events that do not appear in the signed proposal. This typically occurs when: * Lead form created default events based on inquiry * Client selected packages that don't include those events * Manual events were added before proposal completion
#335
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.2 Event Mismatch Warning > **4.2.2 Warning Display Location**
~76 tok
#### **4.2.2 Warning Display Location** * **Event Tab:** Warning icon (⚠️) appears next to event name in tab bar * **Tab Tooltip:** "This event may no longer be needed. Please check message inside Services tab." * **Services Section:** Full warning banner displayed within the event's Services tab
#336
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.2 Event Mismatch Warning > **4.2.3 Warning Banner Content**
~178 tok
#### **4.2.3 Warning Banner Content** **Visual:** Orange/red bordered card with warning icon (⚠️) **Title:** "This event may no longer be needed." **Body Text:** "This \[Event Name\] event was created by default when the lead came in. However, the signed proposal does not include this event. If you no longer need this event, you can delete it — but make sure to first copy any notes or files/documents to the appropriate active event before deleting. If you do want to keep this event, click 'Keep Active' below to remove this warning." **Action Buttons:** * "Delete Event" (red/orange button): Permanently removes the event * "Keep Event Active" (outline/white button): Dismisses warning, keeps event
#337
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.2 Event Mismatch Warning > **4.2.4 Delete Event Action**
~107 tok
#### **4.2.4 Delete Event Action** When user clicks "Delete Event": * Confirmation prompt may appear (TBD) * Event is permanently removed from project * All associated data is deleted: Services, Files, Documents, Notes * Warning is removed from project * Action is logged in project activity **Important Advisory:** Warning message advises user to copy any important notes or files to another event before deletion.
#338
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.2 Event Mismatch Warning > **4.2.5 Keep Event Active Action**
~62 tok
#### **4.2.5 Keep Event Active Action** When user clicks "Keep Event Active": * Warning banner is dismissed * Warning icon removed from event tab * Event remains in project * No data is modified * User's decision is recorded (for audit)
#339
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.3 Service Population
~7 tok
### 4.3 Service Population
#340
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.3 Service Population > **4.3.1 Service Creation Logic**
~79 tok
#### **4.3.1 Service Creation Logic** Services are created within events based on selected package line items: * Each service type in the package (Photography, Videography, etc.) creates a service entry * Services are grouped under the appropriate event * Line items from packages populate the service details
#341
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.3 Service Population > **4.3.2 Service Display**
~92 tok
#### **4.3.2 Service Display**
**Services Tab Structure:**
* "Services +" header with add button for manual additions
* Service cards for each service type:
* Service type name (e.g., "Photography")
* "Assign Contractors" button
* "Edit Service" button
* Delete icon (for Admin/Owner only)
* Service-specific line items and details#342
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.4 Deliverable Creation
~7 tok
### 4.4 Deliverable Creation
#343
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.4 Deliverable Creation > **4.4.1 Deliverable Logic**
~62 tok
#### **4.4.1 Deliverable Logic** Line items in packages that have the "Deliverable" toggle enabled create post-production tasks: **Line Item Setting** **Result** Deliverable: ON Creates deliverable task Deliverable: OFF No deliverable created
#344
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.4 Deliverable Creation > **4.4.2 Deliverable Data**
~67 tok
#### **4.4.2 Deliverable Data** Each deliverable includes: * **Name:** Line item name (e.g., "Basic Retouch") * **Description:** Line item description * **Quantity:** From line item quantity setting * **Due Date:** Calculated as Event Date + configured days
#345
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.4 Deliverable Creation > **4.4.3 Due Date Calculation**
~85 tok
#### **4.4.3 Due Date Calculation** Deliverable Due Date = Event Date + \[Due Days from Line Item\] **Example:** * Line item: "Basic Retouch" with Due: 10 Days after event * Event Date: August 25, 2025 * Deliverable Due Date: September 4, 2025 If event has "no definite date", deliverable due date is TBD until event date is set.
#346
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.5 Client Profile Data Handling (IMPORTANT CHANGE)
~14 tok
### 4.5 Client Profile Data Handling (IMPORTANT CHANGE)
#347
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.5 Client Profile Data Handling (IMPORTANT CHANGE) > **4.5.1 NO Automatic Sync to Client Management**
~122 tok
#### **4.5.1 NO Automatic Sync to Client Management** **IMPORTANT:** Personal details entered by the client during proposal completion are **NOT** synced to Client Management. This is a deliberate design decision. **Proposal Field** **Client Management** **Behavior** First Name ❌ NOT synced Proposal-only Last Name ❌ NOT synced Proposal-only Email address ❌ NOT synced Proposal-only Contact Number ❌ NOT synced Proposal-only Address (full) ❌ NOT synced Proposal-only
#348
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.5 Client Profile Data Handling (IMPORTANT CHANGE) > **4.5.2 Data Storage Rules**
~110 tok
#### **4.5.2 Data Storage Rules** * Personal Details entered during proposal are stored **only with that proposal** * The client's master profile in Client Management remains **unchanged** * No new client record is created from proposal data * Data is displayed in "Information Collected → Personal Details" tab for agency reference * If client needs to update their master profile, they must do so through Client Portal settings
#349
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.5 Client Profile Data Handling (IMPORTANT CHANGE) > **4.5.3 Rationale**
~75 tok
#### **4.5.3 Rationale** This approach: * Prevents accidental overwrites of verified client data * Allows clients to enter proposal-specific contact info (e.g., different address) * Maintains data integrity in Client Management * Gives agencies control over when client profiles are updated
#350
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.6 Automatic Invoice Generation
~9 tok
### 4.6 Automatic Invoice Generation
#351
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.6 Automatic Invoice Generation > **4.6.1 Invoice Creation Trigger**
~70 tok
#### **4.6.1 Invoice Creation Trigger** Invoice is automatically generated when **all mandatory client signatures are complete** (BEFORE payment, BEFORE countersign). **Trigger:** All mandatory signatures complete on proposal **NOT triggered by:** Payment or agency countersign
#352
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.6 Automatic Invoice Generation > **4.6.2 Invoice Properties**
~93 tok
#### **4.6.2 Invoice Properties** **Property** **Value** **Naming Convention** \[BRAND\_INITIALS\]-INV-\[UNIX\_TIMESTAMP\] **Example** ZEN-INV-1769593092 Status Unpaid (initial status) Structure Single invoice with all payment milestones Project Link Same project as proposal Total Amount Matches proposal total Payment Schedule From proposal payment terms
#353
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.6 Automatic Invoice Generation > **4.6.3 Invoice Content**
~137 tok
#### **4.6.3 Invoice Content** The auto-generated invoice includes: * Line items from selected packages * A La Carte items selected by client * Tax amount (calculated per proposal settings) * Discount amount (if applied) * Payment schedule with dates or TBD conditions **Payment Schedule Display:** * If event date set: Shows actual calculated dates (e.g., "June 18, 2025") * If event date TBD: Shows "TBD - \[X\] \[unit\] before event" (e.g., "TBD - 3 days before event") * If custom/fixed date: Shows exact date (no TBD prefix)
#354
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.6 Automatic Invoice Generation > **4.6.4 Invoice Location**
~65 tok
#### **4.6.4 Invoice Location** Invoice appears in: * **Project Details → Files and Documents** (primary location) * Finance → Billing → Invoices (agency view) * Client Portal → Invoices (client view) * Linked from "View Invoice" in proposal Step 6
#355
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.6 Automatic Invoice Generation > **4.6.5 Primary Event Date Changes & Invoice Impact**
~176 tok
#### **4.6.5 Primary Event Date Changes & Invoice Impact** When the Primary Event date is changed (via Project Details or proposal override): **Recalculation Rules:** **Milestone Status** **Behavior** **Paid milestones** ❌ NOT changed (remain as-is) **Unpaid/Future milestones** ✅ Recalculated based on new date **Example:** * Original Event: June 15, 2025 * Payment Schedule: $200 (paid), $300 (30 days before event - unpaid) * Event changed to: July 20, 2025 * Result: $200 remains unchanged; $300 recalculates to June 20, 2025 **Notification:** * Client is notified via email AND in-app notification when milestone dates change * Notification includes old dates and new dates
#356
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Invoice Edit Rules
~7 tok
### 4.7 Invoice Edit Rules
#357
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Invoice Edit Rules > **4.7.1 Fully Paid (Completed) Invoices**
~145 tok
#### **4.7.1 Fully Paid (Completed) Invoices** Once an invoice is fully paid: **Action** **Allowed?** Edit line items ❌ No Edit payment schedule ❌ No Delete invoice ❌ No Partial refund ✅ Yes Full refund ✅ Yes Add new charges ❌ No (create new invoice) **Refund Process:** * Available from Invoice view and Finance → Billing * Refund processed based on original payment method * Follows payment schedule (if multiple milestones) **Additional Charges After Full Payment:** * Requires creating a NEW invoice manually * Cannot modify the completed invoice
#358
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Invoice Edit Rules > **4.7.2 Partially Paid Invoices**
~163 tok
#### **4.7.2 Partially Paid Invoices** Invoices with any pending balance can still be edited: **Action** **Allowed?** Edit unpaid line items ✅ Yes Add new line items ✅ Yes Remove unpaid items ✅ Yes Change unpaid payment schedule ✅ Yes Modify paid portions ❌ No **Adding Charges After Event Date Passed:** If a new deliverable/charge is added after the event date has passed: **Scenario** **Behavior** Payment date in past ❌ Error: "Payment date cannot be in the past. Please select a current or future date." Payment date current/future ✅ Allowed User must create a new payment schedule entry with a future date for the new charge.
#359
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Invoice Edit Rules > **4.7.3 New Invoices After Primary Event Passed**
~235 tok
#### **4.7.3 New Invoices After Primary Event Passed** When creating a new invoice after the Primary Event has already occurred: **Auto-Applied Presets:** * Payment schedule presets (from templates) are NOT auto-applied * User must set up the schedule manually **"Before/After Event Date" Option:** * This option is **greyed out** (disabled) * Tooltip/Message: "Event has already passed. Please select a specific date or use invoice date options." **Available Payment Schedule Options:** **Option** **Available?** Before Event Date ❌ Greyed out After Event Date ❌ Greyed out On Event Date ❌ Greyed out Specific Date (current/future) ✅ Available Relative to Invoice Date (e.g., Net-30) ✅ Available Custom Payment Plan ✅ Available **Invoice Date Relative Options:** * Net-15 (15 days from invoice date) * Net-30 (30 days from invoice date) * Net-60 (60 days from invoice date) * Custom (user-defined days)
#360
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Invoice Edit Rules > **4.7.4 Client Notification on Invoice Changes**
~112 tok
#### **4.7.4 Client Notification on Invoice Changes** When an invoice is edited (for partially paid invoices): **Notification Type** **Triggered?** Email notification ✅ Yes In-app notification ✅ Yes **Notification Content:** * Invoice has been updated * Summary of changes (if applicable) * Link to view updated invoice **Client View:** * "View Invoice" immediately shows the updated version * No cached/old version displayed
#361
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Invoice Edit Rules > **4.6.6 Receipt Handling**
~65 tok
#### **4.6.6 Receipt Handling** After payment is completed: * Receipt is generated automatically * Receipt is sent to client via **email only** * Receipt does **NOT** appear in Project → Files and Documents * Only invoice file remains in Files listing
#362
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Pipeline Automation
~7 tok
### 4.7 Pipeline Automation
#363
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Pipeline Automation > **4.7.1 Automation Trigger**
~52 tok
#### **4.7.1 Automation Trigger** When pipeline automation is enabled in agency settings, proposal milestones trigger automatic status updates. **Trigger Condition:** Proposal Signed + First Payment Received
#364
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Pipeline Automation > **4.7.2 Automation Actions**
~54 tok
#### **4.7.2 Automation Actions** **Trigger** **Action** Contract signed AND first payment received Event status updates to next pipeline stage Multiple events in project All linked events update simultaneously
#365
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Pipeline Automation > **4.7.3 Pipeline Stage Update**
~58 tok
#### **4.7.3 Pipeline Stage Update** The specific stage transition depends on agency's pipeline configuration: * Example: "Inquiry" → "Booked" * Example: "Proposal Sent" → "Contracted" Exact stages are configurable per agency.
#366
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.7 Pipeline Automation > **4.7.4 Notification Recipients**
~43 tok
#### **4.7.4 Notification Recipients** When pipeline automation executes: * Client is notified: Confirmed * Agency Owner is notified: Confirmed * Other roles: TBD
#367
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.8 Signed Proposal Access
~8 tok
### 4.8 Signed Proposal Access
#368
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.8 Signed Proposal Access > **4.8.1 Agency Access**
~52 tok
#### **4.8.1 Agency Access** **Location:** Project Details → Files/Documents tab **Available Documents:** * Signed Proposal PDF * Signed Contract PDF * Invoice(s) **Actions:** View, Download, Share
#369
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.8 Signed Proposal Access > **4.8.2 Client Access**
~53 tok
#### **4.8.2 Client Access** **Location:** Client Portal → Project → Documents **Available Documents:** * Signed Proposal PDF * Signed Contract PDF * Invoice(s) * Receipts **Actions:** View, Download
#370
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.8 Signed Proposal Access > **4.8.3 Email Delivery**
~52 tok
#### **4.8.3 Email Delivery** Upon completion, system sends to client: * Confirmation email * Signed proposal PDF attachment (or link) * Signed contract PDF attachment (or link) * Receipt for payment
#371
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.9 Post-Signing Rules
~7 tok
### 4.9 Post-Signing Rules
#372
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.9 Post-Signing Rules > **4.9.1 Countersign Requirement**
~195 tok
#### **4.9.1 Countersign Requirement** After all client signatures are complete (payment NOT required): 1. Invoice is automatically generated (Unpaid status) 2. Agency countersign is **required** for full contract execution 3. "Countersign" button appears in Project Details → Files activity section **immediately** 4. Agency user clicks to complete the countersign 5. Client can then proceed to payment (Step 6) 6. Contract is fully executed after countersign **Key Point:** Agency can countersign BEFORE client makes payment. Payment is not a prerequisite for countersign. **Alternative - Cash Payment:** * Client may pay in cash or via separate arrangement * Agency marks invoice as "Paid" manually in Finance → Billing * Proposal status updated to "Completed"
#373
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.9 Post-Signing Rules > **4.9.2 Proposal Lock**
~84 tok
#### **4.9.2 Proposal Lock** Once signed, the proposal cannot be edited or modified. The proposal data becomes a permanent record. Status remains "Completed" permanently. **Exception - Event Dates:** Agency CAN edit event dates in Project Details after proposal completion. This allows for date changes that may occur after booking.
#374
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.9 Post-Signing Rules > **4.9.2 Adding Additional Services**
~85 tok
#### **4.9.2 Adding Additional Services** After proposal is signed: * New proposals cannot be sent for the same project phase * Additional services must be added via new invoices * New invoices do not alter the signed proposal * Services added via invoice appear in Project Details * Original proposal record remains unchanged
#375
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.9 Post-Signing Rules > **4.9.3 Contract Integrity**
~55 tok
#### **4.9.3 Contract Integrity** The signed contract is legally binding and preserved: * E-signature with timestamp retained * Contract content immutable * Available for legal reference * Audit trail maintained
#376
**FRD #5: Impact on Project** > **4\. Functional Logic** > 4.10 A La Carte Event Creation
~77 tok
### 4.10 A La Carte Event Creation If client selects an A La Carte item that is of type "Event": * System checks if that event already exists in project * If not exists, system creates the event * If exists, event information may be updated * This follows the same matching logic as package events
#377
**FRD #5: Impact on Project** > **5\. Field Details & Validations**
~10 tok
## **5\. Field Details & Validations**
#378
**FRD #5: Impact on Project** > **5\. Field Details & Validations** > 5.1 Event Warning Display
~86 tok
### 5.1 Event Warning Display **Field** **Type** **Description** Warning Icon Icon (⚠️) Displays on event tab Warning Banner Card Orange/red bordered container Event Name Dynamic Text Inserted into warning message Delete Event Button Action Button Red/orange styling Keep Event Active Button Action Button Outline/white styling
#379
**FRD #5: Impact on Project** > **5\. Field Details & Validations** > 5.2 Auto-Created Event Fields
~74 tok
### 5.2 Auto-Created Event Fields **Field** **Source** **Notes** Event Name Package Configuration As defined in package Event Date Client Input (Step 4) Or "TBD" if no definite date Primary Event Flag Package Configuration Boolean Services Package Line Items Grouped by service type
#380
**FRD #5: Impact on Project** > **5\. Field Details & Validations** > 5.3 Auto-Generated Invoice Fields
~122 tok
### 5.3 Auto-Generated Invoice Fields **Field** **Source** **Notes** Invoice Number System Generated Unique identifier Invoice Date Completion Date Date proposal completed Due Dates Payment Schedule From proposal terms Line Items Selected Packages + Add-ons Itemized list Subtotal Calculated Sum of items Discount Proposal Settings Amount and percentage Tax Proposal Settings Calculated amount Total Calculated Final amount Status System Initially "Unpaid"
#381
**FRD #5: Impact on Project** > **5\. Field Details & Validations** > 5.4 Client Profile Sync Fields
~137 tok
### 5.4 Client Profile Sync Fields **Proposal Field** **Profile Field** **Sync Direction** First Name first\_name Proposal → Profile Last Name last\_name Proposal → Profile Email primary\_email Proposal → Profile Phone primary\_phone Proposal → Profile Address Line 1 address.line1 Proposal → Profile Address Line 2 address.line2 Proposal → Profile City address.city Proposal → Profile State address.state Proposal → Profile Postal Code address.postal Proposal → Profile Country address.country Proposal → Profile
#382
**FRD #5: Impact on Project** > **6\. Success Message Handling**
~172 tok
## **6\. Success Message Handling** **Action** **Success Message** **Display Type** **Duration** **Post-Success Behavior** Event Created (auto) None (silent) N/A N/A Event tab appears in Project Details Event Deleted "Event deleted successfully" Toast notification 3 seconds Event tab removed; Warning dismissed Keep Event Active None (warning dismissed) N/A N/A Warning banner removed; Event remains Invoice Generated (auto) None (silent) N/A N/A Invoice appears in Finance section Pipeline Updated (auto) None (silent) N/A N/A Event status changes in pipeline view Client Profile Synced (auto) None (silent) N/A N/A Profile updated in Client Management
#383
**FRD #5: Impact on Project** > **7\. Error Message Handling**
~251 tok
## **7\. Error Message Handling** **Error Scenario** **Error Message** **Display Type** **Trigger Condition** **User Action Required** Event creation failed "Unable to create event. Please contact support." Toast notification Database error Contact support Invoice generation failed "Invoice could not be generated automatically. Please create manually." Toast notification System error Create invoice manually in Finance Pipeline update failed "Pipeline status could not be updated. Please update manually." Toast notification Automation error Manually update status Event deletion failed "Unable to delete event. Please try again." Toast notification Database error Retry deletion Client sync failed "Client profile could not be updated. Please verify manually." Toast notification Sync error Check Client Management Deliverable creation failed "Some deliverables could not be created. Please add manually." Toast notification System error Add deliverables manually
#384
**FRD #5: Impact on Project** > **8\. Edge Cases**
~375 tok
## **8\. Edge Cases** **Edge Case** **System Behavior** Proposal has same event name twice (from different packages) Creates single event; Merges services from both packages (TBD - may create duplicates). Client selected packages from multiple service types Creates separate service entries for each type within appropriate events. All events have "no definite date" Events created with TBD status; Dates must be added manually later; Deliverable due dates also TBD. Package line item has deliverable disabled No deliverable created; Service line item only. Agency has pipeline automation disabled No automatic status update; Manual pipeline management required. Very large proposal (10+ packages selected) All events created; May impact initial load time; Consider async processing. Client completes proposal but payment fails later Events and data still created on contract sign; Payment tracked separately; Invoice shows unpaid. Multiple proposals signed (edge case - shouldn't happen) First signed proposal takes precedence; System prevents duplicate signing. Project deleted while proposal active Proposal becomes orphaned; Cleanup process handles (TBD). Event name matches but different service type Treats as same event; Services merged under single event. Deliverable due date calculation on TBD event Deliverable created with TBD due date; Updates when event date is set. Client profile has conflicting data Proposal data wins; Overwrites existing profile fields.
#385
**FRD #5: Impact on Project** > **9\. Acceptance Criteria**
~8 tok
## **9\. Acceptance Criteria**
#386
**FRD #5: Impact on Project** > **9\. Acceptance Criteria**
~800 tok
* **AC-IP-001:** Events from selected packages are automatically created in Project Details upon proposal completion.
* **AC-IP-002:** Event name matching is case-insensitive ("Wedding" = "wedding").
* **AC-IP-003:** Matching events have their data overridden by proposal data.
* **AC-IP-004:** New events (in proposal but not in project) are created automatically.
* **AC-IP-005:** Orphaned events (in project but not in proposal) display warning message.
* **AC-IP-006:** Warning banner shows in Services tab of affected event.
* **AC-IP-007:** Warning icon (⚠️) appears on event tab.
* **AC-IP-008:** Users can delete orphaned events using "Delete Event" button.
* **AC-IP-009:** Users can dismiss warning using "Keep Event Active" button.
* **AC-IP-010:** Services are populated based on selected package service types.
* **AC-IP-011:** Deliverables are created for line items marked as deliverable.
* **AC-IP-012:** Deliverable due dates are calculated from event date plus configured days.
* **AC-IP-013:** Client profile is updated with personal details from proposal.
* **AC-IP-014:** Invoice is automatically generated matching proposal amounts.
* **AC-IP-015:** Auto-generated invoice status is "Unpaid".
* **AC-IP-016:** Payment schedule in invoice matches proposal payment terms.
* **AC-IP-017:** Pipeline automation updates event status when enabled (on signing + payment).
* **AC-IP-018:** Personal Details from proposal do NOT sync to Client Management (proposal-specific only).
* **AC-IP-019:** Agency countersign is required after all client signatures and payment for full contract execution.
* **AC-IP-020:** Agency can edit event dates in Project Details after proposal completion.
* **AC-IP-021:** Matching events are overridden when no payment has been made (through "Proposal Signed" stage).
* **AC-IP-022:** Matching events are NOT overridden once payment is made ("Deposit Paid" onward); new event created with suffix.
* **AC-IP-023:** Same event in multiple packages creates numbered events: Wedding, Wedding (2), Wedding (3).
* **AC-IP-024:** Primary Event date change only recalculates future/unpaid milestones; paid milestones unchanged.
* **AC-IP-025:** Fully paid invoices are locked and cannot be edited; refunds available.
* **AC-IP-026:** Partially paid invoices can be edited; new charges require future payment dates.
* **AC-IP-027:** Past payment date shows error: "Payment date cannot be in the past. Please select a current or future date."
* **AC-IP-028:** New invoices after event passed: "before/after Event" options greyed out with message.
* **AC-IP-029:** Client notified via email AND in-app when invoice is edited or milestones change.
* **AC-IP-030:** Event mismatch warning displays after proposal signed when existing event not in proposal.
* **AC-IP-031:** Warning shows on event tab (⚠️ icon) and in Services tab (orange banner).
* **AC-IP-032:** "Delete Event" permanently removes event after confirmation.
* **AC-IP-033:** "Keep Event Active" permanently dismisses warning.
* **AC-IP-034:** Multiple mismatched events each show warning on their own Services tab.
* **AC-IP-035#387
**FRD #5: Impact on Project** > **9\. Acceptance Criteria**
~174 tok
:** Signed proposal is accessible in Project Files/Documents. * **AC-IP-036:** Signed proposal is accessible to client in Client Portal. * **AC-IP-037:** Additional services must be added via invoices/manual entry after proposal signing. * **AC-IP-038:** Proposal remains locked and uneditable after signing. * **AC-IP-039:** A La Carte "Event" type items create events if not existing. * **AC-IP-040:** Package's primary event becomes the project Primary Event, replacing any existing primary flag. * **AC-IP-041:** With multiple packages, client can choose which event is primary. * **AC-IP-042:** Manually-created events follow the same override rules and default to Lead stage.
#388
**FRD #5: Impact on Project** > **10\. Manual Test Cases**
~133 tok
## **10\. Manual Test Cases** Manual test cases for this module are provided in a separate Excel file: 📎 **File:** FRD\_05\_Impact\_on\_Project\_Test\_Cases.xlsx The test cases cover: * Automatic event creation * Event matching and override * Event mismatch warning display * Delete Event and Keep Active actions * Service population * Deliverable creation and due date calculation * Client profile sync * Invoice generation * Pipeline automation * Document access * All acceptance criteria * Edge cases
#389
**FRD #5: Impact on Project** > **11\. Dependencies**
~6 tok
## **11\. Dependencies**
#390
**FRD #5: Impact on Project** > **11\. Dependencies** > 11.1 Internal Dependencies
~155 tok
### 11.1 Internal Dependencies **Dependency** **Module/Feature** **Type** **Impact if Unavailable** Project Management Project structure and events Required Cannot create events or update project Invoice Module Invoice creation and management Required Cannot generate invoice automatically Client Management Client profile storage Required Cannot sync client data Pipeline Management Status automation Optional No automatic status updates Post-Production Deliverable management Required Cannot create deliverables Files/Documents Document storage Required Cannot store signed proposal/contract
#391
**FRD #5: Impact on Project** > **11\. Dependencies** > 11.2 External Dependencies
~83 tok
### 11.2 External Dependencies **Dependency** **Service** **Type** **Impact if Unavailable** PDF Generation Document service Required Cannot generate signed documents Email Service Notification delivery Required Cannot send completion confirmations Database Service Data persistence Required Cannot save any updates
#392
**FRD #5: Impact on Project** > **12\. References**
~6 tok
## **12\. References**
#393
**FRD #5: Impact on Project** > **12\. References** > 12.1 Figma Designs
~68 tok
### 12.1 Figma Designs **Screen** **File Name** **Description** Event Warning 10-projectdetail.png Warning banner in Services tab Event Tab Warning 10-projectdetail.png Warning icon on tab Proposal in Project 7-propusage.png series Proposal section in project
#394
**FRD #5: Impact on Project** > **12\. References** > 12.2 Related FRDs
~117 tok
### 12.2 Related FRDs **FRD** **Module** **Relationship** FRD #1 Proposal Listing Source templates FRD #2 Proposal Builder Template configuration FRD #3 Proposal Usage Pre-completion tracking FRD #4 Client-Side Data source from client Project Management FRD Projects Target for updates Invoice Module FRD Invoices Auto-generated invoice Pipeline Management FRD Pipeline Automation trigger Post-Production FRD Deliverables Deliverable creation
#395
**FRD #5: Impact on Project** > **12\. References** > 12.3 Source Documents
~46 tok
### 12.3 Source Documents **Document** **Reference** Module Logic Explanation Proposal Module Dec 15 2025.pdf (38:00 - 51:30) Historical Context Proposal-Module-185d8b98-5a32.json
#396
**FRD #5: Impact on Project** > **Appendix A: Event Sync Logic Flowchart**
~172 tok
## **Appendix A: Event Sync Logic Flowchart** Proposal Completed │ ▼ ┌──────────────────┐ │ For each event │ │ in proposal │ └────────┬─────────┘ │ ▼ ┌──────────────────────────────┐ │ Event exists in project? │ │ (case-insensitive match) │ └────────┬─────────────────────┘ │ ┌────┴────┐ │ │ YES NO │ │ ▼ ▼ ┌────────┐ ┌────────────┐ │Override│ │Create New │ │ Data │ │ Event │ └────────┘ └────────────┘ │ ▼ ┌──────────────────────────────┐ │ Check for orphaned events │ │ (in project, not in proposal)│ └────────┬─────────────────────┘ │ ▼ ┌──────────────────────────────┐ │ Display warning for each │ │ orphaned event │ └──────────────────────────────┘
#397
**FRD #5: Impact on Project** > **Appendix B: Deliverable Due Date Examples**
~73 tok
## **Appendix B: Deliverable Due Date Examples** **Event Date** **Line Item Due Setting** **Calculated Due Date** Aug 25, 2025 10 Days after event Sep 4, 2025 Aug 25, 2025 2 Weeks after event Sep 8, 2025 Aug 25, 2025 1 Month after event Sep 25, 2025 TBD 10 Days after event TBD
#398
**FRD #5: Impact on Project** > **Document Revision History**
~90 tok
## **Document Revision History** **Version** **Date** **Author** **Changes** 1.2 April 17, 2026 Claude AI Invoice timing, naming, TBD format, countersign before payment 1.1 April 17, 2026 Claude AI No client sync, countersign requirement, event date edits 1.0 December 16, 2025 Claude AI Initial FRD creation _End of FRD #5: Impact on Project_