ContractModel
The ContractModel class is the abstract base for all ACTUS contract types in the Awesome Actus Library. It defines the structure, validation, and lifecycle behavior of ACTUS-conformant financial contracts such as PAM, ANN, LAM, etc.
All contract types like
PAMinherit fromContractModel, which centralizes term management, validation, and internal representation.
🌍 Purpose
- Standardizes how contract terms are structured, stored, and validated
- Handles the lifecycle of contract input validation
- Enforces ACTUS time consistency rules
- Enables extension with user-defined terms
✏️ Structure
Each ContractModel holds contract terms in a dictionary:
self.terms = {
"contractID": ContractID("PAM-001"),
"notionalPrincipal": NotionalPrincipal(10000.0),
# ...
}
- Keys are the term identifiers (e.g.
contractID,notionalPrincipal) - Values are instances of subclasses of
ContractTerm
🛠️ TermBuilder Utility
Inside the model, a helper class TermBuilder is used to dynamically construct the correct term class based on the name:
builder = self.TermBuilder(self.terms)
builder.add("notionalPrincipal", 10000.0)
This maps a field like notionalPrincipal to the correct term class (e.g., NotionalPrincipal).
🔢 Term Access
Get a Term
model.get_term("maturityDate")
Serialize to Dictionary
model.to_dict()
Useful for exporting to JSON or saving contract data.
⚠️ Time Consistency Rules
The ContractModel enforces ACTUS time ordering constraints via check_time_consistency_rules(). This includes checks like:
contractDealDate <= initialExchangeDate <= maturityDatecycleAnchorDateOfInterestPayment < maturityDateoptionExerciseEndDate <= maturityDate
Warnings are printed if rules are violated.
🌐 User-Defined Terms
If you add a custom term not in the ACTUS standard, the model can still accept it:
pam = PAM(..., myCustomField="customValue")
These are wrapped using a fallback UserDefinedTerm and stored normally in self.terms.
✅ Required Method
validate_terms() (abstract)
Each subclass (e.g. PAM, ANN) must implement validate_terms() to:
- Check ACTUS group dependencies
- Raise errors for missing fields
🔗 See Also
PAMfor a concrete example- Contract Terms
- ACTUS Standard Overview