Modeling PPAs in Molecule

Last updated: October 16, 2026

This article walks through how a PPA is modeled in Molecule: what the trade side contributes, what the asset side contributes, and how the two get stitched together. For a general overview of Molecule's data models, see Stacks: Main Models in Molecule.

Trades

Trades are the base unit of transaction capture and reporting in Molecule. Every trade breaks down into legs, each leg into sublegs, and each subleg produces valuation rows. Those valuation rows are what you see in position, P&L, and risk reports.

On a trade, volumes are fixed. Prices are either fixed or set by a formula.

Molecule values a trade at three points:

  1. When the trade is booked

  2. When new market data arrives

  3. When volumes are actualized

For PPAs, the third trigger is the one that matters most, because the PPA's volumes keep changing as the asset updates. For the full trade lifecycle, see Trades Stack.

Cascading

Some trades need to change frequency over their life. A monthly forward, for example, eventually needs to be valued at its delivery-period granularity. When that happens, Molecule cascades the trade automatically: it creates child trades at the new frequency. Child trades work the same way as any other trade, with their own legs, sublegs, and valuation rows.

Assets

Assets are buckets, mainly for shape. Each asset has a book, just like a trade. You can upload multiple volumetric series to an asset, at different frequencies — a forecast, actuals, or anything else with a volume over time.

Those series are the asset's valuations. Asset valuations are meant to be peers of trade valuations, so they sit alongside trade valuation rows in reporting.

Sometimes you'll want to stitch asset valuations together (for example, combining several series into one view). Today that math happens outside Molecule.

For how asset valuations get loaded (automated feeds or manual uploads and API), see Assets Stack.

Putting them together: PPAs

A PPA is usually booked as a special kind of trade called an as-generated trade. It takes a volumetric shape from an asset, typically a blend of forward volumes and actuals, and feeds those volumes into the trade.

Every time the asset's shape is updated, the new volumes flow into the trade. That re-actualizes the trade and reprocesses its valuations.

Not every series on an asset needs to become a trade. An asset might carry other volumetric series that you only want to report on. That's fine: asset valuations already show up next to trade valuations in reporting.

For the setup of an as-generated trade itself (the product, the percentage volume, and the asset link), see Dynamic Volume Trades.

More complex PPAs

PPAs can carry more structure when the contract calls for it.

  • Complex pricing. Prices can be written in Molecule's formula language or in Python. These run at mark time or settle time.

  • Related trades. Fees and certificates can be booked as their own trades, either forward or (more often) as actuals. All the trades that make up a PPA share a single group ID (MG.ID), so you can report on them together.

Related articles