About Dealsplit
Revenue recognition for real estate teams, simplified.
Changelog
0.2.0 - 2026-02-03
Added
- • Google Sheets: Added "Gross to Office" column for principal agent's gross commission
- • Google Sheets: Added Agent 3 Name and Agent 3 Split columns (now supports 3 non-principal agents)
- • Google Sheets: Agent overflow warning when deal has more agents than available sheet slots
- • QBO: Auto-create vendors when posting journal entries - agents without a QBO vendor ID get matched to existing vendors via fuzzy name matching, or created as new vendors
-
•
QBO:
Qbo.VendorSyncmodule withensure_vendors_for_deal/2for bulk vendor sync andsync_agent/2for single-agent sync - • QBO: Vendor sync summary included in posting audit logs (matched/created/skipped/errors counts)
-
•
Initialized
tkticket system for project task tracking
Changed
- • Google Sheets: Agent splits now show GROSS commission (base commission component) instead of NET (fee_amount) to match journal entries
- • Google Sheets: Agents now sorted by gross commission amount (highest first) instead of insertion order
- • Google Sheets: Principal agent separated from non-principal agents - principal goes to "Gross to Office", others fill Agent 1/2/3 slots in order of commission
- • QBO Poster: Now runs vendor sync before posting journal entries - preloads deal_parties with agents
-
•
Row formatter now preloads agent association to detect principal status via
agent.role == :principal
Fixed
- • Google Sheets: Agent split amounts now match journal entry "Commissions Paid Out" values (gross, not net)
- • Google Sheets: Consistent ordering between UI display and sheet output
- • Deal Wizard: Running tally no longer overlaps the Progress sidebar
- • Deal Wizard: Journal Entry Preview now shows full account names on hover (tooltip)
- • Dark Mode: Fixed overly bright chips and badges throughout the app (status badges, fee component tags, dimension tags, role badges)
Tech Debt / Refactor
-
•
Extracted
partition_agents/1helper to cleanly separate principal from non-principal agents -
•
Extracted
get_gross_commission/1helper to calculate base commission from fee components -
•
Added
Qbo.Client.query_vendors/1andcreate_vendor/2for vendor API operations -
•
New
Qbo.VendorSyncmodule encapsulates fuzzy name matching (viaNameMatcher) and vendor lifecycle
Upgrade and Migration
- • Users must add "Gross to Office" column to their Google Sheets and refresh mappings
- • Users may add "Agent 3 Name" and "Agent 3 Split" columns for 3-agent deals
0.1.0 - 2026-01-11
Added
- • Deal Wizard Redesign: Real-time accounting workbench with running tally showing Gross Commission, Agent Splits, Expenses, and Net to Office as you edit
- • Edit Tracking System: Visual badges (AI/Edited/User) show what came from extraction vs. user corrections
- • Collapsible Review Sections: Extraction Summary, Agent Matching, Deal Knowledge, Revenue Configuration, and Dimensional Tags organized by correction category
- • Golden Path Integration Tests: End-to-end test framework comparing AI extraction + corrections against expected journal entries for real deals
-
•
New account types:
broker_review_fee,charitable_contributions,stock_purchase(equity account) - • Brokerage name field on deals for NAME dimension in journal entries
- • About page: Accessible via header link, displays changelog with semantic styling
Changed
- • Wizard flow reduced from 5 to 4 steps: Upload and Extract merged into single step with auto-extraction
-
•
Journal entries now use deal-side-specific accounts: Listing deals →
listing_income/agent_listing_splits, Buyer deals →buyer_income/agent_buyer_splits, etc. - • Always per-agent entries: Each agent gets separate expense line (no more aggregation mode)
- • Consistent entry ordering: Revenue (credits) → Agent splits → Fee components → Referral fees → Undeposited Funds
Fixed
- • Principal handling: Principal commissions correctly stay with office, not recorded as expenses
Removed
- • Zero-balance placeholder entries removed from journal output
- • Simple/aggregated agent expense mode removed
- • Separate Extract step removed from wizard flow
Tech Debt / Refactor
- • FeeComponentEditor extracted as reusable LiveComponent
- • Edit state computation decoupled into EditTracker module
- • Running tally computed from deal state, not stored
Upgrade and Migration
-
•
Migration adds
brokerage_namecolumn todealstable