You are modeling the state of a business. The business buys and sell things, and has to keep track of how much it owes, how much others owe it, how much business it has done, and how much money it is making and can expect to make.
Whether you are using a computer or doing everything by hand, there are some patterns that you will probably follow. (Well, maybe not. You could pay your workers each day, count inventory periodically and reorder when something was low, and find out how much money you had by asking your bank. But most people follow these patterns.)
You will
To replace MonthEndClosing with another pattern, you have to figure out another way to resolve the forces. You can eliminate the need to change software only on the end of a month by using ExplicitBusinessRules. Making the business rules explicit means that it is easy to add them one by one, and does not require major changes in software. You can make them valid only for certain periods of time, so it is easy to add rules that take effect in the future and to test them now by using test transactions with future dates.
You can eliminate the need to fix bad transactions by continuously making the checks that would be performed at MonthEndClosing, so errors are corrected when they occur instead of piling up at the end of the month. If you represent business rules explicitly, the system can check the rules automatically as well as use them to process transactions.
Another reason for representing your business rules explicitly is that you can keep track of how they change over time, and can process (or undo) a transaction based on rules in effect at the time that the transaction took place, not at the time that the transaction was processed by the computer. This means that you don't have to process transactions in any particular order, but can process them whenever all the data is available.
Month end closing will become simpler and easier. This will also result in designing our systems at a higher level, just the like GUI builders and DBMSs let us design our systems at a higher level.
The big question is "how do you represent the business rules in a transaction processing system?" Business rules of a business transaction processing system fall into several categories:
Accounts (see http://st-www.cs.uiuc.edu/users/johnson/Accounts.html) is a system I've been building based on these principles.
-- RalphJohnson
Personally I have never liked month end closing. I think there are better ways to approach the problem(s)
Now you can record data in arrears for a previous period. You can extract the original report by using the notice date as a query. You can extract transactions that are adjustments to the previous period by using effective and notice date.
In practice, you would warn on back valued transactions being posted.
Please post comments here, or mailto:johnson@cs.uiuc.edu.