These are the parts that I understand fairly intimately. Intake (Interface) This part is responsible for interacting with the user. It contains screens, prompts and tests for dealing with user input. It contains a library of tests to perform on the input, and a database to store the data in. Its imperative logic is: 1) Select a sequence 2) Prompt the user for the information needed to enter this sequence and store it in the database 3) Ask the underwriter for the first test in this sequence 4) while we haven't succeeded in underwriting.. 4a) Test the data according to the test 4b) Ask the underwriter for the next test providing the answer 4c) if this is a terminal (end) point (either underwriting success or failure) according to our previous answer exit to 4 5) Present the user with a screen stating success or failure and reason. 6) Success allows us to acquire a success ticket from the underwriter, which we forward to the receipt generator along with the pertinent data from the database. Underwriting This part is responsible for providing a sequence to the tests contained in the Intake system, since this sequence may change or add or remove steps. The underwriting system looks at underwriting as a series of yes/no questions that may either require a yes or a no to succeed. The underwriting system itself knows nothing about what the questions actually ask, only the order they must be asked in and the answer required to get to the next step. Its imperative logic is (completely parallel and asynchronous): *) provide the 'entry' (the first question) to any given sequence on demand *) Accept a question and answer as the result of the intakes testing *a) if answer is the required answer, *A) if there is a next question, return its identifier and pass a success ticket to both the Intake and the Receipt *B) if there is a terminal condition (underwriting success or failure) associated with this question return it *b) if the answer is not the required answer, return underwriting failure Receipt This part is responsible for generating a record of transactions through the system. It receives data from the intake and trade screens and also 'tickets' from all three screens. It uses the tickets to verify that the trade actually occurred before generating a record.