Skip to end of metadata
Go to start of metadata

Scenarios for Fee Management for Rule Development

 

Scenario

What is being tested or added

1

Add three classes, regular tuition, plus mandatory fees. (PT)

2

Adding four classes, regular tuition, plus mandatory fees (FT)

3

Add four classes, regular tuition plus mandatory fees (FT) Also has a late registration fee.

4

Add four classes, with one that is late, but added without penalty. (note, the regular add version is use case 8)

5

Adding four classes, and dropping one after the late drop period is over.

6

Same as 5, but adding course specific fees. (Geography general fee)

7

Add four, and then drop in the late add drop period.

8

Same as use case 4, but using a regular add, instead of add without penalty.

9

Four classes added, one dropped in add/drop period, and one dropped after add/drop period.

10

Using Shady Grove classes as the basis (there are a lot of assumptions in this use case) These will have to be cleared up with Ted.

11

Shady Grove classes for graduates using course fees, in addition to the flip from under grad to graduate art fees. (This one is fun)

12

MBA classes that are part of a flat tuition rate.

13

MBA classes that are part of a different cohort.

14

MBA classes for a non-MBA student.

15

Same as 13, but with adds and a late drop in in the mix.

16

As 15, with a legal drop in the mix.

17

As 12 but with non MBA classes in the mix.

18

MBA classes with some being taken at off-site locations. This doesn't capture all of the logic of these cases but brings in some new concepts to work from. This actually causes no charging difference because of courses on the CP campus, the tech fee is already charged.

19

MBA classes with all being taken at off-site locations. This doesn't capture all of the logic of these cases but brings in some new concepts to work from. In this case, the cohort rate will charge the tech fee instead of the mandatory fees because the courses are not taken at college park. (This is common at UMD where off site classes do not attract CP fees, but one CP fees are charged, they override things like the tech fees (because CP fee INCLUDES the tech fee).

20

Very similar to 3, full time workload, but then the student withdraws.

21

Public policy tuition and differential for a resident student.

22

Same as 21 but for a nonresident student.

23

Using courses that have a special tuition rate for certain majors only, when the student is in that major.

24

Using courses that have a special tuition rate for certain majors only, when the student is not in that major.

25

Z077 student as in 23, but also taking regular classes on top of the Cyber security classes.

26

Student taking only special classes. These classes have a special fee attached that is ONLY charged if ONLY special classes are taken.
Note, in reality the tuition charges would be covered by 1240-1248, but this is not the point of this use case. We use regular tuition to keep the variables in line.

27

Student is taken a combination of special courses as well as regular courses. This nixes the academic service fee.

28

Student is taken a combination of special courses as well as regular courses. Then they drop the regular course. This retains the academic service fee.

29

ENPM Courses (Special tuitions and fees for all students in a major) Note that the major complexity comes not from tuition (which is a fairly simple switch and go) rather the fees, which are calculated per the usual method, and then assigned to a different code. This is not an uncommon pattern at UMD (calculate the whatever, based on this, but then charge to this). We probably need a pattern to do this.

30

As 29, but change from resident to nonresident.

31

DC Weeknight tuition only

32

DC weeknight and weekend tuition only

33

Combination of weeknight and weekend tuition.

34

Combination of weeknight and weekend tuition, in addition to regular college park tuition.

35

Collaborative Engineering Student with Frostburg Discount.

1a

Add another course to make the student FT (101)

2a

Drop 1 course prior to drop penalty date 9/30/13 making the student PT (102)

3a

Add another course and drop one that had already been added prior to penalty date. Remains FT (103)

4a

Student adds a short course that is only 2 credits (104)

5a

Drop the remaining 3 classes 10/10/13, 80% (105)

6a

Same as 4a but Drop the Geography course to remove the Geography fees (106)

7a

Submit a new signup but has NO changes (107)

8a

Drop ALL 4 courses prior to the penalty date. (108)

12a

Change the student's Major to FREN rather than MBA should remove the cohort (112)

17a

Student drops all 4 of the MBA courses prior to 9/30/13 (no penalty) (117)

18a

Student drops all 4 of the MBA courses prior to 9/30/13 (no penalty) and adds 3 FREN courses (118)

19a

Student changes Major to FREN removes the cohort but stays in all of the courses (119)

23a

Student drops 1 course on 10/15/2013 (123)

25a

Student drops the non cyber courses prior to penalty 9/20/2013 (125)

28a

Student changes major to FREN should not remove academic service fee (129)

31a

Student drops 1 course prior to penalty 9/20/2013 making him PT rather than FT should change the fees (131)

34a

Student drops MBA211 course prior to penalty 9/20/2013 which negates the CP fee and brings back the Tech Fees (134)

Fee Management Default Values

Fee Management takes three major pieces of input to produce a single output. The process can broadly be defined as follows.

Inputs

ATP – gives us the dates for certain actions to take place in the system. These are generally the same for all courses at UMD (might not be at UMD) so a student will sign up for a group of courses, and the each signup will have an ATP attached. In most cases, these will be the same. But COULD be different.
Rate- Rate is the shared vocabulary for pricing.
The ATP and Rate assignments are set to be the same through all of the examples in this document.
Session Object – A grouping of high-line information plus a group of signup lines that tell us what the student has done in this term. This includes all adds, drops, etc. We use this information to calculate what the student should be charged based on this signup. This signup record also contains a key-name pair system to allow passing of information from other systems.

New Phases

The 8-step phasing of the rules has been simplified into the following pattern. Each phase deals with individual parts of the session, (Session, Individual Signup, Manifest).
Individual Signup phases should process in order of effective date of the signups.

Phase

S

I

M

Purpose

First

 

*

 

Deal with adds and drops and validate the legality, etc. Calculate late fee, etc.

Second

*

 

 

Look at the whole session to figure out full/part time, etc. Switch out the obvious rates.

Third

 

*

 

More complex calculations, plus moving fees to the manifest.

Fourth

*

 

 

Moving grouping fees and tuition to manifest.

Fifth [Possibly no use case].

 

 

*

Clean up.

Outputs

Fee Manifest - The system outputs a fee manifest, which is information as to what the student will now be charged. This manifest is then passed to a system that will look at what has already been charged, and make those changes to the account. Note that FM itself never actually invokes any charges. This allows us to concentrate on generating the correct schedule of charges in the rules and allowing the java code to figure out the delta charges.

Default Values for ATP and Rate for These Examples

ATP

Note that these ATPs don't follow the KS definition, but they do follow the actual rules in force at UMD.
ATP is set as: 20134 (Fall 2013)

Milestone Type

Milestone Date

General Meaning

kuali.atp.milestone.firstDayOfClass

9/15/2013

Add/drops before this date are "free". A drop of an added class can be treated as if it never existed.

kuali.atp.milestone.lateRegistration

9/15/2013

As of this date (which is generally the first date of class) any registration for classes will attract a late registration fee. This might be waived if the student were already registered and is adding new classes (will have to get more information on this from UMD).

kuali.atp.milestone.lastDayForPenaltyDrop

9/30/2013

This is officially at UMD the tenth day of class, so we can calculate it or use it as an ATP reference (I Used 15 days to make the dates even). If you drop a course in this window, you still pay the fees, plus a 20% tuition penalty. (I.e. you still have to pay 20% of the tuition for the course(s) that you dropped). Anything dropped after this date will basically be considered irrelevant for fee assessment purposes. (But it has a registration impact).

kuali.atp.milestone.withdraw80

10/1/2013

After the drop period, a student is allowed to withdraw. A withdraw will have to be issued against all the remaining courses (there is in fact a penalty if you drop a course (with no refund) and then withdraw from the rest – you will only get the refund on the withdrawn classes, not the dropped classes. After this date, you get an 80% credit for classes from which you withdraw. The math gets kinda fun here…

kuali.atp.milestone.withdraw60

10/15/2013

And 60%...

kuali.atp.milestone.withdraw40

11/1/2013

And 40%...

kuali.atp.milestone.withdraw20

11/15/2013

And 20%...

kuali.atp.milestone.withdraw0

12/1/2013

And 0% - this is the last day of class in most instances.

Rates

The Rate information is broken into the four major units. Tuition rates, non-course fee, course fees and ancillary fees.

Rate Types and Rate Catalog

The Rate Types Have been Entered as SQL in the Dropbox. The rate types used are the ones found in this document only.
Tuition.fixed (1)
Tuition.credits.fixed (2)
Tuition.flat (3)
Manfatory.fee (4)
Fee.ao.term (5)
Fee.po.term (6)
Fee.ao.credits.grouped.fixed (7)
Fee.ao.course (8)
Fee.flag (9)
Fee.general (10)
Fre.ao.credits.fixed (not in doc, but used at USC). (11)
Catalog codes are duplicates of rate codes (in this test system) without the periods.
Rate Catalog ATP ID is also the same ID in this test data.
As each rate catalog has to tie to a rate type, a rate catalog has been created for each rate type. Rate Catalogs really relate to the limits placed on rates which ought to be tested via a different set of tests.

Tuition Rates

Rate Code

Rate Explanation

Extra information

ID in TEST DATA

tuition.fixed..regular

Regular tuition – a flag rate. Must be replaced by the actual tuition based on a student's status (FT/PT, GR, UG, Res, NR)

 

1

tuition.credits.fixed..
cp.undergrad.resident.ft

College park undergraduate resident tuition, full time.

(Might be flat?)
1000

2

tuition.credits.fixed..
cp.undergrad.resident.pt

College Park undergraduate resident tuition, not full time.

1040

3

tuition.credits.fixed..
cp.graduate.resident.ft

College park graduate resident tuition, full time.

1100

4

tuition.credits.fixed..
cp.graduate.resident.pt

College Park graduate resident tuition, not full time.

1120

5

tuition.credits.fixed..
cp.undergrad.nonresident.ft

College park undergraduate nonresident tuition, full time.

1020

6

tuition.credits.fixed..
cp.undergrad.nonresident.pt

College Park undergraduate nonresident tuition, not full time.

1050

7

tuition.credits.fixed..
cp.graduate.nonresident.ft

College park graduate nonresident tuition, full time.

1140

8

tuition.credits.fixed..
cp.graduate.nonresident.pt

College Park graduate nonresident tuition, not full time.

1160

9

tuition.credits.fixed..sg.undergrad.resident

Undergraduate Shady Grove tuition for residents.

1070

10

tuition.credits.fixed..sg.undergrad.nonresident

Undergraduate Shady Grove tuition for nonresidents.

1080

11

tuition.credits.fixed..sg.grad.resident

Graduate Shady Grove tuition for residents.

1100

12

tuition.credits.fixed..sg.grad.nonresident

Graduate Shady Grove tuition for nonresidents.

1120

13

tuition.flat..mba.cohort.flag

Flag fee for MBA cohorts. KSA will have to convert this to the appropriate cohort rate.

1179

14

tuition.flat..mba.cohort.em11

Tuition rate for the EM11 cohort.

1179

15

tuition.flat..mba.cohort.em12

Tuition rate for the EM12 cohort.

1179

16

tuition.flat..mba.cohort.em13

Tuition rate for the EM13 cohort.

1179

17

tuition.flat..mba.cohort.ac01

Tuition rate for the AC01 cohort.

1179

18

tuition.credits.fixed..baltimore.mba

Tuition rate for Baltimore MBA classes. Can be overridden by the cohort rate. There are a few other MBA rates that fall into this category. We'll cover one use case to test.

1176

19

tuiton.credits.fixed..
public.policy. resident

Tuition rate for resident students in the public policy majors.

1165

20

tuiton.credits.fixed..
public.policy. resident.differential

Tuition rate differential for resident students in the public policy majors.

1166

21

tuiton.credits.fixed..
public.policy.nonresident

Tuition rate for nonresident students in the public policy majors.

1167

22

tuiton.credits.fixed..
public.policy.nonresident.differential

Tuition rate differential for nonresident students in the public policy majors.

1168

23

tuition.credits.fixed..cybersecurity.leadership

Special tuition rate that has no residency restriction for certain courses (will be attached to the AO) and only available to a certain major (Z077)

1169

24

tuition.credits.fixed..enpm

Special tuition for members of a certain majors. No residency or FT/PT distinction, but this does persist into the mandatory fee calculation.

1301

25

tuition.credits.fixed..dc.weeknight

DC Weeknight tuition for certain courses taught in DC. This tuition does not appear to have FT/PT or resident requirements. Note that this does not attract College Park mandatory fees.

4804

26

tuition.credits.fixed..dc.weekend

DC weekend tuition for certain courses taught in DC. This tuition does not appear to have FT/PT or resident requirements.

4806

27

tuition.credits.fixed..
collaborative.engineering.resident.ft

Tuition for Collaborative Engineering Students which will then be discounted by the discount code. Note there is no Graduate version, this is only a PT/FT, res/NR distinction.

1181

28

tuition.credits.fixed..
collaborative.engineering.resident.pt

 

1181

29

tuition.credits.fixed..
collaborative.engineering.nonresident.ft

 

1181

30

tuition.credits.fixed..
collaborative.engineering.nonresident.pt

 

1181

31

tuition.credits.fixed..
collaborative.engineering.resident.ft.frostburg.discount

Equivalent discounts of 25% for the students who are Frostburg Students. These are marked by a 0909F or 0910F major code.

6030

32

tuition.credits.fixed..
collaborative.engineering.resident.pt.frostburg.discount

 

6030

33

tuition.credits.fixed..
collaborative.engineering.nonresident.ft.frostburg.discount

 

6030

34

tuition.credits.fixed..
collaborative.engineering.nonresident.pt.frostburg.discount

 

6030

35

 

 

 

 

Fee Rates – Non-course fees

Only College Park fees are defined (probably need to standardize to College Park or Main Campus).

Rate Code

Rate Explanation

Extra information

ID in TEST DATA

mandatory.fee.flag..cp

Main campus mandatory fee flag. Will be replaced by the appropriate mandatory fee.

 

36

fee.ao.term..
cp.resident.ft

Resident, full-time mandatory fee.

1001

37

fee.ao.term..
cp.nonresident.ft

Nonresident, full-time mandatory fee.

 

38

fee.ao.term..
cp.resident.pt

Resident, part-time mandatory fee.

1041

39

fee.ao.term..
cp. graduate.ft

 

1100

40

fee.ao.term..
cp.graduate.pt

 

1121

41

fee.ao.term..
cp.nonresident.pt

Nonresident, part-time mandatory fee.

 

42

fee.term.po..
golden.id

Golden ID fee.

 

43

fee.ao.term..sg.fee

Flag fee AND regular fee for Shady Grove classes. This will be part time or full time.

I am unsure as to this – Seeking clarification on whether or not a Shady Grove student is charged at all Shady Grove rates, or just those classes taken at Shady Grove.

44

fee.ao.term..sg.facilities.pt

Part Time SG fee charged to ALL(question) Shady Grove students… This is unclear in the specification, and note that SG defines FT as 9 credits.

1073

45

fee.ao.term..sg.facilities.ft

Full Time SG fee

1072

46

fee.ao.credits.grouped..
shadygrove.administrative.fee

first use case for a "grouped" fee – this is counted in a similar way to tuition.

Admin fee for ALL SG students. It appears that this is charged on all classes taken, even if not at Shady Grove? (Need to check this). This might have to be added by inference from schedule, or from a keypair denoting registration status.

1071

47

fee.ao.term..sg.fee.graduate.ft

Unclear as to whether or not this nixes the undergrad fee or not, but the spec does not say so, so will assume it doesn't for this purpose. Fee charged on all credits taken by a Shady Grove graduate student once they are full time (=>9 units)

1101

48

fee.ao.term..sg.fee.graduate.pt

Unclear as to whether or not this nixes the undergrad fee or not, but the spec does not say so, so will assume it doesn't for this purpose. Fee charged on all credits taken by a Shady Grove graduate student once they are part time (<9 units)

1121

49

fee.ao.term..tech.fee.flag

Flag for the tech fee (on courses that do not have mandatory fees. Note that the tech fee is included in the regular fees, so it is removed if those are already charged.

 

50

fee.ao.term..tech.fee.pt

Part time technical fee for courses that do not carry college park fees.

1509

51

fee.ao.term..tech.fee.ft

Full time technical fee for courses that do not carry college park fees.

1511

52

fee.ao.term..academic.service.fee

Academic service fee is only paid by students who ONLY take certain courses. This is done as a combination exception in the secondary rules.

1202

53

fee.ao.term..mandatory.fees.enpm

This is a special rate that is used to "usurp" the usual mandatory fees and send them to a different t-code. This can be handled on several different ways. Basically, we calculate the mandatory fees in the same way that we would for another student (ft/pt/etc.) but then we use this rate to actually charge that amount.

1301

54

Fee Rates – Course fees

A small selection of rate codes for courses. Most course fees are charged to students regardless of student status. A small number are dependent on student status (i.e. resident/nonresident status, etc.)

Rate Code

Rate Explanation

Extra information

ID in TEST DATA

fee.ao.course..
geography

Fee attached to most geography courses.

 

55

fee.ao.course..
geography.418

Specific fee attached to Geography 408

 

56

fee.ao.course..art.grad

Graduate art fee

Unsure as to whether it's the course or the student that defines graduate status.

57

fee.ao.course..art.ug

Undergraduate art fee.

See above.

58

fee.flag..journalism

Flag fee for journalism which has a FT/PT distinction

 

59

fee.term..journalism.ft

Full time journalism fee.

 

60

fee.term..journalism.pt

Part time journalism fee.

 

61

Fee Rates – Ancillary

Small selection of ancillary fees. That is internal fees, used only by KSA.

Rate Code

Rate Explanation

Extra information

ID in TEST DATA

fee.general..late.registration

Late registration fee.

 

62

Basic Assumptions:

All students who are SG students have a key pair marking this, or other campus of study. (UMD basically breaks into College Park and Shady Grove, with additional classes taken at other places, such as the Reagan Building, which in KSA we can handle as section fees, rather than campus fees.)
Awaiting information about this. This might not be true. SG fees might actually be SG registered students taking courses at College Park. Awaiting response from UMD.
Graduate students will also be assessed SG fees, on top of facility fees. (In the absence of information to the contrary)
Full Time vs. Part Time distinction will be based on the registered campus which will be part of the key pair definition of the student.

Rule Development for these Scenarios

Phase 1

Intention. To process the adds/drops/withdrawals.
Scope – Signup

Process Add/Drop/Withdraw

Rule Priority : 1

Intention: Process adds

If signup operation is "ADD"
and milestone signup date is before atp milestone "kuali.atp.milesone.firstDayOfClass"

Mark signup as taken

Set session key "early.registration" to "true"

Rule Priority : 1

Intention: Process adds

If signup operation is "ADD"
and milestone signup date is before atp milestone "kuali.atp.milesone.firstDayOfClass"

Mark signup as taken

Rule Priority : 1

Intention: Process add without penalty.

If signup operation is "ADDWITHOUTPENALTY" or "TRANSFERIN"

Mark signup as taken

Set session key "early.registration" to "true"

Rule Priority : 1

Intention: Process legal drops.

If signup operation is "DROPWITHOUTPENALTY" or "TRANFEROUT"

Mark preceding offerings as not taken
Mark signup as not taken
Mark preceding offerings as complete
Mark signup as complete
Remove rate ".*"
Remove rate ".*" from preceding offerings.

Rule Priority : 1

Intention: Process legal drops.

If signup operation is "DROP"
and milestone signup date is before atp milestone "kuali.atp.milesone.firstDayOfClass"

Mark preceding offerings as not taken
Mark signup as not taken
Mark preceding offerings as complete
Mark signup as complete
Remove rate ".*"
Remove rate ".*" from preceding offerings.

Rule Priority : 1

Intention: Process penalty drops.

If signup operation is "DROP"
and milestone signup date is on or after atp milestone "kuali.atp.milesone.firstDayOfClass"
and milestone signup date is on or before milestone "kuali.atp.milesone.lastDayForPenaltyDrop"

Mark preceding offerings as not taken
Mark signup as not taken
Set signup key "late.penalty" as "yes"
Set session key "late.penalty" as "yes"

Rule Priority : 1

Intention: Process penalty drops. (simply mark as complete. It's as if it wasn't dropped)

If signup operation is "DROP"
and milestone signup date is after milestone "kuali.atp.milesone.lastDayForPenaltyDrop"

Mark signup as complete

Rule Priority : 1

Intention: Process withdrawals. Note that this does not change anything but it does set the withdrawal date.

If signup operation is "WITHDRAW"
If signup date is after atp "kuali.atp.milestone.withdraw80"

Set session key "withdrawn" to "yes"
Set session key "80percent" to "yes"

Rule Priority : 1

Intention: Process withdrawals. Note that this does not change anything but it does set the withdrawal date.

If signup operation is "WITHDRAW"
If signup date is after atp "kuali.atp.milestone.withdraw60"

Set session key "withdrawn" to "yes"
Set session key "60percent" to "yes"

Rule Priority : 1

Intention: Process withdrawals. Note that this does not change anything but it does set the withdrawal date.

If signup operation is "WITHDRAW"
If signup date is after atp "kuali.atp.milestone.withdraw40"

Set session key "withdrawn" to "yes"
Set session key "40percent" to "yes"

Rule Priority : 1

Intention: Process withdrawals. Note that this does not change anything but it does set the withdrawal date.

If signup operation is "WITHDRAW"
If signup date is after atp "kuali.atp.milestone.withdraw20"

Set session key "withdrawn" to "yes"
Set session key "20percent" to "yes"

Rule Priority : 1

Intention: Process withdrawals. Note that this does not change anything but it does set the withdrawal date.

If signup operation is "WITHDRAW"
If signup date is after atp "kuali.atp.milestone.withdraw0"

Set session key "withdrawn" to "yes"
Set session key "0percent" to "yes"

Incompatible Rates

Rule Priority : 1

MBA

If signup has rate "mba.cohort.flag" and rate "regular"
And session key "cohort.code" is "EM.."
And session key "major.code" is ".*MBA"

Remove rate "regular"

Rule Priority : 1

MBA

If signup has rate "mba.cohort.flag" and rate "regular"
And session key "cohort.code" is not "EM.."

Remove rate "mba.cohort.flag"

Rule Priority : 1

MBA

If session key "major.code" not ".*MBA"

Remove rate "mba.cohort.flag"

Rule Priority : 1

MBA

If session key "major.code" is not "z077"

Remove rate "cybersecurity.leadership"

Phase 2

Intention. To calculate the exact standing of the student in terms of full or part time, and then to replace flag rates that rely on this to the correct rates.
Scope – Session.

Rule Priority : 1

Intention: Charge late fee. Only charged if the first (ergo all) signups occur after firstDayOfClass.

If signup operation is "ADD"
and milestone signup date is after atp milestone "kuali.atp.milesone.firstDayOfClass"
and session key "early.registration" is not "true"

Charge indicental rate "late.fee","default" using id "late.fee"

Rule Priority : 1

Intention: Is student full or part time?

If number of taken units is gte 12 with rates ".", types "." signup operations ".*"
And session key "study.level" is "undergraduate"

Set key "study.load" is "ft"

Rule Priority : 1

Intention: Is student full or part time?

If number of taken units is gte 9 with rates ".", types "." signup operations ".*"
And session key "study.level" is "graduate"

Set key "study.load" is "ft"

Rule Priority : 1

Intention: Is student full or part time?

If number of taken units is gte 9 with rates ".", types "." signup operations ".*"
And session key "study.level" is "doctoral"

Set key "study.load" is "ft"

Rule Priority : 1

Intention: Is student full or part time?

If number of taken units is lt 12 with rates ".", types "." signup operations ".*"
And session key "study.level" is "undergraduate"

Set key "study.load" is "pt"

Rule Priority : 1

Intention: Is student full or part time?

If number of taken units is lt 9 with rates ".", types "." signup operations ".*"
And session key "study.level" is "graduate"

Set key "study.load" is "pt"

Rule Priority : 1

Intention: Is student full or part time?

If number of taken units is lt 9 with rates ".", types "." signup operations ".*"
And session key "study.level" is "doctoral"

Set key "study.load" is "pt"

Tuition Conversion

ENPM Students

Rule Priority : 2

Intention: Special rate tuition for certain majors.

If session key "major.code" is "engf"

Replace rate "regular" with "enpm"

College Park

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "study.load" is "ft"
And session key "residency" is "in.state"
And session key "study.level" is "undergraduate"
And session key "campus" is "cp"

Replace rate "regular" with "cp.undergraduate.resident.ft"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "study.load" is "ft"
And session key "residency" is "in.state"
And session key "study.level" is "graduate"
And session key "campus" is "cp"

Replace rate "regular" with "cp. graduate.resident.ft"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "study.load" is "ft"
And session key "residency" is "out.of.state"
And session key "study.level" is "undergraduate"
And session key "campus" is "cp"

Replace rate "regular" with "cp.undergraduate.nonresident.ft"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "study.load" is "ft"
And session key "residency" is "out.of.state"
And session key "study.level" is "graduate"
And session key "campus" is "cp"

Replace rate "regular" with "cp. graduate.nonresident.ft"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "study.load" is "pt"
And session key "residency" is "in.state"
And session key "study.level" is "undergraduate"
And session key "campus" is "cp"

Replace rate "regular" with "cp.undergraduate.resident.pt"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "study.load" is "pt"
And session key "residency" is "in.state"
And session key "study.level" is "graduate"
And session key "campus" is "cp"

Replace rate "regular" with "cp. graduate.resident.pt"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "study.load" is "pt"
And session key "residency" is "out.of.state"
And session key "study.level" is "undergraduate"
And session key "campus" is "cp"

Replace rate "regular" with "cp.undergraduate.nonresident.pt"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "study.load" is "pt"
And session key "residency" is "out.of.state"
And session key "study.level" is "graduate"
And session key "campus" is "cp"

Replace rate "regular" with "cp. graduate.nonresident.pt"

Shady Grove

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "residency" is "in.state"
And session key "study.level" is "undergraduate"
And session key "campus" is "sg"

Replace rate "regular" with "sg.undergrad.resident"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "residency" is "out.of.state"
And session key "study.level" is "undergraduate"
And session key "campus" is "sg"

Replace rate "regular" with "sg.undergrad.nonresident"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "residency" is "in.state"
And session key "study.level" is "graduate"
And session key "campus" is "sg"

Replace rate "regular" with "sg.graduate.resident"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "residency" is "out.of.state"
And session key "study.level" is "graduate"
And session key "campus" is "sg"

Replace rate "regular" with "sg.graduate.nonresident"

MBA Conversion [There would be one for each of these cohorts here]

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "cohort.code" is "EM11"
And session key "major.code" is ".*MBA"
And signup has rate "mba.cohort.flag"

Replace rate "mba.cohort.flag" with "mba.cohort.em11"

Rule Priority : 3

Intention: Convert tuition to the correct rate.

If session key "cohort.code" is "EM12"
And session key "major.code" is ".*MBA"
And signup has rate "mba.cohort.flag"

Replace rate "mba.cohort.flag" with "mba.cohort.em12"

Public Policy Conversion [Conversion from a CP tuition so lower priority]

Rule Priority : 4

Intention: Replace standard CP tuition with the fees and tuition associated with Public Policy

If session key “major.code” is “mapo|mamg|mpps|bmpo|posi|lmpo”

And signup has rate “cp.[.*].nonresident.[..]”

Remove rate "cp.[.*].resident.[..]"
Add rate "public.policy.resident"
Add rate "public.policy.resident.differential"

Rule Priority : 4

Intention: Replace standard CP tuition with the fees and tuition associated with Public Policy

If session key “major.code” is “mapo|mamg|mpps|bmpo|posi|lmpo”

And signup has rate “cp.[.*].nonresident.[..]”

Remove rate "cp.[.*].resident.[..]"
Add rate "public.policy.nonresident"
Add rate "public.policy.nonresident.differential"

Cybersecurity incompatible rates

Rule Priority : 1

Intention: Remove regular tuition for Z077 people. The CS rate was removed entirely in phase 1 if the student was not z077. Note this only applies to cybersecurity classes, so has to be done in this cycle.

If session key "major.code" is "z077"
And signup has rate "cybersecurity.leadership"

Remove rate "regular"

Frostburg Students [Only undergrad]

Rule Priority : 4

Intention: Replace standard CP tuition with the fees and tuition associated with Public Policy

If session key "major.code" is "0909F"
And signup has rate "cp.undergrad.resident.ft"

Add rate "cp.undergrad.resident.ft.frostburg.discount"

Rule Priority : 4

Intention: Replace standard CP tuition with the fees and tuition associated with Public Policy

If session key "major.code" is "0909F"
And signup has rate "cp.undergrad.resident.pt"

Add rate "cp.undergrad.resident.pt.frostburg.discount"

Rule Priority : 4

Intention: Replace standard CP tuition with the fees and tuition associated with Public Policy

If session key "major.code" is "0909F"
And signup has rate "cp.undergrad.nonresident.ft"

Add rate "cp.undergrad.nonresident.ft.frostburg.discount"

Rule Priority : 4

Intention: Replace standard CP tuition with the fees and tuition associated with Public Policy

If session key "major.code" is "0909F"
And signup has rate "cp.undergrad.nonresident.pt"

Add rate "cp.undergrad.nonresident.pt.frostburg.discount"

Fee Conversion

Mandatory Fees

Rule Priority : 3

Intention: Convert mandatory fees to appropriate rates.

If session key "study.load" is "ft"
And session key "residency" is "in.state"

Replace rate "cp" with "cp.resident.ft"

Rule Priority : 3

Intention: Convert mandatory fees to appropriate rates.

If session key "study.load" is "ft"
And session key "residency" is "out.of.state"

Replace rate "cp" with "cp.nonresident.ft"

Rule Priority : 3

Intention: Convert mandatory fees to appropriate rates.

If session key "study.load" is "pt"
And session key "residency" is "in.state"

Replace rate "cp" with "cp.resident.pt"

Rule Priority : 3

Intention: Convert mandatory fees to appropriate rates.

If session key "study.load" is "pt"
And session key "residency" is "out.of.state"

Replace rate "cp" with "cp.nonresident.pt"

Rule Priority : 3

Add Shady Grove special fees

If key "campus" is "sg"
And signup has rate "sg.fee"
And session key "study.load" is "ft"
And session key "study.level" is "undergraduate"

Add rate "sg.facilities.ft"
Add rate "sg.administrative.fee"

Rule Priority : 3

Add Shady Grove special fees

If key "campus" is "sg"
And signup has rate "sg.fee"
And session key "study.load" is "pt"
And session key "study.level" is "undergraduate"

Add rate "sg.facilities.pt"
Add rate "sg.administrative.fee"

Rule Priority : 3

Add Shady Grove special fees

If key "campus" is "sg"
And signup has rate "sg.fee"
And session key "study.load" is "ft"
And session key "study.level" is "graduate"

Add rate "sg.facilities.ft"
Add rate "sg.fee.graduate.ft"

Rule Priority : 3

Add Shady Grove special fees

If key "campus" is "sg"
And signup has rate "sg.fee"
And session key "study.load" is "pt"
And session key "study.level" is "graduate"

Add rate "sg.facilities.pt"
Add rate "sg.fee.graduate.pt"

Course Fees

Rule Priority : 3

Add Shady Grove special fees

If signup has rate "tech.fee.flag"
And session key "study.load" is "ft"

Remove rate "tech.fee.flag"
Add rate "tech.fee.ft"

Rule Priority : 3

Add Shady Grove special fees

If signup has rate "tech.fee.flag"
And session key "study.load" is "pt:

Remove rate "tech.fee.flag"
Add rate "tech.fee.pt"

Rule Priority : 3

Change art grad rate

If session key "study.level" is "graduate"
And signup has rate "art.ug"

Remove rate "art.ug"
Add rate "art.grad"

Removal of Special Academic Fee

Rule Priority : 4

Change art grad rate

If signup is taken
And signup does not have rate "academic.service.fee"

Set key "academic.service.remove" is "y"

Phase 3

Clean up of incompatible rates, then start to charge course and mandatory fees.

Incompatible rates now present.

Rule Priority : 1

Change art grad rate

If signup has rate "tech.fee.[..]"
And signup has rate "cp.[.*graduate].[..]

Remove rate "tech.fee.[..]"

Academic Service Charge Remove if flagged in Phase 2.

Rule Priority : 1

Remove academic service fee if there are any taken classes that DO NOT have the academic service fees.

If key "academic.service.remove" is "y"

Remove rate "academic.service.fee"

Start to charge fees [Happens later to allow for flexibility]

Rule Priority : 10

Charge all basic course fees.

If true

Charge rates ".fee."

Rule Priority : 10

Charge all term fees.

If true

Charge rates with types "fee.ao.term"

Rule Priority : 10

Charge all term fees.

If true

Charge rates with types "fee.ao.course"

Scenario 1

Basic addition of three classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a key pair, or gleaned at the start of the process.)
This is a simple situation where the student is taking three classes and will get the standard part-time fees.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 9.) This will give us our part-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.pt
And
fee.ao.term.cp.resident.pt

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.pt) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.pt

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.pt

From Rate

From Rate

From Rate

 

Scenario 2

Basic addition of four classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
This is a simple situation where the student is taking four classes and will get the standard full-time fees and tuition.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Scenario 3

Basic addition of four classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
This is a simple situation where the student is taking four classes and will get the standard full-time fees and tuition. However the student registers late for one class, so they also incur a late fee.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/16/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
We find that signup line 4 has an effective date of after the late registration deadline. We have to add the fee.general..late.registration to the manifest.
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status. (note that even though the addition is late, it is "legal".)

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Scenario 4

Basic addition of four classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
This is a simple situation where the student is taking four classes and will get the standard full-time fees and tuition. The student registers late for one class, but the class is ADDWITHOUTPENALTY, meaning the registration system allowed an override. This calculates identically to the second use case, because the late fee is not charged.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADDWITHOUTPENALTY

effectiveDate

9/16/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
Even though signup 4 is late, it is ADDWITHOUTPENALTY, so we can ignore.
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status. (note that even though the addition is late, it is "legal", so it does not incur the late registration fee.)

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Scenario 5

Basic addition of four classes, rendering the student as full-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
The student then drops a class after the drop period. Because the drop is late, the actual calculation is unchanged (their status does not change) and they incur a late fee.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

10/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

10/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
There is a drop that relative to the ATP of line 5, falls after the add/drop period, we must charge a late fee. fee.general..late.registration is added to the manifest. This line can be marked as isComplete, including all of its rates, because other than the late fee, its effects on the student are ignored.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Scenario 6

Basic addition of four classes, rendering the student as full-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
The student then drops a class after the drop period. Because the drop is late, the actual calculation is unchanged (their status does not change) and they incur a late fee.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG101

units

3

fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

10/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

10/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
There is a drop that relative to the ATP of line 5, falls after the add/drop period, we must charge a late fee. fee.general..late.registration is added to the manifest. This line can be marked as isComplete, including all of its rates, because other than the late fee, its effects on the student are ignored.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.
Also pick up the fee.ao.course..geography and move it to the manifest (it is charged on each add, and removed on each legal drop)

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

4+geog101

fee.ao.course..
geography

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

4+geog101

fee.ao.course..
geography

From Rate

From Rate

From Rate

4

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Scenario 7

Student is taking a combination of French and Geography courses. Geography courses have fees associated with them.
The student is a nonresident, undergraduate.
Note that offering ID will be a UUID of some sort – I am using course codes here as a simple readable way of handling, but in a real system, FREN101 will have many sections (AOs) so will have many identifiers.
Note that this student has dropped the last class in the penalty period. They are eligible for a 20% rebate on their bill for that tuition.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG102

units

3

fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG107

units

3

fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG418

units

3

fee.ao.course..geography418

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/30/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

9/30/2013

mandatory.fee.flag..cp

offeringId

GEOG418

units

3

fee.ao.course..geography418

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line) We have 12 add units. This marks the student as full time.
The drop is after the add/drop period, so we add the late fee. (This might not be true, but we can remove if we have to).
Because the drop is in the window of 20% charge, we can mark the fee off as is complete (the fee is not refundable) and we will deal with the 20% charge in the tuition section.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt

This will convert to tuition.credits.fixed..cp.undergrad.nonresident.ft
Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt

So this will convert to fee.ao.term..cp.nonresident.ft

DSL Ideas

if… convert rate [rate] to rate [new rate]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.
For each of the fee.ao.course rates, these can be moved directly to the manifest and marked as isComplete. (Note that the drop of 408 is marked as isComplete so is ignored.) Note that because we're doing charges against lines, not groups of lines, we can use the signup line + the offering to create the identifier.
Note that the drop of the class doesn't affect the fee so we already marked that drop fee as isComplete on 408, so it is still billed to the student.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

2-GEOG102

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

4

CHARGE

3-GEOG107

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

5

CHARGE

4-GEOG408

Fee.ao.course..
geography408

From Rate

From Rate

From Rate

 

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)


This one's the special sauce. 
The rules go as follows: We need to bill the student for the number of credits they are "taking" for billing purposes. This means: All adds, add without penalties, transfer in, count.
All transfer out and drop without penalty deduct.
Drops exist in three states:
Those that count (i.e. they deduct with no ill effect) That would be drops before firstDayOfClass
Those that don't count (i.e. they are ignored). That would be drops after the penalty drop period.
Those that are penalized (i.e those that fall in the middle).
So, in this case, we need the total number of units with a rate, that count before firstDayOfClass and the total number of units with a rate that count before end of penalty period:
In short:
The number of units, using firstDayOfClass as the cut off is:
All adds, addwithoutpenalty, transfer in, less all dropwithoutpenalty and transferout, less all drops before the firstDayOfClass
(In our test data, this would be equal to 12, as signup lines 1-4 are implicated.
THEN we need the number of units using the end of penalty drop period as the cut off date. Same rules.
(In our test data, this would be equal to 9, as all singnup lines are implicated).
So: The student is charged for taking 12 units, as before, but then this amount is DISCOUNTED by 20% of the difference between this amount and the amount they would have been charged if they were taking just 9 credits.
So let's assume $1000 per unit:
In the 12 unit scenario, they would be billed 12*1000 (this is actually done in the rate calculation logic) so the charged amount is $12,000
THEN, we calculate the 9 unit scenario, so 9*1000, so $9,000. We discount the tuition with 80% of the difference (80% is the UMD rule) so the difference is $3,000, so we discount the tuition by 80% of $3,000 = $2,400
NOTE: This is really fun when there is a limit amount. Let's say that between 12-20 units, the price is limited to $12,000, so if the student takes 18 units and drops to 12 units the price is still $12,000 so there is no actual penalty. Ted confirmed that this is how UMD actually does this. Once you qualify for a flat tuition rate, you can basically do what you want! 
Once charged these can all be marked as isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

 

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

 

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

 CHARGE

 874522

 

 

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

CHARGE

2-GEOG102

 

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

CHARGE

3-GEOG107

 

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

 5

CHARGE

4-GEOG408

 

Fee.ao.course..
geography408

From Rate

From Rate

From Rate

 

6

CHARGE

984857

 

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

From Rate

7

7

DISCOUNT

984857

 

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

80% of difference as calculated above.

6

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

2-GEOG102

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

4

CHARGE

3-GEOG107

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

5

CHARGE

4-GEOG408

Fee.ao.course..
geography408

From Rate

From Rate

From Rate

 

6

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

From Rate

7

7

DISCOUNT

984857

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

80% of difference as calculated above.

6

Scenario 8

Basic addition of four classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
This is a simple situation where the student is taking four classes and will get the standard full-time fees and tuition. The student registers late for one class, but the class is ADDWITHOUTPENALTY, meaning the registration system allowed an override. This calculates identically to the second use case, because the late fee is not charged.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/16/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
Signup 4 is late (this might not be how UMD does it, still awaiting clarification, they might require that the INITIAL signup is done before that date. For this use case, let's say the student is dinged for any add/drop activity after the late date.) – So we charge fee.general..late.registration to the student.
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

87442

fee.ao.general..
late.registration

From Rate

From Rate

From Rate

 

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

87442

fee.ao.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

87442

fee.ao.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

87442

fee.ao.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Scenario 9

Student is taking a combination of French and Geography courses. Geography courses have fees associated with them.
The student is a nonresident, undergraduate.
Note that this student has dropped the last class in the penalty period. They are eligible for a 20% rebate on their bill for that tuition.
This student has made a drop in the 20% period, and a drop after that period.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG102

units

3

fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG107

units

3

fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG418

units

3

fee.ao.course..geography418

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/30/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

9/30/2013

mandatory.fee.flag..cp

offeringId

GEOG418

units

3

fee.ao.course..geography418

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

6

creationDate

9/30/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

10/15/2013

mandatory.fee.flag..cp

offeringId

GEOG107

units

3

fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line) We have 12 add units. This marks the student as full time.
The first drop is after the add/drop period, so we add the late fee. (This might not be true, but we can remove if we have to).
Because both drops are in the window of 20% charge, we can mark the fee off as is complete (the fee is not refundable) and we will deal with the 20% charge in the tuition section. The second drop is in outside of the drop period so we can mark it all off as isComplete. No credit will be given in FM.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt

This will convert to tuition.credits.fixed..cp.undergrad.nonresident.ft
Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt

So this will convert to fee.ao.term..cp.nonresident.ft

DSL Ideas

if… convert rate [rate] to rate [new rate]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.
For each of the fee.ao.course rates, these can be moved directly to the manifest and marked as isComplete. (Note that the drop of 408 is marked as isComplete so is ignored.) Note that because we're doing charges against lines, not groups of lines, we can use the signup line + the offering to create the identifier.
Note that the drop of the class doesn't affect the fee so we already marked that drop fee as isComplete on 408, so it is still billed to the student.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

2-GEOG102

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

4

CHARGE

3-GEOG107

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

5

CHARGE

4-GEOG408

Fee.ao.course..
geography408

From Rate

From Rate

From Rate

 

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)


The number of units, using firstDayOfClass as the cut off is:
All adds, addwithoutpenalty, transfer in, less all dropwithoutpenalty and transferout, less all drops before the firstDayOfClass
(In our test data, this would be equal to 12, as signup lines 1-4 are implicated. 5 is not, and 6 is marked as complete so completely ignored.
THEN we need the number of units using the end of penalty drop period as the cut off date. Same rules.
(In our test data, this would be equal to 9, as all singnup lines are implicated).
So: The student is charged for taking 12 units, as before, but then this amount is DISCOUNTED by 20% of the difference between this amount and the amount they would have been charged if they were taking just 9 credits.
So let's assume $1000 per unit:
In the 12 unit scenario, they would be billed 12*1000 (this is actually done in the rate calculation logic) so the charged amount is $12,000
THEN, we calculate the 9 unit scenario, so 9*1000, so $9,000. We discount the tuition with 80% of the difference (80% is the UMD rule) so the difference is $3,000, so we discount the tuition by 80% of $3,000 = $2,400
NOTE: This is really fun when there is a limit amount. Let's say that between 12-20 units, the price is limited to $12,000, so if the student takes 18 units and drops to 12 units the price is still $12,000 so there is no actual penalty. Ted confirmed that this is how UMD actually does this. Once you qualify for a flat tuition rate, you can basically do what you want! 
Once charged these can all be marked as isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

 

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

 

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

 

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

2-GEOG102

 

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

4

CHARGE

3-GEOG107

 

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

5

CHARGE

4-GEOG408

 

Fee.ao.course..
geography408

From Rate

From Rate

From Rate

 

6

CHARGE

984857

 

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

From Rate

7

7

DISCOUNT

984857

 

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

80% of difference as calculated above.

6

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

 

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

 

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

 

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

2-GEOG102

 

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

4

CHARGE

3-GEOG107

 

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

5

CHARGE

4-GEOG408

 

Fee.ao.course..
geography408

From Rate

From Rate

From Rate

 

6

CHARGE

984857

 

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

From Rate

7

7

DISCOUNT

984857

 

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

80% of difference as calculated above.

6

Scenario 10

Student is a nonresident, undergraduate, Shady Grove student. This is marked by a keypair of home.campus = shady.grove (At UMD, they are marked with a member.code = 17)

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

FREN109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

FREN110

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

FREN204

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

FREN209

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

All adds are in the regular timeframe, so there is nothing to deal with in terms of ineligible drops, etc.
We need to calculate their full time or part time status and this is dependent on campus, so we count all legal adds, subtract all legal drops, and then compare that to 9 for SG or 12 for CP (This might even be different by study level, too, i.e. grad full time is 9, ug full time is 12, but this is not clear right now.)
Based on that comparison, we can deduce and store the full/part time status of the student. In this case, as the legal adds give us 12, this student is full time, regardless of campus.
All adds are legal, and so no late fee, etc. are charged.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)


Because this is a SG student, we have a different mapping for tuition.fixed..regular. Note that SG doesn't have different codes for FT/PT, just limit rates, so the number of conversions is shorter. Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

RES

UG

tuition.credits.fixed..sg.undergrad.resident

RES

GR

tuition.credits.fixed..sg.graduate.resident

NR

UG

tuition.credits.fixed..sg.undergrad.nonresident

NR

GR

tuition.credits.fixed..sg.graduate.nonresident

In this case, this will convert to tuition.credits.fixed..sg.undergrad.nonresident
Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt

Where there is a fee.ao.term..sg.fee, this is a flag and a real fee, so when we find this, we also need to add:
For all students with the fee.ao.term..sg.fee: add fee.ao.term..sg.facilities.pt or .ft depending on the status of the student. Also add fee.ao.credits.grouped..sg.administrative.fee if the student is UG.
For all graduate students with the fee.ao.term..sg.fee: IN ADDITION, add fee.ao.term..sg.fee.graduate.ft/pt depending on student status. This does not happen in this case.
With this complete, our signup now looks like this:

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.credits.fixed..sg.undergrad.nonresident

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

FREN109

units

3

fee.ao.term..sg.fee.graduate.ft

ATP

FALL2013 (20134)

isComplete

 

fee.ao.credits.grouped..
shadygrove.administrative.fee

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.credits.fixed..sg.undergrad.nonresident

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

FREN110

units

3

fee.ao.term..sg.fee.graduate.ft

ATP

FALL2013 (20134)

isComplete

 

fee.ao.credits.grouped..
shadygrove.administrative.fee

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.credits.fixed..sg.undergrad.nonresident

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

FREN204

units

3

fee.ao.term..sg.fee.graduate.ft

ATP

FALL2013 (20134)

isComplete

 

fee.ao.credits.grouped..
shadygrove.administrative.fee

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.credits.fixed..sg.undergrad.nonresident

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

FREN209

units

3

fee.ao.term..sg.fee.graduate.ft

ATP

FALL2013 (20134)

isComplete

 

fee.ao.credits.grouped..
shadygrove.administrative.fee

DSL Ideas

if… [student status keypairs] convert rate [rate] to rate [new rate]
if … [student status keypairs] add [new rate] to signups with [old rate]
if … [student status keypairs] remove [old rate] from all signups
if … [student status keypairs] remove [old rate] from all with rate [rate]
if … [student status keypairs] remove [old rate] from all with rate type [rate type]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

871258

Fee.ao.term..
shadygrove.fee

From rate

From rate

From rate

 

2

CHARGE

786415

Fee.ao.term..
shadygrove.fee.graduate.ft

From rate

From rate

From rate

 


For each of the fee.ao.course rates, these can be moved directly to the manifest and marked as isComplete. None of these exist in this use case.
For each fee.ao.credits.grouped (we might actually need a new type for this, because it is treated more like a tuition charge than it is a fee charge, i.e. we add ALL together and charge that way) count up the number of credits with that fee, and charge. This has been added as fee.ao.credits.grouped to allow for this use case (which only appears to happen at Shady Grove, so far, but might be used on certain types of fees at USC).

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

 

Amount

Linked manifest id

1

CHARGE

871258

Fee.ao.term..
shadygrove.fee

From rate

From rate

 

From rate

 

2

CHARGE

786415

Fee.ao.term..
shadygrove.fee.graduate.ft

From rate

From rate

 

From rate

 

3

CHARGE

521256

Fee.ao.credits.grouped..
Shadygrove.administrative.fee

From rate

From rate

 

From rate(12 units)

 

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)


The number of units, using firstDayOfClass as the cut off is:
All adds, addwithoutpenalty, transfer in, less all dropwithoutpenalty and transferout, less all drops before the firstDayOfClass
From this test data, the answer would be 12, as there are only 4 classes with legal add.
THEN we need the number of units using the end of penalty drop period as the cut off date. Same rules.
(In our test data, this would be equal to 12, as all signup lines are implicated).
As there is no difference, there is no late signup or drop fee to be assessed. We can calculate tuition using the correct code already calculated in the primary rules.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

871258

Fee.ao.term..
shadygrove.fee

From rate

From rate

From rate

 

2

CHARGE

786415

Fee.ao.term..
shadygrove.fee.graduate.ft

From rate

From rate

From rate

 

3

CHARGE

521256

Fee.ao.credits.grouped..
Shadygrove.administrative.fee

From rate

From rate

From rate(12 units)

 

4

CHARGE

841254

Tuition.credits.fixed..
sg.undergrad.nonresident

From rate

From rate

From rate(12 units)

 

 

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]
Charge [rate] using [number] units.

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

871258

Fee.ao.term..
shadygrove.fee

From rate

From rate

From rate

 

2

CHARGE

786415

Fee.ao.term..
shadygrove.fee.graduate.ft

From rate

From rate

From rate

 

3

CHARGE

521256

Fee.ao.credits.grouped..
Shadygrove.administrative.fee

From rate

From rate

From rate(12 units)

 

4

CHARGE

841254

Tuition.credits.fixed..
sg.undergrad.nonresident

From rate

From rate

From rate(12 units)

 

Scenario 11

Student is a resident, graduate, Shady Grove student. This is marked by a keypair of home.campus = shady.grove (At UMD, they are marked with a member.code = 17) They are taking art and geography classes, which will bring in a number of course related fees.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

GEOG

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

ART107

units

3

Fee.ao.course..art.grad (this could also be a flag fee, or we can just start with the grad and switch to grad as needed.)

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

ART220

units

3

Fee.ao.course..art.ug

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

GEOG406

units

3

Fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

GEOG418

units

3

Fee.ao.course..geography.418

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

All adds are in the regular timeframe, so there is nothing to deal with in terms of ineligible drops, etc.
We need to calculate their full time or part time status and this is dependent on campus, so we count all legal adds, subtract all legal drops, and then compare that to 9 for SG or 12 for CP (This might even be different by study level, too, i.e. grad full time is 9, ug full time is 12, but this is not clear right now.)
Based on that comparison, we can deduce and store the full/part time status of the student. In this case, as the legal adds give us 12, this student is full time, regardless of campus.
All adds are legal, and so no late fee, etc. are charged.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)


Because this is a SG student, we have a different mapping for tuition.fixed..regular. Note that SG doesn't have different codes for FT/PT, just limit rates, so the number of conversions is shorter. Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

RES

UG

tuition.credits.fixed..cp.undergrad.resident

RES

GR

tuition.credits.fixed..cp.grad.resident

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident

NR

GR

tuition.credits.fixed..cp.grad.nonresident

In this case, this will convert to tuition.credits.fixed..sg.grad.resident
Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


This does not exist in this case.
Where there is a fee.ao.term..sg.fee, this is a flag and a real fee, so when we find this, we also need to add:
For all students with the fee.ao.term..sg.fee: add fee.ao.term..sg.facilities.pt or .ft depending on the status of the student. Also add fee.ao.credits.grouped..sg.administrative.fee if the student is UG. As a graduate, only the first of these fees is added.
For all graduate students with the fee.ao.term..sg.fee: IN ADDITION, add fee.ao.term..sg.fee.graduate.ft/pt depending on student status. This will be added in this case.
The fee.ao.course..art.ug will have to be replaced with fee.ao.course..art.grad. This might be better handled by having a flag rate that is replaced for all student, rather than ug replaced with grad.
With this complete, our signup now looks like this:

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.credits.fixed..sg.grad.resident

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

ART107

units

3

fee.ao.term..sg.fee.graduate.ft

ATP

FALL2013 (20134)

isComplete

 

Fee.ao.course..art.grad

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.credits.fixed..sg.grad.resident

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

ART220

units

3

fee.ao.term..sg.fee.graduate.ft

ATP

FALL2013 (20134)

isComplete

 

Fee.ao.course..art.grad

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.credits.fixed..sg.grad.resident

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

GEOG406

units

3

Fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

fee.ao.term..sg.fee.graduate.ft

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.credits.fixed..sg.grad.resident

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..sg.fee

offeringId

GEOG418

units

3

Fee.ao.course..geography.418

ATP

FALL2013 (20134)

isComplete

 

fee.ao.term..sg.fee.graduate.ft

DSL Ideas

if… [student status keypairs] convert rate [rate] to rate [new rate]
if … [student status keypairs] add [new rate] to signups with [old rate]
if … [student status keypairs] remove [old rate] from all signups
if … [student status keypairs] remove [old rate] from all with rate [rate]
if … [student status keypairs] remove [old rate] from all with rate type [rate type]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

871258

Fee.ao.term..
shadygrove.fee

From rate

From rate

From rate

 

2

CHARGE

786415

Fee.ao.term..
shadygrove.fee.graduate.ft

From rate

From rate

From rate

 


For each of the fee.ao.course rates, these can be moved directly to the manifest and marked as isComplete. This covers a fee on each of the courses.
For each fee.ao.credits.grouped (we might actually need a new type for this, because it is treated more like a tuition charge than it is a fee charge, i.e. we add ALL together and charge that way) count up the number of credits with that fee, and charge. This has been added as fee.ao.credits.grouped to allow for this use case (which only appears to happen at Shady Grove, so far, but might be used on certain types of fees at USC).

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

871258

Fee.ao.term..
shadygrove.fee

From rate

From rate

From rate

 

2

CHARGE

786415

Fee.ao.term..
shadygrove.fee.graduate.ft

From rate

From rate

From rate

 

3

CHARGE

1-ART107

Fee.ao.course..art.grad

From rate

From rate

From rate

 

4

CHARGE

2-ART220

Fee.ao.course..art.grad

From rate

From rate

From rate

 

5

CHARGE

3-GEOG406

Fee.ao.course..geography

From rate

From rate

From rate

 

6

CHARGE

4-GEOG418

Fee.ao.course..
geography.418

From rate

From rate

From rate

 

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)


The number of units, using firstDayOfClass as the cut off is:
All adds, addwithoutpenalty, transfer in, less all dropwithoutpenalty and transferout, less all drops before the firstDayOfClass
From this test data, the answer would be 12, as there are only 4 classes with legal add.
THEN we need the number of units using the end of penalty drop period as the cut off date. Same rules.
(In our test data, this would be equal to 12, as all signup lines are implicated).
As there is no difference, there is no late signup or drop fee to be assessed. We can calculate tuition using the correct code already calculated in the primary rules.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

871258

Fee.ao.term..
shadygrove.fee

From rate

From rate

From rate

 

2

CHARGE

786415

Fee.ao.term..
shadygrove.fee.graduate.ft

From rate

From rate

From rate

 

3

CHARGE

1-ART107

Fee.ao.course..art.grad

From rate

From rate

From rate

 

4

CHARGE

2-ART220

Fee.ao.course..art.grad

From rate

From rate

From rate

 

5

CHARGE

3-GEOG406

Fee.ao.course..geography

From rate

From rate

From rate

 

6

CHARGE

4-GEOG418

Fee.ao.course..
geography.418

From rate

From rate

From rate

 

7

CHARGE

45871

Tuition.credits.fixed..sg.grad.resident

From rate

From rate

From rate

 

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]
Charge [rate] using [number] units.

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

871258

Fee.ao.term..
shadygrove.fee

From rate

From rate

From rate

 

2

CHARGE

786415

Fee.ao.term..
shadygrove.fee.graduate.ft

From rate

From rate

From rate

 

3

CHARGE

1-ART107

Fee.ao.course..art.grad

From rate

From rate

From rate

 

4

CHARGE

2-ART220

Fee.ao.course..art.grad

From rate

From rate

From rate

 

5

CHARGE

3-GEOG406

Fee.ao.course..geography

From rate

From rate

From rate

 

6

CHARGE

4-GEOG418

Fee.ao.course..
geography.418

From rate

From rate

From rate

 

7

CHARGE

45871

Tuition.credits.fixed..sg.grad.resident

From rate

From rate

From rate

 

Scenario 12

Student is a resident, graduate, college park student. They are taking the MBA program and are in the EM11 cohort. Notice that if a student were not an MBA student this would be charged as any other course, so we need the two tuition rates and we can select the correct one in the processing.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

EMBA

EM11

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA109

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA107

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA110

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA209

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

All adds are in the regular timeframe, so there is nothing to deal with in terms of ineligible drops, etc.
We need to calculate their full time or part time status and this is dependent on campus, so we count all legal adds, subtract all legal drops, and then compare that to 9 for SG or 12 for CP (This might even be different by study level, too, i.e. grad full time is 9, ug full time is 12, but this is not clear right now.)
This distinction doesn't actually make a difference on this course combination, but according to prior rules, we have established that this student is full time for their course.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Firstly we need to get the correct tuition – we have incompatible rates, so we need to know what the base rate is.
If student his MBA, EMBA, etc. (will be defined) and the course has BOTH tuition.flat..mba.cohort.flag and tuition.fixed..regular, remove the tuition.fixed..regular from all signup with BOTH.
In this example, all tuition.fixed..regular are dropped.
On any course that has a tuition.flat..mba.cohort.flag, convert it to the appropriate rate based on the cohort.
In this case, all will become tuition.flag..mba.cohort.em11 as that is the cohort attached to the student.
As a special case (this is a UMD rule) on all courses that have this rate, convert the mandatory.fee.flag..cp to Fee.ao.term..cp.graduate.pt – note that this might have to be cleaned up after the fact, because if the student takes non-cohort classes they might trigger full time fees, etc. This would have to be caught in the clean up.
Our signup manifest should now look like this:

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA107

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

DSL Ideas

if… [student status keypairs] convert rate [rate] to rate [new rate]
if … [student status keypairs] add [new rate] to signups with [old rate]
if … [student status keypairs] remove [old rate] from all signups
if … [student status keypairs] remove [old rate] from all with rate [rate]
if … [student status keypairs] remove [old rate] from all with rate type [rate type]
if signup exists with rate [rate] and rate [rate] remove rate [rate]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 


No other fees apply.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

All of our rates are in the usual window, so we don't need to worry about the late adds and drops.

Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

56468

Tuition.flat..
mba.cohort.em11

From Rate

From Rate

From Rate

 

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]
Charge [rate] using [number] units.

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

56468

Tuition.flat..
mba.cohort.em11

From Rate

From Rate

From Rate

 

Scenario 13

Student is a resident, graduate, college park student. They are taking the MBA program and are in the EM12 cohort. Notice that if a student were not an MBA student this would be charged as any other course, so we need the two tuition rates and we can select the correct one in the processing.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

EMBA

EM12

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA109

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA107

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA110

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA209

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

All adds are in the regular timeframe, so there is nothing to deal with in terms of ineligible drops, etc.
We need to calculate their full time or part time status and this is dependent on campus, so we count all legal adds, subtract all legal drops, and then compare that to 9 for SG or 12 for CP (This might even be different by study level, too, i.e. grad full time is 9, ug full time is 12, but this is not clear right now.)
This distinction doesn't actually make a difference on this course combination, but according to prior rules, we have established that this student is full time for their course.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Firstly we need to get the correct tuition – we have incompatible rates, so we need to know what the base rate is.
If student his MBA, EMBA, etc. (will be defined) and the course has BOTH tuition.flat..mba.cohort.flag and tuition.fixed..regular, remove the tuition.fixed..regular from all signup with BOTH.
In this example, all tuition.fixed..regular are dropped.
On any course that has a tuition.flat..mba.cohort.flag, convert it to the appropriate rate based on the cohort.
In this case, all will become tuition.flag..mba.cohort.em12 as that is the cohort attached to the student.
As a special case (this is a UMD rule) on all courses that have this rate, convert the mandatory.fee.flag..cp to Fee.ao.term..cp.graduate.pt – note that this might have to be cleaned up after the fact, because if the student takes non-cohort classes they might trigger full time fees, etc. This would have to be caught in the clean up.
Our signup manifest should now look like this:

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.em12

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.em12

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA107

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.em12

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.em12

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

DSL Ideas

if… [student status keypairs] convert rate [rate] to rate [new rate]
if … [student status keypairs] add [new rate] to signups with [old rate]
if … [student status keypairs] remove [old rate] from all signups
if … [student status keypairs] remove [old rate] from all with rate [rate]
if … [student status keypairs] remove [old rate] from all with rate type [rate type]
if signup exists with rate [rate] and rate [rate] remove rate [rate]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 


No other fees apply.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

All of our rates are in the usual window, so we don't need to worry about the late adds and drops.

Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

56468

Tuition.flat..
mba.cohort.em12

From Rate

From Rate

From Rate

 

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]
Charge [rate] using [number] units.

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

56468

Tuition.flat..
mba.cohort.em12

From Rate

From Rate

From Rate

 

Scenario 14

Student is a resident, graduate, college park student. They are not in the MBA program but they are taking MBA classes. As such they will be charged as a regular college park student for the same course load, simply because their major is FREN, instead of MBA or EMBA.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

EM12

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA109

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA107

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA110

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA209

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

All adds are in the regular timeframe, so there is nothing to deal with in terms of ineligible drops, etc.
We need to calculate their full time or part time status and this is dependent on campus, so we count all legal adds, subtract all legal drops, and then compare that to 9 for SG or 12 for CP (This might even be different by study level, too, i.e. grad full time is 9, ug full time is 12, but this is not clear right now.)
This distinction doesn't actually make a difference on this course combination, but according to prior rules, we have established that this student is full time for their course.
Note that this method might have to be altered, based on the type of tuition – certain types of tuition might not count towards these caps.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and rate type is [rate type]
count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and rate is [rate]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Firstly we need to get the correct tuition – we have incompatible rates, so we need to know what the base rate is.
If student his MBA, EMBA, etc. (will be defined) and the course has BOTH tuition.flat..mba.cohort.flag and tuition.fixed..regular, remove the tuition.fixed..regular from all signup with BOTH.
If student is not MBA. EMBA, then remove all tuition.flat..mba.cohort.flag rates, because the student is not eligible for them.
In this example, all tuition.flat..mba.cohort.flag are dropped, leaving the regular tuition flag.
On any course that has a tuition.flat..mba.cohort.flag, convert it to the appropriate rate based on the cohort.
In this case, nothing happens, because there are no longer any mba flags.
As a special case (this is a UMD rule) on all courses that have this rate, convert the mandatory.fee.flag..cp to Fee.ao.term..cp.graduate.pt – note that this might have to be cleaned up after the fact, because if the student takes non-cohort classes they might trigger full time fees, etc. This would have to be caught in the clean up.
This does not apply in this case.
Now use the mapping of tution.regular to the appropriate rate for this student based on graduate, full time, resident status from keypairs (as in the earlier use cases).
This makes their tuition rate tuition.credits.fixed..cp.graduate.resident.ft
Based on their status the mandatory.fee.flag..cp can be converted to fee.
Our signup manifest should now look like this:

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.credits.fixed..
cp.graduate.resident.ft

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..
cp. graduate.ft

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.credits.fixed..
cp.graduate.resident.ft

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..
cp. graduate.ft

offeringId

MBA107

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.credits.fixed..
cp.graduate.resident.ft

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..
cp. graduate.ft

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.credits.fixed..
cp.graduate.resident.ft

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..
cp. graduate.ft

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

DSL Ideas

if… [student status keypairs] convert rate [rate] to rate [new rate]
if … [student status keypairs] add [new rate] to signups with [old rate]
if … [student status keypairs] remove [old rate] from all signups
if … [student status keypairs] remove [old rate] from all with rate [rate]
if … [student status keypairs] remove [old rate] from all with rate type [rate type]
if signup exists with rate [rate] and rate [rate] remove rate [rate]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp. graduate.ft

From Rate

From Rate

From Rate

 


No other fees apply.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

All of our rates are in the usual window, so we don't need to worry about the late adds and drops.

Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp. graduate.ft

From Rate

From Rate

From Rate

 

2

CHARGE

45784

tuition.credits.fixed..
cp.graduate.resident.ft

From Rate

From Rate

From Rate

 

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]
Charge [rate] using [number] units.

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp. graduate.ft

From Rate

From Rate

From Rate

 

2

CHARGE

45784

tuition.credits.fixed..
cp.graduate.resident.ft

From Rate

From Rate

From Rate

 

Scenario 16

Student is a resident, graduate, college park student. They are taking the MBA program and are in the EM12 cohort. Notice that if a student were not an MBA student this would be charged as any other course, so we need the two tuition rates and we can select the correct one in the processing.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

EMBA

EM12

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA109

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA107

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA110

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA209

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

10/1/2013

Tuition.flat..mba.cohort.flag

Operation

DROP

effectiveDate

10/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA109

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

The drop is after the window, however, this doesn't matter for this particular course, because once one course is added, the tuition rate will be flat. We will have to calculate the amount based off this though. Even though we have a drop here, this will not affect the outcome from the outcome of use case 13.
We need to calculate their full time or part time status and this is dependent on campus, so we count all legal adds, subtract all legal drops, and then compare that to 9 for SG or 12 for CP (This might even be different by study level, too, i.e. grad full time is 9, ug full time is 12, but this is not clear right now.)
This distinction doesn't actually make a difference on this course combination, but according to prior rules, we have established that this student is full time for their course.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Firstly we need to get the correct tuition – we have incompatible rates, so we need to know what the base rate is.
If student his MBA, EMBA, etc. (will be defined) and the course has BOTH tuition.flat..mba.cohort.flag and tuition.fixed..regular, remove the tuition.fixed..regular from all signup with BOTH.
In this example, all tuition.fixed..regular are dropped.
On any course that has a tuition.flat..mba.cohort.flag, convert it to the appropriate rate based on the cohort.
In this case, all will become tuition.flag..mba.cohort.em12 as that is the cohort attached to the student.
As a special case (this is a UMD rule) on all courses that have this rate, convert the mandatory.fee.flag..cp to Fee.ao.term..cp.graduate.pt – note that this might have to be cleaned up after the fact, because if the student takes non-cohort classes they might trigger full time fees, etc. This would have to be caught in the clean up.
Our signup manifest should now look like this:

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.em12

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.em12

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA107

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.em12

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.em12

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

DSL Ideas

if… [student status keypairs] convert rate [rate] to rate [new rate]
if … [student status keypairs] add [new rate] to signups with [old rate]
if … [student status keypairs] remove [old rate] from all signups
if … [student status keypairs] remove [old rate] from all with rate [rate]
if … [student status keypairs] remove [old rate] from all with rate type [rate type]
if signup exists with rate [rate] and rate [rate] remove rate [rate]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 


No other fees apply.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

All of our rates are in the usual window, so we don't need to worry about the late adds and drops.

Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

56468

Tuition.flat..
mba.cohort.em12

From Rate

From Rate

From Rate

 

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]
Charge [rate] using [number] units.

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

56468

Tuition.flat..
mba.cohort.em12

From Rate

From Rate

From Rate

 

Scenario 17

Student is a resident, graduate, college park student. They are taking the MBA program and are in the EM11 cohort. Notice that if a student were not an MBA student this would be charged as any other course, so we need the two tuition rates and we can select the correct one in the processing.
This student is also taking a regular (non-MBA) course which will trigger other fees in the calculation. Only certain courses are covered by the MBA flat rate.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

EMBA

EM11

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA109

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA107

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA110

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA209

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/1/2013

Tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG210

units

3

Fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

All adds are in the regular timeframe, so there is nothing to deal with in terms of ineligible drops, etc.
We need to calculate their full time or part time status and this is dependent on campus, so we count all legal adds, subtract all legal drops, and then compare that to 9 for SG or 12 for CP (This might even be different by study level, too, i.e. grad full time is 9, ug full time is 12, but this is not clear right now.)
I am unclear from UMD's requirements quite how this student would be treated… They are have 15 credits, but really only 3 of them are regular classes. I am going to make an assumption that we need to count the credits only on those courses that are regular tuition. We might have to recount and reassess their FT/PT status after secondary processing. In this case, we'll run with the status being set as full time here.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Firstly we need to get the correct tuition – we have incompatible rates, so we need to know what the base rate is.
If student his MBA, EMBA, etc. (will be defined) and the course has BOTH tuition.flat..mba.cohort.flag and tuition.fixed..regular, remove the tuition.fixed..regular from all signup with BOTH.
In this example, all tuition.fixed..regular are dropped on signup 1-4, but signup 5 remains as it is because it does not have BOTH tuitions.
On any course that has a tuition.flat..mba.cohort.flag, convert it to the appropriate rate based on the cohort.
In this case, all will become tuition.flag..mba.cohort.em11 as that is the cohort attached to the student.
As a special case (this is a UMD rule) on all courses that have this rate, convert the mandatory.fee.flag..cp to Fee.ao.term..cp.graduate.pt – note that this might have to be cleaned up after the fact, because if the student takes non-cohort classes they might trigger full time fees, etc. This would have to be caught in the clean up.
If the UMD rule is to ignore the credits on the MBA program for FT/PT status, when we might need to trigger a recount of credits at this point. At this point we might figure that the student is in fact, part time as they only have one regular college park class, so 3 credits that count.
We can now use the usual rule to convert the one remaining mandatory.fee.flag..cp to Fee.ao.term..cp.graduate.pt which is based on the student attributes.
We can also convert the remaining tuition.fixed..regular to the college park tuition based on the student status. This will convert the one remaining line (5) to tuition.credits.fixed..cp.graduate.resident.pt
There is some possible cleanup logic needed here, for example, if we had triggered a fee.ao.term..cp.graduate.pt AND a fee.ao.term..cp.graduate.ft then we could change all the pt to ft.
Our signup manifest should now look like this:

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA107

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/1/2013

tuition.credits.fixed..cp.graduate.resident.pt

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..cp.graduate.pt

offeringId

GEOG210

units

3

Fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

DSL Ideas

if… [student status keypairs] convert rate [rate] to rate [new rate]
if … [student status keypairs] add [new rate] to signups with [old rate]
if … [student status keypairs] remove [old rate] from all signups
if … [student status keypairs] remove [old rate] from all with rate [rate]
if … [student status keypairs] remove [old rate] from all with rate type [rate type]
if signup exists with rate [rate] and rate [rate] remove rate [rate]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 


For each fee.ao.course, move to the manifest.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

5-GEOG210

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

All of our rates are in the usual window, so we don't need to worry about the late adds and drops to test this case.

Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

5-GEOG210

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

3

CHARGE

56468

Tuition.flat..
mba.cohort.em11

From Rate

From Rate

From Rate

 

4

CHARGE

45789

tuition.credits.fixed..cp.graduate.resident.pt

From Rate

From Rate

From Rate (Units =3)

 

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]
Charge [rate] using [number] units.

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

5-GEOG210

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

3

CHARGE

56468

Tuition.flat..
mba.cohort.em11

From Rate

From Rate

From Rate

 

4

CHARGE

45789

tuition.credits.fixed..cp.graduate.resident.pt

From Rate

From Rate

From Rate (Units =3)

 

Scenario 18

Student is a resident, graduate, college park student. They are taking the MBA program and are in the EM11 cohort. Notice that if a student were not an MBA student this would be charged as any other course, so we need the two tuition rates and we can select the correct one in the processing.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

EMBA

EM11

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA109

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA107

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA110

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.credits.fixed..baltimore.mba (incompatible rate)

offeringId

MBA209

units

3

Fee.ao.term..tech.fee.flag

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

All adds are in the regular timeframe, so there is nothing to deal with in terms of ineligible drops, etc.
We need to calculate their full time or part time status and this is dependent on campus, so we count all legal adds, subtract all legal drops, and then compare that to 9 for SG or 12 for CP (This might even be different by study level, too, i.e. grad full time is 9, ug full time is 12, but this is not clear right now.)
This distinction doesn't actually make a difference on this course combination, but according to prior rules, we have established that this student is full time for their course.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Firstly we need to get the correct tuition – we have incompatible rates, so we need to know what the base rate is.
If student his MBA, EMBA, etc. (will be defined) and the course has BOTH tuition.flat..mba.cohort.flag and tuition.fixed..regular, remove the tuition.fixed..regular from all signup with BOTH.
In this example, all tuition.fixed..regular are dropped.
If student his MBA, EMBA, etc. (will be defined) and the course has BOTH tuition.flat..mba.cohort.flag and tuition.ao.fixed..baltimore.mba, remove the tuition.ao.fixed..baltimore.mba from all signup with BOTH.
In this example, all tuition.ao.fixed..baltimore.mba are dropped.
On any course that has a tuition.flat..mba.cohort.flag, convert it to the appropriate rate based on the cohort.
In this case, all will become tuition.flag..mba.cohort.em11 as that is the cohort attached to the student.
As a special case (this is a UMD rule) on all courses that have this rate, convert the mandatory.fee.flag..cp to Fee.ao.term..cp.graduate.pt – note that this might have to be cleaned up after the fact, because if the student takes non-cohort classes they might trigger full time fees, etc. This would have to be caught in the clean up.
We also have a Fee.ao.term..tech.fee.flag which needs to be converted to the appropriate ft/pt rate so this is turned into Fee.ao.term..tech.fee.pt
We now have a clean up to do, because fee.ao.term..tech.fee.pt and fee.ao.term..cp.graduate.pt are incompatible (as one includes the other) so we can turn fee.ao.term..tech.fee.pt into Fee.ao.term..cp.graduate.pt
Our signup manifest should now look like this:

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

 

offeringId

MBA109

units

3

Fee.ao.term..cp.graduate.pt

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA107

units

3

Fee.ao.term..cp.graduate.pt

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

 

offeringId

MBA109

units

3

Fee.ao.term..cp.graduate.pt

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

 

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

Fee.ao.term..cp.graduate.pt

DSL Ideas

if… [student status keypairs] convert rate [rate] to rate [new rate]
if … [student status keypairs] add [new rate] to signups with [old rate]
if … [student status keypairs] remove [old rate] from all signups
if … [student status keypairs] remove [old rate] from all with rate [rate]
if … [student status keypairs] remove [old rate] from all with rate type [rate type]
if signup exists with rate [rate] and rate [rate] remove rate [rate]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 


No other fees apply.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

All of our rates are in the usual window, so we don't need to worry about the late adds and drops.

Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

56468

Tuition.flat..
mba.cohort.em11

From Rate

From Rate

From Rate

 

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]
Charge [rate] using [number] units.

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

78571

Fee.ao.term..
cp.graduate.pt

From Rate

From Rate

From Rate

 

2

CHARGE

56468

Tuition.flat..
mba.cohort.em11

From Rate

From Rate

From Rate

 

Scenario 19

Student is a resident, graduate, college park student. They are taking the MBA program and are in the EM11 cohort. Notice that if a student were not an MBA student this would be charged as any other course, so we need the two tuition rates and we can select the correct one in the processing.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

EMBA

EM11

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.credits.fixed..baltimore.mba (incompatible rate)

offeringId

MBA109

units

3

Fee.ao.term..tech.fee.flag

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.credits.fixed..baltimore.mba (incompatible rate)

offeringId

MBA107

units

3

Fee.ao.term..tech.fee.flag

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.credits.fixed..baltimore.mba (incompatible rate)

offeringId

MBA110

units

3

Fee.ao.term..tech.fee.flag

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.credits.fixed..baltimore.mba (incompatible rate)

offeringId

MBA74

units

3

Fee.ao.term..tech.fee.flag

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

All adds are in the regular timeframe, so there is nothing to deal with in terms of ineligible drops, etc.
We need to calculate their full time or part time status and this is dependent on campus, so we count all legal adds, subtract all legal drops, and then compare that to 9 for SG or 12 for CP (This might even be different by study level, too, i.e. grad full time is 9, ug full time is 12, but this is not clear right now.)
This distinction doesn't actually make a difference on this course combination, but according to prior rules, we have established that this student is full time for their course.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Firstly we need to get the correct tuition – we have incompatible rates, so we need to know what the base rate is.
If student his MBA, EMBA, etc. (will be defined) and the course has BOTH tuition.flat..mba.cohort.flag and tuition.fixed..regular, remove the tuition.fixed..regular from all signup with BOTH.
In this example, all tuition.fixed..regular are dropped.
If student his MBA, EMBA, etc. (will be defined) and the course has BOTH tuition.flat..mba.cohort.flag and tuition.ao.fixed..baltimore.mba, remove the tuition.ao.fixed..baltimore.mba from all signup with BOTH.
In this example, all tuition.ao.fixed..baltimore.mba are dropped.
On any course that has a tuition.flat..mba.cohort.flag, convert it to the appropriate rate based on the cohort.
In this case, all will become tuition.flag..mba.cohort.em11 as that is the cohort attached to the student.
As a special case (this is a UMD rule) on all courses that have this rate, convert the mandatory.fee.flag..cp to Fee.ao.term..cp.graduate.pt – note that this might have to be cleaned up after the fact, because if the student takes non-cohort classes they might trigger full time fees, etc. This would have to be caught in the clean up. This does not exist in this example, because none of the courses are taken at college park.
We also have a Fee.ao.term..tech.fee.flag which needs to be converted to the appropriate ft/pt rate so this is turned into Fee.ao.term..tech.fee.pt
We now have a clean up to do, because fee.ao.term..tech.fee.pt and fee.ao.term..cp.graduate.pt are incompatible (as one includes the other) so we can turn fee.ao.term..tech.fee.pt into Fee.ao.term..cp.graduate.pt – In this case, this does not happen, because we do not have both of the incompatible rates. Only the tech fee is being charged.
Our signup manifest should now look like this:

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..tech.fee.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..tech.fee.pt

offeringId

MBA107

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..tech.fee.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.em11

Operation

ADD

effectiveDate

9/1/2013

Fee.ao.term..tech.fee.pt

offeringId

MBA109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

DSL Ideas

if… [student status keypairs] convert rate [rate] to rate [new rate]
if … [student status keypairs] add [new rate] to signups with [old rate]
if … [student status keypairs] remove [old rate] from all signups
if … [student status keypairs] remove [old rate] from all with rate [rate]
if … [student status keypairs] remove [old rate] from all with rate type [rate type]
if signup exists with rate [rate] and rate [rate] remove rate [rate]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

88741

Fee.ao.term..
tech.fee.pt

From Rate

From Rate

From Rate

 


No other fees apply.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

All of our rates are in the usual window, so we don't need to worry about the late adds and drops.

Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

88741

Fee.ao.term..
tech.fee.pt

From Rate

From Rate

From Rate

 

2

CHARGE

56468

Tuition.flat..
mba.cohort.em11

From Rate

From Rate

From Rate

 

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]
Charge [rate] using [number] units.

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Scenario 20

Basic addition of four classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
This is a simple situation where the student is taking four classes and will get the standard full-time fees and tuition. However the student registers late for one class, so they also incur a late fee.
Then they withdraw from their classes. Note that they really have to withdraw from all classes that they are still enrolled in, but it is the job of the registration system to enforce that.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..maincampus

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..maincampus

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..maincampus

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/16/2013

mandatory.fee.flag..maincampus

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

11/14/2013

tuition.fixed..regular

Operation

WITHDRAW

effectiveDate

11/14/2013

mandatory.fee.flag..maincampus

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

6

creationDate

11/14/2013

tuition.fixed..regular

Operation

WITHDRAW

effectiveDate

11/14/2013

mandatory.fee.flag..maincampus

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

7

creationDate

11/14/2013

tuition.fixed..regular

Operation

WITHDRAW

effectiveDate

11/14/2013

mandatory.fee.flag..maincampus

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

8

creationDate

11/14/2013

tuition.fixed..regular

Operation

WITHDRAW

effectiveDate

11/14/2013

mandatory.fee.flag..maincampus

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
We find that signup line 4 has an effective date of after the late registration deadline. We have to add the fee.general..late.registration to the manifest.
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status. (note that even though the addition is late, it is "legal".) We can ignore the WITHDRAW lines at this point as this will be captured later. In the initial calculation, the student is registered as full time.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..maincampus on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..maincampus.resident.ft

FT

NR

fee.ao.term..maincampus.nonresident.ft

PT

RES

fee.ao.term..maincampus.resident.pt

PT

NR

fee.ao.term..maincampus.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.maincampus.resident.ft
This applies even to the withdraw lines.

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
maincampus.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
maincampus.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

All fees on the withdraw lines can be removed. Withdrawal is only going to affect tuition. Fees that are charged are not pulled back (there will be exceptions which will also have to be handled here.)
Now take the lines that are withdraw. They should (up to the registration system) all fall on one day and therefore one ATP. Take all the withdraw lines, and calculate the rates on those lines as if they were adds, and then move them to the manifest as CANCEL lines, using the withdraw rate from the ATP to calculate the amount. We will probably need a DSL line for this specifically.
The date is 11/14 so it falls into withdraw40, meaning the student will get 40% of their charges cancelled. We will also have to link the manifest lines together (although I think the code that is called at the end will actually do this for us.)

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
maincampus.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

4

4

DISCOUNT

848781

fee.ao.term..
maincampus.resident.ft

From Rate

From Rate

From Rate (40% of calculated rate)

3

DSL Ideas:

We need to be able to get calculated values on rates based on rates in force
Get amount to be charged on rate [rate] with number of units = [number of units]

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
maincampus.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

4

4

DISCOUNT

848781

fee.ao.term..
maincampus.resident.ft

From Rate

From Rate

From Rate (40% of calculated rate)

3

Scenario 21

Basic addition of three classes just like scenario 1, however, this student is a public policy student, and is therefore not subject to the regular rates. Processing is done as before, but we catch this difference at the quinary stage.
Public policy student has majors of MAPO, MAMG, MPPS, BMPO, POSI or LMPO. This essentially replaces the regular tuition code with a double charge. There is a resident and a nonresident flavor. The student is a resident of Maryland.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

MAPO

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

PUBL102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

PUBL105

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 9.) This will give us our part-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.pt
And
fee.ao.term.cp.resident.pt

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

If the student is of the public policy majors (MAPO, MAMG, MPPS, BMPO, POSI or LMPO) we must convert their tuition to public policy tuition.

For any of these rates…

Convert to these TWO rates.

tuition.credits.fixed..cp.undergrad.resident.ft
tuition.credits.fixed..cp.graduate.resident.ft
tuition.credits.fixed..cp.undergrad.resident.pt
tuition.credits.fixed..cp.graduate.resident.pt

Tution.credits.fixed..public.policy.resident
Tution.credits.fixed..public.policy.resident
.differential

tuition.credits.fixed..cp.undergrad.nonresident.pt
tuition.credits.fixed..cp.undergrad.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.pt

Tution.credits.fixed..public.policy.nonresident
Tution.credits.fixed..public.policy.nonresident
.differential


As this student is a resident of Maryland, their tuition rate fell into the first box, so their tuition rates will be converted to tuition.credits.fixed..public.policy.resident and.differential.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.pt) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

5875548

Tution.credits.fixed..
public.policy.resident

From Rate

From Rate

From Rate

 

3

CHARGE

4571873

Tution.credits.fixed..
public.policy.resident.differential

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

5875548

Tution.credits.fixed..
public.policy.resident

From Rate

From Rate

From Rate

 

3

CHARGE

4571873

Tution.credits.fixed..
public.policy.resident.differential

From Rate

From Rate

From Rate

 

Scenario 22

Basic addition of three classes just like scenario 1, however, this student is a public policy student, and is therefore not subject to the regular rates. Processing is done as before, but we catch this difference at the quinary stage.
Public policy student has majors of MAPO, MAMG, MPPS, BMPO, POSI or LMPO. This essentially replaces the regular tuition code with a double charge. There is a resident and a nonresident flavor. The student is a nonresident of Maryland.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

MAPO

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

PUBL102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

PUBL105

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 9.) This will give us our part-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.pt
And
fee.ao.term.cp.resident.pt

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

If the student is of the public policy majors (MAPO, MAMG, MPPS, BMPO, POSI or LMPO) we must convert their tuition to public policy tuition.

For any of these rates…

Convert to these TWO rates.

tuition.credits.fixed..cp.undergrad.resident.ft
tuition.credits.fixed..cp.graduate.resident.ft
tuition.credits.fixed..cp.undergrad.resident.pt
tuition.credits.fixed..cp.graduate.resident.pt

Tution.credits.fixed..public.policy.resident
Tution.credits.fixed..public.policy.resident
.differential

tuition.credits.fixed..cp.undergrad.nonresident.pt
tuition.credits.fixed..cp.undergrad.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.pt

Tution.credits.fixed..public.policy.nonresident
Tution.credits.fixed..public.policy.nonresident
.differential


As this student is a resident of Maryland, their tuition rate fell into the second box, so their tuition rates will be converted to tuition.credits.fixed..public.policy.nonresident and.differential.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.pt) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

5875548

Tution.credits.fixed..
public.policy.nonresident

From Rate

From Rate

From Rate

 

3

CHARGE

4571873

Tution.credits.fixed..
public.policy.nonresident.differential

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

5875548

Tution.credits.fixed..
public.policy.nonresident

From Rate

From Rate

From Rate

 

3

CHARGE

4571873

Tution.credits.fixed..
public.policy.nonresident.differential

From Rate

From Rate

From Rate

 

Scenario 23

This session has a courses that include the tuition.credits.fixed..cybersecurity.leadership tuition rate which is only allowable for those students that are majors if Z077 (which this one is). Resident UG

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

Z077

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

CYBER102

units

3

tuition.credits.fixed..cybersecurity.leadership

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

CYBER001

units

3

tuition.credits.fixed..cybersecurity.leadership

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

CYBER938

units

3

tuition.credits.fixed..cybersecurity.leadership

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 9.) This will give us our part-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

If there are lines with incompatible rates of tuition.credits.fixed..cybersecurity.leadership and tutition.fixed..regular, choose tuition.credits.fixed..cybersecurity.leadership for Z099 and tuition.fixed..regular for others. This type of "charge this, otherwise charge this" mapping is common ant UMD and should probably be done before the conversion to residential rates if only because in most cases, it will completely replace regular tutition and the next section doesn't need to execute.
Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cybersecurity.leadership
And
fee.ao.term.cp.resident.pt

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

If the student is of the public policy majors (MAPO, MAMG, MPPS, BMPO, POSI or LMPO) we must convert their tuition to public policy tuition.
This does not happen in this case.

For any of these rates…

Convert to these TWO rates.

tuition.credits.fixed..cp.undergrad.resident.ft
tuition.credits.fixed..cp.graduate.resident.ft
tuition.credits.fixed..cp.undergrad.resident.pt
tuition.credits.fixed..cp.graduate.resident.pt

Tution.credits.fixed..public.policy.resident
Tution.credits.fixed..public.policy.resident
.differential

tuition.credits.fixed..cp.undergrad.nonresident.pt
tuition.credits.fixed..cp.undergrad.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.pt

Tution.credits.fixed..public.policy.nonresident
Tution.credits.fixed..public.policy.nonresident
.differential

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.pt) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

5875548

tuition.credits.fixed..
cybersecurity.leadership

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

5875548

tuition.credits.fixed..
cybersecurity.leadership

From Rate

From Rate

From Rate

 

Scenario 24

This session has a courses that include the tuition.credits.fixed..cybersecurity.leadership tutition rate which is only allowable for those students that are majors if Z077. This student is not in that situation. The student is a graduate resident of Maryland.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

CYBER102

units

3

tuition.credits.fixed..cybersecurity.leadership

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

CYBER001

units

3

tuition.credits.fixed..cybersecurity.leadership

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

CYBER938

units

3

tuition.credits.fixed..cybersecurity.leadership

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 9.) This will give us our part-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

If there are lines with incompatible rates of tuition.credits.fixed..cybersecurity.leadership and tutition.fixed..regular, choose tuition.credits.fixed..cybersecurity.leadership for Z099 and tuition.fixed..regular for others. This type of "charge this, otherwise charge this" mapping is common ant UMD and should probably be done before the conversion to residential rates if only because in most cases, it will completely replace regular tutition and the next section doesn't need to execute.
In this case, the student is not in the Z077 group, so it is the tuition.credits.fixed..cybersecurity.leadership that is removed from the group, and then the system continues as usual, calculating the correct version of tuition based on normal college park rules.
Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.graduate.resident.pt
And
fee.ao.term.cp.resident.pt

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

If the student is of the public policy majors (MAPO, MAMG, MPPS, BMPO, POSI or LMPO) we must convert their tuition to public policy tuition.
This does not happen in this case.

For any of these rates…

Convert to these TWO rates.

tuition.credits.fixed..cp.undergrad.resident.ft
tuition.credits.fixed..cp.graduate.resident.ft
tuition.credits.fixed..cp.undergrad.resident.pt
tuition.credits.fixed..cp.graduate.resident.pt

Tution.credits.fixed..public.policy.resident
Tution.credits.fixed..public.policy.resident
.differential

tuition.credits.fixed..cp.undergrad.nonresident.pt
tuition.credits.fixed..cp.undergrad.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.pt

Tution.credits.fixed..public.policy.nonresident
Tution.credits.fixed..public.policy.nonresident
.differential

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.pt) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

545541

tuition.credits.fixed..
cp.graduate.resident.pt

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

545541

tuition.credits.fixed..
cp.graduate.resident.pt

From Rate

From Rate

From Rate

 

Scenario 25

This session has a courses that include the tuition.credits.fixed..cybersecurity.leadership tuition rate which is only allowable for those students that are majors if Z077 (which this one is). Student is a nonresident graduate student.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

Z077

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

CYBER102

units

3

tuition.credits.fixed..cybersecurity.leadership

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

CYBER001

units

3

tuition.credits.fixed..cybersecurity.leadership

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

CYBER938

units

3

tuition.credits.fixed..cybersecurity.leadership

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our part-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

If there are lines with incompatible rates of tuition.credits.fixed..cybersecurity.leadership and tutition.fixed..regular, choose tuition.credits.fixed..cybersecurity.leadership for Z099 and tuition.fixed..regular for others. This type of "charge this, otherwise charge this" mapping is common ant UMD and should probably be done before the conversion to residential rates if only because in most cases, it will completely replace regular tuition and the next section doesn't need to execute.
In this case, lines 1-3 have their regular tuition removed. Note that the regular tuition will remain on line four as it is not a cybersecurity class.
NOTE: I am unsure at this point if a student in this situation is billed under full time or part time rules. For this scenario, I am going to assume that they are full time as they are taking 12 credits.
Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cybersecurity.leadership
except for line 4 which carries tuition.credits.fixed..cp.graduate.nonresident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

If the student is of the public policy majors (MAPO, MAMG, MPPS, BMPO, POSI or LMPO) we must convert their tuition to public policy tuition.
This does not happen in this case.

For any of these rates…

Convert to these TWO rates.

tuition.credits.fixed..cp.undergrad.resident.ft
tuition.credits.fixed..cp.graduate.resident.ft
tuition.credits.fixed..cp.undergrad.resident.pt
tuition.credits.fixed..cp.graduate.resident.pt

Tution.credits.fixed..public.policy.resident
Tution.credits.fixed..public.policy.resident
.differential

tuition.credits.fixed..cp.undergrad.nonresident.pt
tuition.credits.fixed..cp.undergrad.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.pt

Tution.credits.fixed..public.policy.nonresident
Tution.credits.fixed..public.policy.nonresident
.differential

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.pt) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

5875548

tuition.credits.fixed..
cybersecurity.leadership

From Rate

From Rate

From Rate

 

3

CHARGE

45878

tuition.credits.fixed..
cp.graduate.nonresident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

5875548

tuition.credits.fixed..
cybersecurity.leadership

From Rate

From Rate

From Rate

 

3

CHARGE

45878

tuition.credits.fixed..
cp.graduate.nonresident.ft

From Rate

From Rate

From Rate

 

Scenario 26

This student is only taking "special courses". Student is a full time resident undergraduate. Note that the fee is only charged if ONLY the special courses are taken.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

CHIN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

ENCO99

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

ENCO00

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

UNIV099

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

UNIV000

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft
Now we need to check all the isTaken lines. If they all have fee.ao.term..academic.service.fee then leave it, otherwise remove it.
In this case, the fee remains, as all isTaken lines have the fee.

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

487832

fee.ao.term..
academic.service.fee

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

If the student is of the public policy majors (MAPO, MAMG, MPPS, BMPO, POSI or LMPO) we must convert their tuition to public policy tuition.
This does not happen in this case.

For any of these rates…

Convert to these TWO rates.

tuition.credits.fixed..cp.undergrad.resident.ft
tuition.credits.fixed..cp.graduate.resident.ft
tuition.credits.fixed..cp.undergrad.resident.pt
tuition.credits.fixed..cp.graduate.resident.pt

Tution.credits.fixed..public.policy.resident
Tution.credits.fixed..public.policy.resident
.differential

tuition.credits.fixed..cp.undergrad.nonresident.pt
tuition.credits.fixed..cp.undergrad.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.pt

Tution.credits.fixed..public.policy.nonresident
Tution.credits.fixed..public.policy.nonresident
.differential

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.pt) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

487832

fee.ao.term..
academic.service.fee

From Rate

From Rate

From Rate

 

3

CHARGE

45878

tuition.credits.fixed..
cp.graduate.nonresident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

487832

fee.ao.term..
academic.service.fee

From Rate

From Rate

From Rate

 

3

CHARGE

45878

tuition.credits.fixed..
cp.graduate.nonresident.ft
shoudn't this be:
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Scenario 27

This student is only taking "special courses". Student is a full time resident undergraduate. Note that the fee is only charged if ONLY the special courses are taken. In this case, the student has taken a regular class, in addition, so the fee will be removed in the secondary processing.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

CHIN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

ENCO99

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

ENCO00

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

UNIV099

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

UNIV000

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FRE109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 15.) This will give us our full-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft
Now we need to check all the isTaken lines. If they all have fee.ao.term..academic.service.fee then leave it, otherwise remove it.
In this case, the fee is removed, as one of the isTaken lines does not have the fee.

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

If the student is of the public policy majors (MAPO, MAMG, MPPS, BMPO, POSI or LMPO) we must convert their tuition to public policy tuition.
This does not happen in this case.

For any of these rates…

Convert to these TWO rates.

tuition.credits.fixed..cp.undergrad.resident.ft
tuition.credits.fixed..cp.graduate.resident.ft
tuition.credits.fixed..cp.undergrad.resident.pt
tuition.credits.fixed..cp.graduate.resident.pt

Tution.credits.fixed..public.policy.resident
Tution.credits.fixed..public.policy.resident
.differential

tuition.credits.fixed..cp.undergrad.nonresident.pt
tuition.credits.fixed..cp.undergrad.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.pt

Tution.credits.fixed..public.policy.nonresident
Tution.credits.fixed..public.policy.nonresident
.differential

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.pt) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

45878

tuition.credits.fixed..
cp.graduate.nonresident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

45878

tuition.credits.fixed..
cp.graduate.nonresident.ft
s/b cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Scenario 28

This student is only taking "special courses". Student is a full time resident undergraduate. Note that the fee is only charged if ONLY the special courses are taken. Note that in this case the student adds a regular course and then drops it. Even though the drop is late, the course is no longer being "taken" (even though they are still being charged for it) so the isTaken classes all have the fee, so it is to be charged.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

CHIN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

ENCO99

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

ENCO00

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

UNIV099

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

UNIV000

units

3

fee.ao.term..academic.service.fee

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FRE109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

11/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

11/1/2013

mandatory.fee.flag..cp

offeringId

FRE109

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
There is a non-legal drop, so we can remove the fees attached to the signup line 5. The student will still be charged for the French class. Note however that the French class is already marked as isTaken = false.
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 15.) This will give us our full-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft
Now we need to check all the isTaken lines. If they all have fee.ao.term..academic.service.fee then leave it, otherwise remove it.
In this case, the fee is retained, as none of the isTaken lines does not have the fee.

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

487832

fee.ao.term..
academic.service.fee

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

If the student is of the public policy majors (MAPO, MAMG, MPPS, BMPO, POSI or LMPO) we must convert their tuition to public policy tuition.
This does not happen in this case.

For any of these rates…

Convert to these TWO rates.

tuition.credits.fixed..cp.undergrad.resident.ft
tuition.credits.fixed..cp.graduate.resident.ft
tuition.credits.fixed..cp.undergrad.resident.pt
tuition.credits.fixed..cp.graduate.resident.pt

Tution.credits.fixed..public.policy.resident
Tution.credits.fixed..public.policy.resident
.differential

tuition.credits.fixed..cp.undergrad.nonresident.pt
tuition.credits.fixed..cp.undergrad.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.ft
tuition.credits.fixed..cp.graduate.nonresident.pt

Tution.credits.fixed..public.policy.nonresident
Tution.credits.fixed..public.policy.nonresident
.differential

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.pt) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

487832

fee.ao.term..
academic.service.fee

From Rate

From Rate

From Rate

 

2

CHARGE

45878

tuition.credits.fixed..
cp.graduate.nonresident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

487832

fee.ao.term..
academic.service.fee

From Rate

From Rate

From Rate

 

2

CHARGE

45878

tuition.credits.fixed..
cp.graduate.nonresident.ft
s/b
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Scenario 29

Addition of classes for a special class of student (ENPM Students) who get all of their regular tuition converted to ENTS tuition. This affects students with a limited set of majors. In this case, we'll use ENGF which is one of the list on page 14 of the CCP. I believe that this is applied to all courses. The fees portion is more complicated and will be explored over the next few scenarios.
This is a resident, graduate student.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

ENGF

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)


For students with a major in the ENPM range (see CCP page 14) convert all tuition.fixed..regular to tuition.credits.fixed..enpm
Because of this conversion, there is no more tutiton.fixed..regular to deal with.
Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..enpm
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.
In this case, we have the wrong rate, but we can get the right amount. We can either handle this here, or in clean up at the end. I am going to choose to do this at the end, but we might implement this differently.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
enpm

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

Octonary rules deal with tweaks to the manifest. In this case, we are going to take the calculated amount of the fee (line 1) and recreate a new charge using the fee.ao.term..mandatory.fees.enpm type.
We could also have handled this in secondary, or we could have created mirror rates for the college park fees and mapped them in secondary.
Because the student is in a ENPM group, we change the fee.ao.term..cp.resident.ft to fee.ao.term..mandatory.fees.enpm

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

2

CHARGE

984857

tuition.credits.fixed..
enpm

From Rate

From Rate

From Rate

 

3

CHARGE

4817815

fee.ao.term..
mandatory.fees.enpm

From original value on line 1

From Rate

From original value on line 1

 

Scenario 30

(Compare with 29, which is resident)
Addition of classes for a special class of student (ENPM Students) who get all of their regular tuition converted to ENTS tuition. This affects students with a limited set of majors. In this case, we'll use ENGF which is one of the list on page 14 of the CCP. I believe that this is applied to all courses. The fees portion is more complicated and will be explored over the next few scenarios.
This is a nonresident, graduate student.
Note the actual outcome from this is the same, but the amount is different as it is based on the removed line from the manifest.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

ENGF

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)


For students with a major in the ENPM range (see CCP page 14) convert all tuition.fixed..regular to tuition.credits.fixed..enpm
Because of this conversion, there is no more tutiton.fixed..regular to deal with.
Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..enpm
And
fee.ao.term.cp.nonresident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.
In this case, we have the wrong rate, but we can get the right amount. We can either handle this here, or in clean up at the end. I am going to choose to do this at the end, but we might implement this differently.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
enpm

From Rate

From Rate

From Rate

 

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

Octonary rules deal with tweaks to the manifest. In this case, we are going to take the calculated amount of the fee (line 1) and recreate a new charge using the fee.ao.term..mandatory.fees.enpm type.
We could also have handled this in secondary, or we could have created mirror rates for the college park fees and mapped them in secondary.
Because the student is in a ENPM group, we change the fee.ao.term..cp.resident.ft to fee.ao.term..mandatory.fees.enpm

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

2

CHARGE

984857

tuition.credits.fixed..
enpm

From Rate

From Rate

From Rate

 

3

CHARGE

4817815

fee.ao.term..
mandatory.fees.enpm

From original value on line 1

From Rate

From original value on line 1

 


Note that the yellowed boxes differ from the prior scenario, because they are calculated based on line 1 of the manifest (which has been removed) which was different in scenario 30 than it was in 29.

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

2

CHARGE

984857

tuition.credits.fixed..
enpm

From Rate

From Rate

From Rate

 

3

CHARGE

4817815

fee.ao.term..
mandatory.fees.enpm

From original value on line 1

From Rate

From original value on line 1

 

Scenario 31

Student takes four DC weeknight classes. These classes have special tuition rates that ignore the resident/nonresident etc. distinctions, and have a flat rate per credit. They also do not incur College Park mandatory fees (but do include the tech fee). This particular fee has a FT/PT distinction.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

MBAP

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.credits.fixed..dc.weeknight

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA901

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.credits.fixed..dc.weeknight

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA983

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.credits.fixed..dc.weeknight

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA948

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.credits.fixed..dc.weeknight

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA911

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)


We have a Fee.ao.term..tech.fee.flag which needs to be converted to the appropriate ft/pt rate so this is turned into Fee.ao.term..tech.fee.ft
At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..dc.weeknight (this was always the appropriate rate)
And
fee.ao.term..tech.fee.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
tech.fee.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
tech.fee.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
dc.weeknight

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
tech.fee.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
dc.weeknight

From Rate

From Rate

From Rate

 

Scenario 32

Student takes four DC weekend classes. These classes have special tuition rates that ignore the resident/nonresident etc. distinctions, and have a flat rate per credit. They also do not incur College Park mandatory fees (but do include the tech fee). This particular fee has a FT/PT distinction.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

MBAP

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.credits.fixed..dc.weekend

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA901

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.credits.fixed..dc.weekend

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA983

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.credits.fixed..dc.weekend

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA948

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.credits.fixed..dc.weekend

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA911

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)


We have a Fee.ao.term..tech.fee.flag which needs to be converted to the appropriate ft/pt rate so this is turned into Fee.ao.term..tech.fee.ft
At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..dc.weekend (this was always the appropriate rate)
And
fee.ao.term..tech.fee.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
tech.fee.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
tech.fee.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
dc.weekend

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
tech.fee.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
dc.weekend

From Rate

From Rate

From Rate

 

Scenario 33

Student takes four DC weekend classes. These classes have special tuition rates that ignore the resident/nonresident etc. distinctions, and have a flat rate per credit. They also do not incur College Park mandatory fees (but do include the tech fee). This particular fee has a FT/PT distinction.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

MBAP

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.credits.fixed..dc.weekend

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA901

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.credits.fixed..dc.weekend

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA983

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.credits.fixed..dc.weeknight

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA948

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.credits.fixed..dc.weeknight

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA911

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)


We have a Fee.ao.term..tech.fee.flag which needs to be converted to the appropriate ft/pt rate so this is turned into Fee.ao.term..tech.fee.ft
At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..dc.weekend (this was always the appropriate rate)
OR tuition.credits.fixed..dc.weeknight
And
fee.ao.term..tech.fee.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
tech.fee.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
tech.fee.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
dc.weekend

From Rate

From Rate

From Rate

 

3

CHARGE

937884

tuition.credits.fixed..
dc.weeknight

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
tech.fee.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
dc.weekend

From Rate

From Rate

From Rate

 

3

CHARGE

937884

tuition.credits.fixed..
dc.weeknight

From Rate

From Rate

From Rate

 

Scenario 34

Student takes four DC weekend/ weeknight classes. These classes have special tuition rates that ignore the resident/nonresident etc. distinctions, and have a flat rate per credit. They also do not incur College Park mandatory fees (but do include the tech fee). This particular fee has a FT/PT distinction. In addition, they take one regular college park class, which incurs college park fees. The college park fees override the tech fee, as it is included in that fee.
This student is a graduate, resident student.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

MBAP

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.credits.fixed..dc.weekend

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA901

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.credits.fixed..dc.weekend

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA983

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.credits.fixed..dc.weeknight

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA948

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.credits.fixed..dc.weeknight

Operation

ADD

effectiveDate

9/1/2013

fee.ao.term..tech.fee.flag

offeringId

MBA911

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

MBA211

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 15.) This will give us our full-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt

In this case, we end up with tuition.credits.fixed..gradaute.resident.ft
Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:
NOTE: I am unsure (asking Ted) as to whether or not the FT/PT distinction works here, due to the tech fees, but I think we end up converting to a full-time tech fee.

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


In this case we end up with fee.ao.term..cp.resident.ft on the one College Park class.
We have a Fee.ao.term..tech.fee.flag which needs to be converted to the appropriate ft/pt rate so this is turned into Fee.ao.term..tech.fee.ft
We now have a clean up to do, because fee.ao.term..tech.fee.ft and fee.ao.term..cp.graduate.ft are incompatible (as one includes the other) so we can turn fee.ao.term..tech.fee.ft into Fee.ao.term..cp.graduate.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

Fee.ao.term..
cp.graduate.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

Fee.ao.term..
cp.graduate.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
dc.weekend

From Rate

From Rate

From Rate

 

3

CHARGE

937884

tuition.credits.fixed..
dc.weeknight

From Rate

From Rate

From Rate

 

4

CHARGE

871817

tuition.credits.fixed..
graduate.resident.ft

From Rate

From Rate

From Rate

 

Note that tuition.credits.fixed..graduate.resident.ft might be incorrect as the student is actually PT at College Park.

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
tech.fee.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
dc.weekend

From Rate

From Rate

From Rate

 

3

CHARGE

937884

tuition.credits.fixed..
dc.weeknight

From Rate

From Rate

From Rate

 

Scenario 35

Basic addition of four classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
This student is a Collaborative Engineering Student, so their College Park tuition goes to a different code, and then they are discounted at 25% to a discount code.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

0909F

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt



EXCEPT in this special case. Students with the major 0909F or 0910F follow this mapping (they are, by default, undergraduates)

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft
AND
tuition.credits.fixed..cp.undergrad.resident.ft.frostburg.discount

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft
AND
tuition.credits.fixed..cp.undergrad.nonresident.ft.frostburg.discount

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt
AND
tuition.credits.fixed..cp.undergrad.resident.pt
.frostburg.discount

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt
AND
tuition.credits.fixed..cp.undergrad.nonresident.pt.frostburg.discount



Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
AND
tuition.credits.fixed..cp.undergrad.resident.ft.frostburg.discount
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
We also need to move the discount to the manifest. I have modeled this as a rate, but we might also want to just have the idea of a discount that points to a line and calculates a percentage of that line (often with a different transaction type).
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

3

3

DISCOUNT

8787617

tuition.credits.fixed..
cp.undergrad.resident.ft.
frostburg.discount

From Rate

From Rate

From Rate

2

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

3

3

DISCOUNT

8787617

tuition.credits.fixed..
cp.undergrad.resident.ft.
frostburg.discount

From Rate

From Rate

From Rate

2

Scenario 1a

Basic addition of three classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a key pair, or gleaned at the start of the process.)
This is a simple situation where the student is taking three classes and will get the standard part-time fees.
A: Student 101 Adds another course FREN104 which will make this student Full-Time.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/12/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 9.) This will give us our part-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.pt
A: with the additional course added they will be:
tuition.credits.fixed..cp.undergrad.resident.ft rather than "pt"
And
fee.ao.term.cp.resident.pt will be fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.pt) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.pt

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.pt ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.pt
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Scenario 2a

Basic addition of four classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
This is a simple situation where the student is taking four classes and will get the standard full-time fees and tuition.
A: Student 102 drops FREN104 on 9/30/13 prior to penalty date, this reduction in courses makes the student Part-Time. (basically this is the opposite affect of 1a)

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

9/12/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status.

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
A: However, now that the student dropped a course he should be considered pt the new value would be tuition.credits.fixed..cp.undergrad.resident.pt
And
fee.ao.term.cp.resident.ft this will also change to fee.ao.term..cp.resident.pt

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft pt

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft
cp.undergrad.resident.pt

From Rate

From Rate

From Rate

 

Scenario 3a

Basic addition of four classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
This is a simple situation where the student is taking four classes and will get the standard full-time fees and tuition. However the student registers late for one class, so they also incur a late fee.
A: Student 103 adds another course and drops one that had already been added prior to penalty date student remains at Full-Time status.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/16/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

9/12/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

6

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/12/2013

mandatory.fee.flag..cp

offeringId

PUBL102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
We find that signup line 4 has an effective date of after the late registration deadline. We have to add the fee.general..late.registration to the manifest.
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status. (note that even though the addition is late, it is "legal".)

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft (stays FT)
And
fee.ao.term.cp.resident.ft (stays FT)

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

784516

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Scenario 4a

Basic addition of four classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
This is a simple situation where the student is taking four classes and will get the standard full-time fees and tuition. The student registers late for one class, but the class is ADDWITHOUTPENALTY, meaning the registration system allowed an override. This calculates identically to the second use case, because the late fee is not charged.
A: Student 104 adds another short course that is only "2" credits

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADDWITHOUTPENALTY

effectiveDate

9/16/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/12/2013

mandatory.fee.flag..cp

offeringId

PUBL102

units

2

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
Even though signup 4 is late, it is ADDWITHOUTPENALTY, so we can ignore.
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status. (note that even though the addition is late, it is "legal", so it does not incur the late registration fee.)

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

2

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 


(info) Note: The end result of this scenario should have a "2" credit additional charge.

Scenario 5a

Basic addition of four classes, rendering the student as full-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
The student then drops a class after the drop period. Because the drop is late, the actual calculation is unchanged (their status does not change) and they incur a late fee.
A: Student 105 drops FREN101, FREN102 and FREN103 (essentially dropping all courses) on 10/10/13 resulting in 80% drop rate.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

10/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

10/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

6

creationDate

10/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

10/10/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

7

creationDate

10/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

10/10/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

8

creationDate

10/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

10/10/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
There is a drop that relative to the ATP of line 5, falls after the add/drop period, we must charge a late fee. fee.general..late.registration is added to the manifest. This line can be marked as isComplete, including all of its rates, because other than the late fee, its effects on the student are ignored.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None
A: This should result in the reduction of 3 courses down to just 20% of the charges. (80% refund)

Scenario 6a

Basic addition of four classes, rendering the student as full-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
The student then drops a class after the drop period. Because the drop is late, the actual calculation is unchanged (their status does not change) and they incur a late fee.
A: Student 106 drops the Geography course on 9/12/13 prior to penalty should result in removal of the Geography fees as well the course. This also results in the student being PT rather than FT.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG101

units

3

fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

10/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

10/1/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

6

creationDate

9/1/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

9/12/2013

mandatory.fee.flag..cp

offeringId

GEOG101

units

3

fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
There is a drop that relative to the ATP of line 5, falls after the add/drop period, we must charge a late fee. fee.general..late.registration is added to the manifest. This line can be marked as isComplete, including all of its rates, because other than the late fee, its effects on the student are ignored.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.
Also pick up the fee.ao.course..geography and move it to the manifest (it is charged on each add, and removed on each legal drop)

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

4+geog101

fee.ao.course..
geography

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

4+geog101

fee.ao.course..
geography

From Rate

From Rate

From Rate

 

4

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None
A: Final result should change the fees to Part Time and removal of the Geography fees along with the course.

Scenario 7a

Student is taking a combination of French and Geography courses. Geography courses have fees associated with them.
The student is a nonresident, undergraduate.
Note that offering ID will be a UUID of some sort – I am using course codes here as a simple readable way of handling, but in a real system, FREN101 will have many sections (AOs) so will have many identifiers.
Note that this student has dropped the last class in the penalty period. They are eligible for a 20% rebate on their bill for that tuition.
A: submit a new set of signups exactly like the original set with not changes. Should result in there being NO changes to the account.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG102

units

3

fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG107

units

3

fee.ao.course..geography

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

GEOG418

units

3

fee.ao.course..geography418

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/30/2013

tuition.fixed..regular

Operation

DROP

effectiveDate

9/30/2013

mandatory.fee.flag..cp

offeringId

GEOG418

units

3

fee.ao.course..geography418

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line) We have 12 add units. This marks the student as full time.
The drop is after the add/drop period, so we add the late fee. (This might not be true, but we can remove if we have to).
Because the drop is in the window of 20% charge, we can mark the fee off as is complete (the fee is not refundable) and we will deal with the 20% charge in the tuition section.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt

This will convert to tuition.credits.fixed..cp.undergrad.nonresident.ft
Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt

So this will convert to fee.ao.term..cp.nonresident.ft

DSL Ideas

if… convert rate [rate] to rate [new rate]

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.
For each of the fee.ao.course rates, these can be moved directly to the manifest and marked as isComplete. (Note that the drop of 408 is marked as isComplete so is ignored.) Note that because we're doing charges against lines, not groups of lines, we can use the signup line + the offering to create the identifier.
Note that the drop of the class doesn't affect the fee so we already marked that drop fee as isComplete on 408, so it is still billed to the student.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

2-GEOG102

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

4

CHARGE

3-GEOG107

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

5

CHARGE

4-GEOG408

Fee.ao.course..
geography408

From Rate

From Rate

From Rate

 

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)


This one's the special sauce. 
The rules go as follows: We need to bill the student for the number of credits they are "taking" for billing purposes. This means: All adds, add without penalties, transfer in, count.
All transfer out and drop without penalty deduct.
Drops exist in three states:
Those that count (i.e. they deduct with no ill effect) That would be drops before firstDayOfClass
Those that don't count (i.e. they are ignored). That would be drops after the penalty drop period.
Those that are penalized (i.e those that fall in the middle).
So, in this case, we need the total number of units with a rate, that count before firstDayOfClass and the total number of units with a rate that count before end of penalty period:
In short:
The number of units, using firstDayOfClass as the cut off is:
All adds, addwithoutpenalty, transfer in, less all dropwithoutpenalty and transferout, less all drops before the firstDayOfClass
(In our test data, this would be equal to 12, as signup lines 1-4 are implicated.
THEN we need the number of units using the end of penalty drop period as the cut off date. Same rules.
(In our test data, this would be equal to 9, as all singnup lines are implicated).
So: The student is charged for taking 12 units, as before, but then this amount is DISCOUNTED by 20% of the difference between this amount and the amount they would have been charged if they were taking just 9 credits.
So let's assume $1000 per unit:
In the 12 unit scenario, they would be billed 12*1000 (this is actually done in the rate calculation logic) so the charged amount is $12,000
THEN, we calculate the 9 unit scenario, so 9*1000, so $9,000. We discount the tuition with 80% of the difference (80% is the UMD rule) so the difference is $3,000, so we discount the tuition by 80% of $3,000 = $2,400
NOTE: This is really fun when there is a limit amount. Let's say that between 12-20 units, the price is limited to $12,000, so if the student takes 18 units and drops to 12 units the price is still $12,000 so there is no actual penalty. Ted confirmed that this is how UMD actually does this. Once you qualify for a flat tuition rate, you can basically do what you want! 
Once charged these can all be marked as isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

2-GEOG102

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

4

CHARGE

3-GEOG107

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

5

CHARGE

4-GEOG408

Fee.ao.course..
geography408

From Rate

From Rate

From Rate

 

6

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

From Rate

7

7

DISCOUNT

984857

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

80% of difference as calculated above.

6

DSL Ideas

Get units where rate type is [rate type] || rate is [rate] and cut off milestone is [milestone] || date [date]

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

848781

fee.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

874522

fee.ao.term..
cp.nonresident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

2-GEOG102

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

4

CHARGE

3-GEOG107

Fee.ao.course..geography

From Rate

From Rate

From Rate

 

5

CHARGE

4-GEOG408

Fee.ao.course..
geography408

From Rate

From Rate

From Rate

 

6

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

From Rate

7

7

DISCOUNT

984857

tuition.credits.fixed..
cp.undergrad.nonresident.ft

From Rate

From Rate

80% of difference as calculated above.

6


This test should result in there being NO changes to the student's charges.

Scenario 8a

Basic addition of four classes, rendering the student as part-time (I am assuming 12 credits as full-time status). Student is resident in MD and undergraduate (that information would be in KIM, or come from some other system, maybe passed as a keypair, or gleaned at the start of the process.)
This is a simple situation where the student is taking four classes and will get the standard full-time fees and tuition. The student registers late for one class, but the class is ADDWITHOUTPENALTY, meaning the registration system allowed an override. This calculates identically to the second use case, because the late fee is not charged.
A: Drop all 4 courses prior to the penalty date, results in reversal of all charges.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

(null)

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/1/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

tuition.fixed..regular

Operation

ADD

effectiveDate

9/16/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

5

creationDate

9/1/2013

tuition.fixed..regular

Operation

Withdraw

effectiveDate

9/16/2013

mandatory.fee.flag..cp

offeringId

FREN101

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

6

creationDate

9/1/2013

tuition.fixed..regular

Operation

Withdraw

effectiveDate

9/16/2013

mandatory.fee.flag..cp

offeringId

FREN102

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

7

creationDate

9/1/2013

tuition.fixed..regular

Operation

Withdraw

effectiveDate

9/16/2013

mandatory.fee.flag..cp

offeringId

FREN103

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

8

creationDate

9/1/2013

tuition.fixed..regular

Operation

Withdraw

effectiveDate

9/16/2013

mandatory.fee.flag..cp

offeringId

FREN104

units

3

 

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

Check each ADD is before the atp lateRegistration date. (note that it's the ATP milestone of the signup line)
Signup 4 is late (this might not be how UMD does it, still awaiting clarification, they might require that the INITIAL signup is done before that date. For this use case, let's say the student is dinged for any add/drop activity after the late date.) – So we charge fee.general..late.registration to the student.
No other checks needed (There are no drops, etc.)
Count the number of in-force courses to get total credits for term. (As we have all adds, this is 12.) This will give us our full-time status.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

87442

fee.ao.general..
late.registration

From Rate

From Rate

From Rate

 

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Where there is tuition.fixed..regular on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

UG/GR
In KIM or keypair

 

FT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.ft

FT

RES

GR

tuition.credits.fixed..cp.graduate.resident.ft

FT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.ft

FT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.ft

PT

RES

UG

tuition.credits.fixed..cp.undergrad.resident.pt

PT

RES

GR

tuition.credits.fixed..cp.graduate.resident.pt

PT

NR

UG

tuition.credits.fixed..cp.undergrad.nonresident.pt

PT

NR

GR

tuition.credits.fixed..cp.graduate.nonresident.pt


Where there is mandatory.fee.flag..cp on a signup, convert it using the following mapping:

FT/PT
(Calculated)

Res/NR
In KIM or keypair

 

FT

RES

fee.ao.term..cp.resident.ft

FT

NR

fee.ao.term..cp.nonresident.ft

PT

RES

fee.ao.term..cp.resident.pt

PT

NR

fee.ao.term..cp.nonresident.pt


At this point, all flag rates have been converted to actual rate types. They will all carry:
tuition.credits.fixed..cp.undergrad.resident.ft
And
fee.ao.term.cp.resident.ft

Tertiary Processing (Moving standard fees to the manifest)

Find all fee.ao.term..*** (where the *** is the same)
For each of the, fee.ao.term, create a line in the manifest, using the ID of the Rate (which will be a unique value) as the internal ID, and the derived amount, transaction type, etc. from the rate.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

87442

fee.ao.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 


These rates can be marked as isComplete in the signup.

Quaternary Processing (Special Cases)

None.

Quinary Processing (Conversion of special tuition rates)

None.

Senary Processing (Moving tuition to the manifest)

For each tuition.credits.fixed..***, count the units that are of the same rate code (in this case cp.undergrad.resident.ft) and charge that to the manifest, marking off all the tuitions are isComplete = true.
Manifest now reads as:

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

87442

fee.ao.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 

Septenary Processing (Withdrawals)

None

Octonary Processing (Special cases and cleanup)

None

Final State

All Rates on the signup are isComplete, and charge manifest is as follows.

id

Type
(CHARGE, CANCEL, DISCOUNT)

Internal ID
Or signup id +offering Id

Rate

Effective Date
(and Recognition Date)

Transaction type

Amount

Linked manifest id

1

CHARGE

87442

fee.ao.general..
late.registration

From Rate

From Rate

From Rate

 

2

CHARGE

848781

fee.ao.term..
cp.resident.ft

From Rate

From Rate

From Rate

 

3

CHARGE

984857

tuition.credits.fixed..
cp.undergrad.resident.ft

From Rate

From Rate

From Rate

 


A: This should result in there being no remaining charges for the student.

Scenario 12a

Student is a resident, graduate, college park student. They are taking the MBA program and are in the EM11 cohort. Notice that if a student were not an MBA student this would be charged as any other course, so we need the two tuition rates and we can select the correct one in the processing.
A: Student changes major to FREN rather than an MBA, results in removal of the MBA cohort charges.

Proposed Session Object

User (Session wrapper)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

EMBA

EM11

FALL2013 (20134)

User ID

Major Code (List)

Cohort Code (List)

ATP

user1

FREN

none

FALL2013 (20134)

Signup (Duplicate as needed)

Attached Rates

RegId

1

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA109

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

2

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA107

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

3

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA110

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Signup (Duplicate as needed)

Attached Rates

RegId

4

creationDate

9/1/2013

Tuition.flat..mba.cohort.flag

Operation

ADD

effectiveDate

9/1/2013

Tuition.fixed..regular (incompatible rate)

offeringId

MBA209

units

3

mandatory.fee.flag..cp

ATP

FALL2013 (20134)

isComplete

 

 

Initial Processing (Adds, drops, initial late fees, etc.)

All adds are in the regular timeframe, so there is nothing to deal with in terms of ineligible drops, etc.
We need to calculate their full time or part time status and this is dependent on campus, so we count all legal adds, subtract all legal drops, and then compare that to 9 for SG or 12 for CP (This might even be different by study level, too, i.e. grad full time is 9, ug full time is 12, but this is not clear right now.)
This distinction doesn't actually make a difference on this course combination, but according to prior rules, we have established that this student is full time for their course.

DSL ideas

count units on operation [add etc.] where effective date is [on or before, before, on or after, after] [milestone || date]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rates of type [rate type] and [mark as complete]
get signups of type [add, etc.] where effective date is [on or before, before, on or after, after] [milestone || date] with rate [rate code] and [mark as complete]
Note KS wants us to have the ability to add default rates where none exist. So for example, if there is no tuition rate, set it to default tuition. Both of our schools have indicated that they will not do this, but to implement, we would need have language along the line of:
For each signup [of type [type]] without rate type [rate type] add [rate]

Secondary Processing (Fee and tuition types, exemptions, flags, combinations, etc.)

Firstly we need to get the correct tuition – we have incompatible rates, so we need to know what the base rate is.
If student his MBA, EMBA, etc. (will be defined) and the course has BOTH tuition.flat..mba.cohort.flag and tuition.fixed..regular, remove the tuition.fixed..regular from all signup with BOTH.
In this example, all tuition.fixed..regular are dropped.
On any course that has a tuition.flat..mba.cohort.flag, convert it to the appropriate rate based on the cohort.
In this case, all will become tuition.flag..mba.cohort.em11 as that is the cohort attached to the student.
As a special case (this is a UMD rule) on all courses that have this rate, convert the mandatory.fee.flag..cp to Fee.ao.term..cp.graduate.pt – note that this might have to be cleaned up after the fact, because if the student takes non-cohort classes they might trigger full time fees, etc. This would have to be caught in the clean up.
Our signu