Module: app.report_letter¶
- class app.report_letter.ReportLetterInputs(user_name, correspondence, billing_lines, job_location, subject_line, date_text, paragraphs, user_isa_number, user_phone, user_email)[source]¶
Bases:
objectNormalized inputs used by plain-text letter rendering.
- Parameters:
user_name (str)
correspondence (Sequence[str])
billing_lines (Sequence[str])
job_location (str)
subject_line (str)
date_text (str)
paragraphs (Sequence[str])
user_isa_number (str)
user_phone (str)
user_email (str)
- billing_lines: Sequence[str]¶
- correspondence: Sequence[str]¶
- date_text: str¶
- job_location: str¶
- paragraphs: Sequence[str]¶
- subject_line: str¶
- user_email: str¶
- user_isa_number: str¶
- user_name: str¶
- user_phone: str¶
- app.report_letter.build_report_letter(*, profile, job, summary, form_data=None, date_text=None)[source]¶
Create normalized report-letter text from profile/job/summary data.
- Parameters:
profile (dict | None) – User profile payload.
job (dict | None) – Job metadata payload.
summary (str) – Five-paragraph summary text.
form_data (dict | None) – Form payload, used to derive subject fields.
date_text (str | None) – Optional date override.
- Returns:
Plain-text letter body used by PDF renderer.
- Return type:
str
- app.report_letter.build_summary_prompts(*, form_data, transcript)[source]¶
Build system/user prompts for five-paragraph narrative generation.
- Parameters:
form_data (dict)
transcript (str)
- Return type:
tuple[str, str]
- app.report_letter.generate_report_letter_docx(letter_text, output_path)[source]¶
Render the generated letter to DOCX for word-processor editing.
- Parameters:
letter_text (str)
output_path (str)
- Return type:
None
- app.report_letter.generate_report_letter_pdf(letter_text, output_path, *, sender_name=None, customer_name=None, signature_name=None, signature_isa=None, job_number=None, report_images=None)[source]¶
Render report letter text to PDF, including optional job images.
- Layout settings:
Page size: US Letter (reportlab.lib.pagesizes.letter)
Margins: left/right/top/bottom = 1.0 inch
Main body font: Times-Roman, base 11 pt (auto-fit to 11/10/9/8)
Name headings: Times-Bold 12 pt for top sender/recipient lines
Footer: 8 pt note referencing the TRAQ form/job number
- Header behavior:
Sender block is placed top-left.
Recipient block is placed top-right at the same vertical origin.
- Pagination behavior:
Letter body is kept on one page when possible by modest font-size reduction.
Images, when present, are rendered after the letter section and may extend to additional pages.
- Parameters:
letter_text (str)
output_path (str)
sender_name (str | None)
customer_name (str | None)
signature_name (str | None)
signature_isa (str | None)
job_number (str | None)
report_images (Sequence[dict[str, str]] | None)
- Return type:
None
- app.report_letter.generate_summary(*, form_data, transcript)[source]¶
Generate narrative summary from form data and transcript using OpenAI.
- Parameters:
form_data (dict)
transcript (str)
- Return type:
str
- app.report_letter.polish_summary(summary, *, form_data=None, transcript=None)[source]¶
Polish generated summary text with LLM without adding new facts.
- Parameters:
summary (str)
form_data (dict | None)
transcript (str | None)
- Return type:
str
- app.report_letter.render_report_letter(inputs)[source]¶
Render normalized letter inputs to a single plain-text letter.
- Parameters:
inputs (ReportLetterInputs)
- Return type:
str