diff options
Diffstat (limited to 'python/Dawn/models.py')
| -rw-r--r-- | python/Dawn/models.py | 68 |
1 files changed, 64 insertions, 4 deletions
diff --git a/python/Dawn/models.py b/python/Dawn/models.py index d11a6394..ef686dd3 100644 --- a/python/Dawn/models.py +++ b/python/Dawn/models.py @@ -84,11 +84,18 @@ SWAP_TYPE = ENUM('CD_INDEX', 'CD_INDEX_TRANCHE', 'CD_BASKET_TRANCHE', 'ABS_CDS', ISDA = ENUM('ISDA2014', 'ISDA2003Cred', name='isda') DAY_COUNT = ENUM('ACT/360', 'ACT/ACT', '30/360', 'ACT/365', name='day_count') - +FREQ = ENUM('Yearly', 'Half-Yearly', 'Quarterly', 'Bi-Monthly', 'Monthly', + 'Weekly', 'Daily', 'Straight', name='frequency') BUS_DAY_CONVENTION = ENUM('Modified Following', 'Following', 'Modified Preceding', 'Preceding', 'Second-Day-After', 'End-of-Month', name='bus_day_convention') PROTECTION = ENUM('Buyer', 'Seller', name='protection') +CAPFLOOR_TYPE = ENUM('CAPFLOOR', 'CMS_OPTION', 'STRUCTURED', 'FORWARD_PREMIUM', name='capfloor_type') +CAPFLOOR = ENUM('C', 'F', name='cap_or_floor') +PAYMENT_MODE = ENUM('F', 'S', name='payment_mode') +PRICING_TYPE = ENUM('PlainVanilla', 'EquityIndex', name='pricing_type') +BEGIN_OR_END = ENUM('B', 'E', name='begin_or_end') + class BondDeal(db.Model): __tablename__ = 'bonds' id = db.Column('id', db.Integer, primary_key=True) @@ -112,9 +119,9 @@ class BondDeal(db.Model): identifier = db.Column(db.String(12), info={'filters': [lambda x: x or None,], 'trim': True}) description = db.Column(db.String(32), nullable = False, info={'trim': True}) - buysell = db.Column(db.Boolean, nullable = False, info={'choices':[(0, 'sell'), (1, 'buy')], - 'coerce': lambda x: bool(int(x)) \ - if x is not None else x}) + buysell = db.Column(db.Boolean, nullable=False, info={'choices': [(0, 'sell'), (1, 'buy')], + 'coerce': lambda x: bool(int(x)) \ + if x is not None else x}) faceamount = db.Column(db.Float, nullable=False) price = db.Column(db.Float, nullable=False) accrued = db.Column(db.Float, nullable = False) @@ -292,6 +299,59 @@ class CashFlowDeal(db.Model): trade_date = db.Column(db.Date, nullable=False) account = db.relationship(Accounts) +class CapFloorDeal(db.Model): + __tablename__ = 'capfloors' + id = db.Column('id', db.Integer, primary_key=True) + dealid = db.Column(db.String(28)) + lastupdate = db.Column(db.DateTime, server_default=db.func.now(), onupdate=db.func.now()) + action = db.Column(ACTION) + folder = db.Column(SWAPTION_STRAT, nullable=False) + custodian = db.Column(db.String(12), default='NONE', nullable=False) + cashaccount = db.Column(db.String(10), default='SGNSCLMASW', nullable=False) + cp_code = db.Column(db.String(12), db.ForeignKey('counterparties.code'), + info={'choices': [(None, '')], + 'label': 'counterparty'}, nullable=False) + comments = db.Column(db.String(100)) + floating_rate_index = db.Column(db.String(12), nullable=False, + info={'label': 'Floating Rate Index'}) + floating_rate_index_desc = db.Column(db.String(32)) + buysell = db.Column(db.Boolean, nullable=False, info={'choices':[(0, 'sell'), (1, 'buy')], + 'coerce': lambda x: bool(int(x)) \ + if x is not None else x}) + cap_or_floor = db.Column(CAPFLOOR, nullable=False, + info={'choices': [('C', 'Cap'), ('F', 'Floor')], + 'label': 'Cap or Floor?'}) + strike = db.Column(db.Float, nullable=False) + value_date = db.Column(db.Date, nullable=False) + expiration_date = db.Column(db.Date, nullable=False) + premium_percent = db.Column(db.Float, nullable=False) + pricing_type = db.Column(PRICING_TYPE, nullable=False) + payment_frequency = db.Column(FREQ, nullable=False, default='Straight') + fixing_frequency = db.Column(FREQ, nullable=False, default='Straight') + day_count_counvention = db.Column(DAY_COUNT, default='Act/Act') + bdc_convention = db.Column(BUS_DAY_CONVENTION, default='Modified') + payment_mode = db.Column(PAYMENT_MODE, nullable=False, + info={'choices': [('F', 'Flat'), ('S', 'Schedule')]}) + payment_at_beginning_or_end = db.Column(BEGIN_OR_END, nullable=False, + info={'label': 'In arrears?', + 'choices': [('E', True), + ('B', False)]}) + initial_margin_percentage = db.Column(db.Float) + initial_margin_currency = db.Column(CCY) + amount = db.Column(db.Float, nullable=False, info={'label': 'notional'}) + trade_date = db.Column(db.Date, nullable=False) + swap_type = db.Column(CAPFLOOR_TYPE, nullable=False) + reset_lag = db.Column(db.Integer, default=2) + trade_confirm = db.Column(db.String, info={'form_field_class': FileField}) + termination_date = db.Column(db.Date) + termination_amount = db.Column(db.Float) + termination_cp = db.Column(db.String(12), db.ForeignKey('counterparties.code'), + info={'choices': [(None, '')], + 'label': 'termination counterparty'}) + counterparty = db.relationship(Counterparties, foreign_keys=[cp_code]) + termination_counterparty = db.relationship(Counterparties, + foreign_keys=[termination_cp]) + BaseModelForm = model_form_factory(FlaskForm) class ModelForm(BaseModelForm): @classmethod |
