/* * Sale extended with MiFID */ constitutive: /* * The following inplements the MiFID Directive */ interview means interview, document_supplied if !interview. profile(low) means profile(low), create(c(fp,inv,evaluate)), create(c(fp,inv,propose_solution(low))) if !profile(low). classify_products means classify_products if !classify_products. evaluate means evaluate if !evaluate & classify_products. verify means verify if !verify & !withdraw & sign_contract. /* * The following inplements the Sale */ propose_solution(low) means propose_solution, propose_solution(low) if !propose_solution(low). accept_proposal means accept_proposal, create(cc(inv,bank,issue_contract,sign_contract)) if !accept_proposal & propose_solution. introduce_investor means introduce_investor if !introduce_investor. issue_contract means issue_contract if !issue_contract & introduce_investor & !withdraw. sign_contract means sign_contract if !sign_contract & issue_contract & !withdraw. countersign_contract means countersign_contract, create(cc(bank,inv,sign_contract,invest)), create(cc(bank,fp,sign_contract,notify)) if !countersign_contract & issue_contract & !withdraw. notify means notify if sign_contract & countersign_contract & !notify. invest means invest if sign_contract & !invest & !withdraw. withdraw means withdraw, release(cc(bank,inv,sign_contract,invest)), release(c(bank,inv,invest)), cancel(c(inv,bank,sign_contract)) if countersign_contract & !invest & !withdraw. regulative: //SALE Constraints created(cc(inv,bank,issue_contract,sign_contract)) .->. introduce_investor. created(cc(inv,bank,issue_contract,sign_contract)) .-> issue_contract. sign_contract .- created(c(bank,inv,invest)). created(c(bank,fp,notify)) ->. invest. //MIFID CONSTRAINTS /* * Documents must be supplied before committing to an investment */ document_supplied ->. created(c(bank,inv,invest)). /* * Before committing to sign a contract the investor must be informed * of the possible consequences, by supplying the documentation */ document_supplied ->. created(cc(inv,bank,issue_contract,sign_contract)) | created(c(inv,bank,sign_contract)). /* * In order to introduce an investor the fb must have the data about the investor */ interview ->. introduce_investor. /* * Before countersign a contract the bank must verify it */ verify ->. countersign_contract. /* * The investor must be profiled before the financial promoter can perform the evaluation */ profile(low) ->. evaluate. /* * Before proposing a product at a certain level of risk * the fp should have checked that it is adequate by evaluating it w.r.t. * investor profile */ evaluate ->. propose_solution(low).