{"number":"15","slug":"crm-schema-export","filename":"15-crm-schema-export.md","title":"CRM Schema and Export","bytes":6348,"lines":179,"sha256":"5b6952b372827308407f7ab9309eaa44a4b7502bb7a161a7a1619f511520812d","sections":16,"tables":3,"code_blocks":5,"href":"/v1/docs/crm-schema-export","outline":[{"anchor":"1-crm-principle","level":2,"title":"1. CRM principle","line":3,"tables":[],"code":[]},{"anchor":"2-normalized-entities","level":2,"title":"2. Normalized entities","line":7,"tables":["15.2-normalized-entities.t1"],"code":[]},{"anchor":"3-required-import-columns","level":2,"title":"3. Required import columns","line":23,"tables":["15.3-required-import-columns.t1"],"code":[]},{"anchor":"4-governance-columns","level":2,"title":"4. Governance columns","line":33,"tables":[],"code":["15.4-governance-columns.c1"]},{"anchor":"5-contact-statuses","level":2,"title":"5. Contact statuses","line":64,"tables":["15.5-contact-statuses.t1"],"code":[]},{"anchor":"6-identity-resolution","level":2,"title":"6. Identity resolution","line":77,"tables":[],"code":[]},{"anchor":"7-deduplication-keys","level":2,"title":"7. Deduplication keys","line":88,"tables":[],"code":[]},{"anchor":"organization","level":3,"title":"Organization","line":90,"tables":[],"code":[]},{"anchor":"person","level":3,"title":"Person","line":97,"tables":[],"code":[]},{"anchor":"opportunity","level":3,"title":"Opportunity","line":103,"tables":[],"code":[]},{"anchor":"8-csv-injection-protection","level":2,"title":"8. CSV injection protection","line":109,"tables":[],"code":[]},{"anchor":"9-data-minimization-and-retention","level":2,"title":"9. Data minimization and retention","line":122,"tables":[],"code":["15.9-data-minimization-and-retention.c1"]},{"anchor":"10-deal-value","level":2,"title":"10. Deal value","line":138,"tables":[],"code":["15.10-deal-value.c1"]},{"anchor":"11-custom-pitch-angle-grammar","level":2,"title":"11. Custom pitch angle grammar","line":150,"tables":[],"code":["15.11-custom-pitch-angle-grammar.c1","15.11-custom-pitch-angle-grammar.c2"]},{"anchor":"12-import-quality-tests","level":2,"title":"12. Import quality tests","line":166,"tables":[],"code":[]}],"blocks":[{"type":"heading","level":1,"text":"CRM Schema and Export","anchor":"crm-schema-and-export","line":1},{"type":"heading","level":2,"text":"1. CRM principle","anchor":"1-crm-principle","line":3},{"type":"paragraph","text":"The CRM stores a qualified company opportunity and its evidence—not a dossier. Collect the minimum business-relevant fields necessary for a defined outreach purpose.","line":5},{"type":"heading","level":2,"text":"2. Normalized entities","anchor":"2-normalized-entities","line":7},{"type":"table","headers":["Entity","Primary fields"],"align":["left","left"],"rows":[["Organization","legal/display name, domain, region, industry, identifiers, parent/subsidiary links"],["Person","public name, current public role, organization link, effective dates, source IDs"],["ContactPoint","channel, value/pattern, status, provenance, lawful-use basis, last verified, suppression"],["Source","canonical URL, publisher, times, access class, extract/hash, evidence level"],["Claim","subject/predicate/object, truth state, scope, evidence links, confidence, review"],["Signal","observed event/metric/change, first/last seen, LAKA variables"],["Hypothesis","mechanism, alternatives, predicted evidence, status"],["Opportunity","intervention, service fit, priority, change state, next test"],["FinancialModel","formulas, tagged inputs, scenarios, model class, overlap group"],["Outreach","selected claim, draft, approvals, send/response/opt-out events"],["AuditRun","scope, registry version, status, owner, retention and quality results"]],"line":9,"id":"15.2-normalized-entities.t1"},{"type":"heading","level":2,"text":"3. Required import columns","anchor":"3-required-import-columns","line":23},{"type":"paragraph","text":"The user-requested view:","line":25},{"type":"table","headers":["Company Name","Domain","Industry","First Name","Last Name","Title","Email Pattern","Primary Technical/PR Gap","Microeconomic/Margin Leak","Estimated Deal Value","Custom Pitch Angle"],"align":["left","left","left","left","left","left","left","left","left","left","left"],"rows":[["","","","","","","","","","",""]],"line":27,"id":"15.3-required-import-columns.t1"},{"type":"paragraph","text":"These eleven columns are a presentation/export view. The source system should also retain the governance fields below.","line":31},{"type":"heading","level":2,"text":"4. Governance columns","anchor":"4-governance-columns","line":33},{"type":"code","lang":"text","content":"Organization ID\nPerson ID\nCanonical Domain\nRole Verified At\nRole Source URL\nContact Status\nContact Source URL\nLawful Use Basis\nJurisdiction\nConsent/Relationship Expiry\nSuppression Status\nPrimary Claim ID\nEvidence Level\nClaim State\nConfidence Band\nFinancial Model Class\nDeal Value Low\nDeal Value Base\nDeal Value High\nCurrency\nService Fit\nPriority Score\nHuman Review Status\nLast Researched At\nNext Review At\nRetention/Delete At","line":35,"id":"15.4-governance-columns.c1"},{"type":"heading","level":2,"text":"5. Contact statuses","anchor":"5-contact-statuses","line":64},{"type":"table","headers":["Status","Meaning","Export rule"],"align":["left","left","left"],"rows":[["published","company/person publicly publishes the business address for this purpose","may export with source and review"],["verified","lawfully verified through an authorized service or direct interaction","may export with verification time/method"],["pattern-only","domain convention inferred from multiple published corporate addresses","export pattern, not a personal email address"],["unknown","no reliable contact point","leave blank; use company contact route or research backlog"],["invalid","bounced/obsolete/wrong person","suppress"],["opted-out","recipient objected/unsubscribed","suppress globally as required"]],"line":66,"id":"15.5-contact-statuses.t1"},{"type":"paragraph","text":"`Email Pattern` means a pattern such as `{first}.{last}@example.com`, not a guessed address. Never mark a generated address as published or verified.","line":75},{"type":"heading","level":2,"text":"6. Identity resolution","anchor":"6-identity-resolution","line":77},{"type":"paragraph","text":"Resolve people using:","line":79},{"type":"list","ordered":false,"checklist":false,"items":[{"text":"official leadership/team page;","depth":0,"checked":null},{"text":"official filing or press release;","depth":0,"checked":null},{"text":"current company-authored biography;","depth":0,"checked":null},{"text":"reputable professional/public business profile as corroboration.","depth":0,"checked":null}],"line":81},{"type":"paragraph","text":"Require company + role + effective date. Do not merge by name alone. Preserve former roles and source times.","line":86},{"type":"heading","level":2,"text":"7. Deduplication keys","anchor":"7-deduplication-keys","line":88},{"type":"heading","level":3,"text":"Organization","anchor":"organization","line":90},{"type":"list","ordered":true,"checklist":false,"items":[{"text":"registry/ticker/legal identifier where available;","depth":0,"checked":null},{"text":"canonical registrable domain;","depth":0,"checked":null},{"text":"normalized legal name + jurisdiction;","depth":0,"checked":null},{"text":"manual review for brands/subsidiaries.","depth":0,"checked":null}],"line":92},{"type":"heading","level":3,"text":"Person","anchor":"person","line":97},{"type":"list","ordered":true,"checklist":false,"items":[{"text":"public professional profile/official identifier where lawful;","depth":0,"checked":null},{"text":"normalized name + organization ID + role period;","depth":0,"checked":null},{"text":"manual review for common names.","depth":0,"checked":null}],"line":99},{"type":"heading","level":3,"text":"Opportunity","anchor":"opportunity","line":103},{"type":"paragraph","text":"`organization_id + mechanism + service_family + active_window`","line":105},{"type":"paragraph","text":"Do not create a new opportunity merely because the same finding came from another source.","line":107},{"type":"heading","level":2,"text":"8. CSV injection protection","anchor":"8-csv-injection-protection","line":109},{"type":"paragraph","text":"Spreadsheet software may interpret cells beginning with `=`, `+`, `-`, `@`, tab, carriage return, or line feed as formulas. Before CSV export:","line":111},{"type":"list","ordered":true,"checklist":false,"items":[{"text":"keep trusted numeric fields typed as numbers;","depth":0,"checked":null},{"text":"for untrusted text beginning with a dangerous prefix, prepend a single quote or use the target CRM's documented safe import method;","depth":0,"checked":null},{"text":"normalize line endings and remove null bytes;","depth":0,"checked":null},{"text":"use a standards-compliant CSV writer with quoting;","depth":0,"checked":null},{"text":"never interpolate untrusted values into formulas;","depth":0,"checked":null},{"text":"test the actual destination CRM/spreadsheet.","depth":0,"checked":null}],"line":113},{"type":"paragraph","text":"Keep an unsanitized canonical value only in a protected system when necessary, and store the sanitized export separately.","line":120},{"type":"heading","level":2,"text":"9. Data minimization and retention","anchor":"9-data-minimization-and-retention","line":122},{"type":"paragraph","text":"For each field record:","line":124},{"type":"code","lang":"yaml","content":"purpose: \"\"\nnecessity: required|optional|exclude\nlawful_basis: \"\"\nsource: \"\"\nretention_period: \"\"\naccess_role: \"\"\ndelete_or_review_at: \"\"","line":126,"id":"15.9-data-minimization-and-retention.c1"},{"type":"paragraph","text":"Remove stale titles, invalid contact data, unsupported allegations, sensitive personal data, and records after their purpose/retention window ends. Propagate opt-outs to every outbound system.","line":136},{"type":"heading","level":2,"text":"10. Deal value","anchor":"10-deal-value","line":138},{"type":"paragraph","text":"Store deal value separately from cost of inaction and client value:","line":140},{"type":"code","lang":"text","content":"Client value range = modeled economic benefit\nProposed fee range = price for scoped service\nCRM estimated deal value = expected contract value, not the client's alleged loss","line":142,"id":"15.10-deal-value.c1"},{"type":"paragraph","text":"Do not set `Estimated Deal Value` equal to the high-case ROI. Use the offer's actual pricing/scoping logic and mark TBD until qualified.","line":148},{"type":"heading","level":2,"text":"11. Custom pitch angle grammar","anchor":"11-custom-pitch-angle-grammar","line":150},{"type":"code","lang":"text","content":"{outreach-eligible public business observation or reviewed corpus calculation}\n→ {bounded mechanism}\n→ {offered-service fit}\n→ {small diagnostic/test}","line":152,"id":"15.11-custom-pitch-angle-grammar.c1"},{"type":"paragraph","text":"Example:","line":159},{"type":"code","lang":"text","content":"Public support pages and reviews repeatedly describe setup confusion [sample/window];\ntest whether onboarding clarity is raising support load before automating the handoff.","line":161,"id":"15.11-custom-pitch-angle-grammar.c2"},{"type":"heading","level":2,"text":"12. Import quality tests","anchor":"12-import-quality-tests","line":166},{"type":"list","ordered":false,"checklist":false,"items":[{"text":"exact header names and encoding;","depth":0,"checked":null},{"text":"unique organization/person IDs retained where destination permits;","depth":0,"checked":null},{"text":"no formula injection;","depth":0,"checked":null},{"text":"URLs valid and source-linked;","depth":0,"checked":null},{"text":"enum values valid;","depth":0,"checked":null},{"text":"currency and numeric formats normalized;","depth":0,"checked":null},{"text":"blanks used instead of invented values;","depth":0,"checked":null},{"text":"contact status consistent with contact value;","depth":0,"checked":null},{"text":"opt-outs excluded and suppression list checked;","depth":0,"checked":null},{"text":"duplicate threshold and manual-review queue tested;","depth":0,"checked":null},{"text":"sample import into a non-production workspace reviewed before full import.","depth":0,"checked":null}],"line":168}]}