Skip to content

Generate notes & Directors Report

Who does this: FS Preparer · Senior Accountant · Platform Admin When: Statements are generated, every mandatory disclosure rule is answered, and you want the notes + Directors Report. Result: FsNote rows populated for every mandatory note + every dynamic note triggered by the TB. Engagement transitions to NOTES_COMPLETE.

This is one Claude Sonnet call — single, consolidated, 16K-token by design. The LLM receives the generated statements, the disclosure responses, the verbatim mandatory policy texts, and the engagement metadata in one prompt. Output is a structured {notes, directors_report} JSON.

Before you start

  • [ ] Engagement at STATEMENTS_GENERATED and is_balanced = true.
  • [ ] Every triggered mandatory rule answered (the handler refuses otherwise).
  • [ ] Anthropic API key configured in the worker.
  • [ ] You hold GENERATE_NOTES.

Steps

  1. Open the engagement → Notes tab.
  2. Click Generate notes.
  3. The handler enqueues generate-notes (background). The UI shows a polling indicator.
  4. After ~20–45 seconds the notes table populates with mandatory + dynamic notes. The status badge moves to NOTES_COMPLETE.

How to know it worked

  1. The Notes tab lists at minimum: directors_report, note_general, note_basis, note_policies, plus dynamic notes per TB content (note_ppe, note_trade_receivables, note_revenue, etc.).
  2. Open note_policies. The income-tax / employee-benefits / provisions paragraphs match the constitution Markdown files verbatim.
  3. Open directors_report. The Financial Results table appears at the right place (it is post-processed in deterministically, not produced by the LLM).
  4. The activity log shows fs.notes.generated with token counts and the model id.

Common situations

If you see…It means…What to do
Status moved to NOTES_ERRORClaude call failed, returned malformed JSON, or hit a schema mismatchOpen the failure record (model id, request id, error class). Retry if transient. See Notes error
directors_report body is empty / placeholder text onlyLLM didn't pick up the engagement metadata or the disclosure responsesVerify DISC-020 (Directors / Auditors) is answered. Regenerate
Mandatory policy text appears paraphrasedLLM paraphrased the verbatim block despite instructionsThe DOCX export will refuse. Regenerate. If recurring, escalate
A dynamic note is missing for a note_trigger taxonomy keyLLM returned partial outputRegenerate. If recurring, check the disclosure interrogation completeness
Two parallel Generate notes callsSecond is rejected (409 Conflict)Wait for the first to finish; or check Worker logs

Regenerate

You can regenerate notes any time the engagement is at NOTES_COMPLETE or NOTES_ERROR. Each regeneration replaces the FsNote rows; the activity log captures both attempts.

CAUTION

If the client has already signed off on the engagement and you regenerate, you have invalidated the signed artifact. The audit trail captures the timeline, but communicate the regeneration to the client and re-send the portal link.

Internal use only — BreezyCorp