Skip to content

Write-Off

Executive Summary

Purpose & Scope

  • Support AR write-off processes that comply with GAAP, streamline approvals, and provide a robust audit trail.
  • Scope includes: Eligibility review, packet creation and management, multi-level approvals (based on commission thresholds), NetSuite GL posting, packet and recovery workflows, status tracking, email notifications, and audit documentation.
  • Out of scope: Commission booking, general AR collections, client onboarding, and tax reporting.

Objectives

  • Establish standardized eligibility and documentation requirements
  • Enforce dual-approval controls and proper authorization
  • Ensure consistent execution and data retention for reliable reporting and audits

Process Overview

Approval Flow

mermaid
graph TD
  Draft((Draft Packet))
  Submitted((Submitted))
  Agent((Agent Approval))
  DH((Dept Head Approval))
  VP((VP Client Acct Approval))
  CFO((CFO Approval))
  MD((MD Approval))
  Complete((Complete - Executed))
  Rejected((Rejected))
  Cancelled((Cancelled))

  Draft --> Submitted
  Submitted --> Agent
  Agent --> DH
  DH --> VP
  VP -->|< $50K| Complete
  VP -->|>= $50K| CFO
  CFO -->|$50K - $250K| Complete
  CFO -->|> $250K| MD
  MD --> Complete
  Agent -->|Reject| Rejected
  DH -->|Reject| Rejected
  VP -->|Reject| Rejected
  CFO -->|Reject| Rejected
  MD -->|Reject| Rejected
  Rejected -->|Resubmit| Submitted
  Rejected -->|Cancel| Cancelled

Figure 1: Packet Approval Flow with Commission-Based Routing

Core Rules & Requirements

Eligibility & Packet Creation

  • Every receivable in a packet must have one eligibility criterion and supporting documentation—either attached at the receivable level or to the packet as a whole (if the 'Packet Document' flag is set).
Eligibility CriterionDocumentation Required
AgedCollection activity log
UncollectibleClient communication or legal documentation
BankruptcyCourt document
Agent RequestFormal written agent request
  • All receivables in a packet must relate to a single client, and packet names must be unique.

  • Receivable Assignment Rule:

    • A receivable can only be part of one packet at a time unless that packet has been Cancelled or Recovered.
  • Draft packets support add/remove/edit, mass-update, justification text, full delete, and multiple saves.

Packet submission is blocked unless all above requirements are satisfied.


Approval Matrix & Workflow

Total CommissionRoute/Required Approvers
< $50,000Agent → Dept Head → VP, Client Accounting
$50,000–$250,000Agent → Dept Head → VP CA → CFO
> $250,000Agent → Dept Head → VP CA → CFO → MD
  • Approval is sequential/role-driven as per above.
  • Approver actions: approve (advance), or reject (return to Client Accounting with comments).
  • All actions/time/reason/actor logged. Each transition triggers email notifications with actionable links.
  • On resubmission, packet resumes workflow at appropriate stage.

Write-Off Execution & Integration

  • Final approval triggers:
    • Journal entry to zero balances & mark receivables "Written Off"
    • Packet status set "Complete"
    • Summarized AR posting to NetSuite with:
      • DR: Bad Debt Expense
      • CR: Accounts Receivable
    • GL description includes packet reference/criteria breakdown
    • Receivables flagged for CECL exclusion going forward
    • Full audit log/audit trail persistence

Recovery & Audit

  • Recovery (After Packet Completion):
    • When a receivable that was written off as part of a completed packet is to be recovered, the user initiates the Recover action from the Packet Detail View.
      • This action triggers reversal journal entries in both the Client Processing subledger and NetSuite General Ledger.
      • The packet status is updated to Recovered (functionally equivalent to Cancelled for the purposes of receivable eligibility).
      • All receivables in the packet are reopened and become available for standard cash application processing.
      • A detailed audit trail is maintained for the entire recovery action.
    • Partial Recovery is not permitted:
      • Recovery reverses all receivables in the packet; individual receivable recovery within a packet is not supported.
      • If only some receivables in a packet require recovery, the entire packet must still be recovered.
      • Any receivables within the recovered packet that do not receive a recovery payment must be re-written off by creating a new packet and following the standard approval process.

User Interface Specifications

Write-Off Packet Screens

  • Key Features:
    • Receivable search (multiple fields/filters):
      • Entity
      • Department
      • Deal
      • Client
      • Buyer
      • Agent
      • Invoice Number
      • Invoice Date Range
      • Commission Amount Min-Max Range
      • Age (Days) Min-Max Range
      • Packet Name
      • Packet Status
      • Write-Off Recommended Flag
    • Search results grid with multi-select and “Create Packet” from selection
      • Entity
      • Department
      • Deal
      • Client
      • Buyer
      • Agent
      • Invoice Number
      • Invoice Date
      • Commission Amount
      • Age (Days)
      • Write-Off Recommended Flag
      • Packet Name Link to Packet Detail View
      • Packet Status
    • Validations: all must be for one client; checks for packet name uniqueness/required docs
  • Draft Mode:
    • Packet header (name, client, totals, status)
      • Packet Name
      • Client
      • Total Commission
      • Packet Status
    • Mass eligibility criteria updates and per-row override
    • Document upload per row or for packet
    • “Submit for Approval” only enabled once all docs/criteria present

Mockup:
Write-Off Packet Screen - Search Criteria Mockup
Figure: Write-Off Packet screen showing search criteria.

Write-Off Packet Screen - Search Results Mockup
Figure: Write-Off Packet screen showing search results.

Write-Off Packet - Draft Mode - Details Mockup
Figure: Edit Write-Off Packet screen in Draft Mode.

Write-Off Packet - Draft Mode - Receivables Mockup
Figure: Edit Write-Off Packet screen in Draft Mode showing receivables in packet.


Approval Screen (All Roles)

  • Approvers access this screen either by:
    • Clicking actionable links in their email notifications (sent when a packet requires their review/approval), or
    • Searching for packets on the Write-Off Packet screen that are awaiting their approval (filtered by status).
  • The Approval screen is functionally identical to the Packet Detail View, displaying all the same fields and information.
    • The only difference is that the Packet Status field is editable, limited to the status options valid for the current approver’s role (e.g., Approve, Reject).
    • Packet Status Comment field will be required when rejecting.
  • All non-approval edits (e.g., modifying receivables, documentation, or eligibility) remain restricted to Client Accounting; approvers cannot change packet content—only status and comments.
  • After a status change, the system displays a completion/confirmation message and triggers appropriate workflow updates (e.g., advancing to next approver or notifying Client Accounting if rejected).

Mockup:
Approval Screen - Status Update Mockup
Figure: Approval screen status update section.

Approval Screen - Packet Detail Mockup
Figure: Approval screen packet detail section.

Approval Screen - Receivables Mockup
Figure: Approval screen receivables section.

Approval Screen - History Mockup
Figure: Approval screen status history section.


Recovery Processing Screen

  • Client Accounting users must search for receivables associated with a completed packet using the Write-Off Packet search screen.
  • When a completed packet is opened from the search results, the screen shows the Packet Detail View, with all fields read-only except for the Recover action.
  • The Recover action is available only to users with the Client Accounting role and only for completed packets.
  • Clicking Recover initiates the actions outlined in Recovery & Audit, including reversal of all receivables in the packet and triggering standard cash application processing.

Mockup:
Recovery Processing Screen Mockup
Figure: Recovery screen showing read-only packet details and Recover action.


Packet Detail View

  • Collapsible header showing all packet-level properties:

    • Packet Name
    • Client
    • Total Commission
    • Packet Status
    • Approval History (all status changes, actions, approvers, timestamps, comments)
    • Created By / Creation Date
    • Upload Documentation [Button] (for packet-level documentation)
  • Receivables in Packet List:

    • Invoice Number
    • Invoice Date
    • Commission Amount
    • Age (Days)
    • Eligibility Criterion
    • Comments:
      • Field to add or display justification for each receivable.
      • Comments are versioned: The full history for each receivable’s comments is available, showing every previous comment along with the user and timestamp.
    • Docs [Action]:
      • Button/icon for uploading, downloading, or viewing documents at the receivable level.
    • Delete (to remove individual receivable, if allowed by workflow/state)
  • Receivables-Level Actions (buttons for batch/packet operations):

    • Add Receivables
    • Remove Selected
    • Cancel
    • Delete Packet (entire packet)
    • Save as Draft
    • Submit for Approval (enabled only when all validations pass)

Mockup:
View complete interactive Figma prototype →

Data Requirements

All tables below have tracking for creation, last update, user, and status—all actions auditable.

Write-Off Packet Table

Field NameData TypeDescription
packet_id (PK)GUIDUnique identifier for the packet.
packet_nameStringUser-entered name for the packet; must be unique.
client_id (FK)GUIDReference to the Client entity; all receivables in the packet must share this client.
client_nameStringDenormalized client name for display and reporting.
total_commissionDecimalSum of receivable commissions included in the packet.
receivable_countIntegerNumber of receivables contained in the packet.
packet_statusEnumWorkflow state of the packet (e.g., Draft, Submitted, Completed).
created_by (FK)GUIDUser who created the packet.
created_dateDateTimeTimestamp when the packet was first saved.
updated_by (FK)GUIDUser who last updated the packet.
updated_dateDateTimeTimestamp of the last update to the packet.
submitted_by (FK)GUIDUser who submitted the packet for approval, if applicable.
submitted_dateDateTimeTimestamp when the packet was submitted for approval, if applicable.
completed_dateDateTimeTimestamp when the write-off associated with this packet was executed, if applicable.
packet_doc_refStringReference to primary supporting documentation (e.g., folder ID, URL, or document key).

packet_status ENUM Values:

  • 'Draft'
  • 'Submitted'
  • 'Approved by Agent'
  • 'Approved by DH'
  • 'Approved by VP Client Accounting'
  • 'Approved by CFO'
  • 'Approved by MD'
  • 'Rejected by Agent'
  • 'Rejected by DH'
  • 'Rejected by VP Client Accounting'
  • 'Rejected by CFO'
  • 'Rejected by MD'
  • 'Resubmitted'
  • 'Cancelled'
  • 'Complete'

Field NameData TypeDescription
packet_id (FK)GUIDReferences the Write-Off Packet entity associated with this receivable.
receivable_id (FK)GUIDReferences the Receivable entity included in the packet.
eligibility_criteriaEnumEligibility classification for write-off (see defined enum values).
justificationStringOptional justification or notes at the individual receivable level.
receivable_doc_refStringReference to documentation attached specifically for this receivable (e.g., file ID, URL).
packet_doc_flagBooleanIndicates whether to rely on packet-level documentation instead of a receivable-level document (TRUE = use packet-level docs).

eligibility_criteria ENUM Values:

  • 'Aged'
  • 'Uncollectible'
  • 'Bankruptcy'
  • 'Agent Request'

Validations Table

Validation RuleContextEnforcement Method
Unique packet namePacketAt creation/submission
All receivables share client_idPacket-Receivable linkAt packet creation/receivable add
One eligibility per receivablePacket-Receivable linkAt packet creation/submit
Documentation per receivable or packet (flagged)Packet/Packet-Receivable linkAt packet submission
Receivable only in one packet at a time (except if reopened)Packet-Receivable linkAt receivable add/packet reopen
Sequential approval enforced, no skipsApproval workflowOn approval status change

Security & Data Retention

  • Only Client Accounting users may create/edit/submit packets or process recoveries.
  • Approval and status-change restricted by user’s role and workflow state.
  • Initiators cannot approve their own submission.
  • All actions, approvals, rejections, edits, and recoveries logged with timestamp/user.
  • Data, audit trail, and docs retention per regulatory guidelines.

Confidential. For internal use only.