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:
@@ -20,6 +20,8 @@ _EDIT_ALIASES = {
|
||||
"title": "contact_title", "role": "contact_title",
|
||||
"city": "city", "location": "city",
|
||||
"linkedin": "linkedin_url", "linkedin_url": "linkedin_url", "li": "linkedin_url",
|
||||
"phone": "phone", "tel": "phone", "office": "phone",
|
||||
"mobile": "mobile", "cell": "mobile",
|
||||
"note": "note",
|
||||
}
|
||||
|
||||
@@ -29,7 +31,7 @@ _NO = {"no", "n", "cancel", "discard", "reject", "stop", "👎", "❌"}
|
||||
_NEW = {"new", "none", "new investor", "none of these", "create", "create new", "add new", "neither"}
|
||||
|
||||
_CONTENT_FIELDS = ("intent", "investor_name", "contact_name", "contact_email", "contact_title",
|
||||
"city", "linkedin_url", "note")
|
||||
"city", "linkedin_url", "phone", "mobile", "note")
|
||||
|
||||
|
||||
class ProposalStore:
|
||||
@@ -177,6 +179,8 @@ def render(proposal):
|
||||
("Contact", proposal.get("contact_name")),
|
||||
("Email", proposal.get("contact_email")),
|
||||
("Title", proposal.get("contact_title")),
|
||||
("Phone", proposal.get("phone")),
|
||||
("Mobile", proposal.get("mobile")),
|
||||
("City", proposal.get("city")),
|
||||
("LinkedIn", proposal.get("linkedin_url")),
|
||||
("Note", proposal.get("note")),
|
||||
|
||||
Reference in New Issue
Block a user