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: object

Normalized 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