← FRD Management
23. Proposal Form
Pixally CRM

Proposal

Proposal Form

Functional Requirement Document

BA & Ideation: Deval Chauhan

Reviewed By: Keval Gajjar

Updated Date:16 December 2025
Status:

Version: 1.0

Proposal Module - FRD Summary

Module: Proposal Module | FRDs: 5 | Test Cases: 289 | Date: December 16, 2025

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)

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

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])
  • 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

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

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

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

Functional Requirements Document

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

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

Table of Contents

  1. Module Overview
  2. User Roles & Permissions
  3. User Flow
  4. Functional Logic
  5. Field Details & Validations
  6. Success Message Handling
  7. Error Message Handling
  8. Edge Cases
  9. Acceptance Criteria
  10. Manual Test Cases
  11. Dependencies
  12. References

1. Module Overview

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.

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.

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)

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)

2. User Roles & Permissions

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

✅

✅

✅

❌

❌

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.

3. User Flow

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.

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.

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.

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.

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.

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.

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.

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.

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.

4. Functional Logic

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

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.

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.

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.

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).

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.

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.

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.

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.

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.

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.

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.

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.

5. Field Details & Validations

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"

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

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

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

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

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

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.

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.

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

11. Dependencies

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.

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.

12. References

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

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

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

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

Functional Requirements Document

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

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

Table of Contents

  1. Module Overview
  2. User Roles & Permissions
  3. User Flow
  4. Functional Logic
  5. Field Details & Validations
  6. Success Message Handling
  7. Error Message Handling
  8. Edge Cases
  9. Acceptance Criteria
  10. Manual Test Cases
  11. Dependencies
  12. References

1. Module Overview

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.

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.

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

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)

2. User Roles & Permissions

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

✅

✅

❌

❌

❌

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.

3. User Flow

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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).

4. Functional Logic

4.1 Builder Interface Structure

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.

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.

4.2 Content Sections

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.

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

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.

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.

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)

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

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

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).

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.

4.10 Settings Panel (4th Sidebar Icon)

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)

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.

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.

4.10.4 Save Button

Yellow "Save" button at the bottom saves all settings configurations.

4.11 Colors Panel (3rd Sidebar Icon)

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

4.11.2 Button Colors Section

  • Button Text: Color picker for button label text
  • Button Color: Color picker for button background

4.11.3 Background Section

  • Background Color: Color picker for overall proposal background

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

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.

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.

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.

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.

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)

5. Field Details & Validations

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"

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

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"

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"

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%"

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"

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

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"

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

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

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)

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.

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

11. Dependencies

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

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

12. References

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

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

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

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

Functional Requirements Document

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

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

Table of Contents

  1. Module Overview
  2. User Roles & Permissions
  3. User Flow
  4. Functional Logic
  5. Field Details & Validations
  6. Success Message Handling
  7. Error Message Handling
  8. Edge Cases
  9. Acceptance Criteria
  10. Manual Test Cases
  11. Dependencies
  12. References

1. Module Overview

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.

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.

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

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)

2. User Roles & Permissions

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)

❌

❌

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).

3. User Flow

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).

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.

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.

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.

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.

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.

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.

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.

4. Functional Logic

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.

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

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.

4.4 Share Proposal Modal

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)

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

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.

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

4.6 Proposal Tracking Display

4.6.1 Header Section

  • Proposal title with project name
  • Status badge showing current state
  • "Download PDF" button (visible only when status is Completed)

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)

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.

4.7 Information Collected Section

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

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.

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).

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

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

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"

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.

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.

4.13 Proposal Access Methods & Email Verification

Clients can access a proposal in two ways, with different authentication behavior:

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

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.

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

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)]"

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.

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)

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

5. Field Details & Validations

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

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

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

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

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

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

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

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).

9. Acceptance Criteria

  • 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" timestamp.
  • 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.

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

11. Dependencies

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

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

12. References

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

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

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

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

Functional Requirements Document

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

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

Table of Contents

  1. Module Overview
  2. User Roles & Permissions
  3. User Flow
  4. Functional Logic
  5. Field Details & Validations
  6. Success Message Handling
  7. Error Message Handling
  8. Edge Cases
  9. Acceptance Criteria
  10. Manual Test Cases
  11. Dependencies
  12. References

1. Module Overview

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.

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.

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

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)

2. User Roles & Permissions

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)

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.

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

3. User Flow

3.1 Accessing the Proposal

Clients can access proposals through two methods with different authentication requirements:

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.

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.

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)

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.

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.

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.

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.

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.

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.

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

4. Functional Logic

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

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

4.3 Step 1: Choose Packages

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"

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

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

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)

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"

4.4 Step 2: Personal Details

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)

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.

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

4.5 Step 3: Event Dates (MOVED FROM STEP 4)

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"

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

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

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")

4.6 Step 4: Price Summary (MOVED FROM STEP 3)

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.

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)

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.

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)

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.

4.7 Step 5: Sign Contract

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

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

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

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

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

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

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)

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

4.8 Step 6: Initial Payment

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

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

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

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

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"

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"

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

5. Field Details & Validations

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"

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

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"

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"

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"

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"

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

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

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.

9. Acceptance Criteria

  • 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 redirects 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.

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

11. Dependencies

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

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

12. References

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

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

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

Functional Requirements Document

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

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

Table of Contents

  1. Module Overview
  2. User Roles & Permissions
  3. User Flow
  4. Functional Logic
  5. Field Details & Validations
  6. Success Message Handling
  7. Error Message Handling
  8. Edge Cases
  9. Acceptance Criteria
  10. Manual Test Cases
  11. Dependencies
  12. References

1. Module Overview

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.

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.

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

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)

2. User Roles & Permissions

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)

✅

❌

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.

3. User Flow

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.

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.

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.

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.

4. Functional Logic

4.1 Automatic Event Creation

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.

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.

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.

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

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)

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

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)"

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

4.2 Event Mismatch Warning

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

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

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

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.

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)

4.3 Service Population

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

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

4.4 Deliverable Creation

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

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

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.

4.5 Client Profile Data Handling (IMPORTANT CHANGE)

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

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

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

4.6 Automatic Invoice Generation

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

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

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)

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

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

4.7 Invoice Edit Rules

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

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.

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)

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

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

4.7 Pipeline Automation

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

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

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.

4.7.4 Notification Recipients

When pipeline automation executes:

  • Client is notified: Confirmed
  • Agency Owner is notified: Confirmed
  • Other roles: TBD

4.8 Signed Proposal Access

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

4.8.2 Client Access

Location: Client Portal → Project → Documents

Available Documents:

  • Signed Proposal PDF
  • Signed Contract PDF
  • Invoice(s)
  • Receipts

Actions: View, Download

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

4.9 Post-Signing Rules

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"

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.

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

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

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

5. Field Details & Validations

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

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

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"

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

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

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

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.

9. Acceptance Criteria

  • 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: 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.

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

11. Dependencies

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

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

12. References

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

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

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

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 │

└──────────────────────────────┘

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

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

Linked tickets (0)

No tickets linked — generate test cases directly from this FRD instead.

—