Skip to content

The Investor Packet

The Investor Packet is Memosa’s offering-grade deliverable: a branded Word document (and its PDF rendering) assembled from your approved memo, the deal’s parsed financials, and the right boilerplate for the deal’s structure and jurisdiction. It is the artifact you circulate to an investment committee or to limited partners.

Unlike the Canvas PDF — which is a faithful snapshot of the memo as edited — the Investor Packet is a composed offering document: a master template merged with the memo’s analytical prose, a per-asset-class risk section, and the applicable state legal notice.

The packet is built from a master Word template (a .dotx) that Memosa fills with data drawn from three sources and merges with the right supporting sub-documents:

  • Deal terms you’ve saved on the Investor Packet form (offering name, SPV name, capital stack, debt terms, return targets, and so on).
  • Pipeline data — the key_metrics and deal_data the deal-analysis workflow produced (cap rate, LTV, IRR, occupancy, archetype, and the rest).
  • Memo prose — the analytical sections your deep agents wrote and you edited: executive summary, financial analysis, market overview, risk assessment, exit strategy, and comparables.

On top of that, the assembler merges two sets of supporting sub-documents:

  • A risk section matched to the asset class. Memosa ships dedicated risk sub-documents for multifamily, office, retail, industrial, hotel, self-storage, senior housing, student housing, mixed-use, development, and fund vehicles. The selector picks the one that matches the deal so the risk disclosures are specific, not generic.
  • A state legal notice matched to the jurisdiction. Memosa ships per-state notices (Arizona, California, Colorado, Florida, Georgia, Illinois, Nevada, New Jersey, New York, Texas) and a generic fallback notice when the deal’s state isn’t one of those.

The packet validates against two deal shapes — single property and fund — and Memosa infers which one applies automatically so you don’t have to set it by hand.

The inference runs a priority cascade: an explicit deal_type on your saved terms or in the pipeline data wins first; failing that, the presence of fund markers (a fund name, a target fund size, a fund sponsor) tips the deal to fund; otherwise it defaults to single property.

The deal type changes what the packet treats as recommended content. For a fund, the assembler expects fund identity and economics — fund name, target fund size, management fee, carried-interest terms, target distributable yield, investment strategy, investment period, and target markets. For a single property, it expects the capital stack, debt terms, market location, return metrics, and the property’s physical particulars. Missing recommended fields don’t block generation; they come back as warnings.

You generate the Investor Packet from Canvas once the memo is Approved. The flow:

  1. Approve the memo. The packet path is gated — see Approval and Exports. If the document isn’t approved, generation is refused with a message naming the current state.
  2. The same gate also requires the memo to clear a readiness grade and to have no critical decision questions left uncovered. If a critical question is uncovered, the response names it (and the chart that would satisfy it) so you can close the gap precisely.
  3. Generate. Canvas assembles the DOCX and, for the PDF, hands it to the rendering service.

The DOCX is rendered to PDF by Gotenberg (a self-hosted document-conversion service) via its LibreOffice route. The generated DOCX is stored as a blob so it survives infrastructure restarts and so the exact approved bytes can be re-downloaded later from the deal’s approval-snapshot history.

From the same approved content you can generate a companion slide deck. The deck is produced in two modes — a shorter pitch cut and a longer detailed cut — and it auto-detects the deal type to decide which slides to include (for example, fund-only slides appear only for fund deals). The deck is returned as a hosted presentation and, optionally, a PDF. Like the packet, deck generation requires the memo to be approved and to pass the readiness and critical-coverage gates.

  • src/investor_packet/ip_generation_service.pyIPGenerationService: the generation lifecycle (validate Approved → load terms → load pipeline data → assemble → render DOCX → persist blob).
  • src/investor_packet/generation_validator.pyIPGenerationValidator.infer_deal_type_with_metadata() (fund-vs-single-property cascade and the upstream-taxonomy collapse), the per-deal-type required/recommended field sets, and _require_approved_state().
  • src/investor_packet/template_assembly.py + src/investor_packet/templates/ — master .dotx, per-asset-class risk_sections/, per-state state_notices/, and how memo prose is merged into the template context.
  • src/investor_packet/pdf_converter.pyGotenbergPdfConverter: DOCX → PDF via Gotenberg’s LibreOffice route.
  • src/canvas/routes/ip_routes.py — the /ip/generate and /ip/generate-deck routes, Editor auth, the 3-per-hour rate limit, and the approval / readiness / critical-coverage gate chain.