Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interfaces.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interfaces.py	(revision 18033)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interfaces.py	(revision 18034)
@@ -112,16 +112,4 @@
     #    )
 
-    registration_fresh_fee = schema.Float(
-        title = _(u'Registration Fee (Fresh)'),
-        default = 0.0,
-        required = False,
-        )
-
-    registration_return_fee = schema.Float(
-        title = _(u'Registration Fee (Returning)'),
-        default = 0.0,
-        required = False,
-        )
-
     late_registration_fee = schema.Float(
         title = _(u'Late Registration Fee'),
@@ -142,22 +130,4 @@
         )
 
-    develop_fee = schema.Float(
-        title = _(u'Development Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    municipal_fresh_fee = schema.Float(
-        title = _(u'Municipal Fee Fresh Students'),
-        default = 0.0,
-        required = False,
-        )
-
-    municipal_returning_fee = schema.Float(
-        title = _(u'Municipal Fee Returning Students'),
-        default = 0.0,
-        required = False,
-        )
-
     alumni_fee = schema.Float(
         title = _(u'Alumni Fee'),
@@ -168,34 +138,4 @@
     conv_fee = schema.Float(
         title = _(u'Convocation Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    matric_fee = schema.Float(
-        title = _(u'Matriculation Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    waecneco_fee = schema.Float(
-        title = _(u'WAEC & NECO Verification Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    jambver_fee = schema.Float(
-        title = _(u'JAMB Verification Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    book_fee = schema.Float(
-        title = _(u'Book Deposit'),
-        default = 0.0,
-        required = False,
-        )
-
-    parentsconsult_fee = schema.Float(
-        title = _(u'Parents Consultative Forum (PCF) Fee'),
         default = 0.0,
         required = False,
@@ -250,4 +190,131 @@
         )
 
+    pg_other_fee = schema.Float(
+        title = _(u'PG Other Charges'),
+        default = 0.0,
+        required = True,
+        )
+
+    application_fee = schema.Float(
+        title = _(u'Application Fee'),
+        default = 0.0,
+        required = False,
+        )
+    jupeb_form_fee = schema.Float(
+        title = _(u'JUPEB Form Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    jupeb_acc_fee = schema.Float(
+        title = _(u'JUPEB Acceptance Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    jupeb_sci_fee = schema.Float(
+        title = _(u'JUPEB Science Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    jupeb_arts_fee = schema.Float(
+        title = _(u'JUPEB Arts Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    jupeb_hostel_fee = schema.Float(
+        title = _(u'JUPEB Hostel Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    jupeb_reg_fee = schema.Float(
+        title = _(u'JUPEB Administrative Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    pg_application_fee = schema.Float(
+        title = _(u'PG Application Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    # Sundry Fees
+
+    medical_screening_fee = schema.Float(
+        title = _(u'Medical Screening Fees'),
+        default = 0.0,
+        required = False,
+        )
+
+    book_fee = schema.Float(
+        title = _(u'Book Deposit'),
+        default = 0.0,
+        required = False,
+        )
+
+    parentsconsult_fee = schema.Float(
+        title = _(u'Parents Consultative Forum (PCF) Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    health_insurance_fee = schema.Float(
+        title = _(u'Student Health Insurance Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    develop_fee = schema.Float(
+        title = _(u'Development Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    registration_fresh_fee = schema.Float(
+        title = _(u'Registration Fee (Fresh)'),
+        default = 0.0,
+        required = False,
+        )
+
+    registration_return_fee = schema.Float(
+        title = _(u'Registration Fee (Returning)'),
+        default = 0.0,
+        required = False,
+        )
+
+    municipal_fresh_fee = schema.Float(
+        title = _(u'Municipal Fee Fresh Students'),
+        default = 0.0,
+        required = False,
+        )
+
+    municipal_returning_fee = schema.Float(
+        title = _(u'Municipal Fee Returning Students'),
+        default = 0.0,
+        required = False,
+        )
+
+    matric_fee = schema.Float(
+        title = _(u'Matriculation Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    waecneco_fee = schema.Float(
+        title = _(u'WAEC & NECO Verification Fee'),
+        default = 0.0,
+        required = False,
+        )
+
+    jambver_fee = schema.Float(
+        title = _(u'JAMB Verification Fee'),
+        default = 0.0,
+        required = False,
+        )
+
     id_card_fee = schema.Float(
         title = _(u'Student ID Card Fee'),
@@ -255,70 +322,13 @@
         required = True,
         )
-    pg_other_fee = schema.Float(
-        title = _(u'PG Other Charges'),
-        default = 0.0,
-        required = True,
-        )
-
-    application_fee = schema.Float(
-        title = _(u'Application Fee'),
-        default = 0.0,
-        required = False,
-        )
-    jupeb_form_fee = schema.Float(
-        title = _(u'JUPEB Form Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    jupeb_acc_fee = schema.Float(
-        title = _(u'JUPEB Acceptance Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    jupeb_sci_fee = schema.Float(
-        title = _(u'JUPEB Science Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    jupeb_arts_fee = schema.Float(
-        title = _(u'JUPEB Arts Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    jupeb_hostel_fee = schema.Float(
-        title = _(u'JUPEB Hostel Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    jupeb_reg_fee = schema.Float(
-        title = _(u'JUPEB Administrative Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    pg_application_fee = schema.Float(
-        title = _(u'PG Application Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    health_insurance_fee = schema.Float(
-        title = _(u'Student Health Insurance Fee'),
-        default = 0.0,
-        required = False,
-        )
-
-    medical_screening_fee = schema.Float(
-        title = _(u'Medical Screening Fees'),
-        default = 0.0,
-        required = False,
-        )
-
-    # CDL Portal Fess only
+
+    _fee = schema.Float(
+        title = u'',
+        default = 0.0,
+        required = False,
+        )
+
+
+    # CDL Portal Fees only
 
     medical_fee = schema.Float(
@@ -358,5 +368,4 @@
         required = False,
         )
-
 
     def getSessionString():
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interswitch/browser.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interswitch/browser.py	(revision 18033)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interswitch/browser.py	(revision 18034)
@@ -19,4 +19,6 @@
 import hashlib
 import grok
+from waeup.kofa.students.interfaces import IStudentsUtils
+from zope.component import getUtility
 from kofacustom.nigeria.interswitch.browser import (
     module_activated,
@@ -52,4 +54,27 @@
 HTTPS = True
 
+BANK_ACCOUNTS = {
+    'access':               ('1228744877', '117'),
+    'parentsconsult':       ('1228747029', '117'),
+    'health_insurance':     ('1228744884', '117'),
+    'municipal_returning':  ('0040621193','31'),
+    'clearance':            ('0040621193','31'),
+    'develop':              ('0040621193','31'),
+    'medical_screening':    ('1311220657','117'),
+    'conv':                 ('0040621193','31'),
+    'registration_fresh':   ('0040621193','31'),
+    'science':              ('0040621193','31'),
+    'id_card':              ('0040621193','31'),
+    'alumni':               ('1311974981','117'),
+    'lab_support':          ('0040621193','31'),
+    'registration_return':  ('0040621193','31'),
+    'book':                 ('1228744877','117'),
+    'waecneco':             ('0040621193','31'),
+    'jambver':              ('0040621193','31'),
+    'pg_other':             ('0040621193','31'),
+    'municipal_fresh':      ('0040621193','31'),
+    'matric':               ('0040621193','31')
+    }
+
 class CustomInterswitchPageStudent(InterswitchPageStudent):
     """ View which sends a POST request to the Interswitch
@@ -65,4 +90,5 @@
 
     def update(self):
+        student_utils = getUtility(IStudentsUtils)
         if not module_activated(
             self.context.student.current_session, self.context):
@@ -97,13 +123,6 @@
             'schoolfee', 'schoolfee40', 'secondinstal'):
             self.pay_item_id = '101'
-        elif self.context.p_category == 'book':
-            self.pay_item_id = '103'
-        elif self.context.p_category == 'parentsconsult':
-            self.pay_item_id = '104'
-        elif self.context.p_category in (
-            'municipal_fresh', 'municipal_returning',
-            'transcript_local', 'transcript_overseas', 'transcript'):
-            self.pay_item_id = '105'
         else:
+            # we use the same item_id for all sundry payments
             self.pay_item_id = '102'
         if self.context.p_category in (
@@ -143,13 +162,8 @@
 
             # Overwrite above selection
-            if self.context.p_category == 'book':
-                xmldict['institution_acct'] = '1228744877'
-                xmldict['institution_bank_id'] = '117'
-            elif self.context.p_category == 'parentsconsult':
-                xmldict['institution_acct'] = '1228747029'
-                xmldict['institution_bank_id'] = '117'
-            elif self.context.p_category == 'health_insurance':
-                xmldict['institution_acct'] = '1228744884'
-                xmldict['institution_bank_id'] = '117'
+            sundry_acct = BANK_ACCOUNTS.get(self.context.p_category, None)
+            if sundry_acct is True:
+                xmldict['institution_acct'] = sundry_acct[0]
+                xmldict['institution_bank_id'] = sundry_acct[0]
 
         if provider_amt == 0:
@@ -166,4 +180,28 @@
 </item_details>
 </payment_item_detail>""" % xmldict
+
+        # Overwrite xmltext above because we have to split required combi
+        if self.context.p_category == 'required_combi':
+            rp = student_utils._collect_required_payment_items(self.context.student)
+            academic_session = student_utils._getSessionConfiguration(self.context.p_session)
+            xmltext = """<payment_item_detail>
+<item_details detail_ref="%(detail_ref)s" college="%(institution_name)s" department="%(department)s" faculty="%(faculty)s">
+<item_detail item_id="1" item_name="%(provider_item_name)s" item_amt="%(provider_amt)d" bank_id="%(provider_bank_id)s" acct_num="%(provider_acct)s" />""" % xmldict
+            item_id = 2
+            for cat in rp:
+                fee_name = cat + '_fee'
+                item_name = cat
+                item_amt = 100 * getattr(academic_session, fee_name, 0.0)
+                if item_name.startswith('registration'):
+                    item_amt -= 100 * provider_amt
+                bank_id = BANK_ACCOUNTS[cat][1]
+                acct_num = BANK_ACCOUNTS[cat][0]
+                xmltext += """
+<item_detail item_id="%s" item_name="%s" item_amt="%d" bank_id="%s" acct_num="%s" />""" % (item_id, item_name, item_amt, bank_id, acct_num)
+                item_id += 1
+            xmltext += """
+</item_details>
+</payment_item_detail>""" % xmldict
+
         self.xml_data = """<input type="hidden" name="xml_data" value='%s'  />""" % xmltext
         self.amount_auth = int(100 * self.context.amount_auth)
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interswitch/tests.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interswitch/tests.py	(revision 18033)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/interswitch/tests.py	(revision 18034)
@@ -89,4 +89,58 @@
             self.browser.contents)
 
+    def test_interswitch_required_combi(self):
+        # Student is a fresh non-science student
+        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+        self.browser.open(self.payments_path)
+        IWorkflowState(self.student).setState('cleared')
+        self.student.nationality = u'NG'
+        self.browser.open(self.payments_path + '/addop')
+        self.browser.getControl(name="form.p_category").value = ['schoolfee']
+        self.browser.getControl(name="form.p_option").value = ['first']
+        self.browser.getControl("Create payment").click()
+        self.assertTrue('Make either single payments or make a' in self.browser.contents)
+        self.browser.getControl(name="form.p_category").value = ['required_combi']
+        self.browser.getControl("Create payment").click()
+        self.assertTrue('Student Health Insurance undefined.' in self.browser.contents)
+        self.app['configuration']['2004'].registration_fresh_fee = 10000.0
+        self.app['configuration']['2004'].book_fee = 10000.0
+        self.app['configuration']['2004'].develop_fee = 10000.0
+        self.app['configuration']['2004'].parentsconsult_fee = 10000.0
+        self.app['configuration']['2004'].municipal_fresh_fee = 10000.0
+        self.app['configuration']['2004'].matric_fee = 10000.0
+        self.app['configuration']['2004'].waecneco_fee = 10000.0
+        self.app['configuration']['2004'].jambver_fee = 10000.0
+        self.app['configuration']['2004'].health_insurance_fee = 10000.0
+        self.app['configuration']['2004'].id_card_fee = 10000.0
+        self.app['configuration']['2004'].medical_screening_fee = 10000.0
+        self.browser.getControl(name="form.p_category").value = ['required_combi']
+        self.browser.getControl("Create payment").click()
+        self.assertTrue('Payment created' in self.browser.contents)
+        self.browser.open(self.payments_path)
+        ctrl = self.browser.getControl(name='val_id')
+        self.value = ctrl.options[0]
+        self.browser.getLink(self.value).click()
+        self.assertTrue(
+            '<span>110000.0</span>' in self.browser.contents)
+        self.payment_url = self.browser.url
+        self.browser.getLink("Pay via Interswitch", index=0).click()
+        self.assertTrue('<input type="hidden" name="pay_item_id" value="102" />' in
+                           self.browser.contents)
+        self.assertEqual(self.student.current_mode, 'ug_ft')
+        # 250 gateway charge have been added
+        payment = self.student['payments'][self.value]
+        self.assertEqual(payment.amount_auth, 110250)
+        self.assertEqual(payment.net_amt, 110000)
+        print self.browser.contents
+        self.assertTrue(
+            '<input type="hidden" name="amount" value="11025000" />' in
+            self.browser.contents)
+        self.assertTrue(
+            'item_id="6" item_name="registration_fresh" item_amt="500000" bank_id="31" acct_num="0040621193"' in
+            self.browser.contents)
+        self.assertTrue(
+            'item_id="12" item_name="parentsconsult" item_amt="1000000" bank_id="117" acct_num="1228747029"' in
+            self.browser.contents)
+
     def test_interswitch_form_ticket_expired(self):
         self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/utils.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/utils.py	(revision 18033)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/students/utils.py	(revision 18034)
@@ -49,5 +49,5 @@
     PORTRAIT_CHANGE_STATES = (ADMITTED, CLEARANCE,)
 
-    REQUIRED_PAYMENTS_FRESH = {
+    REQUIRED_PAYMENTS_FRESH_SCIENCE = {
         'registration_fresh': 'Registration Fee (Fresh)',
         'book': 'Book Deposit',
@@ -55,6 +55,28 @@
         'parentsconsult': 'Parents Consultative Forum (PCF) Fee',
         'municipal_fresh': 'Fresh Students Municipal Fee',
-        }
-
+        'matric': 'Matriculation Fee',
+        'waecneco': 'WAEC/NECO Verification',
+        'jambver': 'JAMB Verification Fee',
+        'health_insurance': 'Student Health Insurance',
+        'id_card': 'I.D. Card',
+        'medical_screening': 'Medical Screening Fees',
+        'science': 'Science Bench Fee',
+        }
+
+    REQUIRED_PAYMENTS_FRESH_NON_SCIENCE = {
+        'registration_fresh': 'Registration Fee (Fresh)',
+        'book': 'Book Deposit',
+        'develop': 'Development Fee',
+        'parentsconsult': 'Parents Consultative Forum (PCF) Fee',
+        'municipal_fresh': 'Fresh Students Municipal Fee',
+        'matric': 'Matriculation Fee',
+        'waecneco': 'WAEC/NECO Verification',
+        'jambver': 'JAMB Verification Fee',
+        'health_insurance': 'Student Health Insurance',
+        'id_card': 'I.D. Card',
+        'medical_screening': 'Medical Screening Fees',
+        }
+
+    # all students (except PHM) returning
     REQUIRED_PAYMENTS_RETURNING = {
         'registration_return': 'Registration Fee (Returning)',
@@ -63,4 +85,44 @@
         'parentsconsult': 'Parents Consultative Forum (PCF) Fee',
         'municipal_returning': 'Returning Students Municipal Fee',
+        'health_insurance': 'Student Health Insurance',
+        }
+
+
+    # all stdents (except PHM) final year
+    REQUIRED_PAYMENTS_FINAL = {
+        'registration_return': 'Registration Fee (Returning)',
+        'book': 'Book Deposit',
+        'develop': 'Development Fee',
+        'parentsconsult': 'Parents Consultative Forum (PCF) Fee',
+        'municipal_returning': 'Returning Students Municipal Fee',
+        'health_insurance': 'Student Health Insurance',
+        'alumni': 'Alumni Fees',
+        'conv': 'Convocation Fees',
+        'clearance': 'Clearance Fees',
+        }
+
+    # PHM returning students
+    REQUIRED_PAYMENTS_RETURNING_PHARMACY = {
+        'registration_return': 'Registration Fee (Returning)',
+        'book': 'Book Deposit',
+        'develop': 'Development Fee',
+        'parentsconsult': 'Parents Consultative Forum (PCF) Fee',
+        'municipal_returning': 'Returning Students Municipal Fee',
+        'health_insurance': 'Student Health Insurance',
+        'lab_support': 'Lab Support',
+        }
+
+    # PHM students final year
+    REQUIRED_PAYMENTS_FINAL_PHARMACY = {
+        'registration_return': 'Registration Fee (Returning)',
+        'book': 'Book Deposit',
+        'develop': 'Development Fee',
+        'parentsconsult': 'Parents Consultative Forum (PCF) Fee',
+        'municipal_returning': 'Returning Students Municipal Fee',
+        'health_insurance': 'Student Health Insurance',
+        'alumni': 'Alumni Fees',
+        'conv': 'Convocation Fees',
+        'clearance': 'Clearance Fees',
+        'lab_support': 'Lab Support',
         }
 
@@ -87,14 +149,34 @@
         return
 
-    def _requiredPaymentsMissing(self, student, session):
-        # Deactivated on 29/09/20 (don't know why)
-        return
-
+    def _is_payment_for_final(self, student):
+        studycourse = student['studycourse']
+        certificate = getattr(studycourse,'certificate',None)
+        current_level = studycourse.current_level
+        if None in (current_level, certificate):
+            return False
+        end_level = certificate.end_level
+        if current_level >= end_level-100:
+            return True
+        return False
+
+    def _collect_required_payment_items(self, student):
         if student.is_postgrad:
             rp = self.REQUIRED_PAYMENTS_PG
+        elif student.is_fresh and student.faccode in ('ENG', 'HSC', 'NAS', 'PHM'):
+            rp = self.REQUIRED_PAYMENTS_FRESH_SCIENCE
         elif student.is_fresh:
-            rp = self.REQUIRED_PAYMENTS_FRESH
+            rp = self.REQUIRED_PAYMENTS_FRESH_NON_SCIENCE
+        elif student.faccode == 'PHM' and self._is_payment_for_final(student):
+            rp = self.REQUIRED_PAYMENTS_FINAL_PHARMACY
+        elif student.faccode == 'PHM':
+            rp = self.REQUIRED_PAYMENTS_RETURNING_PHARMACY
+        elif self._is_payment_for_final(student):
+            rp = self.REQUIRED_PAYMENTS_FINAL
         else:
-            rp = self.REQUIRED_PAYMENTS_RETURNING
+            rp = REQUIRED_PAYMENTS_RETURNING
+        return rp
+
+    def _requiredPaymentsMissing(self, student, session):
+        # Has the required combi payment been made?
         for ticket in student['payments'].values():
             if ticket.p_category == 'required_combi'and \
@@ -102,4 +184,6 @@
                 ticket.p_state == 'paid':
                 return
+        # If not, check single payments
+        rp = self._collect_required_payment_items(student)
         cats_missing = deepcopy(rp)
         if len(student['payments']):
@@ -114,4 +198,16 @@
         return "%s must be paid before Tution Fee. Make either single payments or make a 'Required Combi Payment'." % ', '.join(
             cats_missing.values())
+
+    @property
+    def _all_required_payments(self):
+        return set(
+            self.REQUIRED_PAYMENTS_PG.keys()
+            + self.REQUIRED_PAYMENTS_FRESH_SCIENCE.keys()
+            + self.REQUIRED_PAYMENTS_FRESH_NON_SCIENCE.keys()
+            + self.REQUIRED_PAYMENTS_FINAL_PHARMACY.keys()
+            + self.REQUIRED_PAYMENTS_RETURNING_PHARMACY.keys()
+            + self.REQUIRED_PAYMENTS_FINAL.keys()
+            + self.REQUIRED_PAYMENTS_RETURNING.keys()
+            )
 
     def samePaymentMade(self, student, category, p_item, p_session):
@@ -158,7 +254,5 @@
             p_level = student['studycourse'].current_level
             p_current = True
-            if category in self.REQUIRED_PAYMENTS_FRESH.keys() \
-                + self.REQUIRED_PAYMENTS_RETURNING.keys() \
-                + ['schoolfee','schoolfee40','secondinstal'] \
+            if category in list(self._all_required_payments) + ['required_combi',] \
                 and student.state == RETURNING:
                 # In case of school fee or required sundry fee payments the
@@ -253,12 +347,8 @@
                 p_item += u'%s + ' % categories[cat]
             p_item = p_item.strip(' + ')
+
         elif category == 'required_combi':
-            if student.is_postgrad:
-                rp = self.REQUIRED_PAYMENTS_PG
-            elif student.is_fresh:
-                rp = self.REQUIRED_PAYMENTS_FRESH
-            else:
-                rp = self.REQUIRED_PAYMENTS_RETURNING
-            for cat in rp:
+            rp = self._collect_required_payment_items(student)
+            for cat in rp.keys():
                 fee_name = cat + '_fee'
                 cat_amount = getattr(academic_session, fee_name, 0.0)
@@ -268,4 +358,5 @@
                 p_item += u'%s + ' % rp[cat]
             p_item = p_item.strip(' + ')
+
         else:
             fee_name = category + '_fee'
Index: /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/utils/utils.py
===================================================================
--- /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/utils/utils.py	(revision 18033)
+++ /main/kofacustom.iuokada/trunk/src/kofacustom/iuokada/utils/utils.py	(revision 18034)
@@ -161,5 +161,5 @@
         'makeup_admin': 'Make-Up Registration Fee',
         'id_card': 'Student ID Card',
-        #'required_combi': 'Required Combi Payment',
+        'required_combi': 'Required Combi Payment',
         'pg_other': 'PG Other Charges',
         #'jupeb_form':'JUPEB Form Fee',
