fix: prevent incorrect soft deletes of billing items

CRITICAL BUG FIX: Billing items were being incorrectly soft-deleted during
full sync because BILLING_ITEMS was missing from the hasDateFilter check.

The Issue:
- Billing items have a date filter (itemDate >= now - yearsBack)
- Full sync with 90-day range fetched only recent billing items
- Soft delete logic saw 89,714 older items not in fetched set
- Incorrectly marked them as deleted (outside sync window)

The Fix:
- Added EntityType.BILLING_ITEMS to hasDateFilter check
- Now billing items skip soft deletes (like tickets, tasks, time entries)
- Prevents deletion of records outside the sync date range

Recovery:
- Restored all 89,714 incorrectly deleted billing items
- UPDATE billing_items SET is_deleted = false WHERE is_deleted = true

This is the same pattern used for tickets, tasks, and time entries which
also have date filters and skip soft deletes.
This commit is contained in:
root 2026-01-24 09:53:45 -05:00
parent 71873dfb3b
commit 5b7532ee59

View file

@ -350,6 +350,7 @@ export class EntitySyncService {
const hasDateFilter = entity === EntityType.TICKETS ||
entity === EntityType.TASKS ||
entity === EntityType.TIME_ENTRIES ||
entity === EntityType.BILLING_ITEMS ||
entity === EntityType.PROJECTS ||
entity === EntityType.CONTRACTS;