Back to Phil for exact spec of what filename should be.
At the beginning of running a simulation we need to load the results for the previous period. For a particular table this code could be speeded by using the period field in the results table (ex. IcFirmMarketPerf.FirmStatePeriod ) rather than referring to the period field in the parent table (ex. IcFirmState.Period). A bit technical but could gain a few seconds.
I am postponing this because it does require some time to do this - and it is not a request from Phil.
The team software does not actually access the database files directly, instead it simply reads in all the data from a special file prepared by the administrator program. We would therefore hope that there would be no possible conflicts with the virus scan software. However the program does use some special "in-memory" database tables which might cause some temporary tables to be created on the disk. This needs to be checked and tested.
I am postponing this since it is part of a test activity which will have to be planned next year.
The new form layout for decisions needs to be validated and improved.
Currently the default (and really only) view for the decision screens is a table. This makes sense when you have to make a number of separate decisions for a set of some 57 countries. Here each separate decision is made in a separate column and each country is represented on a different row.
However in the case of a simulation involving just one or maybe two countries it may be more pleasing to display the decision as a form. William has developed a simple alternative view for the decision screens. This needs to be validated and suggestions made for improvement.
I have already done something on us. But to further this I need some input from professors who might have such a scenario (i.e. one country)
Testing is more than just a simple task but I have added it here just to remind us that we will need to allocate some time for testing. (And need to decide on a set of testing tasks before we do the testing).
This needs to be checked. When you play with the project characteristics you can get some strange marginal production costs.
This calculation needs to be documented.
In general the cost of sales support can be very high. In addition the commission is calculated as a percentage but we need to be sure we understand of what it is a percentage.
The calculations behind market share should be documented
I do not have any issues here apart from the effect of media on market share. This is not completely clear.
To see this bug start the administrator and then go to the Reports section. From the left-hand menu select the report Share:Units. Now change the firm using the drop-down menu in the top-right hand corner of the screen. You will get the error message 'Grid index out of range'.
Done. Well actually I rewrote the code which displays this report (in order to remove some larger complicated pieces of code that were no longer being used). In doing so it seems to have removed this bug since I am no longer able to reproduce it.
This is not a bug but I am thinking we should probably review the units that we are using to display money and sales units in the reports. In the financials all amounts are displayed in $M and that looks pretty nice. Units also should probably be displayed in thousands of units.
Done. In addition I spent about 1 day just working on the Forecast report. It didn't look very good - and looks better now - now need some feedback on what has been done.
This seemed to be happening in the Competitor's report. This report had had some changes and it doesn't look like they were finished - some variables not declared correctly. This is now corrected and seems to be OK. Of course there still might be some other issues. Really need to go back to Plessis-Mornay and give the program a good hammering!
Done.
Done. Unfortunately I do not completely know exactly what corrected this problem since I made two changes at the same time. I set the Scaled property of the form to False; and I added a couple of "Canvas.Font.Assign( Self.Font )" statements. Actually I think it was the last one that corrected the problem. Its important to set the Canvas before you are drawing (ex. DrawText) or measuring text (ex. MeasureItem )
Done. Added code to automatically change the width of the side bar depending on the size of the font.
For reports, millions of dollars looks much better, but for decisions we should keep all screesn in thousands of dollars.
Done. In fact I had only made some changes to the Production Decision screen, thinking about the units. So I put this back to the way it was, and at the same time corrected some problems with the calculations of the costs, and the row totals.
The Admin Area Bar appears at the top of the Admin program. Currently there are a number of sections displayed on this bar. By default, there should only be one displayed: Admin.
If the administrator selects "Edit Team Decisions" then the "Decisions" section should become visible. If the administrator selects "Preview Results", then the Results sections should become visible.
Done.
This task was entered twice. This one has been marked as done - the other has been postponed (awaiting confirmation).
Done. Added code to automatically size the sidebar depending on the font and text to be displayed.
Done. I added 2 pixels above the dotted line and 6 pixels below.
For the Administrator the menu bar is hidden by default. You can make it appear by hitting CTRL-F9
The menu bar is still displayed for the Player.
Done.
Done.
Done. Help hidden for the administrator
Help is still visible for the Player.
Change Ericsson to Sony_Ericsson; and change Siemens to Apple (Home Country US).
Done.
Done. I did this for the three dialogs
However I don't think that this makes any difference. I think that the issue here is really with "Run Simulation". This can take a certain length of time to run - between 1 and 5 minutes and whilst it is running there are not many screen updates so the program can appear unresponsive.
There is not a quick solution to this problem. The Simulator (which runs the simulation) calls a number of other Modules to get the work done. These other Modules would have to have a callback routine added so that after they have done a part of their work then could signal back to the main form, who could in turn cause the screen to refresh. We would also need to add a timelog so that we were not refreshing too often (a max of once every second or two seconds should be enough).
In short possible, but 1/2 days work.
Done. Was already done by a previous task.
The column headings are a bit messy here. Perhaps repeat the market (Business or Market) at as the first work of each column.
Done.
Done. Added the ability for the view to override the label text.
Hovering over the brand name on the chart should reveal details about the brand, notably price.
Done. The Chart will only tell us if the mouse is over the chart or not (and also give the screen coordinates). Had to write a lot code to get from screen coordinates back to the point and then display the tooltip. This still needs more work - especially related to caching the queries for the administrator (and indeed whilst he is in Report mode why shouldn't we cache his queries?
This likes it was a data problem and not a calculation problem. For OEM Accounts, product characteristics: battery life, memory, video and voice I have noted zero importance. In the database table I had other figures. I have put the importance back to zero (meaning that for these four characteristics the conjoint levels are all zero0.
Done. Took me a while to work out why it was not appearing (Answer: the visible property was set to false. However I can see that we need to do some tidying up of data and code here.
All products should be displayed. Drop totals. Drop Years to complete.
Done. One thing this report highlights is the philosophy now that all numbers that appear on a report should come directly from a table (i.e. are not calculated). In the case of Marginal Production Cost we were using the FirmProjectPlan to recalculate it each time - now we use BrandAccount.UnitCost
Done. Removing the chart was easy - just remove the Interface Chartable for the declaration of the class (for the view). I also improved the SelectBar so that when the text is long (as is the case in Distribution Coverage for the channels); the button and the drop down form are wide enough.
Done. Just a name change in View table.
The value should be based on sales revenure. The figures should be reported in millions of dollars.
Done. This is the only view which uses the internal Prism and Dynamic View - its smart but is harder to understand that just create number matrix and then using that to decide what to display (see the Accounts view for example the Accounts matrix).
Done. Prism and Dynamic View do this automatically - you just have to know how to set it up right!
The firm names should be in bold.
Done. Defined using function IsRowHeading?
Done.
The ideal point should be written in yellow text on a red background. Reduce the size of the chart slightly, or enlarge the axis, so that the text is not written off the screen.
I defined three new method for a view:
| if value | perturbation |
|---|---|
| if > 90 | between -1 and -8 |
| if > 20 and <= 90 | between +8 and -8 |
| otherwise | between +1 and +8 |
Done.
Done. I personally don't think this looks better. Perhaps we could have made the columns wider and maybe just add horizontal lines.
Done. In fact the screen was always like this before and changed because of some new code I added. I just ignore the new code for these screens.
| if value | perturbation |
|---|---|
| if > 90 | between -1 and -8 |
| if > 20 and <= 90 | between +8 and -8 |
| otherwise | between +1 and +8 |
Done. Added an options "classic calculations" so that we can still run the Engine without this random option.
The mechanics of this screen need to be agreed with Mike
A firm will not now be allowed to spend cash that it does not have. If a firm wishes to spend beyond its current cash level then it will have to negotiate a loan with the game administrator. William has put a basic loan screen in place. The exact fields that should appear on this screen and the consequences of the loan need to be agreed with Mike.
I could not see an easy way to block the data entry if you went over budget - or rather not to let you enter a figure that would put you over budget. So for the time being you can enter numbers that take you over budget but the BudgetDisplay becomes bright red.
Done. Needed to remove Market Segment drop down menu as well.
This report should contain the three lines:
Working Capital = Current Assets - Current Liabilities
Done.
Add a borrow money form to the side of this page.
After quite a bit of experimenting, did something which I think works quite well.
Done.
Done.
The ratio of Goodwill to (Total Assets - Goodwill) should be the same as that for Nokia. For Nokia Goodwill = 1,304; and Total Assets = 30,051. Goodwill Ratio is therefore 1,304/30,051 = 0.043.
The ratio of current liabilities (that is excluding long-term debt) to (current liabilities plus share holder equity) should be the same as that for Nokia. For Nokia current liabilities excluding debt = 13,415; and Current Liabilities plus ShareHolderEquity excluding debt = 29,407. The Current Liability Ratio is therefore 13,415/29,407 = 0.456.
Nokia Accounts on Yahoo All figures are in thousands.
| PERIOD ENDING | 31-Dec-06 | 31-Dec-05 | 31-Dec-04 | |
| Assets | ||||
| Current Assets | ||||
| Cash And Cash Equivalents | 1,952,724 | 1,853,586 | 1,487,196 | |
| Short Term Investments | 9,465,231 | 9,883,818 | 14,608,631 | |
| Net Receivables | 7,773,926 | 6,331,802 | 5,978,801 | |
| Inventory | 2,051,746 | 1,975,579 | 1,780,542 | |
| Other Current Assets | 3,295,469 | 2,400,779 | 2,761,546 | |
| Total Current Assets | 24,539,096 | 22,445,564 | 26,616,715 | |
| Long Term Investments | 336,677 | 371,902 | 551,218 | |
| Property Plant and Equipment | 1,980,450 | 1,877,274 | 2,092,990 | |
| Goodwill | 1,304,456 | 716,562 | 720,403 | |
| Intangible Assets | 580,932 | 373,086 | 437,972 | |
| Accumulated Amortization | - | - | - | |
| Other Assets | 48,851 | (58,036) | 91,415 | |
| Deferred Long Term Asset Charges | 1,260,887 | 917,910 | 880,038 | |
| Total Assets | 30,051,348 | 26,644,262 | 31,390,751 | |
| Liabilities | ||||
| Current Liabilities | ||||
| Accounts Payable | 9,939,218 | 8,070,502 | 7,197,210 | |
| Short/Current Long Term Debt | 326,114 | 446,519 | 293,346 | |
| Other Current Liabilities | 3,150,236 | 2,936,128 | 3,382,348 | |
| Total Current Liabilities | 13,415,568 | 11,453,148 | 10,872,904 | |
| Long Term Debt | 91,101 | - | - | |
| Other Liabilities | 161,077 | 138,575 | 156,906 | |
| Deferred Long Term Liability Charges | 270,662 | 178,844 | 244,228 | |
| Minority Interest | 121,468 | - | 229,219 | |
| Negative Goodwill | - | - | - | |
| Total Liabilities | 14,059,875 | 11,770,567 | 11,503,256 | |
| Stockholders' Equity | ||||
| Misc Stocks Options Warrants | - | - | - | |
| Redeemable Preferred Stock | - | - | - | |
| Preferred Stock | - | - | - | |
| Common Stock | 324,794 | 315,050 | 382,032 | |
| Retained Earnings | 14,685,697 | 15,579,598 | 18,780,966 | |
| Treasury Stock | (2,719,818) | (4,282,790) | (2,758,817) | |
| Capital Surplus | 3,574,052 | 2,911,255 | 3,099,917 | |
| Other Stockholder Equity | 126,749 | 350,582 | 383,396 | |
| Total Stockholder Equity | 15,991,474 | 14,873,695 | 19,887,494 | |
| Net Tangible Assets | $14,106,085 | $13,784,047 | $18,729,119 | |
Done. Added Assets_Goodwill to FirmAccount table and to report.
Done. Removed deferred income taxes from program. This was just the data item; there were no calculations associated with the data item.
Done. Dropped data item and all associated calculations.
Removed the data item CMOLTD from the program
Done. Removed data item from program
Done. Removed data item from program
Done. Removed data item from program
Rename to "Long term debt"
Renamed.
Removed Assets_AccountsReceivable, Assets_PrepaidExpenses, Assets_RDIT, Operating_AccountsReceivable
Done.
If spending exceeds income to cause negative cash then this must be covered by a loan (creating debt). Debt is paid at the rate of 10%. Debt is automatically paid-off if possible.
Done. Could be tested again.
Done. Fixed at 10%.
Now that we have included the risks of non-payment. We need to look again at the calculation of Net Sales. This should only include actual payments.
Done. I removed all references to the fields introduced to measure the amount of payment actually received (_paid, _lost, _received).
Extra Production produced between the production run and the overall production capacity should be costed at a 20% premium.
Done. Production is split into ProdWithinRun and ProdOverrun. The sum of the two is ProdSold. A new unit cost is defined OverrunUnitCost.
Cash in is incorrectly reported. Rename to Cash Flow Statement.
I have set the cash flow statement to be as follows:
| Term | From |
|---|---|
| Cash Year Beginning | Prev Net Income |
| Cash In | Sales Revenue |
| Cash Out | Cost of Sales + Operating + Non-operating |
| Cash Year End | Cash Start + Cash In - Cash Out |
Done.
Done. These costs have been added to the cost of selling in the Income Statement.
The numbers here need some more work. The unit cost and margin should just be the same everywhere - what else has meaning?
Took some time this one. And I'm not even sure that the calculations are exactly what is wanted. Needs to OK'd by Phil/Mike.
The figures in the Global Summary report must match and must come from the same sources as those for the other financial reports.
The figures in the Global Summary report are currently calculated separatelt from the figures in the financial reports. (Basically just older code).
I also thought that maybe the sales units should come before the percentages.
This is just a marker for the calculation of Gross Profit Margin and Unit cost.
The calculation of Gross Profit Margin is:
Gross Profit Margin = Factory/Export Price - Marginal Production Cost.So the costs only includes production cost and not other operating expenses.
The calculation of Unit Cost is:
Unit Cost = Marginal Production Cost.Operating expenses are not included in the calculation of unit cost. and Unit cost.
Corrected. This was due to the program marking all the cells in the worksheet as changed. And then for each cell that was changed it recalulcated the budget. I have now cached the budget (and only recalculating if it is a decision view). You can set the cached budget to -1 to force it to recalculate.)
The numbers should not all be zero.
The brand perceptions had been restructured but this report was still using the old table (which was empty). This report now gets its data from the new table.
Done. This was done at the level of the General Consolidated Financial View. I basically, changed the aspect to Firm, removed all the code related to managing multiple firms (and at the same time removed all the code related to drawing charts). Hence code is much simpler, which can only be a good thing.
Done. See comments for equivalent task for Income Statement
Done. See comments for equivalent task under Income Statement.
Done. Removed reference from ColumnDef Table.
Done. Removed reference to View in IcColumnDef.
Rename column heading from "Payment Terms" to "Recommended Terms"
Done.
| Recommended Terms | %age of cost |
|---|---|
| Cash in Advance | 0% |
| Letter of Credit | 1% |
| Documentary Drafts | 2% |
| Open Account | 3% |
| Consignment | 7% |
Probably should be checked again. But seems to work Ok. This adds a lot of costs to sales - so perhaps not a bad thing.
Also to make this work I needed to make a small change to the display grid so that the expected cut/cost was updated when you just use the mouse to select a payment method.
This should be set to
Experienced Cost of Production = cost x alpha betaSet alpha and beta to obtain a reasonable curve. After some experimentation I decided to set the equation to
Experienced Cost of Production = alpha x cost beta where alpha = ( cumulative units sold for project ) / 1,000,000 beta = -0.15
Done. Costs can reduce by 50% over time. (50% reduction in costs requires 100M in sales).
If the project state was finished then the Dev Cost was not being explicitly set. It is now set to zero, if the project state is finished.
Done. This is referred to in the program as the "Header Bar". The problem arose because the code for original main form became very large and was therefore splot into smaller units (called "frames" in Delphi terms). As a result the "Header Bar" was not being updated in the correct place.
This number is sometimes negative because the inventory becomes negative.
Done. Was done previously when I worked through Revenue. However all this code needs to be tested with some good test examples.
This is set to be the sum of:
This is simply set to be zero.
The total Shareholder Equity is set to the difference between Total Assets and Total Liabilities. Shareholder equity for preferred stock is set to be 0.33 * Shareholder Equity
The total Shareholder Equity is set to the difference between Total Assets and Total Liabilities. Shareholder equity for common stock is set to be 0.67 * Shareholder Equity
This is simply set to be zero.
This is simply set to be zero.
This is simply set to be zero.
First we calculate the liklihood of getting paid - and then we calculate the liklihood of getting paid this year. If you are not paid then that money is simply lost. If you will be paid but not this year then that amount becomes Accounts Receivable
Getting paid is calculated as a combination of two factors:
A delay in payment depends uniquely on the payment terms. Again if the payment terms is 'cash in advance' then there is no delay in payment. On the other hand if the payment terms are 'consignment', then there is assumed to be a delay of 12 weeks. Meaning that 23% (12/52) of these orders will not be paid in the current financial year.
Done. Land is assumed to be 2% of the cost of the plant.
Done. Buildings are assumed to be 22% of the cost of the plant.
Done. Machinery and equipment is assumed to be 76% of the cost of the plant.
Done. This is the cost of the plants setup in this period.
There are three types of plants:
New plants are also immediately depreciated in the same year (at 10%).
Done. The useful life of a plant is assumed to be 10 years and the accumlated deprecitation is accordingly calculated to be 10% of the initial value multiplied by the number of years that the plant has existed. (upto a maximum of ten years obviously).
It does take time to run the simulation (and there are always ways to speed it up), so we should add the timing to the Run Simulation so that we know how long in seconds it took to run.
Done. And as a benchmark I the simulation run with the starting data took 77 seconds. So 77 is the number to beat. A lot of that time is actually spent writing data to the Intercomp database tables on the disk.
The details of the calculations behind the cost of production need to be written.Done.
The current method of costing since it does not include a learning element, but it should: that is to say, all other things being equal, the cost of production ought to reduce over time because of a learning effect.
Are we entering the new production capacity or are we entering new/extra capacity. I think that it must be the former but there is a calculation of available capacity which takes the sum of previous capacity and new capacity. To check.
I checked the code. On this screen we are entering the desired total production capacity of that country. Be careful about using the term "new production capacity". In the program we look at the previous production capacity the figure entered here under "new capacity", although just referred to in the program as "production capacity". In the program, if this "production capacity" is higher then the "existing capacity" then we refer to this difference as "new capacity".
A note needs to be added to the Administrator Guide detailing how to disable the virus scan software for Dbisam database file types (that is files with the extensions .dat, .idx and .blb). This has been done and I will include the admin guide (located in doc\IcAdmin.doc) in the next zip file. I have moved the rest of the explanation of this problem into the admin guide.
This may also be a problem for the Team program. I have added this as another task to test the Team program with the virus scan by default to see if there are some conflicts.
To see this bug, start the administrator program, choose the Reports section and then select Country:Background from the left-hand menu. An error message will appear. And now, certain other reports will not be available (for example, clicking on Trends:Global causes the program to be in an unstable state - forcing the user to quit the program.
Resolved. This issue was related to the fact that you can now browse all the teams' decisions in the administrator. The difference here is that in the team program the reports are loaded from the results file; whereas in the administrator the reports are loaded directly from the database. There are still some other hics related to viewing the team decisions/reports in the administrator
In the Statement of Cash Flows the Inventories is based on certain values from the Balance Sheet Assets for previous year and the current account.
The actual calculation is
( Previous Inventories (Assets) - Current Inventories (Assets ) ) + ( Previous Prepaid Expenses (Assets) - Current Prepaid Expenses (Assets ) ) + ( Previous Refundable and deferred income taxes(RDIT) (Assets) - Current RDIT (Assets ) ) +
In the Statement of Cash Flows the Accounts Payable is based on certain values from the Balance Sheet Liabilities for previous year and the current account.
The actual calculation is
( Previous Accounts Payable(Liabilities) - Current Accounts Payable(Liabilities) ) + ( Previous Current maturities of long-term debt(CMOLTD)(Liabilities) - Current CMOLTD(Liabilities) )