Part Two. The model is not the source. Chapter eight.
The Day the Answer Changes

Contents of Canons
The statement of debt is drawn up as of the calculation date. The day of the calculation date is included in the period over which the penalty accrues. Supply contract No. 7/2026, clause 5.1 (a model contract written for this example; translation)
A supplier wants to know what it is owed. Here is the case, as far as stated so far. One delivery, one million tenge, due on the tenth of June. On the twenty-first of June the buyer paid four hundred thousand. The contract charges a penalty of one tenth of a percent of the unpaid principal for every calendar day of delay, and caps the penalty at ten percent of the original sum.
How much does the buyer owe?
Most people answer six hundred thousand plus a bit. The bit is the penalty, and they start counting days. A few stop before counting and ask the question the supplier forgot to ask: owed as of when?
They are right to stop. This chapter is about that question, and about how much of an answer lives in a date the question never mentioned.
One caution before the numbers. The contract does not exist. Neither do the two companies named in it. The text was written for this example as a model of a supply contract, and it says so in its own first paragraph. What is real is the law it leans on, the Civil Code of Kazakhstan, and the calendar it counts by. Everything below is a test case, and every figure in it comes from the machine’s own record.
Three answers to the same facts
The machine does not answer “how much is owed”. It answers “how much is owed as of a date”, and the contract makes it do so: the statement of debt is drawn up as of the calculation date. So I gave it three dates and did not change anything else.
As of the twentieth of June the contract’s formula gives one million ten thousand. The payment has not arrived yet, so the principal is still a million, and ten days of delay at a tenth of a percent is ten thousand.
As of the thirtieth of June the formula gives six hundred and sixteen thousand: six hundred thousand of principal and sixteen thousand of penalty. The payment came in on the twenty-first and the principal dropped to six hundred thousand. The penalty is now two pieces: ten days on a million, ten thousand, then ten days on six hundred thousand, six thousand.
As of the thirty-first of July the formula gives six hundred and thirty-four thousand six hundred. Same principal; the smaller base has now run forty-one days, from the twenty-first of June to the thirty-first of July.
| As of | Principal (KZT) | Penalty (KZT) | Total (KZT) |
|---|---|---|---|
| 20 June | 1,000,000 | 10,000 | 1,010,000 |
| 30 June | 600,000 | 16,000 | 616,000 |
| 31 July | 600,000 | 34,600 | 634,600 |
These figures are contractual calculations, not predictions of a court award. This example contract separately reserves the recoverable penalty to a court; the end of the chapter explains that modelling boundary.
“Қазір” (qazir) means “right now”, though in everyday conversation it can also signal a promise whose exact timing remains uncertain. The supplier has heard it before. As well as “already left” from a man still looking for his keys. So now he looks at the time on the bank statement. A promise to transfer the money and its crediting are different events.
Three answers, one set of facts. None of them is wrong, and none of them is the answer. Each carries its date in the first line of the record, and the machine will not let the date fall off. The supplier who writes “the buyer owes 616,000” in a letter has quietly dropped the part of the answer that made it true.
Look at how the penalty is written. Not as one number but as periods. For the eleventh to the twentieth of June, the base is a million. From the twenty-first, the day the money landed, that day included, the base is six hundred thousand. Each period lists its days, its base, its rate and what it produced. That is not decoration. It is where a dispute would go: the buyer who says the money was credited on the nineteenth is arguing about the boundary between two rows, and can point at it.
The day the answer stops changing
Push the date out to the end of the year. As of the thirty-first of December the penalty on the smaller base has run for a hundred and ninety-four days and comes to a hundred and sixteen thousand four hundred. With the first ten thousand that is a hundred and twenty-six thousand four hundred. The contract caps the penalty at ten percent of the original million. The record says: cap reached, penalty a hundred thousand, total seven hundred thousand.
By that date the cap has been reached, and from whatever day it was reached, the calculation date stops mattering to the penalty. The debt still stands and the delay still runs, but the penalty no longer grows. The record shows the cap as its own row, before and after, so a reader can see that it was applied and where.
I want to be exact about what the machine decided here and what it did not. It did not decide that ten percent is a fair cap. The contract said so, and the model carries that clause under its address. It did not decide that half a tiyn rounds up: that comes from clause 3.5, whereas the cap comes from clause 3.4. The rounding rule does not affect the example totals, but becomes relevant when the daily rate produces fractions of the smallest currency unit. The machine’s contribution is that these choices were applied to these facts in this order and nowhere else, and that two independent implementations produced the same bytes when they did it.
What the machine will not assume
Now the part I found most instructive.
The contract has a clause that most readers skip. The statement is drawn up on the full payment history, and the party drawing it up confirms in writing that the history is complete as of the calculation date. Without that confirmation, the contract says, the final penalty and the final debt are not determined.
The person who wrote the model took that clause seriously, and this was a choice. The confirmation is a fact the machine expects to be told. Tell it “not confirmed” and the record changes character. The periods are still there, ten thousand and six thousand, computed and shown. The totals are blank. The status line says the data is insufficient, and below it the machine names what is missing: the confirmation of completeness, not established. It does not guess that the payments it was given are all the payments there were.
The question of completeness must be answered, one way or the other. “Cannot confirm” leaves the calculation provisional, as above. No answer at all, and the program does not accept the calculation: it stops before any rule runs, and the reason it gives is the clause. That is a separate choice of the author’s, and worth naming: the program demands an explicit answer even from a person who cannot confirm completeness. Silence, on this reading, is not the same as “no other payments”, and the difference is shown at the door, not buried in a total that looks finished.
That is the whole contrast. Not that the machine is cleverer than a calculator, but that it was built to refuse a particular shortcut and to say which shortcut it refused.
The payment that did not count
One more variation, and this one caught me.
Back to the thirtieth of June and the same payment, four hundred thousand on the twenty-first. But the payment document does not say which obligation the money is for. There is only one obligation in the contract, so surely it is for that one.
The formula now gives one million twenty thousand. The principal is still a million. Twenty days of penalty on a million, no second period, no drop. And a warning at the bottom: a payment was not allocated to any obligation and did not reduce the principal.
The contract is explicit. The buyer states in the payment document which obligations the money goes to, and a payment allocated to none reduces the principal of none. The model’s author could have added “unless there is only one”. They did not, and they said why: the rule of allocation belongs to the buyer, and a calculator that fills it in for the buyer has changed who decides.
Whether that is the right reading of the contract is arguable. What is not arguable is that the record shows the choice. The payment is listed, dated, and marked as unallocated in a column of its own. The buyer who disagrees knows exactly which line to fight about, and the fight is about a clause, not about arithmetic.
The number that is not the answer
Every one of these records ends the same way, and it is the boundary that matters most.
The model calculates the penalty specified by the contract. If the dispute reaches court, Article 297 of Kazakhstan’s Civil Code allows the court, at the debtor’s request, to reduce a penalty that is excessive in relation to the creditor’s losses. The contractual calculation and the amount ultimately awarded must therefore be distinguished. In this specially written example contract, clause 6.3 reserves the recoverable amount to the court. That clause, rather than a general requirement that every penalty be judicially fixed, explains why this model records a question addressed to a court. The computed penalty and the awarded penalty have different names, and no rule turns one into the other.
This is the answer to the question a reader of this chapter should be asking by now. Is the number the machine produced the number you will get? No. It is the number the contract’s formula produces from the facts you gave, as of the date you gave, on the reading of the contract the model’s author chose. The court’s number is not in the model. The model knows it is not, and says so on every run.
A day that moves on its own
Money changes with the date. Some dates move on their own, with the calendar, and one short contrast on the same machine shows the difference.
The Civil Code counts a period in days from the day after the event, and when the last day falls on a non-working day, the period ends on the next working day. Five days from Monday the sixteenth of March end on Saturday the twenty-first. In 2026 the twenty-first, twenty-second and twenty-third of March are the Nauryz holidays; the twenty-fourth and twenty-fifth are days of rest which the law on holidays moves to sit next to them because the holiday fell on a weekend; the twenty-sixth is the first working day. The machine walks forward through all of that and returns Thursday the twenty-sixth, marking that the day was moved.
The basis matters as much as the date. If a holiday law itself moves a day of rest, citing a separate decree would give the date the wrong explanation even if the calculation stayed unchanged. Checking that an answer follows from a model does not check that the model follows from the law. The source of each calendar rule therefore belongs beside the result, where a reader can examine it.
The retained run records are in the experimental notes.
What is left to argue about
The record of the penalty has five places where an argument can stand, and they are all visible.

The date. It is the first line, and changing it changes the answer. Anyone who quotes the total without it has misquoted.
The confirmation. The supplier who signed that the history is complete has vouched for the record and answers for that confirmation. If a payment turns up later, the statement was not wrong in its arithmetic; it was wrong in a premise that has a name.
The allocation. Whether an unallocated payment reduces the only obligation is a question about the contract, and the model’s author answered it one way and showed the answer.
The cap. Ten percent, applied after the periods and before the rounding, in a row of its own.
The court. Whatever the total, it is not what a court will award, and the record says so beside the total on every run.
The supplier asked how much it was owed. The honest answer is a sentence, not a number: as of the thirtieth of June, on a payment history you have confirmed complete, on the reading that an unallocated payment counts for nothing, the contract’s formula gives six hundred and sixteen thousand, and a court will decide the penalty part. The machine wrote that sentence. It just wrote it as a table.