dfgdfg
This commit is contained in:
@@ -99,6 +99,7 @@ interface VisionRaw {
|
|||||||
info_sheet_count: number;
|
info_sheet_count: number;
|
||||||
info_page: number | null;
|
info_page: number | null;
|
||||||
ca_page: number | null;
|
ca_page: number | null;
|
||||||
|
notes_page: number | null;
|
||||||
name_company: string | null;
|
name_company: string | null;
|
||||||
prospective_buyer: string | null;
|
prospective_buyer: string | null;
|
||||||
company: string | null;
|
company: string | null;
|
||||||
@@ -272,7 +273,7 @@ const RESPONSE_SCHEMA = {
|
|||||||
type: "object",
|
type: "object",
|
||||||
additionalProperties: false,
|
additionalProperties: false,
|
||||||
required: [
|
required: [
|
||||||
"doc_type", "info_sheet_count", "info_page", "ca_page", "name_company",
|
"doc_type", "info_sheet_count", "info_page", "ca_page", "notes_page", "name_company",
|
||||||
"prospective_buyer", "company", "phone", "cell", "email", "address",
|
"prospective_buyer", "company", "phone", "cell", "email", "address",
|
||||||
"state", "how_did_you_hear", "interested_in_updates",
|
"state", "how_did_you_hear", "interested_in_updates",
|
||||||
"types_of_business_raw", "notes_business_raw", "background_experience",
|
"types_of_business_raw", "notes_business_raw", "background_experience",
|
||||||
@@ -283,6 +284,7 @@ const RESPONSE_SCHEMA = {
|
|||||||
info_sheet_count: { type: "integer" },
|
info_sheet_count: { type: "integer" },
|
||||||
info_page: nullableInt,
|
info_page: nullableInt,
|
||||||
ca_page: nullableInt,
|
ca_page: nullableInt,
|
||||||
|
notes_page: nullableInt,
|
||||||
name_company: nullableString,
|
name_company: nullableString,
|
||||||
prospective_buyer: nullableString,
|
prospective_buyer: nullableString,
|
||||||
company: nullableString,
|
company: nullableString,
|
||||||
@@ -310,29 +312,38 @@ const SYSTEM_PROMPT =
|
|||||||
|
|
||||||
const USER_PROMPT = `You see all pages of one PDF, in order (image 1 = page 1).
|
const USER_PROMPT = `You see all pages of one PDF, in order (image 1 = page 1).
|
||||||
|
|
||||||
Task: Classify the document and transcribe form fields from a business brokerage "BUYER INFORMATION SHEET" package.
|
Task: Identify the page types by their headings, then transcribe form fields from a business brokerage "BUYER INFORMATION SHEET" package.
|
||||||
|
|
||||||
1. doc_type:
|
STEP 1 — Identify each page by its UNIQUE marker text (pages can appear in ANY order):
|
||||||
- "buyer_sheet": at least one page with the heading "BUYER INFORMATION SHEET" exists.
|
- NOTES page: contains the text "Date NDA Scanned". It is a handwritten cover sheet with "Name:", "Date NDA Scanned:", a two-column table headed "Business Interested In:", and a free-text "Notes" area at the bottom. NOT every package has one.
|
||||||
- "ca_only": no such page, but a confidentiality agreement page exists (text like "PROSPECTIVE BUYER AGREES TO KEEP AND HOLD CONFIDENTIAL").
|
- INFO SHEET page: contains the heading "BUYER INFORMATION SHEET".
|
||||||
- "other": neither (notes, listing, letter, other form) — then return null for every field and 0 for info_sheet_count.
|
- CA page: contains "CONFIDENTIALITY AGREEMENT" or "PROSPECTIVE BUYER AGREES TO KEEP AND HOLD CONFIDENTIAL".
|
||||||
2. info_sheet_count: how many separate BUYER INFORMATION SHEET pages the document contains (some files contain two filled sheets). 0 if none. If more than one, transcribe the fields from the FIRST sheet only.
|
Set notes_page, info_page, ca_page to the respective 1-based page numbers, or null if that page type is absent.
|
||||||
3. info_page: page number (1-based) of the (first) BUYER INFORMATION SHEET page, else null.
|
CRITICAL: a page with "Date NDA Scanned" is the NOTES page, NEVER the info sheet — even if it is page 1.
|
||||||
4. ca_page: page number of the (first) confidentiality agreement page, else null.
|
|
||||||
5. If doc_type is "buyer_sheet", transcribe from the info page VERBATIM (exactly as written, do not normalize, do not expand abbreviations):
|
STEP 2 — doc_type:
|
||||||
- name_company: value of the "Name/Company" line
|
- "buyer_sheet": an INFO SHEET page exists.
|
||||||
- prospective_buyer: value of the "Prospective Buyer" line
|
- "ca_only": no info sheet, but a CA page exists.
|
||||||
- company: value of a separate "Company" line if present
|
- "other": none of the above — return null for every field and 0 for info_sheet_count.
|
||||||
|
2. info_sheet_count: how many separate INFO SHEET pages exist (some files contain two). 0 if none. If more than one, transcribe from the FIRST info sheet only.
|
||||||
|
|
||||||
|
STEP 3 — Transcribe VERBATIM (exactly as written, do not normalize or expand abbreviations), each field ONLY from the page type named:
|
||||||
|
5. From the INFO SHEET page (only if info_page is set):
|
||||||
|
- name_company: "Name/Company" line
|
||||||
|
- prospective_buyer: "Prospective Buyer" line
|
||||||
|
- company: separate "Company" line if present
|
||||||
- phone, cell, email, address, state
|
- phone, cell, email, address, state
|
||||||
- how_did_you_hear: "How did you hear about us"
|
- how_did_you_hear: "How did you hear about us"
|
||||||
- interested_in_updates: answer/checkbox for receiving updates (transcribe what is marked, e.g. "Yes" or "No"), else null
|
- interested_in_updates: the marked updates answer/checkbox ("Yes"/"No"), else null
|
||||||
- types_of_business_raw: "Type(s) of business interested in" from the INFO SHEET only (may span multiple lines — join with a space). Do NOT put Notes-page content here.
|
- types_of_business_raw: the "Type(s) of business interested in" list FROM THE INFO SHEET ONLY (may span multiple lines — join with a space). This must come from the info sheet page, NEVER from the notes page.
|
||||||
- background_experience: "Background/Experience" (may span multiple lines)
|
- background_experience: "Background/Experience" (may span multiple lines)
|
||||||
- total_purchase_price: "Total Purchase Price" as written
|
- total_purchase_price: "Total Purchase Price" as written
|
||||||
- down_payment_raw: "Down Payment" as written (e.g. "$350,000", "1.5M", "TBD")
|
- down_payment_raw: "Down Payment" as written (e.g. "$350,000", "1.5M", "TBD")
|
||||||
6. If doc_type is "ca_only": transcribe what the confidentiality agreement page offers — the prospective buyer's printed or signed name into prospective_buyer, plus address/phone/email if they appear on that page. Everything not present stays null.
|
6. If doc_type is "ca_only": transcribe from the CA page — the prospective buyer's printed/signed name into prospective_buyer, plus address/phone/email if present. Everything else null.
|
||||||
7. date_of_introduction_raw: the date written next to the buyer's signature on the confidentiality agreement page, verbatim (e.g. "6/25/26"), else null.
|
7. date_of_introduction_raw: the date next to the buyer's signature on the CA page, verbatim (e.g. "6/25/26"), else null.
|
||||||
8. notes_business_raw (applies to ANY doc_type): Some packages contain a separate scanned "Notes" cover page — a handwritten sheet with fields like "Name:", "Date NDA Scanned:", and a two-column table headed "Business Interested In:". If such a Notes page is present, transcribe the business name(s) written in that table here, verbatim (join multiple entries with a comma). This is a DIFFERENT and INDEPENDENT source from types_of_business_raw (which comes from the info sheet) — never merge the two. If no Notes page exists or its table is empty, return null.
|
8. From the NOTES page (only if notes_page is set):
|
||||||
|
- notes_business_raw: the business name(s) written in the "Business Interested In" TABLE of the notes page, verbatim (join multiple with a comma). Take ONLY the table entries — do NOT include the free-text "Notes" area at the bottom of the page. If the table is empty, null.
|
||||||
|
The notes page and the info sheet are INDEPENDENT sources; never copy content from one into the other's field.
|
||||||
|
|
||||||
A blank field, "N/A", "n", or an empty line = transcribe it as written; if truly empty, use null.
|
A blank field, "N/A", "n", or an empty line = transcribe it as written; if truly empty, use null.
|
||||||
Handwriting rules: Transcribe handwritten values letter by letter — do NOT complete them from context or from other fields. Email addresses are the most reliable spelling source on the page: read the email character by character, and if a handwritten name is ambiguous (e.g. B vs D), prefer the spelling that appears in the email address. Never alter the email itself to match your reading of the name.
|
Handwriting rules: Transcribe handwritten values letter by letter — do NOT complete them from context or from other fields. Email addresses are the most reliable spelling source on the page: read the email character by character, and if a handwritten name is ambiguous (e.g. B vs D), prefer the spelling that appears in the email address. Never alter the email itself to match your reading of the name.
|
||||||
@@ -419,7 +430,7 @@ function mergeRecord(det: BuyerRecord, vis: VisionRaw, model: string): BuyerReco
|
|||||||
delete (base as Record<string, unknown>)["_vision_error"];
|
delete (base as Record<string, unknown>)["_vision_error"];
|
||||||
|
|
||||||
if (vis.doc_type === "other") {
|
if (vis.doc_type === "other") {
|
||||||
return { ...base, is_buyer_sheet: false, _doc_type: "other", _info_page: null, _ca_page: null };
|
return { ...base, is_buyer_sheet: false, _doc_type: "other", _info_page: null, _ca_page: null, _notes_page: vis.notes_page ?? null };
|
||||||
}
|
}
|
||||||
|
|
||||||
// buyer_sheet ODER ca_only: alles übernehmen, was das Dokument hergibt
|
// buyer_sheet ODER ca_only: alles übernehmen, was das Dokument hergibt
|
||||||
@@ -449,6 +460,7 @@ function mergeRecord(det: BuyerRecord, vis: VisionRaw, model: string): BuyerReco
|
|||||||
date_of_introduction: normDate(vis.date_of_introduction_raw) ?? (det.date_of_introduction as string | null) ?? null,
|
date_of_introduction: normDate(vis.date_of_introduction_raw) ?? (det.date_of_introduction as string | null) ?? null,
|
||||||
_info_page: vis.info_page,
|
_info_page: vis.info_page,
|
||||||
_ca_page: vis.ca_page,
|
_ca_page: vis.ca_page,
|
||||||
|
_notes_page: vis.notes_page,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user