Skip to content

Commit 62bba48

Browse files
feat(compose): teaser + LP quarterly + exit memo composers
- compose_teaser: 6-slide anonymizable deal teaser (buyer/LP outreach) - compose_lp_quarterly: 9-slide fund quarterly report (NAV/IRR/TVPI/DPI, holdings, movers, capital activity) - compose_exit_memo: 8-slide exit recommendation (value creation bridge, returns-vs-underwrite, buyer landscape) All three vertical-agnostic (pe/re/infrastructure/credit/npl/vc/m_and_a). Finance-pro theme across the board. 38 new tests (13+11+14), 51/51 compose tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent d4b77b0 commit 62bba48

7 files changed

Lines changed: 1725 additions & 6 deletions

File tree

src/deckforge/compose/__init__.py

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,59 @@
11
"""Deal-deck composers — turn structured deal data into DeckForge IR.
22
3-
Callers (CreditAI, Aither, any investment platform) POST a DealFacts payload
4-
to /v1/compose/ic-memo (or /teaser, /lp-quarterly, /exit-memo) and get a
5-
fully composed .pptx back. The IR composition lives here so the logic is
6-
shared across deck types and can evolve centrally.
3+
Callers (CreditAI, Aither, any investment platform) POST a facts payload to
4+
``/v1/compose/<type>`` or import these composers directly to get a fully
5+
validated Presentation IR, which they then POST to ``/v1/render`` for a
6+
.pptx binary.
7+
8+
Available composers:
9+
10+
- ``compose_ic_memo`` — 12-slide investment committee memo
11+
- ``compose_teaser`` — 6-slide anonymized deal teaser
12+
- ``compose_lp_quarterly`` — 9-slide LP quarterly fund report
13+
- ``compose_exit_memo`` — 8-slide exit recommendation deck
714
"""
815
from __future__ import annotations
916

10-
from deckforge.compose.ic_memo import DealFacts, compose_ic_memo
17+
from deckforge.compose.exit_memo import (
18+
BuyerCandidate,
19+
ExitMemoFacts,
20+
ExitMilestone,
21+
compose_exit_memo,
22+
)
23+
from deckforge.compose.ic_memo import (
24+
ComparableTransaction,
25+
DealFacts,
26+
compose_ic_memo,
27+
)
28+
from deckforge.compose.lp_quarterly import (
29+
LPQuarterlyFacts,
30+
PortfolioHolding,
31+
PortfolioMover,
32+
compose_lp_quarterly,
33+
)
34+
from deckforge.compose.teaser import (
35+
ProcessMilestone,
36+
TeaserFacts,
37+
compose_teaser,
38+
)
1139

12-
__all__ = ["DealFacts", "compose_ic_memo"]
40+
__all__ = [
41+
# IC memo
42+
"ComparableTransaction",
43+
"DealFacts",
44+
"compose_ic_memo",
45+
# Teaser
46+
"ProcessMilestone",
47+
"TeaserFacts",
48+
"compose_teaser",
49+
# LP quarterly
50+
"LPQuarterlyFacts",
51+
"PortfolioHolding",
52+
"PortfolioMover",
53+
"compose_lp_quarterly",
54+
# Exit memo
55+
"BuyerCandidate",
56+
"ExitMemoFacts",
57+
"ExitMilestone",
58+
"compose_exit_memo",
59+
]

0 commit comments

Comments
 (0)