Entity model: investors (grid) vs people (contacts); fix double-count (0.1.0:48)

Per Grant's clarification of the real data model:
- Investor entities come from the fundraising grid, one per row, all labeled
  "investor" (drops the confusing lp/organization split). Grid is source of truth.
- People come ONLY from the contacts table. The grid's contacts (fundraising_
  contacts) are matched to a contact-person and recorded as member_of links to
  their investor, instead of creating duplicate person entities. This fixes the
  ~doubled people count (people now ≈ contacts, not contacts + grid contacts).
- System Status cards: Investors / People (resolved) / Contacts in CRM / Grid
  contacts, so resolved-vs-source is visible at a glance.

Verified on synthetic: people == contacts count (no double-count); multi-contact
investors preserved via member_of.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Keysat
2026-06-05 13:05:58 -05:00
parent 3c31b1e8a5
commit 91361042e7
6 changed files with 102 additions and 62 deletions
+19
View File
@@ -0,0 +1,19 @@
import { VersionInfo } from '@start9labs/start-sdk'
// Entity-model fix. Investor entities now come from the fundraising grid (one per
// row, all labeled "investor"; the confusing organization/lp split is gone), and
// PEOPLE come only from the contacts table. The grid's contacts are recorded as
// membership links to their investor rather than as duplicate people, which fixes
// the roughly-doubled people count. Rebuild the search index after upgrading.
export const v_0_1_0_48 = VersionInfo.of({
version: '0.1.0:48',
releaseNotes: {
en_US: [
'Fixes the entity counts: investors now come from the fundraising grid and',
'people come from the contacts table, with the grid\'s contacts treated as',
'memberships instead of duplicate people. Run Rebuild search index after',
'upgrading to refresh the numbers.',
].join(' '),
},
migrations: { up: async () => {}, down: async () => {} },
})