# mt940.models module

class mt940.models.Amount(amount, status, currency=None, **kwargs)

  Bases: `Model`

  Amount object containing currency and amount

  Parameters:

    - amount (str) – Amount using either a , or a . as decimal separator

    - status (str) – Either C or D for credit or debit respectively

    - currency (str) – A 3 letter currency (e.g. EUR)

      >>> Amount('123.45', 'C', 'EUR')
      <123.45 EUR>
      >>> Amount('123.45', 'D', 'EUR')
      <-123.45 EUR>

class mt940.models.Balance(status=None, amount=None, date=None, **kwargs)

  Bases: `Model`

  Parse balance statement

  Parameters:

    - status (str) – Either C or D for credit or debit respectively

    - amount (Amount) – Object containing the amount and currency

    - date (date) – The balance date

      >>> balance = Balance('C', '0.00', Date(2010, 7, 22))
      >>> balance.status
      'C'
      >>> balance.amount.amount
      Decimal('0.00')
      >>> isinstance(balance.date, Date)
      True
      >>> balance.date.year, balance.date.month, balance.date.day
      (2010, 7, 22)

      >>> Balance()
      <None @ None>

class mt940.models.Date(*args, **kwargs)

  Bases: `date`, `Model`

  Just a regular date object which supports dates given as strings

      >>> Date(year='2000', month='1', day='2')
      Date(2000, 1, 2)

      >>> Date(year='123', month='1', day='2')
      Date(2123, 1, 2)

  Parameters:

    - year (str) – Year (0-100), will automatically add 2000 when needed

    - month (str) – Month

    - day (str) – Day

class mt940.models.DateTime(*args, **kwargs)

  Bases: `datetime`, `Model`

  Just a regular datetime object which supports dates given as strings

      >>> DateTime(year='2000', month='1', day='2', hour='3', minute='4',
      ...          second='5', microsecond='6')
      DateTime(2000, 1, 2, 3, 4, 5, 6)

      >>> DateTime(year='123', month='1', day='2', hour='3', minute='4',
      ...          second='5', microsecond='6')
      DateTime(2123, 1, 2, 3, 4, 5, 6)

      >>> DateTime(2000, 1, 2, 3, 4, 5, 6)
      DateTime(2000, 1, 2, 3, 4, 5, 6)

      >>> DateTime(year='123', month='1', day='2', hour='3', minute='4',
      ...          second='5', microsecond='6', tzinfo=FixedOffset('60'))
      DateTime(2123, 1, 2, 3, 4, 5, 6, tzinfo=<mt940.models.FixedOffset ...>)

  Parameters:

    - year (str) – Year (0-100), will automatically add 2000 when needed

    - month (str) – Month

    - day (str) – Day

    - hour (str) – Hour

    - minute (str) – Minute

    - second (str) – Second

    - microsecond (str) – Microsecond

    - tzinfo (tzinfo) – Timezone information. Overwrites offset

    - offset (str) – Timezone offset in minutes, generates a tzinfo object with the given offset if no tzinfo is available.

class mt940.models.FixedOffset(offset=0, name=None)

  Bases: `tzinfo`

  Fixed time offset based on the Python docs Source: https://docs.python.org/2/library/datetime.html#tzinfo-objects

      >>> offset = FixedOffset(60)
      >>> offset.utcoffset(None).total_seconds()
      3600.0
      >>> offset.dst(None)
      datetime.timedelta(0)
      >>> offset.tzname(None)
      '60'

  dst(dt)

    datetime -> DST offset as timedelta positive east of UTC.

  tzname(dt)

    datetime -> string name of time zone.

  utcoffset(dt)

    datetime -> timedelta showing offset from UTC, negative values indicating West of UTC

class mt940.models.Model

  Bases: `object`

class mt940.models.SumAmount(*args, **kwargs)

  Bases: `Amount`

class mt940.models.Transaction(transactions, data=None)

  Bases: `Model`

  update(data)

class mt940.models.Transactions(processors=None, tags=None)

  Bases: `Sequence`

  Collection of `Transaction` objects with global properties such as begin and end balance

  DEFAULT_PROCESSORS = {'post_account_identification': [], 'post_available_balance': [], 'post_closing_balance': [], 'post_date_time_indication': [], 'post_final_closing_balance': [], 'post_final_opening_balance': [], 'post_floor_limit_indicator': [], 'post_forward_available_balance': [], 'post_intermediate_closing_balance': [], 'post_intermediate_opening_balance': [], 'post_non_swift': [], 'post_opening_balance': [], 'post_related_reference': [], 'post_statement': [<function date_cleanup_post_processor>, <function transactions_to_transaction.<locals>._transactions_to_transaction>], 'post_statement_number': [], 'post_sum_credit_entries': [], 'post_sum_debit_entries': [], 'post_transaction_details': [<function transaction_details_post_processor>], 'post_transaction_reference_number': [], 'pre_account_identification': [], 'pre_available_balance': [], 'pre_closing_balance': [], 'pre_date_time_indication': [], 'pre_final_closing_balance': [], 'pre_final_opening_balance': [], 'pre_floor_limit_indicator': [], 'pre_forward_available_balance': [], 'pre_intermediate_closing_balance': [], 'pre_intermediate_opening_balance': [], 'pre_non_swift': [], 'pre_opening_balance': [], 'pre_related_reference': [], 'pre_statement': [<function date_fixup_pre_processor>], 'pre_statement_number': [], 'pre_sum_credit_entries': [], 'pre_sum_debit_entries': [], 'pre_transaction_details': [], 'pre_transaction_reference_number': []}

    Using the processors you can pre-process data before creating objects and modify them after creating the objects

  property currency
  static defaultTags()
  classmethod normalize_tag_id(tag_id)
  parse(data)

    Parses mt940 data, expects a string with data

    Parameters:

      data (str) – The MT940 data

    Returns: `list` of `Transaction`

  sanitize_tag_id_matches(matches)
  classmethod strip(lines)