Conceptualization
Vocabulary
Concepts:
enteredPin - a PIN number that has been entered by user.
correctPIN - a PIN number that is stored on the card.
authorized - indicates if the user has entered the correct PIN.
userAccountAmount - the amount of the free founds on the user account.
cashPointAmount - the amount of the founds that are available in a cashpoint.
failedAttempts - the number of failed attempts to authorization.
requestedAction - the operation that user want to execute.
cashPointActivity - the final operation invoked by cashpoint.
Relations:
enteredPin → authorized
correctPIN → authorized
enteredPin → failedAttempts
correctPIN → failedAttempts
authorized → cashPointActivity
userAccountAmount → cashPointActivity
cashPointAmount → cashPointActivity
failedAttempts → cashPointActivity
requestedAction → cashPointActivity
Original Rules
Observations
Sometimes, a value of some attribute depends on a relation between two attributes. In case of cashpoint system such situation can also be identified:
The system requires a comparison between the PIN number that has been entered by the user and the PIN number that is stored on the card in order to check if the user has entered a correct PIN. Having three attributes: enteredPIN, correctPIN and authorized we can simply compare the first two and depending on a result, we can set a value of the third one:
The XTT method does not allow to direct comparison between two attributes within conditional part of a rule. So, you cannot create the rules presented above. If you want to compare the values of two attributes you have to introduce a third, supplementary attribute that will hold the value, which corresponds to the result of the comparison. Then, depending on the value of this (supplementary) attribute, the further decisions can be taken.
I.E. According to rules presented above, we can introduce a new attribute pidDifference, which will hold the value of subtraction of the attributes enteredPIN and correctPIN. So, those two rules can replaced with:
if enteredPIN ≠ null and correctPIN ≠ null then pidDifference := enteredPIN - correctPIN;
if pidDifference = 0 then authorized := true;
if pidDifference ≠ 0 then authorized := false;