Capture phone (office) + mobile (cell) on card intake; ship v0.1.0:98
Completes business-card contact capture. The transcription prompt now labels Phone/Mobile/Fax on separate lines, and the extractor maps an office/main number -> phone and a cell -> mobile, never a fax. Both carry the same digit-in-source integrity rule as email/LinkedIn: a number is kept only if its digits literally appear in the source (or, on revise, the instruction) -- never minted. The proposal card shows Phone + Mobile and they're editable (aliases phone/tel/office, mobile/cell). Server: _upsert_contact_from_fundraising now accepts contact.phone + contact.mobile and writes them to the canonical contact record (contact-level, not grid pills), shipped in s9pk v0.1.0:98. No schema change -- the contacts columns already exist. 41/41 backend suite green + the matrix_intake units; card flow end-to-end is live-smoke.
This commit is contained in:
@@ -162,10 +162,13 @@ def build_commit_payload(proposal):
|
||||
"name": proposal.get("contact_name") or proposal.get("investor_name") or "",
|
||||
"email": proposal.get("contact_email") or "",
|
||||
"title": proposal.get("contact_title") or "",
|
||||
# city + linkedin_url are already honored by the server's contact upsert
|
||||
# (_upsert_contact_from_fundraising); city also syncs to the grid contact pill.
|
||||
# city + linkedin_url + phone + mobile are honored by the server's contact upsert
|
||||
# (_upsert_contact_from_fundraising); city also syncs to the grid contact pill, the
|
||||
# rest land on the canonical contact record. phone = office/main line, mobile = cell.
|
||||
"city": proposal.get("city") or "",
|
||||
"linkedin_url": proposal.get("linkedin_url") or "",
|
||||
"phone": proposal.get("phone") or "",
|
||||
"mobile": proposal.get("mobile") or "",
|
||||
}
|
||||
note = proposal.get("note") or ""
|
||||
# The CRM's grid note line uses subject-or-body for its one-line summary, so a non-empty
|
||||
|
||||
Reference in New Issue
Block a user