HALO CRM research
Partial — orphaned backend
Domain 10 · money · ~4,700 LOC

Payroll / attendance

Staff attendance and sales tracking feeding pay. A complete 330-LOC Convex payroll module exists and NOTHING CALLS IT: api.payroll.* consumers in src/ = 0, while 15 of 21 payroll components still import the Supabase client.

What it is and how it feeds the rest

Mechanically

Staff attendance and sales tracking feeding pay. A complete 330-LOC Convex payroll module exists and NOTHING CALLS IT: api.payroll.* consumers in src/ = 0, while 15 of 21 payroll components still import the Supabase client.

How it connects

Consumes attendance and salesTracker; should feed the payment log but currently does not.

Pages

  • src/pages/Payroll.tsx

Components

  • src/components/payroll/

Convex modules

  • payroll.ts

Tables

  • attendance
  • salesTracker

Findings that touch this domain

medium 39 files still import the Supabase client; 15 of them in components/payroll

src/**

high All money is float64; 2 rounding calls in 11,274 LOC, none in invoicing/referrals/payroll

convex/schema.ts:103,132,153,393,703

The decision — what we do here

FIX+BUY — wire the orphaned Convex payroll module to the UI; BUY Trolley/Deel for contractor pay + 1099s.

Buy (don't build): Trolley/Deel for contractor pay + 1099s

Repos we analyzed for this domain

LIFT dinerojs/dinero.js

Integer minor units + allocate() — kills the float/rounding bug across all money math.

STUDY frappe/hrms

HR/payroll reference — study the shape, GPL so don’t ship.

LIFT = copy the code into the fork · WRAP = run underneath as a service · STUDY = architecture only. Verdicts from the OFM sourcing campaign.

Open questions

Research priority for this domain is high. Agent findings splice in below this line and survive regeneration.