{"data":{"markdownRemark":{"html":"<p>In this tutorial, you will learn how to build a more complex model than the simple trading model demonstrated in the introductory tutorial. You will also be taught some more advanced modelling concepts and explore best practices for the iterative development of models.</p>\n<p>The model is a simulation of a commercial bank's mortgage portfolio. Mortgages are lent to households, who are hit by income shocks, earn income, pay taxes, consume, and attempt to repay their mortgage. Households who are unable to make their repayments eventually default on their mortgage, and the mortgage contract is written off the bank's balance sheet.</p>\n<p>This tutorial is divided into three parts. This reflects the iterative nature of building agent-based models. When we are done, we should have the below model displayed on the console.</p>\n<p>The code for this tutorial is available as a zip download, containing a complete model as a Maven project. This project should be able to be run from any Maven or Java IDE environment.</p>\n<p><a href=\"https://simudynecontent.blob.core.windows.net/$web/tutorials/zips/mortgage-tutorial-v2.4.zip\" class=\"ui button primary\" download>Download Tutorial Files</a></p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-92231.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 52.3493642896628%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABJ0AAASdAHeZh94AAACV0lEQVQoz22SS09TURSFO1QM9HHf7z4pQagRNBCDtkCLpfdZKNpaGjGMdaQG/4BG46gxPhIrgcQI6sCZExOn/KvlutWYmDg42cnZZ6/z7bV3opQ8hJmvwrA3IChrSMurkPQmTDuCqvuQFReS6kL+c0SlBVFuQVE9vmlDNTwomg/TiaDoHhK5iSMKdlnUo+BNaJYHUfMoFsDUQxa6mBTrENQmZJ2CWgTdDJkLoFI0IzdZ2xrnZD1CIn/hFFeuHePq8mfkSnuYnh0wEZI4wISwgpLVxmK+D0PdhMUihUW67SMl1ZAUa6Rdh0OynBHwUz8m/AAtW4WsNZCR1pGW1iDyR9FoYdbZxo/uT5wNzvCt8x3DzSM49g4U20PZ3kIw/wDe3H30Fw7QvfwYprX9W1A2bxC9jqRQY6yNvRDtFnqLj3ASfsF79xifIkb/IxzrNjJGEysz9/C8/hZPrr/EC8ZnjTcoZO/ELR9CtaskW0eKLaTZisj2zGyHNG1kjTby1g5selYu9qCZbWi8t+wQjhEhSyrbCDHDnB4TZs+PkJSWkRJWx4IpgeLyBpziLgrTPdKGuFjZ5+OAvt7iBkSw8z3m4kH6KM/uwbDoq9WBam4h4ZwbYUpc+iuYFNi+0oRGMoHrEBstk0Almcrpilo4zmmkm+SEk8om0prL0+JnIQVJOCX9KyjwkWGFWMgPIHGVpsS1sccSrZApJrG4RKJKrs/BdXGJcaF4l3Zs/08wbrmBInfzaWOEsPIQczR7nmeptM+2O+OFP6gO8do9xdA9wbvgK175J5gu7OIX0+ZE8CVEYJwAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-8e416.webp 173w,\n/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-0b506.webp 345w,\n/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-58be5.webp 690w,\n/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-59b8d.webp 1035w,\n/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-4a474.webp 1380w,\n/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-0025e.webp 1809w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-7e3fa.png 173w,\n/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-7f1d4.png 345w,\n/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-13856.png 690w,\n/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-045bb.png 1035w,\n/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-f46ab.png 1380w,\n/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-92231.png 1809w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-13856.png\"\n          alt=\"mortgage model single run\"\n          title=\"\"\n          src=\"/static/mortgage_model_single_run-78065ef5b793ecef69cb409ba2348df1-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<h2 id=\"skeleton-model\"><a href=\"#skeleton-model\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Skeleton Model</h2>\n<p>In the first installment of this three-part tutorial, we will sketch out a simplified skeleton model. That skeleton model will introduce simple agents with limited behaviour. Parts two and three will add flesh to these bones.</p>\n<h3 id=\"basic-model-structure\"><a href=\"#basic-model-structure\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Basic Model Structure</h3>\n<ul>\n<li>Two types of agent: Households and Bank</li>\n<li>One household, one bank</li>\n<li>Mortgage made by the bank</li>\n<li>Household earns income, consumes, and repays mortgage</li>\n</ul>\n<h3 id=\"the-main-model-class\"><a href=\"#the-main-model-class\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Main Model Class</h3>\n<p>The main model class registers agents, registers links, and creates accumulators. It sets up the agent groups and connects them together. It also specifies the variables that will be output to the console and the control parameters that can be tweaked between model runs.</p>\n<p>The logic of the model, which describes the sequence of events that takes place within one simulated time step, is written in a sequence at the bottom of this file.</p>\n<p>The behaviours taking place for each agent at each step are captured in methods which belong to the agent classes. For example, the bank's methods are found in the Bank class, while the household's methods are found in the Household class. Writing the flow sequence in this way keeps it terse and easy to read. The natural logic of the model is thus easy to follow and edit.</p>\n<p class=\"code-header\">MortgageModel.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>AgentBasedModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Group<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Input<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>graph<span class=\"token punctuation\">.</span>LongAccumulator<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MortgageModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AgentBasedModel</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Number of Households\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">long</span> nbHouseholds <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"equity\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Bank Equity (£)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"assets\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Assets\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">registerAgentTypes</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">registerLinkTypes</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Create our agent groups</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> householdGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> nbHouseholds<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bank<span class=\"token punctuation\">></span></span> bankGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// Each household is connected to 1 bank</span>\n    householdGroup<span class=\"token punctuation\">.</span><span class=\"token function\">partitionConnected</span><span class=\"token punctuation\">(</span>bankGroup<span class=\"token punctuation\">,</span> Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>\n        Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n            Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            household <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              household<span class=\"token punctuation\">.</span><span class=\"token function\">earnIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              household<span class=\"token punctuation\">.</span><span class=\"token function\">consume</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              household<span class=\"token punctuation\">.</span><span class=\"token function\">payMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Bank<span class=\"token operator\">:</span><span class=\"token operator\">:</span>updateBalanceSheet<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"the-bank-class\"><a href=\"#the-bank-class\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Bank Class</h3>\n<p>The Bank class describes stylised data and behaviours of a commercial bank. In this skeleton model, the bank's balance sheet is comprised of debt, assets and equity, which is calculated as assets minus debt. The bank updates its assets in line with the sum of mortgage repayments it receives.</p>\n<p class=\"code-header\">Bank.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Variable<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>List<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Bank</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> debt <span class=\"token operator\">=</span> <span class=\"token number\">90</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">updateBalanceSheet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> assets <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Messages<span class=\"token punctuation\">.</span>RepaymentAmount<span class=\"token punctuation\">></span></span> paymentMessages <span class=\"token operator\">=</span>\n        <span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>RepaymentAmount<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>RepaymentAmount payment <span class=\"token operator\">:</span> paymentMessages<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      assets <span class=\"token operator\">+=</span> payment<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"assets\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>assets<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"equity\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>assets <span class=\"token operator\">-</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>debt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"the-household-class\"><a href=\"#the-household-class\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Household Class</h3>\n<p>The Household class describes the stylised data and behaviours of a household with a mortgage. In the skeleton model, the household earns income, consumes, and compares its stock of wealth with its required mortgage repayment. If it can afford to pay its mortgage, the household sends a message to the bank containing its mortgage repayment.</p>\n<p class=\"code-header\">Household.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Variable<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Household</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> income <span class=\"token operator\">=</span> <span class=\"token number\">5000</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> consumption <span class=\"token operator\">=</span> <span class=\"token number\">3000</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> wealth <span class=\"token operator\">=</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> repayment <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">consume</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    wealth <span class=\"token operator\">-=</span> consumption<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">earnIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    wealth <span class=\"token operator\">+=</span> income<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">payMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">canPay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>RepaymentAmount<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> repayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> Boolean <span class=\"token function\">canPay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> wealth <span class=\"token operator\">>=</span> repayment<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"complex-behaviours\"><a href=\"#complex-behaviours\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Complex Behaviours</h2>\n<p>In this iteration of the model, we have introduced a more extensive set of agent behaviours -- as described by the two sequences at the bottom of the MortgageModel class. Households actively apply for mortgages, and Banks check that a mortgage application meets certain requirements before issuing it. Significantly more output is reported to the console. In this stage of model development, it is useful to track a large number of variables to ensure that the model is generating sensible intermediate and final outputs.</p>\n<p>The other significant change in this version, compared to the last version, is the collection of the messages together inside an object (Messages). This is a stylistic choice, but one we recommend as a best practice -- see <a href=\":version/practices/class-organisation\">Class Organisation</a>.</p>\n<p class=\"code-header\">MortgageModel.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>apache<span class=\"token punctuation\">.</span>commons<span class=\"token punctuation\">.</span>math3<span class=\"token punctuation\">.</span>random<span class=\"token punctuation\">.</span>EmpiricalDistribution<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>AgentBasedModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Group<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Input<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>ModelSettings<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>data<span class=\"token punctuation\">.</span>CSVSource<span class=\"token punctuation\">;</span>\n\n<span class=\"token annotation punctuation\">@ModelSettings</span><span class=\"token punctuation\">(</span>macroStep <span class=\"token operator\">=</span> <span class=\"token number\">120</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MortgageModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AgentBasedModel</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>MortgageModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Number of Households\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">long</span> nbHouseholds <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> wealth <span class=\"token operator\">=</span> <span class=\"token number\">50000</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Globals</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">GlobalState</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"LTI Limit\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> LTILimit <span class=\"token operator\">=</span> <span class=\"token number\">4.5</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"LTV Limit\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> LTVLimit <span class=\"token operator\">=</span> <span class=\"token number\">0.95</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Interest Rate (%)\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> interestRate <span class=\"token operator\">=</span> <span class=\"token number\">5.0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Top Rate Tax Threshold (£k)\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> topRateThreshold <span class=\"token operator\">=</span> <span class=\"token number\">45</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Personal Allowance (£k)\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> personalAllowance <span class=\"token operator\">=</span> <span class=\"token number\">11</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Basic Rate of Tax (%)\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> basicRate <span class=\"token operator\">=</span> <span class=\"token number\">20.0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Top Rate of Tax (%)\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> topRate <span class=\"token operator\">=</span> <span class=\"token number\">40.0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Income Volatility (%)\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> incomeVolatility <span class=\"token operator\">=</span> <span class=\"token number\">2.5</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"equity\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Bank Equity (£)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"badLoans\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Bad Loans\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"writeOffs\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Write-offs\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"impairments\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Impairments (£k)\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"debt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Debt\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"income\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Income\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"mortgages\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Mortgages\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"assets\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Assets\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">registerAgentTypes</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">registerLinkTypes</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    EmpiricalDistribution incomeDist <span class=\"token operator\">=</span>\n        <span class=\"token function\">getContext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getPrng</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">empiricalFromSource</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">CSVSource</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"data/income-distribution.csv\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> householdGroup <span class=\"token operator\">=</span>\n        <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>\n            Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            nbHouseholds<span class=\"token punctuation\">,</span>\n            house <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              house<span class=\"token punctuation\">.</span>income <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> incomeDist<span class=\"token punctuation\">.</span><span class=\"token function\">sample</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n              house<span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">=</span> wealth<span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bank<span class=\"token punctuation\">></span></span> bankGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    householdGroup<span class=\"token punctuation\">.</span><span class=\"token function\">partitionConnected</span><span class=\"token punctuation\">(</span>bankGroup<span class=\"token punctuation\">,</span> Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span>applyForMortgage<span class=\"token punctuation\">,</span> Bank<span class=\"token punctuation\">.</span>processApplication<span class=\"token punctuation\">,</span> Household<span class=\"token punctuation\">.</span>takeOutMortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>\n        Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n            Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">(</span>Household h<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">incomeShock</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">earnIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">payTax</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">subsistenceConsumption</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">payMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">discretionaryConsumption</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n            Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">(</span>Bank b<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              b<span class=\"token punctuation\">.</span><span class=\"token function\">accumulateIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              b<span class=\"token punctuation\">.</span><span class=\"token function\">processArrears</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              b<span class=\"token punctuation\">.</span><span class=\"token function\">clearPaidMortgages</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              b<span class=\"token punctuation\">.</span><span class=\"token function\">updateAccumulators</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> h <span class=\"token operator\">-</span><span class=\"token operator\">></span> h<span class=\"token punctuation\">.</span><span class=\"token function\">writeOff</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Relative to the last version, the bank's behaviour is significantly more complicated. The bank has new methods for processing mortgage applications, processing arrears, and cumulating impairments. A final method (<code class=\"language-text\">UpdateAccumulators</code>) updates the bank's balance sheet data via accumulators which are reported on the console.</p>\n<h3 id=\"the-bank-class-1\"><a href=\"#the-bank-class-1\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Bank Class</h3>\n<p class=\"code-header\">Bank.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Variable<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>functions<span class=\"token punctuation\">.</span>SerializableConsumer<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>List<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Bank</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>MortgageModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> debt <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> assets <span class=\"token operator\">=</span> <span class=\"token number\">10000000</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> <span class=\"token function\">equity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> assets <span class=\"token operator\">-</span> debt<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> nbMortgages <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">double</span> NIM <span class=\"token operator\">=</span> <span class=\"token number\">0.25</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> termInYears <span class=\"token operator\">=</span> <span class=\"token number\">15</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// Should be 25</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> termInMonths <span class=\"token operator\">=</span> termInYears <span class=\"token operator\">*</span> <span class=\"token number\">12</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">int</span> impairments <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">int</span> income <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Stage 1 Provisions\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> stage1Provisions <span class=\"token operator\">=</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Stage 2 Provisions\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> stage2Provisions <span class=\"token operator\">=</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">double</span> <span class=\"token function\">interest</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">1</span> <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>interestRate <span class=\"token operator\">/</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bank<span class=\"token punctuation\">></span></span> <span class=\"token function\">action</span><span class=\"token punctuation\">(</span>SerializableConsumer<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bank<span class=\"token punctuation\">></span></span> consumer<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> consumer<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Bank<span class=\"token punctuation\">></span></span> processApplication <span class=\"token operator\">=</span>\n      <span class=\"token function\">action</span><span class=\"token punctuation\">(</span>\n          bank <span class=\"token operator\">-</span><span class=\"token operator\">></span>\n              bank<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>MortgageApplication<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">-</span><span class=\"token operator\">></span> m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">/</span> m<span class=\"token punctuation\">.</span>income <span class=\"token operator\">&lt;=</span> bank<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>LTILimit<span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">-</span><span class=\"token operator\">></span> m<span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">></span> m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1</span> <span class=\"token operator\">-</span> bank<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>LTVLimit<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>\n                      m <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token keyword\">int</span> totalAmount <span class=\"token operator\">=</span>\n                            <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">*</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">pow</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span><span class=\"token function\">interest</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>termInYears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n                        bank<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>\n                                Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n                                newMessage <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n                                  newMessage<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> totalAmount<span class=\"token punctuation\">;</span>\n                                  newMessage<span class=\"token punctuation\">.</span>termInMonths <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>termInMonths<span class=\"token punctuation\">;</span>\n                                  newMessage<span class=\"token punctuation\">.</span>repayment <span class=\"token operator\">=</span> totalAmount <span class=\"token operator\">/</span> bank<span class=\"token punctuation\">.</span>termInMonths<span class=\"token punctuation\">;</span>\n                                <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n                            <span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">.</span><span class=\"token function\">getSender</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                        bank<span class=\"token punctuation\">.</span>nbMortgages <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n                        bank<span class=\"token punctuation\">.</span>assets <span class=\"token operator\">+=</span> m<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">;</span>\n                        bank<span class=\"token punctuation\">.</span>debt <span class=\"token operator\">+=</span> m<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">;</span>\n                      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">accumulateIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    income <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Payment<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>payment <span class=\"token operator\">-</span><span class=\"token operator\">></span> income <span class=\"token operator\">+=</span> payment<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    assets <span class=\"token operator\">+=</span> <span class=\"token punctuation\">(</span>income <span class=\"token operator\">*</span> NIM<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">processArrears</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">></span></span> arrears <span class=\"token operator\">=</span> <span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// Count bad loans</span>\n    <span class=\"token function\">calcBadLoans</span><span class=\"token punctuation\">(</span>arrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// Calculate provisions</span>\n    <span class=\"token keyword\">double</span> stage1Provisions <span class=\"token operator\">=</span> <span class=\"token function\">calcStageOneProvisions</span><span class=\"token punctuation\">(</span>arrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">double</span> stage2Provisions <span class=\"token operator\">=</span> <span class=\"token function\">calcStageTwoProvisions</span><span class=\"token punctuation\">(</span>arrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>stage1Provisions <span class=\"token operator\">=</span> stage1Provisions <span class=\"token operator\">*</span> <span class=\"token number\">0.01</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>stage2Provisions <span class=\"token operator\">=</span> stage2Provisions <span class=\"token operator\">*</span> <span class=\"token number\">0.03</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">writeLoans</span><span class=\"token punctuation\">(</span>arrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">void</span> <span class=\"token function\">calcBadLoans</span><span class=\"token punctuation\">(</span>List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">></span></span> arrears<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    arrears<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>\n        arrear <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>arrear<span class=\"token punctuation\">.</span>monthsInArrears <span class=\"token operator\">></span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"badLoans\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">void</span> <span class=\"token function\">writeLoans</span><span class=\"token punctuation\">(</span>List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">></span></span> arrears<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    impairments <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    arrears<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span>\n        arrear <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token comment\">// A mortgage is written off if it is more than 6 months in arrears.</span>\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>arrear<span class=\"token punctuation\">.</span>monthsInArrears <span class=\"token operator\">></span> <span class=\"token number\">6</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            impairments <span class=\"token operator\">+=</span> arrear<span class=\"token punctuation\">.</span>outstandingBalance<span class=\"token punctuation\">;</span>\n\n            <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"writeOffs\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            <span class=\"token comment\">// Notify the sender their loan was defaulted.</span>\n            <span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>LoanDefault<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>arrear<span class=\"token punctuation\">.</span><span class=\"token function\">getSender</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    assets <span class=\"token operator\">-=</span> impairments<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> <span class=\"token function\">calcStageTwoProvisions</span><span class=\"token punctuation\">(</span>List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">></span></span> arrears<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> arrears<span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">-</span><span class=\"token operator\">></span> m<span class=\"token punctuation\">.</span>monthsInArrears <span class=\"token operator\">></span> <span class=\"token number\">1</span> <span class=\"token operator\">&amp;&amp;</span> m<span class=\"token punctuation\">.</span>monthsInArrears <span class=\"token operator\">&lt;</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">mapToInt</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">-</span><span class=\"token operator\">></span> m<span class=\"token punctuation\">.</span>outstandingBalance<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">sum</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> <span class=\"token function\">calcStageOneProvisions</span><span class=\"token punctuation\">(</span>List<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">></span></span> arrears<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> arrears<span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">-</span><span class=\"token operator\">></span> m<span class=\"token punctuation\">.</span>monthsInArrears <span class=\"token operator\">&lt;=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">mapToInt</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">-</span><span class=\"token operator\">></span> m<span class=\"token punctuation\">.</span>outstandingBalance<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">sum</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/** Remove any mortgages that have closed from the books. */</span>\n  <span class=\"token keyword\">void</span> <span class=\"token function\">clearPaidMortgages</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> balancePaidOff <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>CloseMortgageAmount closeAmount <span class=\"token operator\">:</span>\n        <span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>CloseMortgageAmount<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      balancePaidOff <span class=\"token operator\">+=</span> closeAmount<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      nbMortgages <span class=\"token operator\">-=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    debt <span class=\"token operator\">-=</span> balancePaidOff<span class=\"token punctuation\">;</span>\n    assets <span class=\"token operator\">-=</span> balancePaidOff<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">updateAccumulators</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"debt\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>debt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"impairments\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>impairments<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"mortgages\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>nbMortgages<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"income\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>income<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"assets\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>assets<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"equity\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token function\">equity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"the-household-class-1\"><a href=\"#the-household-class-1\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Household Class</h3>\n<p>Similarly, the behaviour of the household has also been made more complex than in the skeleton version. The households have additional methods which capture behaviours to do with applying for and taking out a mortgage. A simple class is also included to reflect a mortgage contract.</p>\n<p class=\"code-header\">Household.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Variable<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>functions<span class=\"token punctuation\">.</span>SerializableConsumer<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Household</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>MortgageModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> income<span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> wealth <span class=\"token operator\">=</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> <span class=\"token function\">repayment</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>mortgage <span class=\"token operator\">==</span> null<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> mortgage<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">int</span> taxBill <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  Mortgage mortgage<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">int</span> monthsInArrears <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> <span class=\"token function\">action</span><span class=\"token punctuation\">(</span>SerializableConsumer<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> consumer<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> consumer<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">earnIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    wealth <span class=\"token operator\">+=</span> income <span class=\"token operator\">/</span> <span class=\"token number\">12</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">payMortgage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>mortgage <span class=\"token operator\">!=</span> null<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">canPay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        wealth <span class=\"token operator\">-=</span> mortgage<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">;</span>\n        monthsInArrears <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n        mortgage<span class=\"token punctuation\">.</span>term <span class=\"token operator\">-=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        mortgage<span class=\"token punctuation\">.</span>balanceOutstanding <span class=\"token operator\">-=</span> mortgage<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">;</span>\n        <span class=\"token function\">checkMaturity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        monthsInArrears <span class=\"token operator\">+=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>\n                Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n                <span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">,</span> l<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n                  m<span class=\"token punctuation\">.</span>monthsInArrears <span class=\"token operator\">=</span> monthsInArrears<span class=\"token punctuation\">;</span>\n                  m<span class=\"token punctuation\">.</span>outstandingBalance <span class=\"token operator\">=</span> mortgage<span class=\"token punctuation\">.</span>balanceOutstanding<span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">void</span> <span class=\"token function\">checkMaturity</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>mortgage<span class=\"token punctuation\">.</span>term <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>CloseMortgageAmount<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> mortgage<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      mortgage <span class=\"token operator\">=</span> null<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n          <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>\n              Messages<span class=\"token punctuation\">.</span>Payment<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n              <span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">,</span> l<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n                m<span class=\"token punctuation\">.</span>repayment <span class=\"token operator\">=</span> mortgage<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">;</span>\n                m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> mortgage<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">;</span>\n              <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> Boolean <span class=\"token function\">canPay</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> wealth <span class=\"token operator\">>=</span> mortgage<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> applyForMortgage <span class=\"token operator\">=</span>\n      <span class=\"token function\">action</span><span class=\"token punctuation\">(</span>\n          h <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>h<span class=\"token punctuation\">.</span>mortgage <span class=\"token operator\">==</span> null<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n              <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>h<span class=\"token punctuation\">.</span><span class=\"token function\">getPrng</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">discrete</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">sample</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">int</span> purchasePrice <span class=\"token operator\">=</span> <span class=\"token number\">100000</span> <span class=\"token operator\">+</span> h<span class=\"token punctuation\">.</span>income <span class=\"token operator\">*</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n                h<span class=\"token punctuation\">.</span><span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span>\n                    <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>\n                        Messages<span class=\"token punctuation\">.</span>MortgageApplication<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n                        <span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">,</span> l<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n                          m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> purchasePrice<span class=\"token punctuation\">;</span>\n                          m<span class=\"token punctuation\">.</span>income <span class=\"token operator\">=</span> h<span class=\"token punctuation\">.</span>income<span class=\"token punctuation\">;</span>\n                          m<span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">=</span> h<span class=\"token punctuation\">.</span>wealth<span class=\"token punctuation\">;</span>\n                        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              <span class=\"token punctuation\">}</span>\n            <span class=\"token punctuation\">}</span>\n          <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Household<span class=\"token punctuation\">></span></span> takeOutMortgage <span class=\"token operator\">=</span>\n      <span class=\"token function\">action</span><span class=\"token punctuation\">(</span>\n          h <span class=\"token operator\">-</span><span class=\"token operator\">></span>\n              h<span class=\"token punctuation\">.</span><span class=\"token function\">hasMessageOfType</span><span class=\"token punctuation\">(</span>\n                  Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n                  message <span class=\"token operator\">-</span><span class=\"token operator\">></span>\n                      h<span class=\"token punctuation\">.</span>mortgage <span class=\"token operator\">=</span>\n                          <span class=\"token keyword\">new</span> <span class=\"token class-name\">Mortgage</span><span class=\"token punctuation\">(</span>\n                              message<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">,</span>\n                              message<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">,</span>\n                              message<span class=\"token punctuation\">.</span>termInMonths<span class=\"token punctuation\">,</span>\n                              message<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">incomeShock</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 50% of households gain volatility income, the other 50% lose it.</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">getPrng</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">discrete</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">sample</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      income <span class=\"token operator\">+=</span> <span class=\"token punctuation\">(</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>incomeVolatility <span class=\"token operator\">*</span> income <span class=\"token operator\">/</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      income <span class=\"token operator\">-=</span> <span class=\"token punctuation\">(</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>incomeVolatility <span class=\"token operator\">*</span> income <span class=\"token operator\">/</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>income <span class=\"token operator\">&lt;=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      income <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">payTax</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>income <span class=\"token operator\">&lt;</span> <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>topRateThreshold<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      taxBill <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>income <span class=\"token operator\">-</span> <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>personalAllowance<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>basicRate <span class=\"token operator\">/</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      taxBill <span class=\"token operator\">=</span>\n          <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span>\n              <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>income <span class=\"token operator\">-</span> <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>topRateThreshold<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>topRate <span class=\"token operator\">/</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span>\n                  <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span>income <span class=\"token operator\">-</span> <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>personalAllowance<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>basicRate <span class=\"token operator\">/</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    wealth <span class=\"token operator\">-=</span> taxBill <span class=\"token operator\">/</span> <span class=\"token number\">12</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">subsistenceConsumption</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    wealth <span class=\"token operator\">-=</span> <span class=\"token number\">5900</span> <span class=\"token operator\">/</span> <span class=\"token number\">12</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>wealth <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      wealth <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">discretionaryConsumption</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> incomeAfterSubsistence <span class=\"token operator\">=</span> income <span class=\"token operator\">-</span> <span class=\"token number\">5900</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">double</span> minLiqWealth <span class=\"token operator\">=</span>\n        <span class=\"token number\">4.07</span> <span class=\"token operator\">*</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>incomeAfterSubsistence<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token number\">33.1</span> <span class=\"token operator\">+</span> <span class=\"token function\">getPrng</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">gaussian</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">sample</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">double</span> monthlyConsumption <span class=\"token operator\">=</span> <span class=\"token number\">0.5</span> <span class=\"token operator\">*</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">max</span><span class=\"token punctuation\">(</span>wealth <span class=\"token operator\">-</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">exp</span><span class=\"token punctuation\">(</span>minLiqWealth<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    wealth <span class=\"token operator\">-=</span> monthlyConsumption<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">void</span> <span class=\"token function\">writeOff</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">hasMessageOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>LoanDefault<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      mortgage <span class=\"token operator\">=</span> null<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Mortgage</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> balanceOutstanding<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> term<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> repayment<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">Mortgage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> balanceOutstanding<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> term<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> repayment<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> amount<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>balanceOutstanding <span class=\"token operator\">=</span> balanceOutstanding<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>term <span class=\"token operator\">=</span> term<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>repayment <span class=\"token operator\">=</span> repayment<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"messages\"><a href=\"#messages\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Messages</h3>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>graph<span class=\"token punctuation\">.</span>Message<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Messages</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Arrears</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> monthsInArrears<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> outstandingBalance<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">LoanDefault</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message<span class=\"token punctuation\">.</span>Empty</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">CloseMortgageAmount</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message<span class=\"token punctuation\">.</span>Integer</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">MortgageApplication</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> income<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> wealth<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">ApplicationSuccessful</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> termInMonths<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> repayment<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Payment</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Message</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> repayment<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> amount<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"links\"><a href=\"#links\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Links</h3>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>graph<span class=\"token punctuation\">.</span>Link<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Links</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BankLink</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Link<span class=\"token punctuation\">.</span>Empty</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"final-model\"><a href=\"#final-model\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Final Model</h2>\n<p>The final version of the model introduces additional features to ensure that it is a more accurate reflection of the system we are seeking to model.</p>\n<p>Agents have more complex behaviour as well as additional data.</p>\n<p>The distribution class is introduced to allow the Households to have their income drawn from data that is representative of the UK household sector as a whole. In this way, we can accurately generate any number of realistically parameterised and yet heterogeneous agents.</p>\n<h2 id=\"multiple-runs\"><a href=\"#multiple-runs\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Multiple Runs</h2>\n<p>For many applications of simulation modelling, there is a need to run multiple runs of the same simulation. Due to the stochasticity and emergent properties of these types of model, results are best presented as a distribution.</p>\n<p>The Simudyne SDK includes a multi-run setting which allows the user to specify a Monte Carlo evaluation of their model. We can look at this in action in the mortgage model developed in this tutorial:</p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-66e43.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 52.436323366555925%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABJ0AAASdAHeZh94AAACVElEQVQoz1VSS08TURhtUhMfIJ12HnfeM6W0VdIgSamgYKEVKG3pk/IqAmpsTNzpwviMG+Nj4UJdNCZSZePK/3g8M9EYFif3zr13znfO951IOvYTTuo2LK8GWVtGTL0J1ViH42/BstsQRhO62QrXAIq+CZUI9pbbgWG3oAV7rwvdaiLiXxzB9FcRV9f4uAfbvw/V7EDTGxhX1hCNF4llnCPOKyUofwtI2gaLV5AQVSiixiJ1CiFh8tIpMrkD5K49wuzcN+Tnf8PyBzCsKu4VXuNp8RNelT7j3eqQ6xe47i5sr4V8qg/LqCGhlDGWKBLLLNYKCH9AuKuU24BmUqVYgaRXsDg9wOOl9ziee4G7xFH+GXZmn8B0uphKbuNjZYhh/RSj5i98rY3wYX2I9GQ/sHwCzV6i5TJi8griygoSepWXPURjBUTG84hcDjCHqDSPuKgjM7WDuFaCEGuY9npYSB+ikD6gqw4Vjo0gnCKJyiQtESQUG0hObuOqv4uM00PG3UHW3cZM5hAGvx0OIEuVLntpBAPie9/vwnR7geX/hBKbLlFhXFtHilWzmT70QFH6CLbVhu/tsS0tuMl9nu3zrIOZ3AMkvQ489la3u4h4tCyJBUhyOSSLycVQoekyNt4W7VOB02bD2WOrxQS0wx//3RlUpjAusrHJYm0SXviOCeU6CUtnCMPcUZ3MWCQYkQCKzniEmWxA0aqMVi10YPOtZ3dC9SQ8wYQ6f4ZQFhUITj1B6yrJZa0S7oNVMKOG08StKwPs5Z/jTuElHi6+xfGNN0hxyn8As6w7JVV0h60AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-8e416.webp 173w,\n/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-0b506.webp 345w,\n/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-58be5.webp 690w,\n/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-59b8d.webp 1035w,\n/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-4a474.webp 1380w,\n/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-4cd0c.webp 1806w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-7e3fa.png 173w,\n/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-7f1d4.png 345w,\n/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-13856.png 690w,\n/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-045bb.png 1035w,\n/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-f46ab.png 1380w,\n/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-66e43.png 1806w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-13856.png\"\n          alt=\"mortgage model batch run\"\n          title=\"\"\n          src=\"/static/mortgage_model_batch_run-eccab79e4c5637508352cc21b4766f10-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  \n  </a>\n    </p>\n<p>The results illustrate the range of outcomes generated by 100 simulations of the model. The grey region shows the min-max range, while the red region shows the interquartile range. The red line represents the mean of each output.</p>\n<h3 id=\"tests\"><a href=\"#tests\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Tests</h3>\n<p>Using the Simudyne TestKit, we have created the following tests to check the behavior of the Households and Bank is as required. To read more about the TestKit and how you can use it to test the actions you created in your models, see <a href=\":version/reference/test_kit\">Test Kit</a>.</p>\n<p class=\"code-header\">BankTest.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>junit<span class=\"token punctuation\">.</span>Before<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>junit<span class=\"token punctuation\">.</span>Test<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>testkit<span class=\"token punctuation\">.</span>TestKit<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>testkit<span class=\"token punctuation\">.</span>TestResult<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token keyword\">static</span> org<span class=\"token punctuation\">.</span>junit<span class=\"token punctuation\">.</span>Assert<span class=\"token punctuation\">.</span>assertEquals<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token keyword\">static</span> org<span class=\"token punctuation\">.</span>junit<span class=\"token punctuation\">.</span>Assert<span class=\"token punctuation\">.</span>assertTrue<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BankTest</span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">double</span> LTI_LIMIT <span class=\"token operator\">=</span> <span class=\"token number\">4.5</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">double</span> LTV_LIMIT <span class=\"token operator\">=</span> <span class=\"token number\">0.95</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> TestKit<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>MortgageModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> testKit<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> Bank bank<span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Before</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    testKit <span class=\"token operator\">=</span> TestKit<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>MortgageModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>LTILimit <span class=\"token operator\">=</span> LTI_LIMIT<span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>LTVLimit <span class=\"token operator\">=</span> LTV_LIMIT<span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"badLoans\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"writeOffs\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"debt\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"impairments\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"mortgages\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"income\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"assets\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"equity\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    bank <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">shouldAcceptValidMortgageApplication</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> initialMortgages <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>nbMortgages<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> initialAssets <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> initialDebt <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>debt<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> mortgageAmount <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n\n    testKit\n        <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>\n            Messages<span class=\"token punctuation\">.</span>MortgageApplication<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            m <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> mortgageAmount<span class=\"token punctuation\">;</span>\n              <span class=\"token comment\">// set an income that results in the LTI being higher than the globals LTI</span>\n              m<span class=\"token punctuation\">.</span>income <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">/</span> LTI_LIMIT<span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n              <span class=\"token comment\">// set a wealth that results in the LTV being higher than the globals LTV</span>\n              m<span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1</span> <span class=\"token operator\">-</span> LTV_LIMIT<span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Bank<span class=\"token punctuation\">.</span>processApplication<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialMortgages <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>nbMortgages<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialAssets <span class=\"token operator\">+</span> mortgageAmount<span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialDebt <span class=\"token operator\">+</span> mortgageAmount<span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>debt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">shouldRejectMortgageApplicationInvalidLTI</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    testKit\n        <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>\n            Messages<span class=\"token punctuation\">.</span>MortgageApplication<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            m <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n              <span class=\"token comment\">// set an income that results in the LTI being lower than the globals LTI</span>\n              m<span class=\"token punctuation\">.</span>income <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">/</span> LTI_LIMIT<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Bank<span class=\"token punctuation\">.</span>processApplication<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertTrue</span><span class=\"token punctuation\">(</span>testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">isEmpty</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">shouldRejectMortgageApplicationInvalidLTV</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    testKit\n        <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>\n            Messages<span class=\"token punctuation\">.</span>MortgageApplication<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            m <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n              m<span class=\"token punctuation\">.</span>income <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n              <span class=\"token comment\">// set a wealth that results in the LTV being lower than the globals LTV</span>\n              m<span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token number\">1</span> <span class=\"token operator\">-</span> LTV_LIMIT<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Bank<span class=\"token punctuation\">.</span>processApplication<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertTrue</span><span class=\"token punctuation\">(</span>testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">isEmpty</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">shouldAccumulateIncome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> initialAssets <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> repayment1 <span class=\"token operator\">=</span> <span class=\"token number\">103</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> repayment2 <span class=\"token operator\">=</span> <span class=\"token number\">108</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Payment<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> p <span class=\"token operator\">-</span><span class=\"token operator\">></span> p<span class=\"token punctuation\">.</span>repayment <span class=\"token operator\">=</span> repayment1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Payment<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> p <span class=\"token operator\">-</span><span class=\"token operator\">></span> p<span class=\"token punctuation\">.</span>repayment <span class=\"token operator\">=</span> repayment2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Bank<span class=\"token operator\">:</span><span class=\"token operator\">:</span>accumulateIncome<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialAssets <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>repayment1 <span class=\"token operator\">+</span> repayment2<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> bank<span class=\"token punctuation\">.</span>NIM<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">shouldProcessStage1Arrears</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> initialAssets <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> outstandingBalance1 <span class=\"token operator\">=</span> <span class=\"token number\">34</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> outstandingBalance2 <span class=\"token operator\">=</span> <span class=\"token number\">56</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">sendArrearsMessage</span><span class=\"token punctuation\">(</span>outstandingBalance1<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">sendArrearsMessage</span><span class=\"token punctuation\">(</span>outstandingBalance2<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span>\n        testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Bank<span class=\"token operator\">:</span><span class=\"token operator\">:</span>processArrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"badLoans\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"writeOffs\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>stage2Provisions<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>outstandingBalance1 <span class=\"token operator\">+</span> outstandingBalance2<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0.01</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>stage1Provisions<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>LoanDefault<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialAssets<span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">shouldProcessStage2Arrears</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> initialAssets <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> outstandingBalance1 <span class=\"token operator\">=</span> <span class=\"token number\">34</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> outstandingBalance2 <span class=\"token operator\">=</span> <span class=\"token number\">56</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">sendArrearsMessage</span><span class=\"token punctuation\">(</span>outstandingBalance1<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">sendArrearsMessage</span><span class=\"token punctuation\">(</span>outstandingBalance2<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span>\n        testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Bank<span class=\"token operator\">:</span><span class=\"token operator\">:</span>processArrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"badLoans\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"writeOffs\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>stage1Provisions<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>outstandingBalance1 <span class=\"token operator\">+</span> outstandingBalance2<span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0.03</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>stage2Provisions<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>LoanDefault<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialAssets<span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">shouldProcessBadLoans</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> initialAssets <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> outstandingBalance1 <span class=\"token operator\">=</span> <span class=\"token number\">34</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> outstandingBalance2 <span class=\"token operator\">=</span> <span class=\"token number\">56</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">sendArrearsMessage</span><span class=\"token punctuation\">(</span>outstandingBalance1<span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">sendArrearsMessage</span><span class=\"token punctuation\">(</span>outstandingBalance2<span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span>\n        testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Bank<span class=\"token operator\">:</span><span class=\"token operator\">:</span>processArrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"badLoans\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"writeOffs\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>stage1Provisions<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>stage2Provisions<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>LoanDefault<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialAssets<span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">shouldProcessWriteOffs</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> initialAssets <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> outstandingBalance1 <span class=\"token operator\">=</span> <span class=\"token number\">34</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> outstandingBalance2 <span class=\"token operator\">=</span> <span class=\"token number\">56</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">sendArrearsMessage</span><span class=\"token punctuation\">(</span>outstandingBalance1<span class=\"token punctuation\">,</span> <span class=\"token number\">7</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">sendArrearsMessage</span><span class=\"token punctuation\">(</span>outstandingBalance2<span class=\"token punctuation\">,</span> <span class=\"token number\">7</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span>\n        testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Bank<span class=\"token operator\">:</span><span class=\"token operator\">:</span>processArrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"badLoans\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"writeOffs\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>stage1Provisions<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>stage2Provisions<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>LoanDefault<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialAssets <span class=\"token operator\">-</span> outstandingBalance1 <span class=\"token operator\">-</span> outstandingBalance2<span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">void</span> <span class=\"token function\">sendArrearsMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> outstandingBalance<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> monthsInArrears<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    testKit\n        <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>\n            Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            m <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              m<span class=\"token punctuation\">.</span>monthsInArrears <span class=\"token operator\">=</span> monthsInArrears<span class=\"token punctuation\">;</span>\n              m<span class=\"token punctuation\">.</span>outstandingBalance <span class=\"token operator\">=</span> outstandingBalance<span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">shouldProcessPaidMortgages</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> initialDebt <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>debt<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> initialAssets <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> initialNbMortgages <span class=\"token operator\">=</span> bank<span class=\"token punctuation\">.</span>nbMortgages<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">int</span> mortgageAmount1 <span class=\"token operator\">=</span> <span class=\"token number\">59</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> mortgageAmount2 <span class=\"token operator\">=</span> <span class=\"token number\">32</span><span class=\"token punctuation\">;</span>\n    testKit\n        <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>CloseMortgageAmount<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> amount <span class=\"token operator\">-</span><span class=\"token operator\">></span> amount<span class=\"token punctuation\">.</span><span class=\"token function\">setBody</span><span class=\"token punctuation\">(</span>mortgageAmount1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit\n        <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>CloseMortgageAmount<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> amount <span class=\"token operator\">-</span><span class=\"token operator\">></span> amount<span class=\"token punctuation\">.</span><span class=\"token function\">setBody</span><span class=\"token punctuation\">(</span>mortgageAmount2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Bank<span class=\"token operator\">:</span><span class=\"token operator\">:</span>clearPaidMortgages<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialDebt <span class=\"token operator\">-</span> mortgageAmount1 <span class=\"token operator\">-</span> mortgageAmount2<span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>debt<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialAssets <span class=\"token operator\">-</span> mortgageAmount1 <span class=\"token operator\">-</span> mortgageAmount2<span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialNbMortgages <span class=\"token operator\">-</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> bank<span class=\"token punctuation\">.</span>nbMortgages<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">shouldUpdateAccumulators</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    bank<span class=\"token punctuation\">.</span>debt <span class=\"token operator\">=</span> <span class=\"token number\">98</span><span class=\"token punctuation\">;</span>\n    bank<span class=\"token punctuation\">.</span>impairments <span class=\"token operator\">=</span> <span class=\"token number\">23</span><span class=\"token punctuation\">;</span>\n    bank<span class=\"token punctuation\">.</span>income <span class=\"token operator\">=</span> <span class=\"token number\">90</span><span class=\"token punctuation\">;</span>\n    bank<span class=\"token punctuation\">.</span>assets <span class=\"token operator\">=</span> <span class=\"token number\">98765</span><span class=\"token punctuation\">;</span>\n    bank<span class=\"token punctuation\">.</span>nbMortgages <span class=\"token operator\">=</span> <span class=\"token number\">8</span><span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span>\n        testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Bank<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Bank<span class=\"token operator\">:</span><span class=\"token operator\">:</span>updateAccumulators<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span>debt<span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"debt\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span>impairments<span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"impairments\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span>nbMortgages<span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"mortgages\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span>income<span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"income\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span>assets<span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"assets\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>bank<span class=\"token punctuation\">.</span>assets <span class=\"token operator\">-</span> bank<span class=\"token punctuation\">.</span>debt<span class=\"token punctuation\">,</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"equity\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p class=\"code-header\">HouseholdTest.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>junit<span class=\"token punctuation\">.</span>Before<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> org<span class=\"token punctuation\">.</span>junit<span class=\"token punctuation\">.</span>Test<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>testkit<span class=\"token punctuation\">.</span>TestKit<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>testkit<span class=\"token punctuation\">.</span>TestResult<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token keyword\">static</span> org<span class=\"token punctuation\">.</span>junit<span class=\"token punctuation\">.</span>Assert<span class=\"token punctuation\">.</span>assertEquals<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token keyword\">static</span> org<span class=\"token punctuation\">.</span>junit<span class=\"token punctuation\">.</span>Assert<span class=\"token punctuation\">.</span>assertFalse<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token keyword\">static</span> org<span class=\"token punctuation\">.</span>junit<span class=\"token punctuation\">.</span>Assert<span class=\"token punctuation\">.</span>assertNull<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">HouseholdTest</span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">int</span> TARGET_BANK_LINK_ID <span class=\"token operator\">=</span> <span class=\"token number\">23</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> TestKit<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>MortgageModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> testKit<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> Household household<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> Household<span class=\"token punctuation\">.</span>Mortgage dummyMortgage <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Household<span class=\"token punctuation\">.</span>Mortgage</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Before</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    testKit <span class=\"token operator\">=</span> TestKit<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>MortgageModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    household <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">addAgent</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">registerLinkTypes</span><span class=\"token punctuation\">(</span>Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    household<span class=\"token punctuation\">.</span><span class=\"token function\">addLink</span><span class=\"token punctuation\">(</span>TARGET_BANK_LINK_ID<span class=\"token punctuation\">,</span> Links<span class=\"token punctuation\">.</span>BankLink<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">applyForMortgageDoesNothingWhenMortgageExists</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    household<span class=\"token punctuation\">.</span>mortgage <span class=\"token operator\">=</span> dummyMortgage<span class=\"token punctuation\">;</span>\n\n    TestResult result <span class=\"token operator\">=</span> testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">,</span> Household<span class=\"token punctuation\">.</span>applyForMortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertFalse</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span><span class=\"token function\">getMessageIterator</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">hasNext</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">takeOutMortgageSavesMortgageLocallyOnApplicationSuccessfulMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> mortgageAmount <span class=\"token operator\">=</span> <span class=\"token number\">23</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> mortgageTerm <span class=\"token operator\">=</span> <span class=\"token number\">34</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> mortgageRepayment <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    testKit\n        <span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>\n            Messages<span class=\"token punctuation\">.</span>ApplicationSuccessful<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n            m <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n              m<span class=\"token punctuation\">.</span>amount <span class=\"token operator\">=</span> mortgageAmount<span class=\"token punctuation\">;</span>\n              m<span class=\"token punctuation\">.</span>termInMonths <span class=\"token operator\">=</span> mortgageTerm<span class=\"token punctuation\">;</span>\n              m<span class=\"token punctuation\">.</span>repayment <span class=\"token operator\">=</span> mortgageRepayment<span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">,</span> Household<span class=\"token punctuation\">.</span>takeOutMortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    Household<span class=\"token punctuation\">.</span>Mortgage expectedMortgage <span class=\"token operator\">=</span>\n        <span class=\"token keyword\">new</span> <span class=\"token class-name\">Household<span class=\"token punctuation\">.</span>Mortgage</span><span class=\"token punctuation\">(</span>mortgageAmount<span class=\"token punctuation\">,</span> mortgageAmount<span class=\"token punctuation\">,</span> mortgageTerm<span class=\"token punctuation\">,</span> mortgageRepayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>expectedMortgage<span class=\"token punctuation\">,</span> household<span class=\"token punctuation\">.</span>mortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">takeOutMortgageDoesNothingWhenNoMessages</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">,</span> Household<span class=\"token punctuation\">.</span>takeOutMortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertNull</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">.</span>mortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">writeOff_setsMortgageToNull</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    household<span class=\"token punctuation\">.</span>mortgage <span class=\"token operator\">=</span> dummyMortgage<span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>LoanDefault<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">to</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Household<span class=\"token operator\">:</span><span class=\"token operator\">:</span>writeOff<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertNull</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">.</span>mortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">writeOfDoesNothingWhenNoMessages</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    household<span class=\"token punctuation\">.</span>mortgage <span class=\"token operator\">=</span> dummyMortgage<span class=\"token punctuation\">;</span>\n    testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Household<span class=\"token operator\">:</span><span class=\"token operator\">:</span>writeOff<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>dummyMortgage<span class=\"token punctuation\">,</span> household<span class=\"token punctuation\">.</span>mortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">payMortgageWhenMortgageMatured</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> mortgageAmount <span class=\"token operator\">=</span> <span class=\"token number\">34</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> balanceOutstanding <span class=\"token operator\">=</span> <span class=\"token number\">12</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> mortgageRepayment <span class=\"token operator\">=</span> <span class=\"token number\">12</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> initialWealth <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n    household<span class=\"token punctuation\">.</span>mortgage <span class=\"token operator\">=</span>\n        <span class=\"token keyword\">new</span> <span class=\"token class-name\">Household<span class=\"token punctuation\">.</span>Mortgage</span><span class=\"token punctuation\">(</span>mortgageAmount<span class=\"token punctuation\">,</span> balanceOutstanding<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> mortgageRepayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    household<span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">=</span> initialWealth<span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span>\n        testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Household<span class=\"token operator\">:</span><span class=\"token operator\">:</span>payMortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialWealth <span class=\"token operator\">-</span> mortgageRepayment<span class=\"token punctuation\">,</span> household<span class=\"token punctuation\">.</span>wealth<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> household<span class=\"token punctuation\">.</span>monthsInArrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertNull</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">.</span>mortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    Messages<span class=\"token punctuation\">.</span>CloseMortgageAmount messageResult <span class=\"token operator\">=</span>\n        testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>CloseMortgageAmount<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>mortgageAmount<span class=\"token punctuation\">,</span> messageResult<span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">payMortgageWhenMortgageNOTMatured</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> mortgageAmount <span class=\"token operator\">=</span> <span class=\"token number\">34</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> balanceOutstanding <span class=\"token operator\">=</span> <span class=\"token number\">24</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> mortgageRepayment <span class=\"token operator\">=</span> <span class=\"token number\">12</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> initialWealth <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n    household<span class=\"token punctuation\">.</span>mortgage <span class=\"token operator\">=</span>\n        <span class=\"token keyword\">new</span> <span class=\"token class-name\">Household<span class=\"token punctuation\">.</span>Mortgage</span><span class=\"token punctuation\">(</span>mortgageAmount<span class=\"token punctuation\">,</span> balanceOutstanding<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> mortgageRepayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    household<span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">=</span> initialWealth<span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span>\n        testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Household<span class=\"token operator\">:</span><span class=\"token operator\">:</span>payMortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>initialWealth <span class=\"token operator\">-</span> mortgageRepayment<span class=\"token punctuation\">,</span> household<span class=\"token punctuation\">.</span>wealth<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> household<span class=\"token punctuation\">.</span>monthsInArrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> household<span class=\"token punctuation\">.</span>mortgage<span class=\"token punctuation\">.</span>term<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>balanceOutstanding <span class=\"token operator\">-</span> mortgageRepayment<span class=\"token punctuation\">,</span> household<span class=\"token punctuation\">.</span>mortgage<span class=\"token punctuation\">.</span>balanceOutstanding<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    Messages<span class=\"token punctuation\">.</span>Payment messageResult <span class=\"token operator\">=</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Payment<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>mortgageAmount<span class=\"token punctuation\">,</span> messageResult<span class=\"token punctuation\">.</span>amount<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>mortgageRepayment<span class=\"token punctuation\">,</span> messageResult<span class=\"token punctuation\">.</span>repayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">payMortgageWhenInArrears</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> mortgageAmount <span class=\"token operator\">=</span> <span class=\"token number\">34</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> balanceOutstanding <span class=\"token operator\">=</span> <span class=\"token number\">24</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> mortgageRepayment <span class=\"token operator\">=</span> <span class=\"token number\">12</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> initialWealth <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    household<span class=\"token punctuation\">.</span>mortgage <span class=\"token operator\">=</span>\n        <span class=\"token keyword\">new</span> <span class=\"token class-name\">Household<span class=\"token punctuation\">.</span>Mortgage</span><span class=\"token punctuation\">(</span>mortgageAmount<span class=\"token punctuation\">,</span> balanceOutstanding<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> mortgageRepayment<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    household<span class=\"token punctuation\">.</span>wealth <span class=\"token operator\">=</span> initialWealth<span class=\"token punctuation\">;</span>\n\n    TestResult testResult <span class=\"token operator\">=</span>\n        testKit<span class=\"token punctuation\">.</span><span class=\"token function\">testAction</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">,</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Household<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> Household<span class=\"token operator\">:</span><span class=\"token operator\">:</span>payMortgage<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    Messages<span class=\"token punctuation\">.</span>Arrears messageResult <span class=\"token operator\">=</span> testResult<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>Arrears<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">.</span>monthsInArrears<span class=\"token punctuation\">,</span> messageResult<span class=\"token punctuation\">.</span>monthsInArrears<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertEquals</span><span class=\"token punctuation\">(</span>household<span class=\"token punctuation\">.</span>mortgage<span class=\"token punctuation\">.</span>balanceOutstanding<span class=\"token punctuation\">,</span> messageResult<span class=\"token punctuation\">.</span>outstandingBalance<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","headings":[{"value":"Skeleton Model","depth":2},{"value":"Basic Model Structure","depth":3},{"value":"The Main Model Class","depth":3},{"value":"The Bank Class","depth":3},{"value":"The Household Class","depth":3},{"value":"Complex Behaviours","depth":2},{"value":"The Bank Class","depth":3},{"value":"The Household Class","depth":3},{"value":"Messages","depth":3},{"value":"Links","depth":3},{"value":"Final Model","depth":2},{"value":"Multiple Runs","depth":2},{"value":"Tests","depth":3}],"frontmatter":{"title":"Mortgage Portfolio Tutorial","toc":true,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.4/docs/tutorials/mortgage.md","versioned":true,"version":"2.4","kind":"docs","pagePath":"/tutorials/mortgage","chronology":{"prev":{"name":"Synthetic Market Tutorial","path":"/tutorials/trader"},"next":{"name":"Schelling Segregation Tutorial","path":"/tutorials/schelling"}},"lastUpdated":"2026-04-21T13:56:54.849Z"}}