Index: main/waeup.sirp/trunk/src/waeup/sirp/payments/__init__.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/payments/__init__.py	(revision 6861)
+++ main/waeup.sirp/trunk/src/waeup/sirp/payments/__init__.py	(revision 6864)
@@ -3,6 +3,9 @@
 # Make this a package.
 from waeup.sirp.payments.container import PaymentsContainer
+from waeup.sirp.payments.payment import SCPayment, OnlinePayment
 
 __all__ = [
     'PaymentsContainer',
+    'SCPayment',
+    'OnlinePayment',
     ]
Index: main/waeup.sirp/trunk/src/waeup/sirp/payments/interfaces.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/payments/interfaces.py	(revision 6861)
+++ main/waeup.sirp/trunk/src/waeup/sirp/payments/interfaces.py	(revision 6864)
@@ -1,5 +1,8 @@
 ##
 ## interfaces.py
+from zope import schema
 from waeup.sirp.interfaces import IWAeUPObject
+from waeup.sirp.payments.vocabularies import (
+    payment_states, payment_categories)
 
 class IPaymentsContainer(IWAeUPObject):
@@ -7,2 +10,84 @@
 
     """
+
+class IPayment(IWAeUPObject):
+    """A base representation of payments.
+
+    """
+
+    p_state = schema.Choice(
+        title = u'Payment State',
+        default = u'unpaid',
+        vocabulary = payment_states,
+        required = True,
+        )
+
+    p_category = schema.Choice(
+        title = u'Payment Category',
+        default = u'school fee',
+        vocabulary = payment_categories,
+        required = True,
+        )
+
+    p_item = schema.TextLine(
+        title = u'Payment Item',
+        default = u'Certificate XYZ',
+        required = False,
+        )
+
+    date_of_creation = schema.Date(
+        title = u'Ticket Creation Date',
+        )
+
+    date_of_payment = schema.Date(
+        title = u'Date of Payment',
+        )
+
+    amount_auth = schema.Int(
+        title = u'Amount authorized',
+        default = 0,
+        required = True,
+        )
+
+class ISCPayment(IPayment):
+    """A scratch card payment.
+
+    """
+
+    p_code = schema.TextLine(
+        title = u'Payment Access Code',
+        default = u'Certificate XYZ',
+        required = False,
+        )
+
+class IOnlinePayment(IPayment):
+    """A payment via payment gateways.
+
+    """
+
+    surcharge = schema.Int(
+        title = u'Surcharge',
+        default = 0,
+        required = False,
+        )
+
+    order_id = schema.TextLine(
+        title = u'Order Id',
+        default = None,
+        )
+
+    r_amount_approved = schema.Int(
+        title = u'Response Amount Approved',
+        default = 0,
+        required = False,
+        )
+
+    r_code = schema.TextLine(
+        title = u'Response Code',
+        default = None,
+        )
+
+    r_card_num = schema.TextLine(
+        title = u'Response Card Number',
+        default = None,
+        )
Index: main/waeup.sirp/trunk/src/waeup/sirp/payments/payment.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/payments/payment.py	(revision 6864)
+++ main/waeup.sirp/trunk/src/waeup/sirp/payments/payment.py	(revision 6864)
@@ -0,0 +1,58 @@
+## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+"""
+These are the payment tickets.
+"""
+import grok
+from grok import index
+from waeup.sirp.payments.interfaces import (
+    IPayment, ISCPayment, IOnlinePayment)
+from waeup.sirp.utils.helpers import attrs_to_fields
+
+class Payment(grok.Container):
+    """This is a payment.
+    """
+    grok.implements(IPayment)
+    grok.provides(IPayment)
+    grok.baseclass()
+
+    def __init__(self):
+        super(Payment, self).__init__()
+        return
+
+class SCPayment(Payment):
+    """This is a scratch card payment.
+    """
+    grok.implements(ISCPayment)
+    grok.provides(ISCPayment)
+
+    def __init__(self):
+        super(SCPayment, self).__init__()
+        return
+
+SCPayment = attrs_to_fields(SCPayment)
+
+class OnlinePayment(Payment):
+    """This is an online payment.
+    """
+    grok.implements(IOnlinePayment)
+    grok.provides(IOnlinePayment)
+
+    def __init__(self):
+        super(OnlinePayment, self).__init__()
+        return
+
+OnlinePayment = attrs_to_fields(OnlinePayment)
Index: main/waeup.sirp/trunk/src/waeup/sirp/payments/tests.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/payments/tests.py	(revision 6864)
+++ main/waeup.sirp/trunk/src/waeup/sirp/payments/tests.py	(revision 6864)
@@ -0,0 +1,65 @@
+## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+## 
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+## 
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+"""
+Tests for payments.
+"""
+from zope.interface.verify import verifyClass, verifyObject
+from waeup.sirp.payments.interfaces import (
+    IPaymentsContainer, ISCPayment, IOnlinePayment)
+from waeup.sirp.payments.container import PaymentsContainer
+from waeup.sirp.payments.payment import (
+    SCPayment, OnlinePayment)
+from waeup.sirp.testing import (FunctionalLayer, FunctionalTestCase)
+
+class PaymentsContainerTestCase(FunctionalTestCase):
+
+    layer = FunctionalLayer
+
+    def test_interfaces(self):
+        # Make sure the correct interfaces are implemented.
+        self.assertTrue(
+            verifyClass(
+                IPaymentsContainer, PaymentsContainer)
+            )
+        self.assertTrue(
+            verifyObject(
+                IPaymentsContainer, PaymentsContainer())
+            )
+        self.assertTrue(
+            verifyClass(
+                ISCPayment, SCPayment)
+            )
+        self.assertTrue(
+            verifyClass(
+                IOnlinePayment, OnlinePayment)
+            )
+        self.assertTrue(
+            verifyObject(
+                ISCPayment, SCPayment())
+            )
+        self.assertTrue(
+            verifyObject(
+                IOnlinePayment, OnlinePayment())
+            )
+        return
+
+    def test_base(self):
+        # We cannot call the fundamental methods of a base in that case
+        container = PaymentsContainer()
+        self.assertRaises(
+            NotImplementedError, container.archive)
+        self.assertRaises(
+            NotImplementedError, container.clear)
Index: main/waeup.sirp/trunk/src/waeup/sirp/payments/vocabularies.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/payments/vocabularies.py	(revision 6864)
+++ main/waeup.sirp/trunk/src/waeup/sirp/payments/vocabularies.py	(revision 6864)
@@ -0,0 +1,17 @@
+"""Vocabularies and sources for payments.
+"""
+from datetime import datetime
+from waeup.sirp.interfaces import SimpleWAeUPVocabulary
+
+payment_states = SimpleWAeUPVocabulary(
+    ('unpaid','unpaid'),
+    ('paid','paid'),
+    )
+
+payment_categories = SimpleWAeUPVocabulary(
+    ('schoolfee','school fee'),
+    ('application','application'),
+    ('hostel_maintenance','hostel maintenance'),
+    ('transfer','transfer'),
+    ('gown','gown'),
+    )
