Index: main/waeup.aaue/trunk/src/waeup/aaue/students/interfaces.py
===================================================================
--- main/waeup.aaue/trunk/src/waeup/aaue/students/interfaces.py	(revision 14249)
+++ main/waeup.aaue/trunk/src/waeup/aaue/students/interfaces.py	(revision 14250)
@@ -18,14 +18,17 @@
 
 from zope import schema
-from zope.interface import Attribute
+from zope.interface import Attribute, invariant
 from zc.sourcefactory.contextual import BasicContextualSourceFactory
 from zope.catalog.interfaces import ICatalog
 from zope.component import getUtility
+from waeup.kofa.schoolgrades import ResultEntryField
 from waeup.kofa.interfaces import (IKofaObject, academic_sessions_vocab)
 from waeup.kofa.students.vocabularies import (
-    StudyLevelSource, contextual_reg_num_source
+    StudyLevelSource, contextual_reg_num_source, nats_vocab, 
     )
+from waeup.kofa.students.interfaces import IUGStudentClearance
 from waeup.kofa.schema import PhoneNumber, FormattedDate, TextLineChoice
-from kofacustom.nigeria.interfaces import LGASource
+from kofacustom.nigeria.interfaces import (
+    LGASource, exam_types, high_qual, high_grade)
 from kofacustom.nigeria.students.interfaces import (
     INigeriaStudentBase, INigeriaUGStudentClearance, INigeriaPGStudentClearance,
@@ -214,14 +217,36 @@
         )
 
-class ICustomUGStudentClearance(INigeriaUGStudentClearance):
+class ICustomUGStudentClearance(IUGStudentClearance):
     """Representation of ug student clearance data.
 
     """
 
-    #date_of_birth = FormattedDate(
-    #    title = _(u'Date of Birth'),
-    #    required = True,
-    #    show_year = True,
-    #    )
+    officer_comment = schema.Text(
+        title = _(u"Officer's Comment"),
+        required = False,
+        )
+
+    physical_clearance_date = schema.TextLine(
+        title = _(u"Physical Clearance Date"),
+        required = False,
+        )
+
+    clr_code = schema.TextLine(
+        title = _(u'CLR Activation Code'),
+        required = False,
+        readonly = False,
+        )
+
+    date_of_birth = FormattedDate(
+        title = _(u'Date of Birth'),
+        required = False,
+        show_year = True,
+        )
+
+    nationality = schema.Choice(
+        source = nats_vocab,
+        title = _(u'Nationality'),
+        required = True,
+        )
 
     lga = schema.Choice(
@@ -231,7 +256,25 @@
         )
 
+    def_adm = schema.Bool(
+        title = _(u'Deferment of Admission'),
+        required = False,
+        readonly = False,
+        default = False,
+        )
+
+    fst_sit_fname = schema.TextLine(
+        title = _(u'Full Name'),
+        required = True,
+        readonly = False,
+        )
+    fst_sit_no = schema.TextLine(
+        title = _(u'Exam Number'),
+        required = True,
+        readonly = False,
+        )
+
     fst_sit_sc_pin = schema.TextLine(
         title = _(u'Scratch Card Pin'),
-        required = False,
+        required = True,
         readonly = False,
         )
@@ -239,4 +282,37 @@
     fst_sit_sc_serial_number = schema.TextLine(
         title = _(u'Scratch Card Serial Number'),
+        required = True,
+        readonly = False,
+        )
+
+    fst_sit_date = FormattedDate(
+        title = _(u'Exam Date'),
+        required = True,
+        readonly = False,
+        show_year = True,
+        )
+
+    fst_sit_type = schema.Choice(
+        title = _(u'Exam Type'),
+        required = True,
+        readonly = False,
+        vocabulary = exam_types,
+        )
+
+    fst_sit_results = schema.List(
+        title = _(u'Exam Results'),
+        value_type = ResultEntryField(),
+        required = True,
+        readonly = False,
+        defaultFactory=list,
+        )
+
+    scd_sit_fname = schema.TextLine(
+        title = _(u'Full Name'),
+        required = False,
+        readonly = False,
+        )
+    scd_sit_no = schema.TextLine(
+        title = _(u'Exam Number'),
         required = False,
         readonly = False,
@@ -255,14 +331,103 @@
         )
 
-ICustomUGStudentClearance['lga'].order = INigeriaUGStudentClearance[
-    'lga'].order
-#ICustomUGStudentClearance['date_of_birth'].order = INigeriaUGStudentClearance[
-#    'date_of_birth'].order
-ICustomUGStudentClearance['fst_sit_sc_pin'].order = INigeriaUGStudentClearance['fst_sit_date'].order
-ICustomUGStudentClearance['scd_sit_sc_pin'].order = INigeriaUGStudentClearance['scd_sit_date'].order
-ICustomUGStudentClearance['fst_sit_sc_serial_number'].order = INigeriaUGStudentClearance['fst_sit_date'].order
-ICustomUGStudentClearance['scd_sit_sc_serial_number'].order = INigeriaUGStudentClearance['scd_sit_date'].order
-ICustomUGStudentClearance['scd_sit_date'].order = ICustomUGStudentClearance['scd_sit_type'].order
-ICustomUGStudentClearance['fst_sit_date'].order = ICustomUGStudentClearance['fst_sit_type'].order
+    scd_sit_date = FormattedDate(
+        title = _(u'Exam Date'),
+        required = False,
+        readonly = False,
+        show_year = True,
+        )
+
+    scd_sit_type = schema.Choice(
+        title = _(u'Exam Type'),
+        required = False,
+        readonly = False,
+        vocabulary = exam_types,
+        )
+
+    scd_sit_results = schema.List(
+        title = _(u'Exam Results'),
+        value_type = ResultEntryField(),
+        required = False,
+        readonly = False,
+        defaultFactory=list,
+        )
+
+
+    alr_fname = schema.TextLine(
+        title = _(u'Full Name'),
+        required = False,
+        readonly = False,
+        )
+    alr_no = schema.TextLine(
+        title = _(u'Exam Number'),
+        required = False,
+        readonly = False,
+        )
+
+    alr_date = FormattedDate(
+        title = _(u'Exam Date'),
+        required = False,
+        readonly = False,
+        show_year = True,
+        )
+
+    alr_results = schema.List(
+        title = _(u'Exam Results'),
+        value_type = ResultEntryField(),
+        required = False,
+        readonly = False,
+        defaultFactory=list,
+        )
+
+    hq_type = schema.Choice(
+        title = _(u'Qualification Obtained'),
+        required = False,
+        readonly = False,
+        vocabulary = high_qual,
+        )
+
+    hq_fname = schema.TextLine(
+        title = _(u'Full Name'),
+        required = False,
+        readonly = False,
+        )
+
+    hq_matric_no = schema.TextLine(
+        title = _(u'Former Matric Number'),
+        required = False,
+        readonly = False,
+        )
+
+    hq_degree = schema.Choice(
+        title = _(u'Class of Degree'),
+        required = False,
+        readonly = False,
+        vocabulary = high_grade,
+        )
+
+    hq_school = schema.TextLine(
+        title = _(u'Institution Attended'),
+        required = False,
+        readonly = False,
+        )
+
+    hq_session = schema.TextLine(
+        title = _(u'Years Attended'),
+        required = False,
+        readonly = False,
+        )
+
+    hq_disc = schema.TextLine(
+        title = _(u'Discipline'),
+        required = False,
+        readonly = False,
+        )
+
+    @invariant
+    def check_lga_nationality(student):
+        if student.nationality != 'NG' and student.lga not in ('foreigner', None):
+            raise Invalid(_('Nationalty and LGA are contradictory.'))
+        if student.nationality == 'NG' and student.lga == 'foreigner':
+            raise Invalid(_('Nationalty and LGA are contradictory.'))
 
 
